draw2d/draw2dsvg/svg.go

123 lines
2.6 KiB
Go
Raw Normal View History

2017-12-21 17:18:29 +00:00
// Copyright 2015 The draw2d Authors. All rights reserved.
// created: 16/12/2017 by Drahoslav Bednář
2017-12-22 08:59:31 +00:00
2017-12-21 17:18:29 +00:00
package draw2dsvg
import (
"encoding/xml"
)
2017-12-22 21:40:56 +00:00
/* svg elements */
type FontMode int
const (
SysFontMode FontMode = 1 << iota
LinkFontMode
SvgFontMode
CssFontMode
PathFontMode
)
2017-12-21 17:18:29 +00:00
type Svg struct {
XMLName xml.Name `xml:"svg"`
Xmlns string `xml:"xmlns,attr"`
Fonts []*Font `xml:"defs>font"`
Groups []*Group `xml:"g"`
fontMode FontMode
2017-12-24 14:31:09 +00:00
FillStroke
2017-12-21 17:18:29 +00:00
}
2017-12-27 11:32:23 +00:00
func NewSvg() *Svg {
return &Svg{
Xmlns: "http://www.w3.org/2000/svg",
FillStroke: FillStroke{Fill: "none", Stroke: "none"},
fontMode: SvgFontMode,
2017-12-27 11:32:23 +00:00
}
}
2017-12-21 17:18:29 +00:00
type Group struct {
2017-12-22 21:40:56 +00:00
FillStroke
Transform string `xml:"transform,attr,omitempty"`
Groups []*Group `xml:"g"`
Paths []*Path `xml:"path"`
Texts []*Text `xml:"text"`
2018-01-07 23:25:25 +00:00
Image *Image `xml:"image"`
2017-12-21 17:18:29 +00:00
}
type Path struct {
2017-12-22 21:40:56 +00:00
FillStroke
Desc string `xml:"d,attr"`
2017-12-21 17:18:29 +00:00
}
type Text struct {
2017-12-22 21:40:56 +00:00
FillStroke
Position
2017-12-26 18:52:06 +00:00
FontSize float64 `xml:"font-size,attr,omitempty"`
FontFamily string `xml:"font-family,attr,omitempty"`
Text string `xml:",innerxml"`
Style string `xml:"style,attr,omitempty"`
2017-12-22 21:40:56 +00:00
}
2018-01-07 23:25:25 +00:00
type Image struct {
Href string `xml:"href,attr"`
X int `xml:"x,attr,omitempty"`
Y int `xml:"y,attr,omitempty"`
Width int `xml:"width,attr"`
Height int `xml:"height,attr"`
}
/* font related elements */
type Font struct {
Identity
Face *Face `xml:"font-face"`
Glyphs []*Glyph `xml:"glyph"`
}
type Face struct {
Family string `xml:"font-family,attr"`
Units int `xml:"units-per-em,attr"`
HorizAdvX float64 `xml:"horiz-adv-x,attr"`
// TODO add other attrs, like style, variant, weight...
}
type Glyph struct {
Rune Rune `xml:"unicode,attr"`
Desc string `xml:"d,attr"`
HorizAdvX float64 `xml:"horiz-adv-x,attr"`
}
type Rune rune
func (r Rune) MarshalXMLAttr(name xml.Name) (xml.Attr, error) {
return xml.Attr{
Name: name,
Value: string(rune(r)),
}, nil
}
2017-12-22 21:40:56 +00:00
/* shared attrs */
type Identity struct {
Id string `xml:"id,attr"`
Name string `xml:"name,attr"`
}
type Position struct {
X float64 `xml:"x,attr,omitempty"`
Y float64 `xml:"y,attr,omitempty"`
}
2017-12-22 21:40:56 +00:00
type FillStroke struct {
2017-12-24 15:05:15 +00:00
Fill string `xml:"fill,attr,omitempty"`
FillRule string `xml:"fill-rule,attr,omitempty"`
Stroke string `xml:"stroke,attr,omitempty"`
StrokeWidth string `xml:"stroke-width,attr,omitempty"`
StrokeLinecap string `xml:"stroke-linecap,attr,omitempty"`
StrokeLinejoin string `xml:"stroke-linejoin,attr,omitempty"`
StrokeDasharray string `xml:"stroke-dasharray,attr,omitempty"`
StrokeDashoffset string `xml:"stroke-dashoffset,attr,omitempty"`
}