Sign in

    svg

    MoonBit SVG eDSL

    svg
    Download zip
    Author
    Version
    0.1.2
    License
    Apache-2.0
    Last updated
    last year
    Downloads
    59

    #SVG

    A MoonBit SVG embedded Domain-Specific Language (eDSL) for generating SVG markup programmatically.

    #Overview

    This library provides a clean, type-safe way to generate SVG content in MoonBit. It offers:

    • Attribute handling through an enum-based approach (Key["value"])
    • Path generation utilities
    • SVG transformation functions
    • Easy composition with the + operator

    #Installation

    moon add CAIMEOX/svg

    #Usage

    // Create a red rectangle
    let rect = @svg.rect([
    @svg.Width["100"],
    @svg.Height["50"],
    @svg.Fill["red"]
    ])

    // Create a circle
    let circle = @svg.circle([
    @svg.Cx["50"],
    @svg.Cy["50"],
    @svg.R["25"],
    @svg.Fill["blue"]
    ])

    // Combine elements
    let combined = rect + circle

    Complete SVG Document

    // Create a complete SVG document
    fn create_svg() -> @svg.Element {
    let content = @svg.rect([@svg.Width["100%"], @svg.Height["100%"], @svg.Fill["#f0f0f0"]]) +
    @svg.circle([@svg.Cx["50%"], @svg.Cy["50%"], @svg.R["40%"], @svg.Fill["#3355cc"]])

    @svg.doc_type() +
    @svg.svg11(content).with_attr([
    @svg.Version["1.1"],
    @svg.Width["300"],
    @svg.Height["200"],
    @svg.ViewBox["0 0 100 100"]
    ])
    }

    #Path Construction

    The library provides functions for SVG path data:

    // Create a triangular path
    let triangle = @svg.path([
    @svg.Fill["yellow"],
    @svg.Stroke["black"],
    @svg.StrokeWidth["2"],
    @svg.D[@svg.ma(10, 10) + @svg.la(50, 10) + @svg.la(30, 40) + @svg.z()]
    ])

    #Comprehensive Example

    Here's a more complete example that creates a simple logo:

    fn sample_logo() -> @svg.Element {
    // Create multiple path elements to form a logo
    @svg.path([
    @svg.Fill["#3366CC"],
    @svg.D[@svg.ma(0, 50) + @svg.la(25, 0) + @svg.la(50, 50) + @svg.la(25, 100) + @svg.la(0, 50) + @svg.z()]
    ]) +
    @svg.path([
    @svg.Fill["#6633CC"],
    @svg.D[@svg.ma(50, 50) + @svg.la(75, 0) + @svg.la(100, 50) + @svg.la(75, 100) + @svg.la(50, 50) + @svg.z()]
    ]) +
    @svg.circle([
    @svg.Cx["50"],
    @svg.Cy["50"],
    @svg.R["15"],
    @svg.Fill["#CC3366"]
    ])
    }

    // Wrap with SVG document structure
    fn create_logo_svg() -> @svg.Element {
    @svg.doc_type() +
    @svg.svg11(sample_logo()).with_attr([
    @svg.Version["1.1"],
    @svg.Width["200"],
    @svg.Height["200"],
    @svg.ViewBox["0 0 100 100"]
    ])
    }

    More examples can be found in the render_test.mbt file.

    RealFloat

    pub(open) trait RealFloat :
    Num
    + Show {
    }

    Attribute

    type Attribute

    impl Eq for Attribute
    impl Hash for Attribute
    impl Show for Attribute

    Element

    type Element

    impl Add for Element
    impl Show for Element

    Element::doc_type

    fn Element::doc_type(name : String) -> Element

    Element::make

    fn Element::make(self : Element, name : String) -> Element

    Element::make_empty

    fn Element::make_empty(name : String) -> Element

    Element::new

    fn Element::new(run : (
    HashMap
    [String, String]) -> String) -> Element

    Element::str

    fn Element::str(str : String) -> Element

    Element::svg11

    fn Element::svg11(self : Element) -> Element

    Element::with_attr

    fn Element::with_attr(self : Element, attr : Array[Attribute]) -> Element

    Tag

    pub(all) enum Tag {
    AccentHeight
    Accumulate
    Additive
    AlignmentBaseline
    Alphabetic
    Amplitude
    ArabicForm
    Ascent
    AttributeName
    AttributeType
    Azimuth
    BaseFrequency
    Baseprofile
    BaselineShift
    Bbox
    Begin
    Bias
    By
    CalcMode
    CapHeight
    Class
    Clip
    ClipPath
    ClipRule
    ClipPathUnits
    Color
    ColorInterpolation
    ColorInterpolationFilters
    ColorProfile
    ColorRendering
    ContentScriptType
    ContentStyleType
    Cursor
    Cx
    Cy
    D
    Descent
    DiffuseConstant
    Direction
    Display
    Divisor
    DominantBaseline
    Dur
    Dx
    Dy
    EdgeMode
    Elevation
    EnableBackground
    End
    Exponent
    ExternalResourcesRequired
    Fill
    FillOpacity
    FillRule
    Filter
    FilterRes
    FilterUnits
    FloodColor
    FloodOpacity
    FontFamily
    FontSize
    FontSizeAdjust
    FontStretch
    FontStyle
    FontVariant
    FontWeight
    Format
    From
    Fx
    Fy
    G1
    G2
    GlyphName
    GlyphOrientationHorizontal
    GlyphOrientationVertical
    GradientTransform
    GradientUnits
    Hanging
    Height
    HorizAdvX
    HorizOriginX
    HorizOriginY
    Id
    Ideographic
    ImageRendering
    In
    In2
    Intercept
    K
    K1
    K2
    K3
    K4
    KernelMatrix
    KernelUnitLength
    Kerning
    KeyPoints
    KeySplines
    KeyTimes
    Lang
    LengthAdjust
    LetterSpacing
    LightingColor
    LimitingConeAngle
    Local
    MarkerEnd
    MarkerMid
    MarkerStart
    MarkerHeight
    MarkerUnits
    MarkerWidth
    MaskContentUnits
    MaskUnits
    Mathematical
    Max
    Media
    Method
    Min
    Mode
    Name
    NumOctaves
    Offset
    Onabort
    Onactivate
    Onbegin
    Onclick
    Onend
    Onerror
    Onfocusin
    Onfocusout
    Onload
    Onmousedown
    Onmousemove
    Onmouseout
    Onmouseover
    Onmouseup
    Onrepeat
    Onresize
    Onscroll
    Onunload
    Onzoom
    Opacity
    Operator
    Order
    Orient
    Orientation
    Origin
    Overflow
    OverlinePosition
    OverlineThickness
    Panose1
    PaintOrder
    Path
    PathLength
    PatternContentUnits
    PatternTransform
    PatternUnits
    PointerEvents
    Points
    PointsAtX
    PointsAtY
    PointsAtZ
    PreserveAlpha
    PreserveAspectRatio
    PrimitiveUnits
    R
    Radius
    RefX
    RefY
    RenderingIntent
    RepeatCount
    RepeatDur
    RequiredExtensions
    RequiredFeatures
    Restart
    Result
    Rotate
    Rx
    Ry
    Scale
    Seed
    ShapeRendering
    Slope
    Spacing
    SpecularConstant
    SpecularExponent
    SpreadMethod
    StartOffset
    StdDeviation
    Stemh
    Stemv
    StitchTiles
    StopColor
    StopOpacity
    StrikethroughPosition
    StrikethroughThickness
    String
    Stroke
    StrokeDasharray
    StrokeDashoffset
    StrokeLinecap
    StrokeLinejoin
    StrokeMiterlimit
    StrokeOpacity
    StrokeWidth
    Style
    SurfaceScale
    SystemLanguage
    TableValues
    Target
    TargetX
    TargetY
    TextAnchor
    TextDecoration
    TextRendering
    TextLength
    To
    Transform
    Type
    U1
    U2
    UnderlinePosition
    UnderlineThickness
    Unicode
    UnicodeBidi
    UnicodeRange
    UnitsPerEm
    VAlphabetic
    VHanging
    VIdeographic
    VMathematical
    Values
    Version
    VertAdvY
    VertOriginX
    VertOriginY
    ViewBox
    ViewTarget
    Visibility
    Width
    Widths
    WordSpacing
    WritingMode
    X
    XHeight
    X1
    X2
    XChannelSelector
    XlinkActuate
    XlinkArcrole
    XlinkHref
    XlinkRole
    XlinkShow
    XlinkTitle
    XlinkType
    XmlBase
    XmlLang
    XmlSpace
    Y
    Y1
    Y2
    YChannelselector
    Z
    ZoomAndPan
    }

    impl Eq for Tag
    impl Hash for Tag
    impl Show for Tag

    Tag::op_get

    fn Tag::op_get(self : Tag, att : String) -> Attribute

    fn a(attrs : Array[Attribute], child? : Element) -> Element

    a element

    animate

    fn animate(attrs : Array[Attribute], child? : Element) -> Element

    animate element

    animateMotion

    fn animateMotion(attrs : Array[Attribute], child? : Element) -> Element

    animateMotion element

    animateTransform

    fn animateTransform(attrs : Array[Attribute], child? : Element) -> Element

    animateTransform element

    circle

    fn circle(attrs : Array[Attribute], child? : Element) -> Element

    circle element

    clipPath

    fn clipPath(attrs : Array[Attribute], child? : Element) -> Element

    clipPath element or attribute

    colorProfile

    fn colorProfile(attrs : Array[Attribute], child? : Element) -> Element

    color-profile element

    cursor

    fn cursor(attrs : Array[Attribute], child? : Element) -> Element

    cursor element

    defs

    fn defs(attrs : Array[Attribute], child? : Element) -> Element

    defs element

    desc

    fn desc(attrs : Array[Attribute], child? : Element) -> Element

    desc element

    doc_type

    fn doc_type() -> Element

    SVG element creation functions

    ellipse

    fn ellipse(attrs : Array[Attribute], child? : Element) -> Element

    ellipse element

    feBlend

    fn feBlend(attrs : Array[Attribute], child? : Element) -> Element

    feBlend element

    feColorMatrix

    fn feColorMatrix(attrs : Array[Attribute], child? : Element) -> Element

    feColorMatrix element

    feComponentTransfer

    fn feComponentTransfer(attrs : Array[Attribute], child? : Element) -> Element

    feComponentTransfer element

    feComposite

    fn feComposite(attrs : Array[Attribute], child? : Element) -> Element

    feComposite element

    feConvolveMatrix

    fn feConvolveMatrix(attrs : Array[Attribute], child? : Element) -> Element

    feConvolveMatrix element

    feDiffuseLighting

    fn feDiffuseLighting(attrs : Array[Attribute], child? : Element) -> Element

    feDiffuseLighting element

    feDisplacementMap

    fn feDisplacementMap(attrs : Array[Attribute], child? : Element) -> Element

    feDisplacementMap element

    feDistantLight

    fn feDistantLight(attrs : Array[Attribute], child? : Element) -> Element

    feDistantLight element

    feFlood

    fn feFlood(attrs : Array[Attribute], child? : Element) -> Element

    feFlood element

    feFuncA

    fn feFuncA(attrs : Array[Attribute], child? : Element) -> Element

    feFuncA element

    feFuncB

    fn feFuncB(attrs : Array[Attribute], child? : Element) -> Element

    feFuncB element

    feFuncG

    fn feFuncG(attrs : Array[Attribute], child? : Element) -> Element

    feFuncG element

    feFuncR

    fn feFuncR(attrs : Array[Attribute], child? : Element) -> Element

    feFuncR element

    feGaussianBlur

    fn feGaussianBlur(attrs : Array[Attribute], child? : Element) -> Element

    feGaussianBlur element

    feImage

    fn feImage(attrs : Array[Attribute], child? : Element) -> Element

    feImage element

    feMerge

    fn feMerge(attrs : Array[Attribute], child? : Element) -> Element

    feMerge element

    feMergeNode

    fn feMergeNode(attrs : Array[Attribute], child? : Element) -> Element

    feMergeNode element

    feMorphology

    fn feMorphology(attrs : Array[Attribute], child? : Element) -> Element

    feMorphology element

    feOffset

    fn feOffset(attrs : Array[Attribute], child? : Element) -> Element

    feOffset element

    fePointLight

    fn fePointLight(attrs : Array[Attribute], child? : Element) -> Element

    fePointLight element

    feSpecularLighting

    fn feSpecularLighting(attrs : Array[Attribute], child? : Element) -> Element

    feSpecularLighting element

    feSpotLight

    fn feSpotLight(attrs : Array[Attribute], child? : Element) -> Element

    feSpotLight element

    feTile

    fn feTile(attrs : Array[Attribute], child? : Element) -> Element

    feTile element

    feTurbulence

    fn feTurbulence(attrs : Array[Attribute], child? : Element) -> Element

    feTurbulence element

    filter

    fn filter(attrs : Array[Attribute], child? : Element) -> Element

    filter element

    font

    fn font(attrs : Array[Attribute], child? : Element) -> Element

    font element

    fontFace

    fn fontFace(attrs : Array[Attribute], child? : Element) -> Element

    font-face element

    fontFaceFormat

    fn fontFaceFormat(attrs : Array[Attribute]) -> Element

    font-face-format element

    fontFaceName

    fn fontFaceName(attrs : Array[Attribute]) -> Element

    font-face-name element

    fontFaceSrc

    fn fontFaceSrc(attrs : Array[Attribute], child? : Element) -> Element

    font-face-src element

    fontFaceUri

    fn fontFaceUri(attrs : Array[Attribute], child? : Element) -> Element

    font-face-uri element

    foreignObject

    fn foreignObject(attrs : Array[Attribute], child? : Element) -> Element

    foreignObject element
    fn g(attrs : Array[Attribute], child? : Element) -> Element

    g element

    glyph

    fn glyph(attrs : Array[Attribute], child? : Element) -> Element

    glyph element or attribute

    glyphRef

    fn glyphRef(attrs : Array[Attribute]) -> Element

    glyphRef element

    hkern

    fn hkern(attrs : Array[Attribute]) -> Element

    hkern element

    image

    fn image(attrs : Array[Attribute], child? : Element) -> Element

    image element

    line

    fn line(attrs : Array[Attribute], child? : Element) -> Element

    line element

    linearGradient

    fn linearGradient(attrs : Array[Attribute], child? : Element) -> Element

    linearGradient element

    marker

    fn marker(attrs : Array[Attribute], child? : Element) -> Element

    marker element

    mask

    fn mask(attrs : Array[Attribute], child? : Element) -> Element

    mask element or attribute

    metadata

    fn metadata(attrs : Array[Attribute], child? : Element) -> Element

    metadata element

    missingGlyph

    fn missingGlyph(attrs : Array[Attribute], child? : Element) -> Element

    missing-glyph element

    mpath

    fn mpath(attrs : Array[Attribute], child? : Element) -> Element

    mpath element

    new

    fn new(attr : String, value : String) -> Attribute

    path

    fn path(attrs : Array[Attribute], child? : Element) -> Element

    path element

    pattern

    fn pattern(attrs : Array[Attribute], child? : Element) -> Element

    pattern element

    polygon

    fn polygon(attrs : Array[Attribute], child? : Element) -> Element

    polygon element

    polyline

    fn polyline(attrs : Array[Attribute], child? : Element) -> Element

    polyline element

    radialGradient

    fn radialGradient(attrs : Array[Attribute], child? : Element) -> Element

    radialGradient element

    rect

    fn rect(attrs : Array[Attribute], child? : Element) -> Element

    rect element

    script

    fn script(attrs : Array[Attribute], child? : Element) -> Element

    script element

    set

    fn set(attrs : Array[Attribute], child? : Element) -> Element

    set element

    stop

    fn stop(attrs : Array[Attribute], child? : Element) -> Element

    stop element

    style

    fn style(attrs : Array[Attribute], child? : Element) -> Element

    style element

    svg

    fn svg(attrs : Array[Attribute], child? : Element) -> Element

    svg element

    switch

    fn switch(attrs : Array[Attribute], child? : Element) -> Element

    switch element

    symbol

    fn symbol(attrs : Array[Attribute], child? : Element) -> Element

    symbol element

    term

    fn term(name : String, arr : Array[Attribute], child? : Element) -> Element

    text

    fn text(attrs : Array[Attribute], child? : Element) -> Element

    text element

    textPath

    fn textPath(attrs : Array[Attribute], child? : Element) -> Element

    textPath element

    title

    fn title(attrs : Array[Attribute], child? : Element) -> Element

    title element

    tref

    fn tref(attrs : Array[Attribute], child? : Element) -> Element

    tref element

    tspan

    fn tspan(attrs : Array[Attribute], child? : Element) -> Element

    tspan element

    use_

    fn use_(attrs : Array[Attribute], child? : Element) -> Element

    use element

    view

    fn view(attrs : Array[Attribute], child? : Element) -> Element

    view element

    vkern

    fn vkern(attrs : Array[Attribute]) -> Element

    vkern element
    fn z() -> String

    closepath