diff --git a/output.go b/output.go
index a106a9c..42c0289 100644
--- a/output.go
+++ b/output.go
@@ -35,6 +35,7 @@ type Writer interface {
type htmlOut struct {
Writer
padded int
+ obfuscate bool
notenum int
endNotes []*element /* List of endnotes to print after main content. */
@@ -46,7 +47,7 @@ func (d *Doc) WriteHtml(w Writer) int {
out := new(htmlOut)
out.Writer = w
out.padded = 2
- out.elist(d.tree, false)
+ out.elist(d.tree)
if len(out.endNotes) != 0 {
out.pad(2)
out.printEndnotes()
@@ -78,7 +79,7 @@ func (w *htmlOut) s(s string) *htmlOut {
/* print string, escaping for HTML
* If obfuscate selected, convert characters to hex or decimal entities at random
*/
-func (w *htmlOut) str(s string, obfuscate bool) *htmlOut {
+func (w *htmlOut) str(s string) *htmlOut {
var ws string
var i0 = 0
@@ -93,7 +94,7 @@ func (w *htmlOut) str(s string, obfuscate bool) *htmlOut {
case '"':
ws = """
default:
- if obfuscate {
+ if w.obfuscate {
if rand.Intn(1) == 0 {
ws = fmt.Sprintf("%d;", r)
} else {
@@ -120,16 +121,16 @@ func (w *htmlOut) str(s string, obfuscate bool) *htmlOut {
/* print a list of elements
*/
-func (w *htmlOut) elist(list *element, obfuscate bool) *htmlOut {
+func (w *htmlOut) elist(list *element) *htmlOut {
for list != nil {
- w.elem(list, obfuscate)
+ w.elem(list)
list = list.next
}
return w
}
// print an element
-func (w *htmlOut) elem(elt *element, obfuscate bool) *htmlOut {
+func (w *htmlOut) elem(elt *element) *htmlOut {
var s string
switch elt.key {
@@ -138,7 +139,7 @@ func (w *htmlOut) elem(elt *element, obfuscate bool) *htmlOut {
case LINEBREAK:
s = "
\n"
case STR:
- w.str(elt.contents.str, obfuscate)
+ w.str(elt.contents.str)
case ELLIPSIS:
s = "…"
case EMDASH:
@@ -148,65 +149,67 @@ func (w *htmlOut) elem(elt *element, obfuscate bool) *htmlOut {
case APOSTROPHE:
s = "’"
case SINGLEQUOTED:
- w.s("‘").elist(elt.children, obfuscate).s("’")
+ w.s("‘").elist(elt.children).s("’")
case DOUBLEQUOTED:
- w.s("“").elist(elt.children, obfuscate).s("”")
+ w.s("“").elist(elt.children).s("”")
case CODE:
- w.s("").str(elt.contents.str, obfuscate).s("
")
+ w.s("").str(elt.contents.str).s("
")
case HTML:
s = elt.contents.str
case LINK:
+ o := w.obfuscate
if strings.Index(elt.contents.link.url, "mailto:") == 0 {
- obfuscate = true /* obfuscate mailto: links */
+ w.obfuscate = true /* obfuscate mailto: links */
}
- w.s(` 0 {
- w.s(` title="`).str(elt.contents.link.title, obfuscate).s(`"`)
+ w.s(` title="`).str(elt.contents.link.title).s(`"`)
}
- w.s(">").elist(elt.contents.link.label, obfuscate).s("")
+ w.s(">").elist(elt.contents.link.label).s("")
+ w.obfuscate = o
case IMAGE:
- w.s(` 0 {
- w.s(` title="`).str(elt.contents.link.title, obfuscate).s(`"`)
+ w.s(` title="`).str(elt.contents.link.title).s(`"`)
}
w.s(" />")
case EMPH:
- w.s("").elist(elt.children, obfuscate).s("")
+ w.s("").elist(elt.children).s("")
case STRONG:
- w.s("").elist(elt.children, obfuscate).s("")
+ w.s("").elist(elt.children).s("")
case LIST:
- w.elist(elt.children, obfuscate)
+ w.elist(elt.children)
case RAW:
/* Shouldn't occur - these are handled by process_raw_blocks() */
log.Fatalf("RAW")
case H1, H2, H3, H4, H5, H6:
h := "h" + string('1'+elt.key-H1) + ">" /* assumes H1 ... H6 are in order */
- w.pad(2).s("<").s(h).elist(elt.children, obfuscate).s("").s(h).pset(0)
+ w.pad(2).s("<").s(h).elist(elt.children).s("").s(h).pset(0)
case PLAIN:
- w.pad(1).elist(elt.children, obfuscate).pset(0)
+ w.pad(1).elist(elt.children).pset(0)
case PARA:
- w.pad(2).s("
").elist(elt.children, obfuscate).s("
").pset(0) + w.pad(2).s("").elist(elt.children).s("
").pset(0) case HRULE: w.pad(2).s("").str(elt.contents.str, obfuscate).s("
").pset(0)
+ w.pad(2).s("").str(elt.contents.str).s("
").pset(0)
case BULLETLIST:
- w.pad(2).s("\n").pset(2).elist(elt.children, obfuscate).pad(1).s("").pset(0) + w.pad(2).s("
\n").pset(2).elist(elt.children).pad(1).s("").pset(0) case REFERENCE: /* Nonprinting */ case NOTE: @@ -236,7 +239,7 @@ func (w *htmlOut) printEndnotes() { for _, elt := range w.endNotes { counter++ w.pad(1).s(fmt.Sprintf("