svg2: Add the <hatch> and <hatchpath> elements.

details:   https://svgwg.org/hg/svg2/rev/6a335756fc10
branches:  
changeset: 496:6a335756fc10
user:      tbah <tavmjong@free.fr>
date:      Tue May 21 20:10:29 2013 +0200
description:
Add the <hatch> and <hatchpath> elements.

diffstat:

 master/changes.html                              |    4 +-
 master/definitions.xml                           |   37 +-
 master/images/pservers/hatch01.png               |    0 
 master/images/pservers/hatch01.svg               |   28 +
 master/images/pservers/hatch02.png               |    0 
 master/images/pservers/hatch02.svg               |   38 +
 master/images/pservers/hatch03.png               |    0 
 master/images/pservers/hatch03.svg               |   35 +
 master/images/pservers/hatch04.png               |    0 
 master/images/pservers/hatch04.svg               |   35 +
 master/images/pservers/hatch05.png               |    0 
 master/images/pservers/hatch05.svg               |   39 +
 master/images/pservers/hatch_attributes.svg      |   57 +
 master/images/pservers/hatch_path_attributes.svg |   60 ++
 master/pservers.html                             |  689 +++++++++++++++++++---
 15 files changed, 915 insertions(+), 107 deletions(-)

diffs (1689 lines):

diff --git a/master/changes.html b/master/changes.html
--- a/master/changes.html
+++ b/master/changes.html
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional+edit//EN" "xhtml1-transitional+edit.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:edit="http://xmlns.grorg.org/SVGT12NG/">
 <head>
   <title>Changes from SVG 1.1</title>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
   <link rel="stylesheet"           title="Default"               type="text/css" media="screen" href="style/default_svg.css"/>
   <link rel="alternate stylesheet" title="No issues/annotations" type="text/css" media="screen" href="style/default_no_issues.css"/>
   <!--
@@ -182,16 +182,18 @@ have been made.</p>
   <li>Added the <a>'solidColor'</a> element and its two properties <a>'solid-color'</a>
   and <a>'solid-opacity'</a>, ported over from SVG Tiny 1.2.</li>
 
   <li>Added an <a>'radialGradient/fr'</a> attribute to the <a>'radialGradient'</a> element,
   which allows specifying the radius of the focal circle.</li>
 
   <li>Added a section for mesh gradients, defining the <a>'meshGradient'</a>, <a>'meshRow'</a>
   and <a>'meshPatch'</a> elements.</li>
+
+  <li>Added a section for hatches, defining the <a>'hatch'</a> and <a>'hatchPath'</a> elements.</li>
 </ul>
 
 <h3 id="masking">Clipping, Masking and Compositing chapter</h3>
 <ul>
   <li>SVG now references CSS Masking [<a href="refs.html#ref-CSS-MASKING">CSS-MASKING</a>] specification.
     <ul>
       <li>Removed definition of clipping/masking properties and elements.</li>
       <li>Keep short introduction to clipping/masking and add reference to CSS Masking</li>
diff --git a/master/definitions.xml b/master/definitions.xml
--- a/master/definitions.xml
+++ b/master/definitions.xml
@@ -318,16 +318,45 @@
     <attribute name='dx' href='text.html#GlyphRefElementDXAttribute'/>
     <attribute name='dy' href='text.html#GlyphRefElementDYAttribute'/>
     <attribute name='glyphRef' href='text.html#GlyphRefElementGlyphRefAttribute'/>
     <attribute name='format' href='text.html#GlyphRefElementFormatAttribute'/>
     <attribute name='xlink:href' href='text.html#GlyphRefElementHrefAttribute'/>
   </element>
 
   <element
+      name='hatch'
+      href='pservers.html#HatchElement'
+      contentmodel='anyof'
+      elementcategories='animation, descriptive'
+      elements='hatchPath'
+      attributecategories='core, presentation, style, xlink'
+      interfaces='SVGHatchElement'>
+    <attribute name='x' href='pservers.html#HatchElementXAttribute' animatable='yes'/>
+    <attribute name='y' href='pservers.html#HatchElementYAttribute' animatable='yes'/>
+    <attribute name='pitch' href='pservers.html#HatchElementPitchAttribute' animatable='yes'/>
+    <attribute name='angle' href='pservers.html#HatchElementAngleAttribute' animatable='yes'/>
+    <attribute name='hatchUnits' href='pservers.html#HatchElementHatchUnitsAttribute' animatable='yes'/>
+    <attribute name='hatchContentUnits' href='pservers.html#HatchElementHatchContentUnitsAttribute' animatable='yes'/>
+    <attribute name='hatchTransform' href='pservers.html#HatchElementHatchTransformAttribute' animatable='yes'/>
+    <attribute name='xlink:href' href='pservers.html#HatchElementHrefAttribute' animatable='yes'/>
+  </element>
+
+  <element
+      name='hatchPath'
+      href='pservers.html#HatchPathElement'
+      contentmodel='anyof'
+      elementcategories='animation, descriptive'
+      attributecategories='core, presentation, style'
+      interfaces='SVGHatchPathElement'>
+    <attribute name='d' href='paths.html#DAttribute' animatable='yes'/>
+    <attribute name='offset' href='pservers.html#HatchPathElementOffsetAttribute' animatable='yes'/>
+  </element>
+
+  <element
     name='hkern'
     href='fonts.html#HKernElement'
     attributecategories='aria, navigation, core'
     attributes='u1, g1, u2, g2, k'
     interfaces='SVGHKernElement'/>
 
   <element
       name='image'
@@ -742,17 +771,17 @@
   <elementcategory name='animation' href='intro.html#TermAnimationElement' elements='animate, animateColor, animateMotion, animateTransform, discard, set'/>
   <elementcategory name='container' href='intro.html#TermContainerElement' elements='svg, g, defs, symbol, mask, pattern, marker, a, switch, glyph, missing-glyph'/>
   <elementcategory name='descriptive' href='intro.html#TermDescriptiveElement' elements='desc, title, metadata'/>
   <elementcategory name='gradient' href='intro.html#TermGradientElement' elements='linearGradient, radialGradient, meshGradient'/>
   <elementcategory name='graphics' href='intro.html#TermGraphicsElement' elements='path, text, rect, circle, ellipse, line, polyline, polygon, image, use, foreignObject'/>
   <elementcategory name='graphics referencing' href='intro.html#TermGraphicsReferencingElement' elements='use, image'/>
   <elementcategory name='light source' href='intro.html#TermLightSourceElement' elements='feDistantLight, fePointLight, feSpotLight'/>
   <elementcategory name='markable' href='intro.html#TermMarkableElement' elements='path, line, polyline, polygon'/>
-  <elementcategory name='paint server' href='intro.html#TermPaintServerElement' elements='solidColor, linearGradient, radialGradient, meshGradient, pattern'/>
+  <elementcategory name='paint server' href='intro.html#TermPaintServerElement' elements='solidColor, linearGradient, radialGradient, meshGradient, pattern, hatch'/>
   <elementcategory name='shape' href='intro.html#TermShapeElement' elements='circle, ellipse, line, path, polygon, polyline, rect'/>
   <elementcategory name='structural' href='intro.html#TermStructuralElement' elements='defs, g, svg, symbol, use'/>
   <elementcategory name='text content' href='intro.html#TermTextContentElement' elements='text, tspan, tref, textPath, altGlyph'/>
   <elementcategory name='text content child' href='intro.html#TermTextContentChildElement' elements='tspan, tref, textPath, altGlyph'/>
 
   <!-- ... attributes common to multiple elements ........................ -->
 
   <!-- Note: An <attribute> defined here applies only to the listed
@@ -786,18 +815,18 @@
   <attribute name='rotate' elements='tref, tspan' href='text.html#TSpanElementRotateAttribute' animatable='yes'/>
   <attribute name='textLength' elements='textPath, tref, tspan' href='text.html#TSpanElementTextLengthAttribute' animatable='yes'/>
   <attribute name='lengthAdjust' elements='text, textPath, tref, tspan' href='text.html#TextElementLengthAdjustAttribute' animatable='yes'/>
 
   <!-- attribute common to text content block elements -->
   <!-- <attribute name='width' elements='text' href='text.html#TextElementWidthAttribute' animatable='yes'/> -->
 
   <!-- xlink:show and xlink:actuate for all elements supporting the XLink attributes, except a -->
-  <attribute name='xlink:show' elements='animate, set, animateMotion, mpath, animateColor, animateTransform, color-profile, filter, feImage, font-face-uri, cursor, pattern, script, textPath, tref, use, image, altGlyph, glyphRef, linearGradient, radialGradient, meshGradient' href='linking.html#XLinkShowAttribute'/>
-  <attribute name='xlink:actuate' elements='animate, set, animateMotion, mpath, animateColor, animateTransform, color-profile, filter, feImage, font-face-uri, cursor, pattern, script, textPath, tref, use, image, altGlyph, glyphRef, linearGradient, radialGradient, meshGradient' href='linking.html#XLinkActuateAttribute'/>
+  <attribute name='xlink:show' elements='animate, set, animateMotion, mpath, animateColor, animateTransform, color-profile, filter, feImage, font-face-uri, cursor, pattern, hatch, script, textPath, tref, use, image, altGlyph, glyphRef, linearGradient, radialGradient, meshGradient' href='linking.html#XLinkShowAttribute'/>
+  <attribute name='xlink:actuate' elements='animate, set, animateMotion, mpath, animateColor, animateTransform, color-profile, filter, feImage, font-face-uri, cursor, pattern, hatch, script, textPath, tref, use, image, altGlyph, glyphRef, linearGradient, radialGradient, meshGradient' href='linking.html#XLinkActuateAttribute'/>
 
   <!-- attribute common to all animation elements -->
   <attribute name='xlink:href' elements='animate, animateColor, animateMotion, animateTransform, set' href='animate.html#HrefAttribute'/>
 
   <!-- misc:  Applies to all <element>s that include attribute name in 'attribute'. -->
   <attribute name='viewBox' href='coords.html#ViewBoxAttribute' animatable='yes'/>
   <attribute name='preserveAspectRatio' href='coords.html#PreserveAspectRatioAttribute' animatable='yes'/>
   <attribute name='zoomAndPan' href='interact.html#ZoomAndPanAttribute'/>
@@ -1135,16 +1164,18 @@
   <interface name='SVGColorProfileRule' href='color.html#InterfaceSVGColorProfileRule'/>
   <interface name='SVGLinearGradientElement' href='pservers.html#InterfaceSVGLinearGradientElement'/>
   <interface name='SVGRadialGradientElement' href='pservers.html#InterfaceSVGRadialGradientElement'/>
   <interface name='SVGMeshGradientElement' href='pservers.html#InterfaceSVGMeshGradientElement'/>
   <interface name='SVGMeshRowElement' href='pservers.html#InterfaceSVGMeshRowElement'/>
   <interface name='SVGMeshPatchElement' href='pservers.html#InterfaceSVGMeshPatchElement'/>
   <interface name='SVGStopElement' href='pservers.html#InterfaceSVGStopElement'/>
   <interface name='SVGPatternElement' href='pservers.html#InterfaceSVGPatternElement'/>
+  <interface name='SVGHatchElement' href='pservers.html#InterfaceSVGHatchElement'/>
+  <interface name='SVGHatchPathElement' href='pservers.html#InterfaceSVGHatchPathElement'/>
   <interface name='SVGCursorElement' href='interact.html#InterfaceSVGCursorElement'/>
   <interface name='SVGAElement' href='linking.html#InterfaceSVGAElement'/>
   <interface name='SVGViewElement' href='linking.html#InterfaceSVGViewElement'/>
   <interface name='SVGScriptElement' href='script.html#InterfaceSVGScriptElement'/>
   <interface name='SVGZoomEvent' href='script.html#InterfaceSVGZoomEvent'/>
   <interface name='SVGAnimateElement' href='animate.html#InterfaceSVGAnimateElement'/>
   <interface name='SVGSetElement' href='animate.html#InterfaceSVGSetElement'/>
   <interface name='SVGAnimateMotionElement' href='animate.html#InterfaceSVGAnimateMotionElement'/>
diff --git a/master/images/pservers/hatch01.png b/master/images/pservers/hatch01.png
new file mode 100644
index 0000000000000000000000000000000000000000..9763d07c2ea9e9def8eea9604c713b5882e6dc3d
GIT binary patch
literal 8216
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

diff --git a/master/images/pservers/hatch01.svg b/master/images/pservers/hatch01.svg
new file mode 100644
--- /dev/null
+++ b/master/images/pservers/hatch01.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   width="200"
+   height="200">
+  <defs>
+    <pattern
+       id="pattern"
+       patternUnits="userSpaceOnUse"
+       patternTransform="matrix(0.70710678,-0.70710678,0.70710678,0.70710678,200,200)" 
+       width="5"
+       height="250">
+      <path
+	 d="M 0,0 0,250"
+	 stroke="#a080ff"
+	 stroke-width="2"/>
+    </pattern>
+  </defs>
+  <rect
+     fill="url(#pattern)"
+     stroke="black"
+     stroke-width="2"
+     x="25"
+     y="25"
+     width="150"
+     height="150" />
+</svg>
diff --git a/master/images/pservers/hatch02.png b/master/images/pservers/hatch02.png
new file mode 100644
index 0000000000000000000000000000000000000000..325a6cf3fc0010baa68ebcf275588f10c1bf1967
GIT binary patch
literal 2359
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
G9R3R)=&y+Y

diff --git a/master/images/pservers/hatch02.svg b/master/images/pservers/hatch02.svg
new file mode 100644
--- /dev/null
+++ b/master/images/pservers/hatch02.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   width="200"
+   height="200">
+  <defs>
+    <pattern
+       id="pattern"
+       patternUnits="userSpaceOnUse"
+       width="6"
+       height="20">
+      <path
+	 d="M -6,0 C -6,4 2,6 2,10 2,14 -6,16 -6,20"
+	 fill="none"
+	 stroke="#a080ff"
+	 stroke-width="1"/>
+      <path
+	 d="M 0,0 C 0,4 8,6 8,10 8,14 0,16 0,20"
+	 fill="none"
+	 stroke="#a080ff"
+	 stroke-width="1"/>
+      <path
+	 d="M 6,0 C 6,4 14,6 14,10 14,14 6,16 6,20"
+	 fill="none"
+	 stroke="#a080ff"
+	 stroke-width="1"/>
+    </pattern>
+  </defs>
+  <rect
+     fill="url(#pattern)"
+     stroke="black"
+     stroke-width="2"
+     x="25"
+     y="25"
+     width="150"
+     height="150" />
+</svg>
diff --git a/master/images/pservers/hatch03.png b/master/images/pservers/hatch03.png
new file mode 100644
index 0000000000000000000000000000000000000000..eff83f21de0cb43170beb5cc10b3591f17930632
GIT binary patch
literal 3555
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

diff --git a/master/images/pservers/hatch03.svg b/master/images/pservers/hatch03.svg
new file mode 100644
--- /dev/null
+++ b/master/images/pservers/hatch03.svg
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   width="200"
+   height="200">
+  <defs>
+    <pattern
+       id="pattern"
+       patternUnits="userSpaceOnUse"
+       width="20"
+       height="50">
+      <g transform="translate(0,-1)">
+      <path
+	 d="M  0,-50 10,-50  0,0 10,50  0,50 10,100"
+	 fill="none"
+	 stroke="#a080ff"
+	 stroke-width="2"/>
+      <path
+	 d="M 20,-50 30,-50 20,0 30,50 20,50 30,100"
+	 fill="none"
+	 stroke="#a080ff"
+	 stroke-width="2"/>
+      </g>
+    </pattern>
+  </defs>
+  <rect
+     fill="url(#pattern)"
+     stroke="black"
+     stroke-width="2"
+     x="25"
+     y="25"
+     width="150"
+     height="150" />
+</svg>
diff --git a/master/images/pservers/hatch04.png b/master/images/pservers/hatch04.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c78c321024c983737e4c372c93476eef0dcb4f3
GIT binary patch
literal 3476
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
IQ_r}60U<cZp8x;=

diff --git a/master/images/pservers/hatch04.svg b/master/images/pservers/hatch04.svg
new file mode 100644
--- /dev/null
+++ b/master/images/pservers/hatch04.svg
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   width="200"
+   height="200">
+  <defs>
+    <pattern
+       id="pattern"
+       patternUnits="userSpaceOnUse"
+       width="20"
+       height="50">
+      <g transform="translate(0,-1)">
+      <path
+	 d="M  0,0 10,50 M  0,50 10,100"
+	 fill="none"
+	 stroke="#a080ff"
+	 stroke-width="2"/>
+      <path
+	 d="M 20,0 30,50 M 20,50 30,100"
+	 fill="none"
+	 stroke="#a080ff"
+	 stroke-width="2"/>
+      </g>
+    </pattern>
+  </defs>
+  <rect
+     fill="url(#pattern)"
+     stroke="black"
+     stroke-width="2"
+     x="25"
+     y="25"
+     width="150"
+     height="150" />
+</svg>
diff --git a/master/images/pservers/hatch05.png b/master/images/pservers/hatch05.png
new file mode 100644
index 0000000000000000000000000000000000000000..0661d5e058eef5f3a95653e91f6be11b65556fea
GIT binary patch
literal 1068
zc%17D@N?(olHy`uVBq!ia0vp^CqS5k4M?tyST_$yu@pObhHwBu4M$1`kk47*5m^jW
ze;tGwoit`w00kvWTq8<?^V3So6N^$A%FE03GV`*FlM@S4_413-XTP(NVqjoi>FMGa
zQZeW4?TuZrsUmF;OZ%Fc4cC5cxURspb4EmTXHs&xo`b-f9F}6sq}=pGuk52D&f9v|
z%Abn-y!*S=`QX#mnx8iQf3QZ20R#N_KUeHePwv6<56Wy`-hcQx_}If2@525rkk`9?
ze143d{lDA)|NUOS?fd!fU%f-;{$KO!!R6C0w}(%EdwA`u+iPEytor5iep$75oZ3DG
z0SOKkHl~A{>YM*e|NhdxveNQzNT|NlKZ`2!3$Gt=Gc`6kY<Sc8_0{ROd#A_G|F>h=
z$GfT3Wp!)Xf3I3){x!<~{Yu^6O*VGx+q0#gAFrzTzRs@xw_okT<=YP}oEPyubZc(u
zs^IhM#b2C#R~qr{$gbae>-JiGS{ApzHtzn5muolWD9FA)xnJ7e{7>PRyam@E2Kehl
zoOMu$_<4JeeC+S~%j<u>4cvSCb?FDz#sdxt1_B&BEKJNOOy6DiZp5+2gSqA}tCFi_
z?<{%U`?l2Lig5OO^9xnKUzHY2UT41jIz(l=v+c$NQ#5_dn1(|PfmjRDzwP=#xc+Z-
z%xkx=k7EZ~S6s~tw~jl^7**e>a|hnJVROv#xa-)qzxMpkSDnO&nU~(&i9dJw;!V>J
Q3Tr`JPgg&ebxsLQ0Dg1N4FCWD

diff --git a/master/images/pservers/hatch05.svg b/master/images/pservers/hatch05.svg
new file mode 100644
--- /dev/null
+++ b/master/images/pservers/hatch05.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   width="200"
+   height="200">
+  <defs>
+    <pattern
+       id="pattern"
+       patternUnits="userSpaceOnUse"
+       width="20"
+       height="20">
+      <path
+	 d="M  0,0 0,50"
+	 fill="none"
+	 stroke="#a080ff"
+	 stroke-width="2"/>
+      <path
+	 d="M  20,0 20,50"
+	 fill="none"
+	 stroke="#a080ff"
+	 stroke-width="2"/>
+      <path
+	 d="M  5,0 5,50"
+	 fill="none"
+	 stroke="#a080ff"
+	 stroke-width="2"
+	 stroke-dasharray="10 4 2 4"/>
+    </pattern>
+  </defs>
+  <rect
+     fill="url(#pattern)"
+     stroke="black"
+     stroke-width="2"
+     x="25"
+     y="25"
+     width="150"
+     height="150" />
+</svg>
diff --git a/master/images/pservers/hatch_attributes.svg b/master/images/pservers/hatch_attributes.svg
new file mode 100644
--- /dev/null
+++ b/master/images/pservers/hatch_attributes.svg
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns="http://www.w3.org/2000/svg"
+   width="450"
+   height="300">
+  <defs>
+    <marker
+       id="Arrow2Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       style="overflow:visible">
+      <path
+         d="M 8.7,4 L -2.2,0 L 8.7,-4 C 7,-1.6 7,1.6 8.7,4 z "
+         transform="scale(0.6)"/>
+    </marker>
+    <marker
+       id="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       style="overflow:visible;">
+      <path
+         d="M 8.7,4 L -2.2,0 L 8.7,-4 C 7,-1.6 7,1.6 8.7,4 z "
+         transform="scale(0.6) rotate(180)"/>
+    </marker>
+  </defs>
+  <path
+      style="fill:none;stroke:black"
+      d="M 125,50 325,250"/>
+  <g style="fill:none;stroke:black;stroke-width:2;stroke-dasharray:3, 1">
+    <path d="M 250,275 400,125" style="opacity:0.5"/>
+    <path d="M 175,250 350,75"/>
+    <path d="M 100,225 275,50"/>
+    <path d="M  50,175 200,25" style="opacity:0.5"/>
+  </g>
+  <path
+      style="fill:none;stroke:black;stroke-width:2;marker-end:url(#Arrow2Mend)"
+      d="m 200,125 50,50"/>
+  <circle cx="200" cy="125" r="3"/>
+  <path
+      style="fill:none;stroke:black"
+      d="m 200,125 35,0"/>
+  <path
+      style="fill:none;stroke:black;stroke-width:1.5;marker-start:url(#Arrow2Mstart)"
+      d="M 222.3,145 A 30,30 0 0 0 230,125" />
+  <g style="font-size:16px;text-anchor:middle;font-family:DejaVu Sans">
+    <text x="170" y="130">(x,y)</text>
+    <text x="253" y="143">Angle</text>
+    <text x="265" y="-35"
+	  transform="matrix(0.70710678,0.70710678,-0.70710678,0.70710678,0,0)">Pitch</text>
+    <text>
+      <tspan x="365" y="245">Reference</tspan>
+      <tspan x="365" y="262.5">line</tspan>
+    </text>
+  </g>
+</svg>
diff --git a/master/images/pservers/hatch_path_attributes.svg b/master/images/pservers/hatch_path_attributes.svg
new file mode 100644
--- /dev/null
+++ b/master/images/pservers/hatch_path_attributes.svg
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns="http://www.w3.org/2000/svg"
+   width="450"
+   height="300">
+  <defs>
+    <marker
+       id="Arrow2Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       style="overflow:visible">
+      <path
+         d="M 8.7,4 L -2.2,0 L 8.7,-4 C 7,-1.6 7,1.6 8.7,4 z "
+         transform="scale(0.6)"/>
+    </marker>
+    <marker
+       id="Arrow2Mend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       style="overflow:visible;">
+      <path
+         d="M 8.7,4 L -2.2,0 L 8.7,-4 C 7,-1.6 7,1.6 8.7,4 z "
+         transform="scale(0.6) rotate(180)"/>
+    </marker>
+  </defs>
+  <path
+      style="fill:none;stroke:black"
+      d="m 85,100 330,0"/>
+  <g style="fill:none;stroke:black;stroke-width:1;stroke-dasharray:3, 1">
+    <path d="M 100,250 100,50" style="opacity:0.5"/>
+    <path d="M 200,250 200,50"/>
+    <path d="M 300,250 300,50"/>
+    <path d="M 400,250 400,50" style="opacity:0.5"/>
+  </g>
+  <path
+      style="fill:none;stroke:black;stroke-width:2;marker-end:url(#Arrow2Mend)"
+      d="m 200,100 75,0"/>
+  <path
+      style="fill:none;stroke:black;stroke-width:2;marker-end:url(#Arrow2Mend)"
+      d="m 200,100 0,75"/>
+  <circle cx="200" cy="100" r="3"/>
+  <path
+      style="fill:none;stroke:black;stroke-width:1.5;marker-end:url(#Arrow2Mend)"
+      d="m 224,240 -21,0"/>
+  <path
+      style="fill:none;stroke:black;stroke-width:1.5;marker-end:url(#Arrow2Mend)"
+      d="m 276,240 21,0"/>
+  <g style="font-size:16px;text-anchor:middle;font-family:DejaVu Sans">
+    <text x="175" y="92">(0,0)</text>
+    <text x="255" y="92">x</text>
+    <text x="190" y="155">y</text>
+    <text x="250" y="245">Pitch</text>
+    <text>
+      <tspan x="53" y="95">Reference</tspan>
+      <tspan x="53" y="112.5">line</tspan>
+    </text>
+  </g>
+</svg>
diff --git a/master/pservers.html b/master/pservers.html
--- a/master/pservers.html
+++ b/master/pservers.html
@@ -1,81 +1,61 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional+edit//EN" "xhtml1-transitional+edit.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:edit="http://xmlns.grorg.org/SVGT12NG/">
 <head>
-  <title>Paint Servers: Solid Colors, Gradients, and Patterns</title>
+  <title>Paint Servers: Solid Colors, Gradients, Patterns, and Hatches</title>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
   <link rel="stylesheet"           title="Default"               type="text/css" media="screen" href="style/default_svg.css"/>
   <link rel="alternate stylesheet" title="No issues/annotations" type="text/css" media="screen" href="style/default_no_issues.css"/>
   <!--
   <link rel="alternate stylesheet" title="CSS3 Unmodified"       type="text/css" media="screen" href="style/default.css"/>
   <link rel="alternate stylesheet" title="SVG 1.1"               type="text/css" media="screen" href="style/svg-style.css"/>
   -->
   <!-- W3C style sheet will be added here during processing. -->
 </head>
 <body>
 
-<h1>Paint Servers: Solid Colors, Gradients, and Patterns</h1>
+<h1>Paint Servers: Solid Colors, Gradients, Patterns, and Hatches</h1>
 
 <h2 id="Introduction">Introduction</h2>
 
 <p>
   This section covers <strong>Paint Servers</strong>, a method which
   allows the <a>'fill'</a> or <a>'stroke'</a> of an object to be defined
   by a resource found elsewhere. It allows resources to be reused
   throughout a document. See the section
   <a href="painting.html">Painting: Filling and Stroking</a> for a
   general discussion of filling and stroking objects.
 </p>
 
 <!-- Fill and stroke are already defined in painting.html. No need to
 redefine them here. -->
 
 <p>
-  SVG defines three types of paint servers:
+  SVG defines several types of paint servers:
 </p>
 
 <ul>
   <li><a href="#SolidColors">Solid colors</a>,</li>
   <li><a href="#Gradients">Gradients</a>,</li>
   <li><a href="#Patterns">Patterns</a>.</li>
+  <li><a href="#Hatches">Hatches</a>.</li>
 </ul>
 
 <p class="issue">
   SVG1.1 refers to
   "<a href="http://www.w3.org/TR/SVG/pservers.html#Introduction">built-in</a>"
   paint servers. Is there any other kind?
 </p>
 
 <div class="annotation svg2-requirement">
   <table>
     <tr>
       <th>SVG 2 Requirement:</th>
-      <td>Support hatching.</td>
-    </tr>
-    <tr>
-      <th>Resolution:</th>
-      <td><a href="http://www.w3.org/2011/10/28-svg-irc#T18-28-09">SVG 2 should support hatching without the artifacts that patterns currently impose.</a></td>
-    </tr>
-    <tr>
-      <th>Purpose:</th>
-      <td>To allow the kinds of patterns required for mapping, engraving, etc. where continuous lines are required.</td>
-    </tr>
-    <tr>
-      <th>Owner:</th>
-      <td>Tav (no action)</td>
-    </tr>
-  </table>
-</div>
-
-<div class="annotation svg2-requirement">
-  <table>
-    <tr>
-      <th>SVG 2 Requirement:</th>
       <td>Arbitrary fills for shapes.</td>
     </tr>
     <tr>
       <th>Resolution:</th>
       <td><a href="http://www.w3.org/2011/10/28-svg-irc#T18-32-32">SVG 2 shall support filling and stroking from arbitrary elements.</a></td>
     </tr>
     <tr>
       <th>Purpose:</th>
@@ -83,40 +63,52 @@ redefine them here. -->
     </tr>
     <tr>
       <th>Owner:</th>
       <td>Alex? (no action)</td>
     </tr>
   </table>
 </div>
 
-<p class="issue">
-  It seems that all paint servers (except perhaps, mesh gradients,
-  when rendered directly) inherit from their ancestors and do not
-  inherit from the element referencing the paint server.  Rather than
-  repeating this for each type of paint server, can the text be moved
-  into the introduction section for paint servers?
-</p>
-
 <div class="figure">
   <img
      alt="Image of three types of paint servers."
      src="images/pservers/pservers_example.png"/>
   <p class="caption">Three types of paint servers. From left to right:
     A solid color ("MyLightPurple").
     A linear gradient.
     A pattern.
   </p>
 </div>
 
 <p>
   Paint servers are used by including an <a>IRI reference</a> in
   a <a>'fill'</a> or <a>'stroke'</a> property (i.e. fill="#MyLightPurple").
 </p>
 
+<p>
+  <a href="styling.html#SVGStylingProperties">Properties</a> inherit
+  into a paintserver element from its ancestors;
+  properties do <em>not</em> inherit from the element referencing
+  the paintserver element.
+</p>
+
+<p>
+  Paintserver elements are never rendered directly (with the exception
+  of <a>'meshGradient'</a> which may be rendered in a non-paintserver
+  mode); their only usage is as something that can be referenced using
+  the <a>'fill'</a> and <a>'stroke'</a> properties. The
+  <a>'display'</a> property does not apply to a paintserver element;
+  thus, paintserver elements are not directly rendered even if
+  the <a>'display'</a> property is set to a value other
+  than <span class="prop-value">none</span>, and paintserver elements
+  are available for referencing even when the <a>'display'</a>
+  property on the paintserver element or any of its ancestors is set
+  to <span class="prop-value">none</span>.
+</p>
 
 <h2 id="SolidColors">Solid colors</h2>
 
 <p class="note">Solid Colors are new in SVG 2 (ported from SVG 1.2 Tiny).</p>
 
 <div class="annotation svg2-requirement">
   <table>
     <tr>
@@ -141,32 +133,16 @@ redefine them here. -->
 <p>The 'solidColor' element is a paint server that provides a single
 color with opacity. It can be referenced any place a single color
 can be used. The 'solidColor' element allows a palette to be defined
 and used consistently throughout a document. It is also useful as
 away of animating a palette colors.  (See the chapter
 <a href="color.html">Color</a> for a more general discussion of color
 in SVG.)</p>
 
-<p><a href="styling.html#SVGStylingProperties">Properties</a> inherit
-into the <a>'solidColor'</a> element from its ancestors;
-properties do <em>not</em> inherit from the element referencing
-the <a>'solidColor'</a> element.</p>
-
-<p><a>'solidColor'</a> elements are never rendered directly;
-their only usage is as something that can be referenced using the
-<a>'fill'</a> and <a>'stroke'</a> properties. The <a>'display'</a>
-property does not apply to the <a>'solidColor'</a> element; thus,
-<a>'solidColor'</a> elements are not directly rendered even if
-the <a>'display'</a> property is set to a value other than
-<span class="prop-value">none</span>, and <a>'solidColor'</a>
-elements are available for referencing even when the <a>'display'</a>
-property on the <a>'solidColor'</a> element or any of its ancestors
-is set to <span class="prop-value">none</span>.</p>
-
 <edit:with element='solidColor'>
 
 <p id="SolidColorElement">Solid colors are defined by a <a>'solidColor'</a>
 element.</p>
 
 <edit:elementsummary name='solidColor'/>
 
 <h3 id="SolidColorProperties">Properties</h3>
@@ -572,32 +548,16 @@ in the stops. This is discussed in detai
 
 <h4 id="LinearGradientNotes">Notes on linear gradients</h4>
 
 <p>If <a>'x1'</a> = <a>'x2'</a> and <a>'y1'</a> =
 <a>'y2'</a>, then the area to be painted will be painted as a
 single color using the color and opacity of the last
 <a href="pservers.html#GradientStops">gradient stop</a>.</p>
 
-<p><a href="styling.html#SVGStylingProperties">Properties</a> inherit
-into the <a>'linearGradient'</a> element from its ancestors;
-properties do <em>not</em> inherit from the element referencing
-the <a>'linearGradient'</a> element.</p>
-
-<p><a>'linearGradient'</a> elements are never rendered directly;
-their only usage is as something that can be referenced using the
-<a>'fill'</a> and <a>'stroke'</a> properties. The <a>'display'</a>
-property does not apply to the <a>'linearGradient'</a> element; thus,
-<a>'linearGradient'</a> elements are not directly rendered even if
-the <a>'display'</a> property is set to a value other than
-<span class="prop-value">none</span>, and <a>'linearGradient'</a>
-elements are available for referencing even when the <a>'display'</a>
-property on the <a>'linearGradient'</a> element or any of its ancestors
-is set to <span class="prop-value">none</span>.</p>
-
 <p id="ExampleLinGrad01"><span class="example-ref">Example lingrad01</span>
 shows how to fill a rectangle by referencing a linear gradient paint server.</p>
 
 <edit:example href='images/pservers/lingrad01.svg' name='lingrad01'
   description='Fill a rectangle by referencing a linear gradient paint server'
   image='yes' link='yes'/>
 
 </edit:with>
@@ -1051,32 +1011,16 @@ in the right-hand side of the above figu
 Canvas where the area would be transparent black. The difference is to
 maintain compatibility with SVG 1.1.</p>
 
 <p class="annotation">The color space for the weighted average is the
 same as in which the gradient is interpolated. See
 <a href="http://www.w3.org/2012/09/19-svg-minutes.html#item01">Rigi
 Kaltbad working group meeting</a>.</p>
 
-<p><a href="styling.html#SVGStylingProperties">Properties</a>
-inherit into the <a>'radialGradient'</a> element from its ancestors;
-properties do <em>not</em> inherit from the element referencing the
-<a>'radialGradient'</a> element.</p>
-
-<p><a>'radialGradient'</a> elements are never rendered directly;
-their only usage is as something that can be referenced using the
-<a>'fill'</a> and <a>'stroke'</a> properties. The <a>'display'</a>
-property does not apply to the <a>'radialGradient'</a> element; thus,
-<a>'radialGradient'</a> elements are not directly rendered even if
-the <a>'display'</a> property is set to a value other than
-<span class="prop-value">none</span>, and <a>'radialGradient'</a> elements
-are available for referencing even when the <a>'display'</a> property on
-the <a>'radialGradient'</a> element or any of its ancestors is set to
-<span class="prop-value">none</span>.</p>
-
 <p id="ExampleRadGrad01"><span class="example-ref">Example radgrad01</span>
 shows how to fill a rectangle by referencing a radial gradient paint
 server.</p>
 
 <edit:example href='images/pservers/radgrad01.svg' name='radgrad01'
   description='Fill a rectangle by referencing a radial gradient paint server'
   image='yes' link='yes'/>
 
@@ -1118,24 +1062,32 @@ the coordinates inside the unit square):
 S = S<sub>C</sub> + S<sub>D</sub> &#x2212; S<sub>B</sub>, where
 S<sub>C</sub>(u,v) = (1&#x2212;v)×C<sub>1</sub>(u) + v×C<sub>2</sub>(u),
 S<sub>D</sub>(u,v) = (1&#x2212;u)×D<sub>1</sub>(v) + u×D<sub>2</sub>(v), and
 S<sub>B</sub>(u,v) = (1&#x2212;v)×[(1-u)×C<sub>1</sub>(0) + u×C<sub>1</sub>(1)]
              +  v×[(1&#x2212;u)×C<sub>2</sub>(0) + u×C<sub>2</sub>(1)].
 </pre>
 </div>
 
-<p class="issue">MathML gets stripped out by build script.</p>
-
-<pre><![CDATA[
-<math xmlns="http://www.w3.org/1998/Math/MathML">
-  <mrow>
-    <msup><mi>S</mi></msup><mo>=</mo><mi>S</mi><msub>C</msub><mo>+</mo><mi>S</mi><msub>D</msub>
-  </mrow>
-</math>]]></pre>
+<p class="issue">Finish converting to MATHML.</p>
+
+<div role="math" aria-describedby="math-meshpatch-equation">
+  <math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
+    <mrow>
+      <mi>S</mi>
+      <mo>=</mo>
+      <msub><mi>S</mi><mi>C</mi></msub>
+      <mo>+</mo>
+      <msub><mi>S</mi><mi>D</mi></msub>
+      <mo>-</mo>
+      <msub><mi>S</mi><mi>B</mi></msub>
+    </mrow>
+  </math>
+  <pre id="math-meshpatch-equation">S = S_C + S_D - S_B_</pre>
+</div>
 
 <p class="issue">Come up with better explanation of the mapping with diagram.
 The subtraction term in the above formula ensures that the boundary conditions
 are met.</p>
 
 <div class="note">
   <p>One method of rendering a patch is to "divide and conquer."  Check
   if the four corner colors of the patch are the same within a
@@ -1770,31 +1722,16 @@ attribute on the <a>'pattern'</a> elemen
 <p>the rectangle has its top/left located 5 units to the right and 5
 units down from the origin of the pattern tile.</p>
 
 <p>The <a>'viewBox'</a> attribute introduces a supplemental transformation
 which is applied on top of any transformations necessary to create a new
 pattern coordinate system due to attributes <a>'x'</a>, <a>'y'</a>,
 <a>'width'</a>, <a>'height'</a> and <a>'patternUnits'</a>.</p>
 
-<p><a href="styling.html#SVGStylingProperties">Properties</a> inherit into the
-<a>'pattern'</a> element from its ancestors; properties do <em>not</em>
-inherit from the element referencing the <a>'pattern'</a> element.</p>
-
-<p><a>'pattern'</a> elements are never rendered directly; their only
-usage is as something that can be referenced using the <a>'fill'</a>
-and <a>'stroke'</a> properties. The <a>'display'</a> property does not
-apply to the <a>'pattern'</a> element; thus, <a>'pattern'</a> elements
-are not directly rendered even if the <a>'display'</a> property is set
-to a value other than
-<span class="prop-value">none</span>, and <a>'pattern'</a> elements are
-available for referencing even when the <a>'display'</a> property on the
-<a>'pattern'</a> element or any of its ancestors is set to
-<span class="prop-value">none</span>.</p>
-
 <p><a href="script.html#EventAttributes">Event attributes</a> and
 <a href="svgdom.html#EventListeners">event listeners</a> attached
 to the contents of a <a>'pattern'</a> element are not processed;
 only the rendering aspects of <a>'pattern'</a> elements are
 processed.</p>
 
 <p id="ExamplePattern01"><span class="example-ref">Example pattern01</span>
 shows how to fill a rectangle by referencing a pattern paint
@@ -1805,16 +1742,542 @@ the <a>'overflow'</a> property for <a>'p
 <span class="prop-value">hidden</span>, which causes the pattern to be clipped
 to the bounds of the pattern tile.</p>
 
 <edit:example href='images/pservers/pattern01.svg' name='pattern01'
   description='fill a rectangle by referencing a pattern paint server' image='yes' link='yes'/>
 
 </edit:with>
 
+<h2 id="Hatches">Hatches</h2>
+
+<edit:with element='hatch'>
+
+<p class="note">Hatches are new in SVG 2. They were added to allow the
+kinds of patterns required for mapping, engraving, etc. where continuous
+lines are needed.</p>
+
+<div class="annotation svg2-requirement">
+  <table>
+    <tr>
+      <th>SVG 2 Requirement:</th>
+      <td>Support hatches.</td>
+    </tr>
+    <tr>
+      <th>Resolution:</th>
+      <td><a href="http://www.w3.org/2011/10/28-svg-irc#T18-28-09">SVG 2 should support hatchings without the artifacts that patterns currently impose.</a></td>
+    </tr>
+    <tr>
+      <th>Purpose:</th>
+      <td>To allow the kinds of patterns required for mapping, engraving, etc. where continuous lines are required.</td>
+    </tr>
+    <tr>
+      <th>Owner:</th>
+      <td>Tav (no action)</td>
+    </tr>
+  </table>
+</div>
+
+<p id="HatchElement">A hatch is used to <a>'fill'</a> or <a>'stroke'</a>
+an object using one or more pre-defined paths that are repeated
+at fixed intervals in a specified direction to cover the
+areas to be painted. Hatches are defined using a <a>'hatch'</a>
+element and then referenced by properties <a>'fill'</a> and
+<a>'stroke'</a> on a given <a>graphics element</a> to indicate that the
+given element shall be filled or stroked with the hatch.
+Paths are defined by <a>'hatchPath'</a> elements.</p>
+
+<p>Attributes <a>'x'</a>, <a>'y'</a>, <a>'pitch'</a>, <a>'angle'</a>,
+and <a>'hatchUnits'</a> define an infinitely long reference strip
+on the infinite canvas. The strip has one edge at
+(<var>x</var>,&nbsp;<var>y</var>) and its other edge at a distance
+of <var>pitch</var> in the direction defined by <var>angle</var>.
+This one-dimension tiling theoretically extends a series of such
+strips in the direction of 'angle' to infinity (positive and
+negative), with strips starting at
+(<var>x</var>&nbsp;+&nbsp;m*<var>pitch</var>*cos(<var>angle</var>),&nbsp;<var>y</var>&nbsp;+&nbsp;m*<var>pitch</var>*sin(<var>angle</var>)
+for each possible integer value of <em>m</em>.</p>
+
+<div class="figure">
+  <img
+     alt="A diagram showing the layout of a series of strips."
+     src="images/pservers/hatch_attributes.svg"/>
+  <p class="caption">Three adjacent strips separated by dashed lines
+    showing their relationship to each other for a
+    given <var>pitch</var> and <var>angle</var>. The reference line
+    determines the origin of <a>'hatchPath'</a>s.
+  </p>
+</div>
+
+<p class="issue">Check that angle defined in same sense as other
+  angles is SVG (clockwise/counter-clockwise, etc.).</p>
+
+<edit:elementsummary name='hatch'/>
+
+<p class="issue">Review content model.</p>
+
+<h3 id="HatchElementAttributes">Attributes</h3>
+
+  <dl class="attrdef-list-svg2">
+
+    <dt id="HatchElementHatchUnitsAttribute"><span class="adef">hatchUnits</span></dt>
+    <dd>
+
+      <p>
+	Defines the coordinate system for attributes
+	<a>'x'</a>, <a>'y'</a>, <a>'pitch'</a> and <a>'angle'</a>.
+      </p>
+
+      <dl class="attrdef-svg2">
+
+	<dt>Value</dt>                <dd>userSpaceOnUse | objectBoundingBox</dd>
+	<dt><a>Lacuna value</a></dt>  <dd>objectBoundingBox</dd>
+	<dt><a>Animatable</a></dt>    <dd>yes</dd>
+
+      </dl>
+
+      <dl class="attrdef-values">
+
+	<dt>userSpaceOnUse</dt>
+        <dd>
+	  <p>
+            If <span class="attr-value">hatchUnits="userSpaceOnUse"</span>,
+
+            <a>'x'</a>, <a>'y'</a>, <a>'pitch'</a>, and <a>'angle'</a>
+
+            represent values in the coordinate system that results
+            from taking the current user coordinate system in place at
+            the time when the <a>'hatch'</a> element is referenced
+            (i.e., the user coordinate system for the element
+            referencing the <a>'hatch'</a> element via a
+            <a>'fill'</a> or <a>'stroke'</a> property) and then
+            applying the transform specified by attribute
+            <a>'hatchTransform'</a>. Percentages
+            represent values relative to the current viewport.
+	  </p>
+	</dd>
+
+	<dt>objectBoundingBox</dt>
+	<dd>
+	  <p>
+            If <span class="attr-value">hatchUnits="objectBoundingBox"</span>,
+            the user coordinate system for attributes
+
+            <a>'x'</a>, <a>'y'</a>, <a>'pitch'</a>, and <a>'angle'</a>
+
+            is established using the bounding box of the element to
+            which the hatch is applied
+            (see <a href="coords.html#ObjectBoundingBox">Object
+            bounding box units</a>) and then applying the transform
+            specified by attribute <a>'hatchTransform'</a>.
+            Percentages represent values relative to the bounding box
+            for the object.
+	  </p>
+	</dd>
+
+      </dl><!-- Attribute values -->
+
+    </dd>
+
+    <dt id="HatchElementHatchContentUnitsAttribute">
+      <span class="adef">hatchContentUnits</span>
+    </dt>
+    <dd>
+
+      <p>
+	Defines the coordinate system for the contents of the
+	<a>'hatch'</a>.
+      </p>
+
+      <dl class="attrdef-svg2">
+
+	<dt>Value</dt>                <dd>userSpaceOnUse | objectBoundingBox</dd>
+	<dt><a>Lacuna value</a></dt>  <dd>userSpaceOnUse</dd>
+	<dt><a>Animatable</a></dt>    <dd>yes</dd>
+
+      </dl>
+
+      <dl class="attrdef-values">
+
+	<dt>userSpaceOnUse</dt>
+        <dd>
+	  <p>
+	    If <span class="attr-value">hatchContentUnits="userSpaceOnUse"</span>,
+	    the user coordinate system for the contents of the <a>'hatch'</a>
+	    element is the coordinate system that results from taking
+	    the current user coordinate system in place at the time
+	    when the <a>'hatch'</a> element is referenced (i.e., the
+	    user coordinate system for the element referencing the
+	    <a>'hatch'</a> element via a <a>'fill'</a> or <a>'stroke'</a>
+	    property) and then applying the transform specified by attribute
+	    <a>'hatchTransform'</a>.
+	  </p>
+	</dd>
+
+	<dt>objectBoundingBox</dt>
+	<dd>
+	  <p>
+            If <span class="attr-value">hatchContentUnits="objectBoundingBox"</span>,
+            the user coordinate system for the contents of
+            the <a>'hatch'</a> element is established using the
+            bounding box of the element to which the hatch is
+            applied
+            (see <a href="coords.html#ObjectBoundingBox">Object
+            bounding box units</a>) and then applying the transform
+            specified by attribute <a>'hatchTransform'</a>.
+	  </p>
+	</dd>
+
+      </dl><!-- Attribute values -->
+
+    </dd>
+
+    <dt id="HatchElementHatchTransformAttribute">
+      <span class="adef">hatchTransform</span>
+    </dt>
+    <dd>
+
+      <p>
+	Contains the definition of an optional additional
+        transformation from the hatch coordinate system onto the
+        target coordinate system
+
+        (i.e., <span class='attr-value'>'userSpaceOnUse'</span> or
+        <span class='attr-value'>'objectBoundingBox'</span>).
+
+	This allows for things such as skewing the hatch strips.
+
+	This additional transformation matrix is post-multiplied to
+        (i.e., inserted to the right of) any previously defined
+        transformations, including the implicit transformation
+        necessary to convert
+        from <a href="coords.html#ObjectBoundingBox">object bounding
+        box units</a> to user space.
+      </p>
+
+      <dl class="attrdef-svg2">
+	<dt>Value</dt>                <dd><a>&lt;transform-list&gt;</a></dd>
+	<dt><a>Lacuna value</a></dt>  <dd>identity transform</dd>
+	<dt><a>Animatable</a></dt>    <dd>yes</dd>
+      </dl>
+
+    </dd>
+
+    <dt id="HatchElementXAttribute"><span class="adef">x</span></dt>
+    <dd>
+      <p>
+	<a>'x'</a>, <a>'y'</a>, <a>'pitch'</a> and <a>'angle'</a>
+        indicate how the hatch strips are placed and spaced. These
+        attributes represent coordinates and values in the coordinate
+        space specified by the combination of
+        attributes <a>'hatchUnits'</a>
+        and <a>'hatchTransform'</a>.
+      </p>
+
+      <dl class="attrdef-svg2">
+	<dt>Value</dt>                <dd><a>&lt;length&gt;</a></dd>
+	<dt><a>Lacuna value</a></dt>  <dd>0</dd>
+	<dt><a>Animatable</a></dt>    <dd>yes</dd>
+      </dl>
+
+    </dd>
+
+    <dt id="HatchElementYAttribute"><span class="adef">y</span></dt>
+    <dd>
+
+      <p>
+	See <a>'x'</a>.
+      </p>
+
+      <dl class="attrdef-svg2">
+	<dt>Value</dt>                <dd><a>&lt;length&gt;</a></dd>
+	<dt><a>Lacuna value</a></dt>  <dd>0</dd>
+	<dt><a>Animatable</a></dt>    <dd>yes</dd>
+      </dl>
+
+    </dd>
+
+    <dt id="HatchElementPitchAttribute"><span class="adef">pitch</span></dt>
+    <dd>
+
+      <p>
+	See <a>'x'</a>.
+      </p>
+
+      <dl class="attrdef-svg2">
+	<dt>Value</dt>                <dd><a>&lt;length&gt;</a></dd>
+	<dt><a>Lacuna value</a></dt>  <dd>0</dd>
+	<dt><a>Animatable</a></dt>    <dd>yes</dd>
+      </dl>
+
+      <p>
+        A negative value is an error
+        (see <a href="implnote.html#ErrorProcessing">Error
+        processing</a>).  A value of zero disables rendering of the
+        element (i.e., no paint is applied).
+      </p>
+
+    </dd>
+
+    <dt id="HatchElementAngleAttribute"><span class="adef">angle</span></dt>
+    <dd>
+
+      <p>
+	See <a>'x'</a>.
+      </p>
+
+      <dl class="attrdef-svg2">
+	<dt>Value</dt>                <dd><a>&lt;angle&gt;</a></dd>
+	<dt><a>Lacuna value</a></dt>  <dd>0</dd>
+	<dt><a>Animatable</a></dt>    <dd>yes</dd>
+      </dl>
+
+    </dd>
+ 
+    <dt id="HatchElementHrefAttribute"><span class="adef">xlink:href</span></dt>
+    <dd>
+      <p>
+	An <a href="linking.html#IRIReference">IRI reference</a> to a
+        different <a>'hatch'</a> element within the current SVG
+        document fragment. Any attributes which are defined on the
+        referenced element which are not defined on this element are
+        inherited by this element. If this element has no children,
+        and the referenced element does (possibly due to its
+        own <a>'xlink:href'</a> attribute), then this element inherits
+        the children from the referenced element. Inheritance can be
+        indirect to an arbitrary level; thus, if the referenced
+        element inherits attributes or children due to its
+        own <a>'xlink:href'</a> attribute, then the current element
+        can inherit those attributes or children.
+      </p>
+
+      <dl class="attrdef-svg2">
+	<dt>Value</dt>                <dd><a>&lt;iri&gt;</a></dd> 
+	<dt><a>Lacuna value</a></dt>  <dd>empty</dd>
+	<dt><a>Animatable</a></dt>    <dd>yes</dd>
+      </dl>
+
+    </dd>
+
+  </dl>
+
+<h3 id="HatchNotes">Notes on hatches</h3>
+
+<p>SVG's <a href="styling.html#UAStyleSheet">user agent style sheet</a> sets
+the <a>'overflow'</a> property for <a>'hatch'</a> elements to
+<span class="prop-value">hidden</span>, which causes an infinite strip clipping
+path to be created at the bounds of the hatch strip.  Unless the
+<a>'overflow'</a> property is overridden, any graphics within the
+hatch which goes outside of the hatch strip will be clipped. Note that
+if the <a>'overflow'</a> property is set
+to <span class="prop-value">visible</span> the area outside must be
+rendered (NB this is different from a <a>'pattern'</a>
+element). Strips with higher <var>x</var> (larger <var>m</var>) values
+must be rendered after strips with lower <var>x</var>
+(lower <var>m</var>) values.</p>
+
+<p class="issue">The default should probably be visible.</p>
+
+<p>The contents of the <a>'hatch'</a> are relative to a new coordinate
+system.  The new coordinate system has its origin at
+(<var>x</var>,&nbsp;<var>y</var>), where <var>x</var> is established
+by the <a>'x'</a> attribute on the <a>'hatch'</a> element,
+and <var>y</var> is established by the <a>'y'</a> attribute on
+the <a>'hatch'</a> element. The coordinate system is rotated around
+the origin by the angle given by the <a>'angle'</a> attribute.
+</p>
+
+<p class="issue">The viewBox and preserveAspectRatio attributes are
+not useful and have been removed (as compared to the pattern element).</p>
+
+<p><a href="script.html#EventAttributes">Event attributes</a> and
+<a href="svgdom.html#EventListeners">event listeners</a> attached
+to the contents of a <a>'hatch'</a> element are not processed;
+only the rendering aspects of <a>'hatch'</a> elements are
+processed.</p>
+
+
+<p>The following illustrates a very simple <a>'hatch'</a> fill:</p>
+
+<!--
+<edit:example href='images/pservers/pattern01.svg' name='hatch01'
+  description='fill a rectangle by referencing a hatch paint server' image='yes' link='yes'/>
+-->
+<div class="example">
+<pre><![CDATA[
+<hatch pitch="5" angle="135">
+  <hatchPath stroke="#a080ff" stroke-width="2"/>
+</hatch>
+]]></pre>
+<div class="figure">
+  <img
+     alt="A hatch example with parallel lines filling a rectangle at a 45 degree angle."
+     src="images/pservers/hatch01.png"/>
+  <p class="caption">A hatch with a single <a>'hatchPath'</a>.
+  </p>
+</div>
+</div>
+
+<p class="issue">Proper examples with links to the SVG need to be given.</p>
+
+</edit:with>
+
+<h3 id="HatchPaths">Hatch paths</h3>
+
+<edit:with element='hatchPath'>
+
+<p id="HatchPathElement">Hatch paths are defined by a <a>'hatchPath'</a> element.</p>
+
+<edit:elementsummary name='hatchPath'/>
+
+<h4 id="HatchPathElementAttributes">Attributes</h4>
+
+  <dl class="attrdef-list-svg2">
+
+    <dt id="HatchPathElementDAttribute"><span class="adef">d</span></dt>
+    <dd>
+
+      <p>
+	Defines a single path in the <a>'hatch'</a>.
+      </p>
+
+      <dl class="attrdef-svg2">
+
+	<dt>Value</dt>                <dd><a href="#PathData">Path data</a></dd>
+	<dt><a>Lacuna value</a></dt>  <dd>An infinite line, see below</dd>
+	<dt><a>Animatable</a></dt>    <dd>yes</dd>
+
+      </dl>
+
+    </dd>
+
+    <dt id="HatchPathElementOffsetAttribute"><span class="adef">offset</span></dt>
+    <dd>
+
+      <p>
+	Defines the point along the reference line where a path begins.
+      </p>
+
+      <dl class="attrdef-svg2">
+
+	<dt>Value</dt>                <dd><a>&lt;length&gt;</a></dd>
+	<dt><a>Lacuna value</a></dt>  <dd>0</dd>
+	<dt><a>Animatable</a></dt>    <dd>yes</dd>
+
+      </dl>
+
+    </dd>
+
+  </dl>
+
+<h4 id="HatchPathNotes">Notes on hatch paths</h4>
+
+<p>Hatch paths are defined with the same <a href="#PathData">Path
+data</a> used in the <a>'d'</a> attribute of the <a>'path'</a>
+element. The path is defined relative to the origin of each strip
+translated in the <var>x</var> direction by the <a>'offset'</a>
+(the <var>y</var> direction is aligned along the infinite axis of the
+strip).
+</p>
+
+<div class="figure">
+  <img
+     alt="A diagram showing the coordinate system for the 'd' attribute."
+     src="images/pservers/hatch_path_attributes.svg"/>
+  <p class="caption">The coordinate system for path data relative to a strip.
+  </p>
+</div>
+
+<p>If a <a>'d'</a> attribute is not provided, the path defaults to an
+infinitely long line aligned with the <var>y</var>-axis of the
+reference strip and passing through a point <a>'offset'</a> distance
+in the <var>x</var> direction from the strip origin (see above).
+</p>
+
+<p>If a <a>'d'</a> attribute is given, the hatch path is constructed
+by repeating the <a>'d'</a> data, each time with an offset along the
+<var>y</var>-axis determined by the <var>y</var> value of the last
+path data point. (The offset must be positive, a negative or zero
+offset value results in the hatch path not being rendered.) A hatch
+path need not start with a "moveto" path instruction. If missing, the
+first path instruction uses for its current point a value of
+(<var>x</var>,<var>0</var>) where <var>x</var> is the <var>x</var>
+value of the last data point given in the path. If the first path
+command is not a "moveto" and the last not a "closepath", the last
+point of each repeating section is joined to the first point of the
+next repeating section with the current value
+of <a>'stroke-linejoin'</a>.
+</p>
+
+<!--
+<edit:example href='images/pservers/pattern01.svg' name='hatch01'
+  description='fill a rectangle by referencing a hatch paint server' image='yes' link='yes'/>
+-->
+<div class="example">
+<pre><![CDATA[
+<hatch  hatchUnits="userSpaceOnUse" pitch="6">
+    <hatchPath stroke-width="1" d="c 0,4 8,6 8,10 8,14 0,16 0,20"/>
+</hatch>]]></pre>
+<div class="figure">
+  <img
+     alt="A hatch example with squiggly lines filling a rectangle."
+     src="images/pservers/hatch02.png"/>
+  <p class="caption">A hatch fill with a continuous squiggly <a>'hatchPath'</a>.
+  </p>
+</div>
+</div>
+
+<div class="example">
+<pre><![CDATA[
+<hatch  hatchUnits="userSpaceOnUse" pitch="20">
+    <hatchPath stroke-width="2" d="L 0,0 10,50"/>
+</hatch>]]></pre>
+<div class="figure">
+  <img
+     alt="A hatch example with a zigzag line."
+     src="images/pservers/hatch03.png"/>
+  <p class="caption">A hatch fill with a zigzag <a>'hatchPath'</a>.
+    The <a>'d'</a> path data describes two line segments, the first
+    starting at (10, 0). The repeating sections are joined.
+  </p>
+</div>
+</div>
+
+<div class="example">
+<pre><![CDATA[
+<hatch  hatchUnits="userSpaceOnUse" pitch="20">
+    <hatchPath stroke-width="2" d="M 0,0 10,50"/>
+</hatch>]]></pre>
+<div class="figure">
+  <img
+     alt="A hatch example with diagonal lines segments filling a rectangle."
+     src="images/pservers/hatch04.png"/>
+  <p class="caption">A hatch fill with diagonal line segments. The
+    repeating sections are not joined.
+  </p>
+</div>
+</div>
+
+<div class="example">
+<pre><![CDATA[
+<hatch  hatchUnits="userSpaceOnUse" pitch="20">
+    <hatchPath stroke-width="2"/>
+    <hatchPath stroke-width="2" offset="5" stroke-dasharray="10 4 2 4"/>
+</hatch>]]></pre>
+<div class="figure">
+  <img
+     alt="A hatch example with two alternating lines, one dashed."
+     src="images/pservers/hatch05.png"/>
+  <p class="caption">A hatch fill with two <a>'hatchPath'</a>s, one dashed.
+  </p>
+</div>
+</div>
+
+</edit:with>
+
 <h2 id="DOMInterfaces">DOM interfaces</h2>
 
 <h3 id="InterfaceSVGSolidColorElement">Interface SVGSolidColorElement</h3>
 
 <edit:with element='solidColor'>
 
 <pre class="idl"></pre>
 
@@ -2234,10 +2697,30 @@ element.
 </div>
 </dd>
 </dl>
 </dd>
 </dl>
 
 </edit:with>
 
+<h3 id="InterfaceSVGHatchElement">Interface SVGSolidHatchElement</h3>
+
+<edit:with element='hatch'>
+
+<pre class="idl"></pre>
+
+<p class="issue">IDL needs to be added for SVGHatchElement.</p>
+
+</edit:with>
+
+<h3 id="InterfaceSVGHatchPathElement">Interface SVGSolidHatchPathElement</h3>
+
+<edit:with element='hatchesPath'>
+
+<pre class="idl"></pre>
+
+<p class="issue">IDL needs to be added for SVGHatchPathElement.</p>
+
+</edit:with>
+
 </body>
 </html>

Received on Tuesday, 21 May 2013 18:13:53 UTC