Fixes the workflow for allowing alt text and handling preformatted blocks

This commit is contained in:
sloum 2020-05-17 21:36:49 -07:00
parent 36ae4a228f
commit b23b9b3121
4 changed files with 29 additions and 9 deletions

View File

@ -459,7 +459,7 @@ func (c *client) doCommandAs(action string, values []string) {
} }
case "SEARCH": case "SEARCH":
c.search(strings.Join(values, " "), "", "") c.search(strings.Join(values, " "), "", "")
case "SET", "S": case "SET", "S": // TODO make the geminiblocks value work
if _, ok := c.Options[values[0]]; ok { if _, ok := c.Options[values[0]]; ok {
val := strings.Join(values[1:], " ") val := strings.Join(values[1:], " ")
if !validateOpt(values[0], val) { if !validateOpt(values[0], val) {
@ -470,6 +470,8 @@ func (c *client) doCommandAs(action string, values []string) {
c.Options[values[0]] = lowerCaseOpt(values[0], val) c.Options[values[0]] = lowerCaseOpt(values[0], val)
if values[0] == "tlskey" || values[0] == "tlscertificate" { if values[0] == "tlskey" || values[0] == "tlscertificate" {
c.Certs.LoadCertificate(c.Options["tlscertificate"], c.Options["tlskey"]) c.Certs.LoadCertificate(c.Options["tlscertificate"], c.Options["tlskey"])
} else if values[0] == "geminiblocks" {
gemini.BlockBehavior = c.Options[values[0]]
} else if values[0] == "configlocation" { } else if values[0] == "configlocation" {
c.SetMessage("Cannot set READ ONLY setting 'configlocation'", true) c.SetMessage("Cannot set READ ONLY setting 'configlocation'", true)
c.DrawMessage() c.DrawMessage()

View File

@ -47,6 +47,7 @@ var defaultOptions = map[string]string{
"configlocation": xdgConfigPath(), "configlocation": xdgConfigPath(),
"defaultscheme": "gopher", // "gopher", "gemini", "http", "https" "defaultscheme": "gopher", // "gopher", "gemini", "http", "https"
"geminiblocks": "block", // "block", "alt", "neither", "both"
"homeurl": "gopher://bombadillo.colorfield.space:70/1/user-guide.map", "homeurl": "gopher://bombadillo.colorfield.space:70/1/user-guide.map",
"savelocation": homePath(), "savelocation": homePath(),
"searchengine": "gopher://gopher.floodgap.com:70/7/v2/vs", "searchengine": "gopher://gopher.floodgap.com:70/7/v2/vs",

View File

@ -24,6 +24,8 @@ type TofuDigest struct {
ClientCert tls.Certificate ClientCert tls.Certificate
} }
var BlockBehavior = "block"
//------------------------------------------------\\ //------------------------------------------------\\
// + + + R E C E I V E R S + + + \\ // + + + R E C E I V E R S + + + \\
//--------------------------------------------------\\ //--------------------------------------------------\\
@ -339,16 +341,23 @@ func parseGemini(b, rootUrl, currentUrl string) (string, []string) {
splitContent := strings.Split(b, "\n") splitContent := strings.Split(b, "\n")
links := make([]string, 0, 10) links := make([]string, 0, 10)
inPreBlock := false
outputIndex := 0 outputIndex := 0
for i, ln := range splitContent { for i, ln := range splitContent {
splitContent[i] = strings.Trim(ln, "\r\n") splitContent[i] = strings.Trim(ln, "\r\n")
if ln == "```" { isPreBlockDeclaration := strings.HasPrefix(ln, "```")
// By continuing we create a variance between i and outputIndex if isPreBlockDeclaration && !inPreBlock && (BlockBehavior == "both" || BlockBehavior == "alt") {
// the other branches here will write to the outputIndex rather inPreBlock = !inPreBlock
// than i, thus removing these lines while itterating without alt := strings.TrimSpace(ln)
// needing mroe allocations. if len(alt) > 3 {
continue alt = strings.TrimSpace(alt[3:])
} else if len([]rune(ln)) > 3 && ln[:2] == "=>" { splitContent[outputIndex] = fmt.Sprintf("[ %s ]", alt)
outputIndex++
}
} else if isPreBlockDeclaration {
inPreBlock = !inPreBlock
} else if len([]rune(ln)) > 3 && ln[:2] == "=>" && !inPreBlock {
var link, decorator string var link, decorator string
subLn := strings.Trim(ln[2:], "\r\n\t \a") subLn := strings.Trim(ln[2:], "\r\n\t \a")
splitPoint := strings.IndexAny(subLn, " \t") splitPoint := strings.IndexAny(subLn, " \t")
@ -370,6 +379,9 @@ func parseGemini(b, rootUrl, currentUrl string) (string, []string) {
splitContent[outputIndex] = fmt.Sprintf("%-5s %s", linknum, decorator) splitContent[outputIndex] = fmt.Sprintf("%-5s %s", linknum, decorator)
outputIndex++ outputIndex++
} else { } else {
if inPreBlock && (BlockBehavior == "alt" || BlockBehavior == "neither") {
continue
}
splitContent[outputIndex] = ln splitContent[outputIndex] = ln
outputIndex++ outputIndex++
} }

View File

@ -30,6 +30,7 @@ import (
"tildegit.org/sloum/bombadillo/config" "tildegit.org/sloum/bombadillo/config"
"tildegit.org/sloum/bombadillo/cui" "tildegit.org/sloum/bombadillo/cui"
"tildegit.org/sloum/bombadillo/gemini"
_ "tildegit.org/sloum/bombadillo/gemini" _ "tildegit.org/sloum/bombadillo/gemini"
) )
@ -66,6 +67,7 @@ func validateOpt(opt, val string) bool {
"theme": []string{"normal", "inverse", "color"}, "theme": []string{"normal", "inverse", "color"},
"defaultscheme": []string{"gopher", "gemini", "http", "https"}, "defaultscheme": []string{"gopher", "gemini", "http", "https"},
"showimages": []string{"true", "false"}, "showimages": []string{"true", "false"},
"geminiblocks": []string{"block", "neither", "alt", "both"},
} }
opt = strings.ToLower(opt) opt = strings.ToLower(opt)
@ -84,7 +86,7 @@ func validateOpt(opt, val string) bool {
func lowerCaseOpt(opt, val string) string { func lowerCaseOpt(opt, val string) string {
switch opt { switch opt {
case "webmode", "theme", "defaultscheme", "showimages": case "webmode", "theme", "defaultscheme", "showimages", "geminiblocks":
return strings.ToLower(val) return strings.ToLower(val)
default: default:
return val return val
@ -121,6 +123,9 @@ func loadConfig() {
if _, ok := bombadillo.Options[lowerkey]; ok { if _, ok := bombadillo.Options[lowerkey]; ok {
if validateOpt(lowerkey, v.Value) { if validateOpt(lowerkey, v.Value) {
bombadillo.Options[lowerkey] = v.Value bombadillo.Options[lowerkey] = v.Value
if lowerkey == "geminiblocks" {
gemini.BlockBehavior = v.Value
}
} else { } else {
bombadillo.Options[lowerkey] = defaultOptions[lowerkey] bombadillo.Options[lowerkey] = defaultOptions[lowerkey]
} }