feat: html template
This commit is contained in:
42
report/html.go
Normal file
42
report/html.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package report
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"html/template"
|
||||
"regexp"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
// OffsetHTags offsets all <h1>-<h6> tags in the HTML by the given amount.
|
||||
// If the resulting heading level exceeds 6, it is capped at 6.
|
||||
func offsetHTags(amount int, html template.HTML) template.HTML {
|
||||
// Regular expression to match opening and closing h tags, e.g., <h1> or </h2>
|
||||
re := regexp.MustCompile(`(?i)<(/?)h([1-6])(\s[^>]*)?>`)
|
||||
|
||||
// Replace all matches
|
||||
result := re.ReplaceAllStringFunc(string(html), func(tag string) string {
|
||||
matches := re.FindStringSubmatch(tag)
|
||||
if len(matches) < 4 {
|
||||
return tag
|
||||
}
|
||||
|
||||
closingSlash := matches[1] // "/" if closing tag
|
||||
levelStr := matches[2] // heading level
|
||||
attrs := matches[3] // attributes like ' class="foo"'
|
||||
|
||||
level, err := strconv.Atoi(levelStr)
|
||||
if err != nil {
|
||||
return tag
|
||||
}
|
||||
|
||||
newLevel := level + amount
|
||||
if newLevel < 1 {
|
||||
newLevel = 1
|
||||
} else if newLevel > 6 {
|
||||
newLevel = 6
|
||||
}
|
||||
|
||||
return fmt.Sprintf("<%sh%d%s>", closingSlash, newLevel, attrs)
|
||||
})
|
||||
return template.HTML(result)
|
||||
}
|
||||
Reference in New Issue
Block a user