Add XHTML to schema, translate XML to Preserves
This commit is contained in:
parent
cffcac71df
commit
e2e5cbd1d9
51
nim/svui.nim
51
nim/svui.nim
|
@ -1,14 +1,61 @@
|
|||
|
||||
import
|
||||
std/typetraits, preserves, std/tables
|
||||
std/typetraits, preserves, std/tables, std/tables, std/tables, std/tables
|
||||
|
||||
type
|
||||
XmlNodeKind* {.pure.} = enum
|
||||
`XmlElement`, `XmlText`
|
||||
`XmlNode`* {.preservesOr.} = object
|
||||
case orKind*: XmlNodeKind
|
||||
of XmlNodeKind.`XmlElement`:
|
||||
`xmlelement`*: XmlElement
|
||||
|
||||
of XmlNodeKind.`XmlText`:
|
||||
`xmltext`*: XmlText
|
||||
|
||||
|
||||
XmlText* {.preservesTuple.} = object
|
||||
`data`*: string
|
||||
|
||||
Svui*[E] {.preservesRecord: "svui".} = ref object
|
||||
`attrs`*: Table[string, Preserve[E]]
|
||||
`svg`*: string
|
||||
`data`*: Content
|
||||
|
||||
XmlElement* {.preservesTuple.} = object
|
||||
`name`* {.preservesSymbol.}: string
|
||||
`attrs`*: Table[string, string]
|
||||
`elements`* {.preservesTupleTail.}: seq[XmlNode]
|
||||
|
||||
Svg* {.preservesTuple.} = object
|
||||
`data`* {.preservesLiteral: "svg".}: bool
|
||||
`attrs`*: Table[string, string]
|
||||
`elements`* {.preservesTupleTail.}: seq[XmlNode]
|
||||
|
||||
Xhtml* {.preservesTuple.} = object
|
||||
`data`* {.preservesLiteral: "html".}: bool
|
||||
`attrs`*: Table[string, string]
|
||||
`elements`* {.preservesTupleTail.}: seq[XmlNode]
|
||||
|
||||
ContentKind* {.pure.} = enum
|
||||
`Svg`, `Xhtml`
|
||||
`Content`* {.preservesOr.} = object
|
||||
case orKind*: ContentKind
|
||||
of ContentKind.`Svg`:
|
||||
`svg`*: Svg
|
||||
|
||||
of ContentKind.`Xhtml`:
|
||||
`xhtml`*: Xhtml
|
||||
|
||||
|
||||
proc `$`*[E](x: Svui[E]): string =
|
||||
`$`(toPreserve(x, E))
|
||||
|
||||
proc encode*[E](x: Svui[E]): seq[byte] =
|
||||
encode(toPreserve(x, E))
|
||||
|
||||
proc `$`*(x: XmlNode | XmlText | XmlElement | Svg | Xhtml | Content): string =
|
||||
`$`(toPreserve(x))
|
||||
|
||||
proc encode*(x: XmlNode | XmlText | XmlElement | Svg | Xhtml | Content): seq[
|
||||
byte] =
|
||||
encode(toPreserve(x))
|
||||
|
|
14
svui.prs
14
svui.prs
|
@ -1,3 +1,15 @@
|
|||
version 1.
|
||||
|
||||
Svui = <svui @attrs {symbol: any ...:...} @svg string>.
|
||||
XmlText = [ string ].
|
||||
|
||||
XmlElement = [@name symbol @attrs {string: string ...:...} @elements XmlNode ...].
|
||||
|
||||
XmlNode = XmlElement / XmlText .
|
||||
|
||||
Svg = [=svg @attrs {string: string ...:...} @elements XmlNode ...].
|
||||
|
||||
Xhtml = [=html @attrs {string: string ...:...} @elements XmlNode ...].
|
||||
|
||||
Content = Svg / Xhtml .
|
||||
|
||||
Svui = <svui @attrs {string: any ...:...} @data Content>.
|
||||
|
|
Loading…
Reference in New Issue