diff --git a/go.mod b/go.mod index 862c72b2c34..7bb77da37e4 100644 --- a/go.mod +++ b/go.mod @@ -41,7 +41,7 @@ require ( github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7 github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea github.com/coreos/rkt v1.30.0 // indirect - github.com/cpuguy83/go-md2man v1.0.4 + github.com/cpuguy83/go-md2man v1.0.10 github.com/cyphar/filepath-securejoin v0.0.0-20170720062807-ae69057f2299 // indirect github.com/davecgh/go-spew v1.1.1 github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd @@ -128,7 +128,7 @@ require ( github.com/prometheus/common v0.0.0-20181126121408-4724e9255275 github.com/quobyte/api v0.1.2 github.com/robfig/cron v0.0.0-20170309132418-df38d32658d8 - github.com/russross/blackfriday v0.0.0-20151117072312-300106c228d5 + github.com/russross/blackfriday v1.5.2 github.com/seccomp/libseccomp-golang v0.0.0-20150813023252-1b506fc7c24e // indirect github.com/shurcooL/sanitized_anchor_name v0.0.0-20151028001915-10ef21a441db // indirect github.com/sigma/go-inotify v0.0.0-20181102212354-c87b6cf5033d @@ -236,7 +236,7 @@ replace ( github.com/coreos/go-systemd => github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7 github.com/coreos/pkg => github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea github.com/coreos/rkt => github.com/coreos/rkt v1.30.0 - github.com/cpuguy83/go-md2man => github.com/cpuguy83/go-md2man v1.0.4 + github.com/cpuguy83/go-md2man => github.com/cpuguy83/go-md2man v1.0.10 github.com/cyphar/filepath-securejoin => github.com/cyphar/filepath-securejoin v0.0.0-20170720062807-ae69057f2299 github.com/d2g/dhcp4 => github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c github.com/d2g/dhcp4client => github.com/d2g/dhcp4client v0.0.0-20170829104524-6e570ed0a266 diff --git a/go.sum b/go.sum index ec607945fda..63d6c4bfe81 100644 --- a/go.sum +++ b/go.sum @@ -85,8 +85,8 @@ github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea h1:n2Ltr3SrfQlf/9nOna1D github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/rkt v1.30.0 h1:Kkt6sYeEGKxA3Y7SCrY+nHoXkWed6Jr2BBY42GqMymM= github.com/coreos/rkt v1.30.0/go.mod h1:O634mlH6U7qk87poQifK6M2rsFNt+FyUTWNMnP1hF1U= -github.com/cpuguy83/go-md2man v1.0.4 h1:OwjhDpK9YGCcI5CDf8HcdfsXqr6znFyAJfuZ27ixJsc= -github.com/cpuguy83/go-md2man v1.0.4/go.mod h1:N6JayAiVKtlHSnuTCeuLSQVs75hb8q+dYQLjr7cDsKY= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cyphar/filepath-securejoin v0.0.0-20170720062807-ae69057f2299 h1:2pOMM/RaFhI52FyCITl8aTf5HZ9LoHD8SkjbghAEG1E= github.com/cyphar/filepath-securejoin v0.0.0-20170720062807-ae69057f2299/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= diff --git a/vendor/github.com/cpuguy83/go-md2man/md2man/md2man.go b/vendor/github.com/cpuguy83/go-md2man/md2man/md2man.go index 8f44fa15506..af62279a615 100644 --- a/vendor/github.com/cpuguy83/go-md2man/md2man/md2man.go +++ b/vendor/github.com/cpuguy83/go-md2man/md2man/md2man.go @@ -4,6 +4,7 @@ import ( "github.com/russross/blackfriday" ) +// Render converts a markdown document into a roff formatted document. func Render(doc []byte) []byte { renderer := RoffRenderer(0) extensions := 0 diff --git a/vendor/github.com/cpuguy83/go-md2man/md2man/roff.go b/vendor/github.com/cpuguy83/go-md2man/md2man/roff.go index 4478786b7b6..8c29ec68738 100644 --- a/vendor/github.com/cpuguy83/go-md2man/md2man/roff.go +++ b/vendor/github.com/cpuguy83/go-md2man/md2man/roff.go @@ -9,8 +9,12 @@ import ( "github.com/russross/blackfriday" ) -type roffRenderer struct{} +type roffRenderer struct { + ListCounters []int +} +// RoffRenderer creates a new blackfriday Renderer for generating roff documents +// from markdown func RoffRenderer(flags int) blackfriday.Renderer { return &roffRenderer{} } @@ -33,8 +37,12 @@ func (r *roffRenderer) TitleBlock(out *bytes.Buffer, text []byte) { line = append(line, []byte("\" ")...) out.Write(line) } + out.WriteString("\n") - out.WriteString(" \"\"\n") + // disable hyphenation + out.WriteString(".nh\n") + // disable justification (adjust text to left margin only) + out.WriteString(".ad l\n") } func (r *roffRenderer) BlockCode(out *bytes.Buffer, text []byte, lang string) { @@ -49,7 +57,7 @@ func (r *roffRenderer) BlockQuote(out *bytes.Buffer, text []byte) { out.WriteString("\n.RE\n") } -func (r *roffRenderer) BlockHtml(out *bytes.Buffer, text []byte) { +func (r *roffRenderer) BlockHtml(out *bytes.Buffer, text []byte) { // nolint: golint out.Write(text) } @@ -80,23 +88,25 @@ func (r *roffRenderer) HRule(out *bytes.Buffer) { func (r *roffRenderer) List(out *bytes.Buffer, text func() bool, flags int) { marker := out.Len() - out.WriteString(".IP ") - if flags&blackfriday.LIST_TYPE_ORDERED != 0 { - out.WriteString("\\(bu 2") - } else { - out.WriteString("\\n+[step" + string(flags) + "]") - } - out.WriteString("\n") + r.ListCounters = append(r.ListCounters, 1) + out.WriteString("\n.RS\n") if !text() { out.Truncate(marker) return } - + r.ListCounters = r.ListCounters[:len(r.ListCounters)-1] + out.WriteString("\n.RE\n") } func (r *roffRenderer) ListItem(out *bytes.Buffer, text []byte, flags int) { - out.WriteString("\n\\item ") + if flags&blackfriday.LIST_TYPE_ORDERED != 0 { + out.WriteString(fmt.Sprintf(".IP \"%3d.\" 5\n", r.ListCounters[len(r.ListCounters)-1])) + r.ListCounters[len(r.ListCounters)-1]++ + } else { + out.WriteString(".IP \\(bu 2\n") + } out.Write(text) + out.WriteString("\n") } func (r *roffRenderer) Paragraph(out *bytes.Buffer, text func() bool) { @@ -111,11 +121,24 @@ func (r *roffRenderer) Paragraph(out *bytes.Buffer, text func() bool) { } } -// TODO: This might now work func (r *roffRenderer) Table(out *bytes.Buffer, header []byte, body []byte, columnData []int) { - out.WriteString(".TS\nallbox;\n") + out.WriteString("\n.TS\nallbox;\n") + maxDelims := 0 + lines := strings.Split(strings.TrimRight(string(header), "\n")+"\n"+strings.TrimRight(string(body), "\n"), "\n") + for _, w := range lines { + curDelims := strings.Count(w, "\t") + if curDelims > maxDelims { + maxDelims = curDelims + } + } + out.Write([]byte(strings.Repeat("l ", maxDelims+1) + "\n")) + out.Write([]byte(strings.Repeat("l ", maxDelims+1) + ".\n")) out.Write(header) + if len(header) > 0 { + out.Write([]byte("\n")) + } + out.Write(body) out.WriteString("\n.TE\n") } @@ -125,24 +148,30 @@ func (r *roffRenderer) TableRow(out *bytes.Buffer, text []byte) { out.WriteString("\n") } out.Write(text) - out.WriteString("\n") } func (r *roffRenderer) TableHeaderCell(out *bytes.Buffer, text []byte, align int) { if out.Len() > 0 { - out.WriteString(" ") + out.WriteString("\t") } - out.Write(text) - out.WriteString(" ") + if len(text) == 0 { + text = []byte{' '} + } + out.Write([]byte("\\fB\\fC" + string(text) + "\\fR")) } -// TODO: This is probably broken func (r *roffRenderer) TableCell(out *bytes.Buffer, text []byte, align int) { if out.Len() > 0 { out.WriteString("\t") } + if len(text) > 30 { + text = append([]byte("T{\n"), text...) + text = append(text, []byte("\nT}")...) + } + if len(text) == 0 { + text = []byte{' '} + } out.Write(text) - out.WriteString("\t") } func (r *roffRenderer) Footnotes(out *bytes.Buffer, text func() bool) { @@ -185,10 +214,11 @@ func (r *roffRenderer) LineBreak(out *bytes.Buffer) { } func (r *roffRenderer) Link(out *bytes.Buffer, link []byte, title []byte, content []byte) { + out.Write(content) r.AutoLink(out, link, 0) } -func (r *roffRenderer) RawHtmlTag(out *bytes.Buffer, tag []byte) { +func (r *roffRenderer) RawHtmlTag(out *bytes.Buffer, tag []byte) { // nolint: golint out.Write(tag) } @@ -209,25 +239,6 @@ func (r *roffRenderer) Entity(out *bytes.Buffer, entity []byte) { out.WriteString(html.UnescapeString(string(entity))) } -func processFooterText(text []byte) []byte { - text = bytes.TrimPrefix(text, []byte("% ")) - newText := []byte{} - textArr := strings.Split(string(text), ") ") - - for i, w := range textArr { - if i == 0 { - w = strings.Replace(w, "(", "\" \"", 1) - w = fmt.Sprintf("\"%s\"", w) - } else { - w = fmt.Sprintf(" \"%s\"", w) - } - newText = append(newText, []byte(w)...) - } - newText = append(newText, []byte(" \"\"")...) - - return newText -} - func (r *roffRenderer) NormalText(out *bytes.Buffer, text []byte) { escapeSpecialChars(out, text) } @@ -249,6 +260,11 @@ func needsBackslash(c byte) bool { func escapeSpecialChars(out *bytes.Buffer, text []byte) { for i := 0; i < len(text); i++ { + // escape initial apostrophe or period + if len(text) >= 1 && (text[0] == '\'' || text[0] == '.') { + out.WriteString("\\&") + } + // directly copy normal characters org := i diff --git a/vendor/modules.txt b/vendor/modules.txt index 6d1f7687068..b9d770e31bf 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -269,7 +269,7 @@ github.com/coreos/go-systemd/util # github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea => github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea github.com/coreos/pkg/capnslog github.com/coreos/pkg/dlopen -# github.com/cpuguy83/go-md2man v1.0.4 => github.com/cpuguy83/go-md2man v1.0.4 +# github.com/cpuguy83/go-md2man v1.0.10 => github.com/cpuguy83/go-md2man v1.0.10 github.com/cpuguy83/go-md2man/md2man # github.com/cyphar/filepath-securejoin v0.0.0-20170720062807-ae69057f2299 => github.com/cyphar/filepath-securejoin v0.0.0-20170720062807-ae69057f2299 github.com/cyphar/filepath-securejoin @@ -725,7 +725,7 @@ github.com/quobyte/api github.com/robfig/cron # github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c => github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c github.com/rubiojr/go-vhd/vhd -# github.com/russross/blackfriday v0.0.0-20151117072312-300106c228d5 => github.com/russross/blackfriday v0.0.0-20151117072312-300106c228d5 +# github.com/russross/blackfriday v1.5.2 => github.com/russross/blackfriday v0.0.0-20151117072312-300106c228d5 github.com/russross/blackfriday # github.com/satori/go.uuid v1.2.0 => github.com/satori/go.uuid v1.2.0 github.com/satori/go.uuid