Documentation
¶
Index ¶
- Constants
- func DoubleQuoted(a any) style_wrapper
- func Emphasized(a any) style_wrapper
- func Link(caption any, url string) link_wrapper
- func SingleQuoted(a any) style_wrapper
- func Strong(a any) style_wrapper
- func URL(url string) link_wrapper
- type Callback
- type HTMLOptions
- type InlineMarshaler
- type ListWriter
- type MDOptions
- type MultiWriter
- func (w *MultiWriter) BeginOList()
- func (w *MultiWriter) BeginSection(a any)
- func (w *MultiWriter) BeginSectionf(format string, args ...any)
- func (w *MultiWriter) BeginTable(first_column any, other_columns ...any)
- func (w *MultiWriter) BeginUList()
- func (w *MultiWriter) Close()
- func (w *MultiWriter) CloseEx(ps func(ParagraphWriter))
- func (w *MultiWriter) DisableOutput()
- func (w *MultiWriter) EnableOutput()
- func (w *MultiWriter) EndList()
- func (w *MultiWriter) EndSection()
- func (w *MultiWriter) EndTable()
- func (w *MultiWriter) ListItem(a any)
- func (w *MultiWriter) ListItemf(format string, args ...any)
- func (w *MultiWriter) ListTitle(a any)
- func (w *MultiWriter) ListTitlef(format string, args ...any)
- func (w *MultiWriter) OList(items func(ListWriter))
- func (w *MultiWriter) Para(a any)
- func (w *MultiWriter) Paraf(format string, args ...any)
- func (w *MultiWriter) Section(a any)
- func (w *MultiWriter) Sectionf(format string, args ...any)
- func (w *MultiWriter) Table(columns []any, rows func(cb TableRowWriter))
- func (w *MultiWriter) TableRow(first_cell any, other_cells ...any)
- func (w *MultiWriter) UList(items func(ListWriter))
- type ParagraphWriter
- type Printer
- type RawContent
- type SectionWriter
- type Style
- type TXTOptions
- type TableRowWriter
- type TableWriter
- type UnsupportedTypeError
- type Writer
Examples ¶
Constants ¶
const ( SingleQuotedStyle = Style(iota) // a fragment surrounded by single quotation marks DoubleQuotedStyle // a fragment surrounded by double quotation marks EmphasizedStyle // emphasized fragment, typically rendered in italic type StrongStyle // strong fragment, typically rendered in bold type )
Accepted Style values:
const ( ASCIIQuotes = `'|'|"|"` TypographicalQuotes = `‘|’|“|”` )
Quotation marks
Variables ¶
This section is empty.
Functions ¶
func DoubleQuoted ¶ added in v0.2.0
func DoubleQuoted(a any) style_wrapper
DoubleQuoted creates a wrapper for double quoted inline spans.
func Emphasized ¶ added in v0.2.0
func Emphasized(a any) style_wrapper
DoubleQuoted creates a wrapper for emphasized (italic) inline spans.
func SingleQuoted ¶ added in v0.2.0
func SingleQuoted(a any) style_wrapper
SingleQuoted creates a wrapper for single quoted inline spans.
func Strong ¶ added in v0.2.0
func Strong(a any) style_wrapper
DoubleQuoted creates a wrapper for strong-formatted (bold) inline spans.
func URL ¶ added in v0.3.4
func URL(url string) link_wrapper
URL creates a wrapper for an unnamed link.
Example ¶
url_filter := func(url string) []byte {
return []byte(filepath.Base(url))
}
w := NewTXT(os.Stdout, TXTOptions{URLFilter: url_filter})
w.Paraf("Link: %s", Link("test", "../../path.txt"))
w.Paraf("URL: %s", URL("../../path.txt"))
w.Close()
Output: Link: [test](path.txt) URL: path.txt
Types ¶
type Callback ¶ added in v0.3.2
type Callback = func(Printer)
Callback is a funcional inline content builder that can be used for complex inline formatting.
type HTMLOptions ¶
type InlineMarshaler ¶
InlineMarshaler is the interface implemented by types that support marshal custom marshaling into markout targets (as inline fragments).
type ListWriter ¶ added in v0.3.0
type ListWriter interface {
// ListTitle writes paragraph block that acts as a title preceeding a list.
ListTitle(a any)
ListTitlef(format string, args ...any)
// BeginOList and BeginUList begins a list block (ordered or unourdered). If
// writer is already in list mode, this begins a child list. Each BeginList
// must be matched with EndList.
BeginOList()
BeginUList()
EndList()
// ListItem writes an item into the list block. Must be called within the
// BeginList()/EndList() fragment.
ListItem(a any)
// ListItemf is a version of ListItem() with built-in formatting.
ListItemf(format string, args ...any)
// Callback-based list writing methods that automatically wrap items
// BeginList/EndList blocks.
OList(func(ListWriter))
UList(func(ListWriter))
}
ListWriter is an interface for writing items and child lists into list blocks.
type MultiWriter ¶ added in v0.3.0
type MultiWriter struct {
// contains filtered or unexported fields
}
MultiWriter implements a writer that funnels its output to other writers.
func NewMultiWriter ¶ added in v0.3.0
func NewMultiWriter(targets ...Writer) *MultiWriter
NewMultiWriter constructs a MultiWriter that writes into targets.
Example ¶
buf := bytes.Buffer{}
html_w := NewHTML(&buf, HTMLOptions{})
cout_w := NewTXT(os.Stdout, TXTOptions{})
null_w := NewNULL()
multi_w := NewMultiWriter(cout_w, html_w, null_w)
w := Writer(multi_w)
w.ListTitle("List:")
w.UList(func(li ListWriter) {
li.ListItem("item 1")
li.ListItem("item 2")
})
w.Table([]any{"h1", "h2"}, func(row TableRowWriter) {
row("c1", "c2")
row("c3", "cell4")
})
cout_w.Close()
html_w.Close()
fmt.Printf("************\n")
os.Stdout.Write(buf.Bytes())
Output: List: * item 1 * item 2 h1 h2 -- ----- c1 c2 c3 cell4 ************ <html> <body> <p>List:</p> <ul> <li>item 1</li> <li>item 2</li> </ul> <table> <thead><tr><th>h1</th><th>h2</th></tr></thead> <tbody> <tr><td>c1</td><td>c2</td></tr> <tr><td>c3</td><td>cell4</td></tr> </tbody> </table> </body> </html>
func (*MultiWriter) BeginOList ¶ added in v0.3.1
func (w *MultiWriter) BeginOList()
func (*MultiWriter) BeginSection ¶ added in v0.3.0
func (w *MultiWriter) BeginSection(a any)
func (*MultiWriter) BeginSectionf ¶ added in v0.3.0
func (w *MultiWriter) BeginSectionf(format string, args ...any)
func (*MultiWriter) BeginTable ¶ added in v0.3.0
func (w *MultiWriter) BeginTable(first_column any, other_columns ...any)
func (*MultiWriter) BeginUList ¶ added in v0.3.1
func (w *MultiWriter) BeginUList()
func (*MultiWriter) Close ¶ added in v0.3.0
func (w *MultiWriter) Close()
func (*MultiWriter) CloseEx ¶ added in v0.5.2
func (w *MultiWriter) CloseEx(ps func(ParagraphWriter))
func (*MultiWriter) DisableOutput ¶ added in v0.3.3
func (w *MultiWriter) DisableOutput()
func (*MultiWriter) EnableOutput ¶ added in v0.3.3
func (w *MultiWriter) EnableOutput()
func (*MultiWriter) EndList ¶ added in v0.3.0
func (w *MultiWriter) EndList()
func (*MultiWriter) EndSection ¶ added in v0.3.0
func (w *MultiWriter) EndSection()
func (*MultiWriter) EndTable ¶ added in v0.3.0
func (w *MultiWriter) EndTable()
func (*MultiWriter) ListItem ¶ added in v0.3.0
func (w *MultiWriter) ListItem(a any)
func (*MultiWriter) ListItemf ¶ added in v0.3.0
func (w *MultiWriter) ListItemf(format string, args ...any)
func (*MultiWriter) ListTitle ¶ added in v0.3.0
func (w *MultiWriter) ListTitle(a any)
func (*MultiWriter) ListTitlef ¶ added in v0.3.0
func (w *MultiWriter) ListTitlef(format string, args ...any)
func (*MultiWriter) OList ¶ added in v0.3.1
func (w *MultiWriter) OList(items func(ListWriter))
func (*MultiWriter) Para ¶ added in v0.3.0
func (w *MultiWriter) Para(a any)
func (*MultiWriter) Paraf ¶ added in v0.3.0
func (w *MultiWriter) Paraf(format string, args ...any)
func (*MultiWriter) Section ¶ added in v0.3.0
func (w *MultiWriter) Section(a any)
func (*MultiWriter) Sectionf ¶ added in v0.3.0
func (w *MultiWriter) Sectionf(format string, args ...any)
func (*MultiWriter) Table ¶ added in v0.3.0
func (w *MultiWriter) Table(columns []any, rows func(cb TableRowWriter))
func (*MultiWriter) TableRow ¶ added in v0.3.0
func (w *MultiWriter) TableRow(first_cell any, other_cells ...any)
func (*MultiWriter) UList ¶ added in v0.3.1
func (w *MultiWriter) UList(items func(ListWriter))
type ParagraphWriter ¶ added in v0.5.2
type ParagraphWriter = interface {
// Para writes paragraph block.
Para(a any)
Paraf(format string, args ...any)
}
ParagraphWriter interface supports writing plain paragraphs.
type Printer ¶ added in v0.1.0
type Printer interface {
// Low-level string content
WriteString(string)
WriteRawBytes([]byte)
// Code spans
CodeString(string)
CodeRawBytes([]byte)
// Inline links
BeginLink(url string)
EndLink()
// Quoted spans
BeginStyled(Style)
EndStyled()
// High-level api
Print(any)
Printf(format string, args ...any)
SimpleLink(a any, url string)
Styled(Style, any)
}
Printer is an interface used in callbacks and custom marshalers for writing inline content.
type RawContent ¶ added in v0.5.1
type RawContent []byte
RawContent is the the sequence of bytes that is written out to a target 'as-is'. No additional scrambling or escaping is performed.
type SectionWriter ¶ added in v0.5.2
type SectionWriter = interface {
// BeginSection writes the section heading block and increments section level
// counter. Each BeginSection() call must be followed by matching EndSection()
BeginSection(a any)
BeginSectionf(format string, args ...any)
// EndSection decrements section level counter.
EndSection()
// Section writes section heading without incrementing section level counter.
Section(a any)
Sectionf(format string, args ...any)
}
SectionWriter is an interface that supports structured sectioning of a document.
type Style ¶ added in v0.2.0
type Style int
Style provides decorations for spans in inline output. Styles can be nested.
type TXTOptions ¶
type TableRowWriter ¶ added in v0.5.2
TableRowWriter is a callback for writing table rows.
type TableWriter ¶ added in v0.3.0
type TableWriter = interface {
// BeginTable starts table mode.
// - only TableRow() calls are supported while in tablt mode.
// - use EndTable() to exit from the table mode.
BeginTable(first_column any, other_columns ...any)
TableRow(first_cell any, other_cells ...any)
EndTable()
// Callback-based table writing method that begins a new table, writes rows
// into it with callback, then calls EndTable.
Table(columns []any, rows func(callback TableRowWriter))
}
TableWriter interface supports writing of tabular data.
type UnsupportedTypeError ¶
UnsupportedTypeError is returned when Marshal encounters a type that cannot be converted into markout.
func (*UnsupportedTypeError) Error ¶
func (e *UnsupportedTypeError) Error() string
type Writer ¶
type Writer interface {
SectionWriter
ParagraphWriter
ListWriter
TableWriter
Close()
CloseEx(ps func(ParagraphWriter))
DisableOutput()
EnableOutput()
}
Writer is a high level interface for writing markout documents in all supported formats.
func NewHTML ¶
func NewHTML(out io.Writer, opts HTMLOptions) Writer
NewHtml creates a new markout writer targeting html output.
Example ¶
buf := bytes.Buffer{}
w := NewHTML(&buf, HTMLOptions{PutBOM: false})
w.Para("Para")
w.BeginUList()
w.ListItem("list item")
w.ListItem(3.14)
w.ListItem(true)
w.ListItem(42)
w.ListItem("subitems:")
w.BeginOList()
w.ListItem("subitem1")
w.ListItem(Emphasized("subitem2"))
w.ListItem(SingleQuoted("subitem3"))
w.ListItem(Emphasized(SingleQuoted("subitem4")))
w.EndList()
w.ListItem("last")
w.EndList()
w.BeginTable("thead", "thead")
w.TableRow("tcell", "tcell")
w.EndTable()
w.BeginSection("Section")
w.BeginSection("SubSection")
w.Section("SubSubSection")
w.EndSection()
w.EndSection()
w.Close()
out := buf.String()
fmt.Println(out)
Output: <html> <body> <p>Para</p> <ul> <li>list item</li> <li>3.14</li> <li>true</li> <li>42</li> <li>subitems:</li> <ol> <li>subitem1</li> <li><em>subitem2</em></li> <li>'subitem3'</li> <li><em>'subitem4'</em></li> </ol> <li>last</li> </ul> <table> <thead><tr><th>thead</th><th>thead</th></tr></thead> <tbody> <tr><td>tcell</td><td>tcell</td></tr> </tbody> </table> <h1>Section</h1> <h2>SubSection</h2> <h3>SubSubSection</h3> </body> </html>
func NewMD ¶
NewMD creates a new markout writer targeting markdown output.
Example ¶
buf := bytes.Buffer{}
w := NewMD(&buf, MDOptions{PutBOM: false})
w.Section("Section")
w.Para("Para")
w.BeginUList()
w.ListItem("list item")
w.ListItem(3.14)
w.ListItem(true)
w.ListItem(42)
w.ListItem("subitems:")
w.BeginOList()
w.ListItem("subitem1")
w.ListItem(Emphasized("subitem2"))
w.EndList()
w.ListItem("last")
w.EndList()
w.Para(func(p Printer) {
p.Print("Inline formatting: ")
p.BeginStyled(DoubleQuotedStyle)
p.Styled(EmphasizedStyle, "Hello")
p.Print(", ")
p.Styled(StrongStyle, "World!")
p.EndStyled()
})
w.BeginTable("th", "thead")
w.TableRow("tcell", "tcell")
w.EndTable()
w.Close()
out := buf.String()
fmt.Println(out)
Output: # Section Para - list item - 3.14 - true - 42 - subitems: 1. subitem1 2. <em>subitem2</em> - last Inline formatting: "<em>Hello</em>, <strong>World\!</strong>" th | thead ---|------ tcell | tcell
func NewTXT ¶
func NewTXT(out io.Writer, opts TXTOptions) Writer
NewTxt creates a new markout writer targeting plain text output.
Example ¶
buf := bytes.Buffer{}
w := NewTXT(&buf, TXTOptions{
PutBOM: false,
NumberedSections: true,
UnderlinedSections: true})
w.Para("Para")
w.ListTitle("list:")
w.BeginUList()
w.ListItem("list item")
w.ListItem(3.14)
w.ListItem(true)
w.ListItem(42)
w.ListItem("subitems:")
w.BeginOList()
w.ListItem("subitem1")
w.ListItem(Emphasized("subitem2"))
w.ListItem(SingleQuoted("subitem3"))
w.ListItem(Emphasized(SingleQuoted("subitem4")))
w.ListItem(URL("subitem5"))
w.ListItem(Link("a", "b"))
w.EndList()
w.ListItem("last")
w.EndList()
w.BeginTable("th1", "th2")
w.TableRow("tcell", "another cell")
w.EndTable()
w.BeginSection("SECTION")
w.BeginSection("SUBSECTION")
w.Section("First SubSubSection")
w.Section("Second SubSubSection")
w.Section("Third SubSubSection")
w.EndSection()
w.Section("ANOTHER SUBSECTION")
w.EndSection()
w.Close()
out := buf.String()
fmt.Println(out)
Output: Para list: * list item * 3.14 * true * 42 * subitems: 1. subitem1 2. *subitem2* 3. 'subitem3' 4. *'subitem4'* 5. subitem5 6. [a](b) * last th1 th2 ----- ------------ tcell another cell 1. SECTION ========== 1.1. SUBSECTION --------------- 1.1.1. First SubSubSection 1.1.2. Second SubSubSection 1.1.3. Third SubSubSection 1.2. ANOTHER SUBSECTION -----------------------
Source Files
¶
- backend-base_blocks.go
- backend-base_inlines.go
- backend-html_blocks.go
- backend-html_extra.go
- backend-html_inlines.go
- backend-intf-blocks.go
- backend-intf-inlines.go
- backend-md_blocks.go
- backend-md_inlines.go
- backend-table.go
- backend-txt_blocks.go
- backend-txt_inlines.go
- multiwriter.go
- nullwriter.go
- printer.go
- style.go
- writer.go
- writer_impl.go