|
|
|
@ -90,8 +90,10 @@ func (options *CustomRender) Link(out *bytes.Buffer, link []byte, title []byte, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var ( |
|
|
|
|
mentionPattern = regexp.MustCompile(`@[0-9a-zA-Z_]{1,}`) |
|
|
|
|
commitPattern = regexp.MustCompile(`[^>]http[s]{0,}.*commit/[0-9a-zA-Z]{1,}`) |
|
|
|
|
mentionPattern = regexp.MustCompile(`@[0-9a-zA-Z_]{1,}`) |
|
|
|
|
commitPattern = regexp.MustCompile(`(\s|^)https?.*commit/[0-9a-zA-Z]+(#+[0-9a-zA-Z-]*)?`) |
|
|
|
|
issueFullPattern = regexp.MustCompile(`(\s|^)https?.*issues/[0-9]+(#+[0-9a-zA-Z-]*)?`) |
|
|
|
|
issueIndexPattern = regexp.MustCompile(`(\s|^)#[0-9]+`) |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
func RenderSpecialLink(rawBytes []byte, urlPrefix string) []byte { |
|
|
|
@ -102,8 +104,31 @@ func RenderSpecialLink(rawBytes []byte, urlPrefix string) []byte { |
|
|
|
|
} |
|
|
|
|
ms = commitPattern.FindAll(rawBytes, -1) |
|
|
|
|
for _, m := range ms { |
|
|
|
|
rawBytes = bytes.Replace(rawBytes, m, |
|
|
|
|
[]byte(fmt.Sprintf(`<code><a href="%s">%s</a></code>`, m, m)), -1) |
|
|
|
|
m = bytes.TrimPrefix(m, []byte(" ")) |
|
|
|
|
i := strings.Index(string(m), "commit/") |
|
|
|
|
j := strings.Index(string(m), "#") |
|
|
|
|
if j == -1 { |
|
|
|
|
j = len(m) |
|
|
|
|
} |
|
|
|
|
rawBytes = bytes.Replace(rawBytes, m, []byte(fmt.Sprintf( |
|
|
|
|
` <code><a href="%s">%s</a></code>`, m, ShortSha(string(m[i+7:j])))), -1) |
|
|
|
|
} |
|
|
|
|
ms = issueFullPattern.FindAll(rawBytes, -1) |
|
|
|
|
for _, m := range ms { |
|
|
|
|
m = bytes.TrimPrefix(m, []byte(" ")) |
|
|
|
|
i := strings.Index(string(m), "issues/") |
|
|
|
|
j := strings.Index(string(m), "#") |
|
|
|
|
if j == -1 { |
|
|
|
|
j = len(m) |
|
|
|
|
} |
|
|
|
|
rawBytes = bytes.Replace(rawBytes, m, []byte(fmt.Sprintf( |
|
|
|
|
` <a href="%s">#%s</a>`, m, ShortSha(string(m[i+7:j])))), -1) |
|
|
|
|
} |
|
|
|
|
ms = issueIndexPattern.FindAll(rawBytes, -1) |
|
|
|
|
for _, m := range ms { |
|
|
|
|
m = bytes.TrimPrefix(m, []byte(" ")) |
|
|
|
|
rawBytes = bytes.Replace(rawBytes, m, []byte(fmt.Sprintf( |
|
|
|
|
` <a href="%s/issues/%s">%s</a>`, urlPrefix, m[1:], m)), -1) |
|
|
|
|
} |
|
|
|
|
return rawBytes |
|
|
|
|
} |
|
|
|
@ -122,10 +147,10 @@ func RenderMarkdown(rawBytes []byte, urlPrefix string) []byte { |
|
|
|
|
htmlFlags |= gfm.HTML_GITHUB_BLOCKCODE |
|
|
|
|
htmlFlags |= gfm.HTML_OMIT_CONTENTS |
|
|
|
|
// htmlFlags |= gfm.HTML_COMPLETE_PAGE
|
|
|
|
|
renderer := &CustomRender{ |
|
|
|
|
Renderer: gfm.HtmlRenderer(htmlFlags, "", ""), |
|
|
|
|
urlPrefix: urlPrefix, |
|
|
|
|
} |
|
|
|
|
// renderer := &CustomRender{
|
|
|
|
|
// Renderer: gfm.HtmlRenderer(htmlFlags, "", ""),
|
|
|
|
|
// urlPrefix: urlPrefix,
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// set up the parser
|
|
|
|
|
extensions := 0 |
|
|
|
@ -138,7 +163,7 @@ func RenderMarkdown(rawBytes []byte, urlPrefix string) []byte { |
|
|
|
|
extensions |= gfm.EXTENSION_SPACE_HEADERS |
|
|
|
|
extensions |= gfm.EXTENSION_NO_EMPTY_LINE_BEFORE_BLOCK |
|
|
|
|
|
|
|
|
|
body = gfm.Markdown(body, renderer, extensions) |
|
|
|
|
fmt.Println(string(body)) |
|
|
|
|
// body = gfm.Markdown(body, renderer, extensions)
|
|
|
|
|
// fmt.Println(string(body))
|
|
|
|
|
return body |
|
|
|
|
} |
|
|
|
|