##
## SVG 1.1 Text Module
## file: svg-text.rng
##
## This is SVG, a language for describing two-dimensional graphics in XML.
## Copyright 2001, 2002 W3C (MIT, INRIA, Keio), All Rights Reserved.
##
## $Id: svg-text.rng,v 1.1 2003/07/15 07:11:10 dean Exp $
##
##
## Text
##
## text, tspan, tref, textPath, altGlyph, altGlyphDef, altGlyphItem,
## glyphRef
##
## This module declares markup to provide support for alternate glyph.
##
[ xml:lang = "en" ]
grammar {
include "svg-basic-text.rnc"
a:documentation [ "\x{a}" ~ " Datatypes\x{a}" ~ " " ]
BaselineShiftValue.datatype = xsd:string
FontSizeAdjustValue.datatype = xsd:string
GlyphOrientationHorizontalValue.datatype = xsd:string
GlyphOrientationVerticalValue.datatype = xsd:string
KerningValue.datatype = xsd:string
SpacingValue.datatype = xsd:string
TextDecorationValue.datatype = xsd:string
a:documentation [ "\x{a}" ~ " SVG.Text.attrib\x{a}" ~ " " ]
SVG.Text.extra.attrib = empty
SVG.Text.attrib &=
attribute writing-mode {
"lr-tb" | "rl-tb" | "tb-rl" | "lr" | "rl" | "tb" | "inherit"
}?,
SVG.Text.extra.attrib
a:documentation [ "\x{a}" ~ " SVG.TextContent.attrib\x{a}" ~ " " ]
SVG.TextContent.extra.attrib = empty
SVG.TextContent.attrib &=
attribute alignment-baseline {
"auto"
| "baseline"
| "before-edge"
| "text-before-edge"
| "middle"
| "central"
| "after-edge"
| "text-after-edge"
| "ideographic"
| "alphabetic"
| "hanging"
| "mathematical"
| "inherit"
}?,
attribute baseline-shift { BaselineShiftValue.datatype }?,
attribute direction { "ltr" | "rtl" | "inherit" }?,
attribute dominant-baseline {
"auto"
| "use-script"
| "no-change"
| "reset-size"
| "ideographic"
| "alphabetic"
| "hanging"
| "mathematical"
| "central"
| "middle"
| "text-after-edge"
| "text-before-edge"
| "inherit"
}?,
attribute glyph-orientation-horizontal {
GlyphOrientationHorizontalValue.datatype
}?,
attribute glyph-orientation-vertical {
GlyphOrientationVerticalValue.datatype
}?,
attribute kerning { KerningValue.datatype }?,
attribute letter-spacing { SpacingValue.datatype }?,
attribute text-anchor { "start" | "middle" | "end" | "inherit" }?,
attribute text-decoration { TextDecorationValue.datatype }?,
attribute unicode-bidi {
"normal" | "embed" | "bidi-override" | "inherit"
}?,
attribute word-spacing { SpacingValue.datatype }?,
SVG.TextContent.extra.attrib
SVG.Font.attrib &=
attribute font-size-adjust { FontSizeAdjustValue.datatype }?,
attribute font-stretch {
"normal"
| "wider"
| "narrower"
| "ultra-condensed"
| "extra-condensed"
| "condensed"
| "semi-condensed"
| "semi-expanded"
| "expanded"
| "extra-expanded"
| "ultra-expanded"
| "inherit"
}?,
attribute font-variant { "normal" | "small-caps" | "inherit" }?
##
## extend SVG.Text.class
##
SVG.Text.class |= altGlyphDef
##
## extend SVG.TextContent.class
##
SVG.TextContent.class |= tspan | tref | textPath
a:documentation [ "\x{a}" ~ " text: Text Element\x{a}" ~ " " ]
SVG.text.class |= SVG.TextContent.class
attlist.text &=
SVG.Text.attrib,
SVG.TextContent.attrib,
attribute dx { Lengths.datatype }?,
attribute dy { Lengths.datatype }?,
attribute textLength { Length.datatype }?,
attribute lengthAdjust { "spacing" | "spacingAndGlyphs" }?
a:documentation [
"\x{a}" ~
" tspan: Text Span Element\x{a}" ~
" "
]
SVG.tspan.content =
(text
| tspan
| tref
| altGlyph
| animate
| set
| animateColor
| SVG.Description.class
| SVG.Hyperlink.class)*
tspan = element tspan { attlist.tspan, SVG.tspan.content }
attlist.tspan &=
SVG.Core.attrib,
SVG.Conditional.attrib,
SVG.Style.attrib,
SVG.TextContent.attrib,
SVG.Font.attrib,
SVG.Paint.attrib,
SVG.Color.attrib,
SVG.Opacity.attrib,
SVG.Graphics.attrib,
SVG.Clip.attrib,
SVG.Mask.attrib,
SVG.Filter.attrib,
SVG.GraphicalEvents.attrib,
SVG.Cursor.attrib,
SVG.External.attrib,
attribute x { Coordinates.datatype }?,
attribute y { Coordinates.datatype }?,
attribute dx { Lengths.datatype }?,
attribute dy { Lengths.datatype }?,
attribute rotate { Numbers.datatype }?,
attribute textLength { Length.datatype }?,
attribute lengthAdjust { "spacing" | "spacingAndGlyphs" }?
a:documentation [
"\x{a}" ~
" tref: Text Reference Element\x{a}" ~
" "
]
SVG.tref.content =
(animate | set | animateColor | SVG.Description.class)*
tref = element tref { attlist.tref, SVG.tref.content }
attlist.tref &=
SVG.Core.attrib,
SVG.Conditional.attrib,
SVG.Style.attrib,
SVG.TextContent.attrib,
SVG.Font.attrib,
SVG.Paint.attrib,
SVG.Color.attrib,
SVG.Opacity.attrib,
SVG.Graphics.attrib,
SVG.Clip.attrib,
SVG.Mask.attrib,
SVG.Filter.attrib,
SVG.GraphicalEvents.attrib,
SVG.Cursor.attrib,
SVG.XLinkRequired.attrib,
SVG.External.attrib,
attribute x { Coordinates.datatype }?,
attribute y { Coordinates.datatype }?,
attribute dx { Lengths.datatype }?,
attribute dy { Lengths.datatype }?,
attribute rotate { Numbers.datatype }?,
attribute textLength { Length.datatype }?,
attribute lengthAdjust { "spacing" | "spacingAndGlyphs" }?
a:documentation [
"\x{a}" ~
" textPath: Text Path Element\x{a}" ~
" "
]
SVG.textPath.content =
(text
| tspan
| tref
| altGlyph
| animate
| set
| animateColor
| SVG.Description.class
| SVG.Hyperlink.class)*
textPath = element textPath { attlist.textPath, SVG.textPath.content }
attlist.textPath &=
SVG.Core.attrib,
SVG.Conditional.attrib,
SVG.Style.attrib,
SVG.TextContent.attrib,
SVG.Font.attrib,
SVG.Paint.attrib,
SVG.Color.attrib,
SVG.Opacity.attrib,
SVG.Graphics.attrib,
SVG.Clip.attrib,
SVG.Mask.attrib,
SVG.Filter.attrib,
SVG.GraphicalEvents.attrib,
SVG.Cursor.attrib,
SVG.XLinkRequired.attrib,
SVG.External.attrib,
attribute startOffset { Length.datatype }?,
attribute textLength { Length.datatype }?,
attribute lengthAdjust { "spacing" | "spacingAndGlyphs" }?,
attribute method { "align" | "stretch" }?,
attribute spacing { "auto" | "exact" }?
a:documentation [
"\x{a}" ~
" altGlyph: Alternate Glyph Element\x{a}" ~
" "
]
attlist.altGlyph &=
SVG.TextContent.attrib,
attribute x { Coordinates.datatype }?,
attribute y { Coordinates.datatype }?,
attribute dx { Lengths.datatype }?,
attribute dy { Lengths.datatype }?,
attribute rotate { Numbers.datatype }?
a:documentation [
"\x{a}" ~
" altGlyphDef: Alternate Glyph Definition Element\x{a}" ~
" "
]
SVG.altGlyphDef.content |= altGlyphItem+
a:documentation [
"\x{a}" ~
" altGlyphItem: Alternate Glyph Item Element\x{a}" ~
" "
]
SVG.altGlyphItem.content = glyphRef+
altGlyphItem =
element altGlyphItem {
attlist.altGlyphItem, SVG.altGlyphItem.content
}
attlist.altGlyphItem &= SVG.Core.attrib
a:documentation [
"\x{a}" ~
" glyphRef: Glyph Reference Element\x{a}" ~
" "
]
attlist.glyphRef &=
attribute x { Number.datatype }?,
attribute y { Number.datatype }?,
attribute dx { Number.datatype }?,
attribute dy { Number.datatype }?
}