ok
This commit is contained in:
parent
3a9a784342
commit
4ccaf4a578
2 changed files with 21 additions and 15 deletions
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 649 KiB After Width: | Height: | Size: 649 KiB |
|
|
@ -106,7 +106,7 @@ func MeasureMarkdown(mdText string, ruler *Ruler, fontFamily *d2fonts.FontFamily
|
||||||
|
|
||||||
// TODO consider setting a max width + (manual) text wrapping
|
// TODO consider setting a max width + (manual) text wrapping
|
||||||
bodyNode := doc.Find("body").First().Nodes[0]
|
bodyNode := doc.Find("body").First().Nodes[0]
|
||||||
bodyAttrs := ruler.measureNode(0, bodyNode, fontFamily, MarkdownFontSize)
|
bodyAttrs := ruler.measureNode(0, bodyNode, fontFamily, MarkdownFontSize, d2fonts.FONT_STYLE_REGULAR)
|
||||||
|
|
||||||
return int(math.Ceil(bodyAttrs.width)), int(math.Ceil(bodyAttrs.height)), nil
|
return int(math.Ceil(bodyAttrs.width)), int(math.Ceil(bodyAttrs.height)), nil
|
||||||
}
|
}
|
||||||
|
|
@ -192,11 +192,11 @@ func (b *blockAttrs) isNotEmpty() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// measures node dimensions to match rendering with styles in github-markdown.css
|
// measures node dimensions to match rendering with styles in github-markdown.css
|
||||||
func (ruler *Ruler) measureNode(depth int, n *html.Node, fontFamily *d2fonts.FontFamily, fontSize int) blockAttrs {
|
func (ruler *Ruler) measureNode(depth int, n *html.Node, fontFamily *d2fonts.FontFamily, fontSize int, fontStyle d2fonts.FontStyle) blockAttrs {
|
||||||
if fontFamily == nil {
|
if fontFamily == nil {
|
||||||
fontFamily = go2.Pointer(d2fonts.SourceSansPro)
|
fontFamily = go2.Pointer(d2fonts.SourceSansPro)
|
||||||
}
|
}
|
||||||
font := fontFamily.Font(fontSize, d2fonts.FONT_STYLE_REGULAR)
|
font := fontFamily.Font(fontSize, fontStyle)
|
||||||
|
|
||||||
var parentElementType string
|
var parentElementType string
|
||||||
if n.Parent != nil && n.Parent.Type == html.ElementNode {
|
if n.Parent != nil && n.Parent.Type == html.ElementNode {
|
||||||
|
|
@ -250,7 +250,8 @@ func (ruler *Ruler) measureNode(depth int, n *html.Node, fontFamily *d2fonts.Fon
|
||||||
switch n.Data {
|
switch n.Data {
|
||||||
case "h1", "h2", "h3", "h4", "h5", "h6":
|
case "h1", "h2", "h3", "h4", "h5", "h6":
|
||||||
fontSize = HeaderToFontSize[n.Data]
|
fontSize = HeaderToFontSize[n.Data]
|
||||||
font = fontFamily.Font(HeaderToFontSize[n.Data], d2fonts.FONT_STYLE_BOLD)
|
fontStyle = d2fonts.FONT_STYLE_BOLD
|
||||||
|
font = fontFamily.Font(HeaderToFontSize[n.Data], fontStyle)
|
||||||
originalLineHeight := ruler.LineHeightFactor
|
originalLineHeight := ruler.LineHeightFactor
|
||||||
ruler.LineHeightFactor = LineHeight_h
|
ruler.LineHeightFactor = LineHeight_h
|
||||||
defer func() {
|
defer func() {
|
||||||
|
|
@ -258,10 +259,13 @@ func (ruler *Ruler) measureNode(depth int, n *html.Node, fontFamily *d2fonts.Fon
|
||||||
}()
|
}()
|
||||||
case "em":
|
case "em":
|
||||||
font.Style = d2fonts.FONT_STYLE_ITALIC
|
font.Style = d2fonts.FONT_STYLE_ITALIC
|
||||||
|
fontStyle = d2fonts.FONT_STYLE_ITALIC
|
||||||
case "b", "strong":
|
case "b", "strong":
|
||||||
font.Style = d2fonts.FONT_STYLE_BOLD
|
font.Style = d2fonts.FONT_STYLE_BOLD
|
||||||
|
fontStyle = d2fonts.FONT_STYLE_BOLD
|
||||||
case "pre", "code":
|
case "pre", "code":
|
||||||
fontFamily = go2.Pointer(d2fonts.SourceCodePro)
|
fontFamily = go2.Pointer(d2fonts.SourceCodePro)
|
||||||
|
fontStyle = d2fonts.FONT_STYLE_REGULAR
|
||||||
font.Family = d2fonts.SourceCodePro
|
font.Family = d2fonts.SourceCodePro
|
||||||
font.Style = d2fonts.FONT_STYLE_REGULAR
|
font.Style = d2fonts.FONT_STYLE_REGULAR
|
||||||
isCode = true
|
isCode = true
|
||||||
|
|
@ -278,7 +282,7 @@ func (ruler *Ruler) measureNode(depth int, n *html.Node, fontFamily *d2fonts.Fon
|
||||||
// first create blocks from combined inline elements, then combine all blocks
|
// first create blocks from combined inline elements, then combine all blocks
|
||||||
// current will be non-nil while inline elements are being combined into a block
|
// current will be non-nil while inline elements are being combined into a block
|
||||||
for child := n.FirstChild; child != nil; child = child.NextSibling {
|
for child := n.FirstChild; child != nil; child = child.NextSibling {
|
||||||
childBlock := ruler.measureNode(depth+1, child, fontFamily, fontSize)
|
childBlock := ruler.measureNode(depth+1, child, fontFamily, fontSize, fontStyle)
|
||||||
|
|
||||||
if child.Type == html.ElementNode && isBlockElement(child.Data) {
|
if child.Type == html.ElementNode && isBlockElement(child.Data) {
|
||||||
if current != nil {
|
if current != nil {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue