forked from sloum/bombadillo
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":
|
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()
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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++
|
||||||
}
|
}
|
||||||
|
|
7
main.go
7
main.go
|
@ -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]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue