]> Sergey Matveev's repositories - sgblog.git/commitdiff
Render URLs in comments too
authorSergey Matveev <stargrave@stargrave.org>
Wed, 15 Jan 2020 07:56:26 +0000 (10:56 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 15 Jan 2020 07:56:26 +0000 (10:56 +0300)
cmd/sgblog/main.go

index 361189325b397257051f1609869fd2d762d29c6b..4dc9fb2ccf7abaa0918a1556679a7acc09783622 100644 (file)
@@ -119,6 +119,20 @@ func msgSplit(msg string) []string {
        return lines
 }
 
+func lineURLize(urlPrefix, line string) string {
+       cols := strings.Split(html.EscapeString(line), " ")
+       for i, col := range cols {
+               if u := urlParse(col); u != nil {
+                       cols[i] = makeA(col, col)
+                       continue
+               }
+               cols[i] = sha1DigestRe.ReplaceAllString(col, makeA(
+                       urlPrefix+"/$1", "$1",
+               ))
+       }
+       return strings.Join(cols, " ")
+}
+
 func getNote(tree *object.Tree, what plumbing.Hash) []byte {
        if tree == nil {
                return nil
@@ -537,19 +551,7 @@ func main() {
                        when, commit.Hash.String(), title,
                )))
                for _, line := range lines[2:] {
-                       line = html.EscapeString(line)
-                       cols := strings.Split(line, " ")
-                       for i, col := range cols {
-                               if u := urlParse(col); u != nil {
-                                       cols[i] = makeA(col, col)
-                                       continue
-                               }
-                               cols[i] = sha1DigestRe.ReplaceAllString(col, makeA(
-                                       cfg.URLPrefix+"/$1", "$1",
-                               ))
-                       }
-                       line = strings.Join(cols, " ")
-                       out.Write([]byte(line + "\n"))
+                       out.Write([]byte(lineURLize(cfg.URLPrefix, line) + "\n"))
                }
                out.Write([]byte("</pre>\n<hr/>\n"))
                if len(notesRaw) > 0 {
@@ -565,9 +567,17 @@ func main() {
                for i, comment := range parseComments(commentsRaw) {
                        out.Write([]byte(fmt.Sprintf(
                                "<dt><a name=\"comment%d\"><a href=\"#comment%d\">comment %d</a>:"+
-                                       "</dt>\n<dd><pre>\n%s\n</pre></dd>\n",
-                               i, i, i, html.EscapeString(comment),
+                                       "</dt>\n<dd><pre>\n",
+                               i, i, i,
                        )))
+                       lines = strings.Split(comment, "\n")
+                       for _, line := range lines[:3] {
+                               out.Write([]byte(line + "\n"))
+                       }
+                       for _, line := range lines[3:] {
+                               out.Write([]byte(lineURLize(cfg.URLPrefix, line) + "\n"))
+                       }
+                       out.Write([]byte("</pre></dd>\n"))
                }
                out.Write([]byte("</dl>\n"))
        } else {