diff options
-rw-r--r-- | cnmfmt/cnmfmt.go | 27 | ||||
-rw-r--r-- | content.go | 22 | ||||
-rw-r--r-- | document.go | 20 |
3 files changed, 25 insertions, 44 deletions
diff --git a/cnmfmt/cnmfmt.go b/cnmfmt/cnmfmt.go index cb8dc64..fa2ec65 100644 --- a/cnmfmt/cnmfmt.go +++ b/cnmfmt/cnmfmt.go @@ -199,7 +199,7 @@ func (t Text) WriteIndent(w io.Writer, n int) error { si = cleanupTags(state[:], order, span.Format) format = span.Format } - return writeIndent(w, strings.Join(line, ""), n) + return cnm.WriteIndent(w, strings.Join(line, ""), n) } func tagOrder(state []byte, old, new Format) []byte { @@ -430,7 +430,7 @@ func NewTextFmtBlock(paragraphs []Text) *cnm.TextBlock { func (tf TextFmtContents) WriteIndent(w io.Writer, n int) error { for i, p := range tf.Paragraphs { if i != 0 { - if err := writeIndent(w, "", 0); err != nil { + if err := cnm.WriteIndent(w, "", 0); err != nil { return err } } @@ -469,29 +469,6 @@ func Parse(paragraphs string) []Text { return txt } -func writeIndent(w io.Writer, s string, depth int) error { - const tabs = "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t" - - if s == "" { - _, err := w.Write([]byte{'\n'}) - return err - } - if depth == 0 { - _, err := w.Write([]byte(s + "\n")) - return err - } - - var ind string - if depth <= len(tabs) { - ind = tabs[:depth] - } else { - ind = strings.Repeat("\t", depth) - } - _, err := w.Write([]byte(ind + s + "\n")) - return err - -} - func parseTextFmt(p *cnm.Parser, block *cnm.TokenBlock) (cnm.TextContents, error) { txt := TextFmtContents{} var paragraph []string @@ -41,7 +41,7 @@ type ContentBlock struct { func (cb *ContentBlock) WriteIndent(w io.Writer, n int) error { ss := []string{Escape(cb.name)} ss = append(ss, cb.args...) - if err := writeIndent(w, JoinEscape(ss), n); err != nil { + if err := WriteIndent(w, JoinEscape(ss), n); err != nil { return err } for _, ch := range cb.children { @@ -169,7 +169,7 @@ func (t *TextBlock) WriteIndent(w io.Writer, n int) error { if t.Format != "" { s += " " + Escape(t.Format) } - if err := writeIndent(w, s, n); err != nil { + if err := WriteIndent(w, s, n); err != nil { return err } if err := t.Contents.WriteIndent(w, n+1); err != nil { @@ -237,11 +237,11 @@ type TextPlainContents struct { func (t TextPlainContents) WriteIndent(w io.Writer, n int) error { for i, p := range t.Paragraphs { if i != 0 { - if err := writeIndent(w, "", 0); err != nil { + if err := WriteIndent(w, "", 0); err != nil { return err } } - if err := writeIndent(w, Escape(p), n); err != nil { + if err := WriteIndent(w, Escape(p), n); err != nil { return err } } @@ -299,7 +299,7 @@ type TextPreContents struct { func (t TextPreContents) WriteIndent(w io.Writer, n int) error { ss := strings.Split(t.Text, "\n") for _, s := range ss { - if err := writeIndent(w, EscapeNonspace(s), n); err != nil { + if err := WriteIndent(w, EscapeNonspace(s), n); err != nil { return err } } @@ -335,7 +335,7 @@ func parseTextPre(p *Parser, block *TokenBlock) (TextContents, error) { return TextPreContents{strings.Join(lines, "\n")}, err } -// TextRawContents represents raw (unesacped) contents of a text or raw block. +// TextRawContents represents raw contents of a text or raw block. type TextRawContents struct { // Text is the raw content. Text string @@ -345,7 +345,7 @@ type TextRawContents struct { func (t TextRawContents) WriteIndent(w io.Writer, n int) error { ss := strings.Split(t.Text, "\n") for _, s := range ss { - if err := writeIndent(w, s, n); err != nil { + if err := WriteIndent(w, s, n); err != nil { return err } } @@ -408,7 +408,7 @@ func (r *RawBlock) WriteIndent(w io.Writer, n int) error { if r.Syntax != "" { s += " " + Escape(r.Syntax) } - if err := writeIndent(w, s, n); err != nil { + if err := WriteIndent(w, s, n); err != nil { return err } r.Contents.WriteIndent(w, n+1) @@ -487,7 +487,7 @@ func (t *TableBlock) Args() []string { // WriteIndent writes the table header and contents indented by n tabs. func (t *TableBlock) WriteIndent(w io.Writer, n int) error { - if err := writeIndent(w, t.Name(), n); err != nil { + if err := WriteIndent(w, t.Name(), n); err != nil { return err } for _, row := range t.rows { @@ -620,10 +620,10 @@ func (e *EmbedBlock) WriteIndent(w io.Writer, n int) error { s += Escape(e.Type) } s += " " + Escape(e.URL) - if err := writeIndent(w, s, n); err != nil { + if err := WriteIndent(w, s, n); err != nil { return err } - if err := writeIndent(w, Escape(e.Description), n+1); err != nil { + if err := WriteIndent(w, Escape(e.Description), n+1); err != nil { return err } return nil diff --git a/document.go b/document.go index 5137b80..c01837c 100644 --- a/document.go +++ b/document.go @@ -87,15 +87,15 @@ func (doc *Document) WriteIndent(w io.Writer, n int) error { func (doc *Document) Write(w io.Writer) error { bw := bufio.NewWriter(w) if doc.Title != "" { - if err := writeIndent(bw, "title", 0); err != nil { + if err := WriteIndent(bw, "title", 0); err != nil { return err } - if err := writeIndent(bw, Escape(doc.Title), 1); err != nil { + if err := WriteIndent(bw, Escape(doc.Title), 1); err != nil { return err } } if len(doc.Links) > 0 { - if err := writeIndent(bw, "links", 0); err != nil { + if err := WriteIndent(bw, "links", 0); err != nil { return err } for _, link := range doc.Links { @@ -105,7 +105,7 @@ func (doc *Document) Write(w io.Writer) error { } } if len(doc.Site.Children) > 0 { - if err := writeIndent(bw, "site", 0); err != nil { + if err := WriteIndent(bw, "site", 0); err != nil { return err } for _, site := range doc.Site.Children { @@ -196,11 +196,11 @@ func (link Link) WriteIndent(w io.Writer, n int) error { if link.Name != "" { s += " " + Escape(link.Name) } - if err := writeIndent(w, s, n); err != nil { + if err := WriteIndent(w, s, n); err != nil { return err } if link.Description != "" { - if err := writeIndent(w, Escape(link.Description), n+1); err != nil { + if err := WriteIndent(w, Escape(link.Description), n+1); err != nil { return err } } @@ -225,7 +225,7 @@ func (site Site) WriteIndent(w io.Writer, n int) error { if site.Name != "" { s += " " + Escape(site.Name) } - if err := writeIndent(w, s, n); err != nil { + if err := WriteIndent(w, s, n); err != nil { return err } for _, ch := range site.Children { @@ -276,7 +276,11 @@ func parseUnknown(p *Parser, block *TokenBlock) (err error) { return } -func writeIndent(w io.Writer, s string, depth int) error { +// WriteIndent writes an indented line into a writer. +// +// Writes depth tab characters, the string s and a newline. If s is blank, no +// indentation is used. s should not contain newlines. +func WriteIndent(w io.Writer, s string, depth int) error { const tabs = "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t" if s == "" { |