package ol import ( "fmt" "grim" "strconv" "github.com/golang/freetype/truetype" ) func Init() grim.Transformer { return grim.Transformer{ Selector: func(n *grim.Node, c *grim.CSS) bool { return n.TagName() == "ol" }, Handler: func(n *grim.Node, c *grim.CSS) *grim.Node { tN := n.CreateElement(n.TagName()) var maxOS int var widths []int // !ISSUE: Update this to match ul for i, v := range n.Children { li := n.CreateElement("li") dot := li.CreateElement("div") content := li.CreateElement("div") cs := v.GetComputedStyles() for k, v := range cs { li.SetStyle(k, v) dot.SetStyle(k, v) content.SetStyle(k, v) } li.SetStyle("display", "flex") li.SetStyle("align-items", "center") dot.SetStyle("margin-right", "6px") dot.SetStyle("display", "block") italic := false if n.GetStyle("font-style") == "italic" { italic = true } if c.Fonts == nil { c.Fonts = map[string]*truetype.Font{} } fs := grim.ConvertToPixels(n.GetStyle("font-size"), 16, c.Width) em := fs fid := n.GetStyle("font-family") + fmt.Sprint(em, n.GetStyle("font-weight"), italic) fnt, ok := c.Fonts[fid] if !ok { f, err := grim.LoadFont(n.GetStyle("font-family"), int(em), n.GetStyle("font-weight"), italic, &c.Adapter.FileSystem) if err != nil { panic(err) } c.Fonts[fid] = f } w := grim.MeasureText(&grim.MetaData{Font: fnt}, strconv.Itoa(i+1)+".") widths = append(widths, w) if w > maxOS { maxOS = w } dot.InnerText(strconv.Itoa(i+1) + ".") content.InnerText(v.InnerText()) content.SetStyle("display", "block") li.AppendChild(&dot) li.AppendChild(&content) // !CHECK: This might have to re arranged // li.Parent = n tN.AppendChild(&li) } for i := range tN.Children { tN.Children[i].Children[0].SetStyle("margin-left", strconv.Itoa((maxOS-widths[i]))+"px") } n.Children = tN.Children return n }, } }