Refactor: Return string value from GetOption

Turns out org export options can have meaningful values beside true and false -
let's make it possible to use them.
This commit is contained in:
Niklas Fasching 2020-01-20 17:51:58 +01:00
parent 614307a8f5
commit 7a2cd1abb1
2 changed files with 13 additions and 17 deletions

View file

@ -174,7 +174,7 @@ func (d *Document) Get(key string) string {
// - pri (export headline priority) // - pri (export headline priority)
// - tags (export headline tags) // - tags (export headline tags)
// see https://orgmode.org/manual/Export-settings.html for more information // see https://orgmode.org/manual/Export-settings.html for more information
func (d *Document) GetOption(key string) bool { func (d *Document) GetOption(key string) string {
get := func(settings map[string]string) string { get := func(settings map[string]string) string {
for _, field := range strings.Fields(settings["OPTIONS"]) { for _, field := range strings.Fields(settings["OPTIONS"]) {
if strings.HasPrefix(field, key+":") { if strings.HasPrefix(field, key+":") {
@ -187,15 +187,11 @@ func (d *Document) GetOption(key string) bool {
if value == "" { if value == "" {
value = get(d.DefaultSettings) value = get(d.DefaultSettings)
} }
switch value { if value == "" {
case "t": value = "nil"
return true d.Log.Printf("Missing value for export option %s", key)
case "nil":
return false
default:
d.Log.Printf("Bad value for export option %s (%s)", key, value)
return false
} }
return value
} }
func (d *Document) parseOne(i int, stop stopFn) (consumed int, node Node) { func (d *Document) parseOne(i int, stop stopFn) (consumed int, node Node) {

View file

@ -155,7 +155,7 @@ func (w *HTMLWriter) WriteFootnoteDefinition(f FootnoteDefinition) {
} }
func (w *HTMLWriter) WriteFootnotes(d *Document) { func (w *HTMLWriter) WriteFootnotes(d *Document) {
if !w.document.GetOption("f") || len(w.footnotes.list) == 0 { if w.document.GetOption("f") == "nil" || len(w.footnotes.list) == 0 {
return return
} }
w.WriteString(`<div class="footnotes">` + "\n") w.WriteString(`<div class="footnotes">` + "\n")
@ -183,7 +183,7 @@ func (w *HTMLWriter) WriteFootnotes(d *Document) {
} }
func (w *HTMLWriter) WriteOutline(d *Document) { func (w *HTMLWriter) WriteOutline(d *Document) {
if w.document.GetOption("toc") && len(d.Outline.Children) != 0 { if w.document.GetOption("toc") != "nil" && len(d.Outline.Children) != 0 {
w.WriteString("<nav>\n<ul>\n") w.WriteString("<nav>\n<ul>\n")
for _, section := range d.Outline.Children { for _, section := range d.Outline.Children {
w.writeSection(section) w.writeSection(section)
@ -218,15 +218,15 @@ func (w *HTMLWriter) WriteHeadline(h Headline) {
} }
w.WriteString(fmt.Sprintf(`<h%d id="%s">`, h.Lvl+1, h.ID()) + "\n") w.WriteString(fmt.Sprintf(`<h%d id="%s">`, h.Lvl+1, h.ID()) + "\n")
if w.document.GetOption("todo") && h.Status != "" { if w.document.GetOption("todo") != "nil" && h.Status != "" {
w.WriteString(fmt.Sprintf(`<span class="todo">%s</span>`, h.Status) + "\n") w.WriteString(fmt.Sprintf(`<span class="todo">%s</span>`, h.Status) + "\n")
} }
if w.document.GetOption("pri") && h.Priority != "" { if w.document.GetOption("pri") != "nil" && h.Priority != "" {
w.WriteString(fmt.Sprintf(`<span class="priority">[%s]</span>`, h.Priority) + "\n") w.WriteString(fmt.Sprintf(`<span class="priority">[%s]</span>`, h.Priority) + "\n")
} }
WriteNodes(w, h.Title...) WriteNodes(w, h.Title...)
if w.document.GetOption("tags") && len(h.Tags) != 0 { if w.document.GetOption("tags") != "nil" && len(h.Tags) != 0 {
tags := make([]string, len(h.Tags)) tags := make([]string, len(h.Tags))
for i, tag := range h.Tags { for i, tag := range h.Tags {
tags[i] = fmt.Sprintf(`<span>%s</span>`, tag) tags[i] = fmt.Sprintf(`<span>%s</span>`, tag)
@ -241,7 +241,7 @@ func (w *HTMLWriter) WriteHeadline(h Headline) {
func (w *HTMLWriter) WriteText(t Text) { func (w *HTMLWriter) WriteText(t Text) {
if !w.htmlEscape { if !w.htmlEscape {
w.WriteString(t.Content) w.WriteString(t.Content)
} else if !w.document.GetOption("e") || t.IsRaw { } else if w.document.GetOption("e") == "nil" || t.IsRaw {
w.WriteString(html.EscapeString(t.Content)) w.WriteString(html.EscapeString(t.Content))
} else { } else {
w.WriteString(html.EscapeString(htmlEntityReplacer.Replace(t.Content))) w.WriteString(html.EscapeString(htmlEntityReplacer.Replace(t.Content)))
@ -277,7 +277,7 @@ func (w *HTMLWriter) WriteExplicitLineBreak(l ExplicitLineBreak) {
} }
func (w *HTMLWriter) WriteFootnoteLink(l FootnoteLink) { func (w *HTMLWriter) WriteFootnoteLink(l FootnoteLink) {
if !w.document.GetOption("f") { if w.document.GetOption("f") == "nil" {
return return
} }
i := w.footnotes.add(l) i := w.footnotes.add(l)
@ -286,7 +286,7 @@ func (w *HTMLWriter) WriteFootnoteLink(l FootnoteLink) {
} }
func (w *HTMLWriter) WriteTimestamp(t Timestamp) { func (w *HTMLWriter) WriteTimestamp(t Timestamp) {
if !w.document.GetOption("<") { if w.document.GetOption("<") == "nil" {
return return
} }
w.WriteString(`<span class="timestamp">&lt;`) w.WriteString(`<span class="timestamp">&lt;`)