Fixes the workflow for allowing alt text and handling preformatted blocks
This commit is contained in:
parent
36ae4a228f
commit
b23b9b3121
|
@ -459,7 +459,7 @@ func (c *client) doCommandAs(action string, values []string) {
|
|||
}
|
||||
case "SEARCH":
|
||||
c.search(strings.Join(values, " "), "", "")
|
||||
case "SET", "S":
|
||||
case "SET", "S": // TODO make the geminiblocks value work
|
||||
if _, ok := c.Options[values[0]]; ok {
|
||||
val := strings.Join(values[1:], " ")
|
||||
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)
|
||||
if values[0] == "tlskey" || values[0] == "tlscertificate" {
|
||||
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" {
|
||||
c.SetMessage("Cannot set READ ONLY setting 'configlocation'", true)
|
||||
c.DrawMessage()
|
||||
|
|
|
@ -47,6 +47,7 @@ var defaultOptions = map[string]string{
|
|||
|
||||
"configlocation": xdgConfigPath(),
|
||||
"defaultscheme": "gopher", // "gopher", "gemini", "http", "https"
|
||||
"geminiblocks": "block", // "block", "alt", "neither", "both"
|
||||
"homeurl": "gopher://bombadillo.colorfield.space:70/1/user-guide.map",
|
||||
"savelocation": homePath(),
|
||||
"searchengine": "gopher://gopher.floodgap.com:70/7/v2/vs",
|
||||
|
|
|
@ -24,6 +24,8 @@ type TofuDigest struct {
|
|||
ClientCert tls.Certificate
|
||||
}
|
||||
|
||||
var BlockBehavior = "block"
|
||||
|
||||
//------------------------------------------------\\
|
||||
// + + + 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")
|
||||
links := make([]string, 0, 10)
|
||||
|
||||
inPreBlock := false
|
||||
|
||||
outputIndex := 0
|
||||
for i, ln := range splitContent {
|
||||
splitContent[i] = strings.Trim(ln, "\r\n")
|
||||
if ln == "```" {
|
||||
// By continuing we create a variance between i and outputIndex
|
||||
// the other branches here will write to the outputIndex rather
|
||||
// than i, thus removing these lines while itterating without
|
||||
// needing mroe allocations.
|
||||
continue
|
||||
} else if len([]rune(ln)) > 3 && ln[:2] == "=>" {
|
||||
isPreBlockDeclaration := strings.HasPrefix(ln, "```")
|
||||
if isPreBlockDeclaration && !inPreBlock && (BlockBehavior == "both" || BlockBehavior == "alt") {
|
||||
inPreBlock = !inPreBlock
|
||||
alt := strings.TrimSpace(ln)
|
||||
if len(alt) > 3 {
|
||||
alt = strings.TrimSpace(alt[3:])
|
||||
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
|
||||
subLn := strings.Trim(ln[2:], "\r\n\t \a")
|
||||
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)
|
||||
outputIndex++
|
||||
} else {
|
||||
if inPreBlock && (BlockBehavior == "alt" || BlockBehavior == "neither") {
|
||||
continue
|
||||
}
|
||||
splitContent[outputIndex] = ln
|
||||
outputIndex++
|
||||
}
|
||||
|
|
7
main.go
7
main.go
|
@ -30,6 +30,7 @@ import (
|
|||
|
||||
"tildegit.org/sloum/bombadillo/config"
|
||||
"tildegit.org/sloum/bombadillo/cui"
|
||||
"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"},
|
||||
"defaultscheme": []string{"gopher", "gemini", "http", "https"},
|
||||
"showimages": []string{"true", "false"},
|
||||
"geminiblocks": []string{"block", "neither", "alt", "both"},
|
||||
}
|
||||
|
||||
opt = strings.ToLower(opt)
|
||||
|
@ -84,7 +86,7 @@ func validateOpt(opt, val string) bool {
|
|||
|
||||
func lowerCaseOpt(opt, val string) string {
|
||||
switch opt {
|
||||
case "webmode", "theme", "defaultscheme", "showimages":
|
||||
case "webmode", "theme", "defaultscheme", "showimages", "geminiblocks":
|
||||
return strings.ToLower(val)
|
||||
default:
|
||||
return val
|
||||
|
@ -121,6 +123,9 @@ func loadConfig() {
|
|||
if _, ok := bombadillo.Options[lowerkey]; ok {
|
||||
if validateOpt(lowerkey, v.Value) {
|
||||
bombadillo.Options[lowerkey] = v.Value
|
||||
if lowerkey == "geminiblocks" {
|
||||
gemini.BlockBehavior = v.Value
|
||||
}
|
||||
} else {
|
||||
bombadillo.Options[lowerkey] = defaultOptions[lowerkey]
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue