summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiam P. White <inkscapebronyat-signgmaildotcom>2014-06-14 15:02:20 +0000
committerLiam P. White <inkscapebronyat-signgmaildotcom>2014-06-14 15:02:20 +0000
commit9f0c5f6c387b155ad6a864c202eafff27f1280a6 (patch)
treee0cfaa0ac816be73d960e09a8cf006b1751b355b
parentUpdate to experimental r13389 (diff)
parentRemoved original path helper paths pointed by LiamW (diff)
downloadinkscape-9f0c5f6c387b155ad6a864c202eafff27f1280a6.tar.gz
inkscape-9f0c5f6c387b155ad6a864c202eafff27f1280a6.zip
Update to experimental r13402
(bzr r13090.1.82)
-rw-r--r--share/icons/icons.svg83
-rw-r--r--share/symbols/FlowSymbols.svg588
-rw-r--r--src/box3d-side.cpp2
-rw-r--r--src/desktop-style.cpp8
-rw-r--r--src/libnrtype/FontFactory.cpp247
-rw-r--r--src/libnrtype/FontFactory.h23
-rw-r--r--src/libnrtype/font-lister.cpp61
-rw-r--r--src/libnrtype/font-lister.h13
-rw-r--r--src/live_effects/effect.cpp8
-rw-r--r--src/selection-chemistry.cpp4
-rw-r--r--src/sp-ellipse.cpp2
-rw-r--r--src/sp-item-group.cpp36
-rw-r--r--src/sp-item-group.h2
-rw-r--r--src/sp-lpe-item.cpp146
-rw-r--r--src/sp-lpe-item.h2
-rw-r--r--src/sp-path.cpp2
-rw-r--r--src/sp-spiral.cpp2
-rw-r--r--src/sp-star.cpp2
-rw-r--r--src/style-internal.cpp29
-rw-r--r--src/style.cpp114
-rw-r--r--src/style.h2
-rw-r--r--src/ui/dialog/symbols.cpp73
-rw-r--r--src/ui/dialog/symbols.h9
-rw-r--r--src/ui/tools/pen-tool.cpp56
-rw-r--r--src/widgets/font-selector.cpp30
-rw-r--r--src/xml/repr-css.cpp32
26 files changed, 889 insertions, 687 deletions
diff --git a/share/icons/icons.svg b/share/icons/icons.svg
index df42e79a4..133fad72f 100644
--- a/share/icons/icons.svg
+++ b/share/icons/icons.svg
@@ -821,19 +821,50 @@
<stop id="stop3482-77-2" offset="0.0000000" style="stop-color:#646464;stop-opacity:1.0000000;" />
<stop id="stop3484-3-2" offset="1.0000000" style="stop-color:#000000;stop-opacity:1.0000000;" />
</linearGradient>
+<linearGradient id="linearGradient5740-1-4">
+<stop id="stop5742-8-4" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+<stop id="stop5744-32-6" offset="1.0000000" style="stop-color:#98b6d3;stop-opacity:1.0000000;" />
+</linearGradient>
+<linearGradient id="linearGradient5740-1-4-4">
+<stop id="stop5742-8-4-5" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+<stop id="stop5744-32-6-7" offset="1.0000000" style="stop-color:#98b6d3;stop-opacity:1.0000000;" />
+</linearGradient>
<linearGradient xlink:href="#linearGradient5740-1-4-6" y2="180.6826" x2="164.3598" y1="172.2059" x1="161.736" gradientTransform="matrix(2.499161,0,0,1.671823,-82.24308,-178.7565)" gradientUnits="userSpaceOnUse" id="linearGradient5545-0-70" inkscape:collect="always" />
<linearGradient id="linearGradient5740-1-4-6">
<stop id="stop5742-8-4-8" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1.0000000;" />
<stop id="stop5744-32-6-3" offset="1.0000000" style="stop-color:#98b6d3;stop-opacity:1.0000000;" />
</linearGradient>
+<linearGradient id="linearGradient1887-1">
+<stop id="stop1888-0" offset="0.0000000" style="stop-color:#fffdf8;stop-opacity:1.0000000;" />
+<stop id="stop1889-9" offset="1.0000000" style="stop-color:#cdccc7;stop-opacity:1.0000000;" />
+</linearGradient>
+<linearGradient y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientTransform="matrix(1,0,0,0.996869,-115.0577,-334.2098)" gradientUnits="userSpaceOnUse" id="linearGradient10926" xlink:href="#linearGradient1887-1" inkscape:collect="always" />
+<linearGradient id="linearGradient1887-4">
+<stop id="stop1888-8" offset="0.0000000" style="stop-color:#fffdf8;stop-opacity:1.0000000;" />
+<stop id="stop1889-7" offset="1.0000000" style="stop-color:#cdccc7;stop-opacity:1.0000000;" />
+</linearGradient>
+<linearGradient y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientTransform="matrix(0.533827,0,0,0.532126,-61.18771,-178.1669)" gradientUnits="userSpaceOnUse" id="linearGradient11010" xlink:href="#linearGradient1887-4" inkscape:collect="always" />
+<linearGradient id="linearGradient1887-1-0">
+<stop id="stop1888-0-6" offset="0.0000000" style="stop-color:#fffdf8;stop-opacity:1.0000000;" />
+<stop id="stop1889-9-4" offset="1.0000000" style="stop-color:#cdccc7;stop-opacity:1.0000000;" />
+</linearGradient>
+<linearGradient y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientTransform="matrix(1,0,0,0.996869,165.9423,-181.2098)" gradientUnits="userSpaceOnUse" id="linearGradient11070" xlink:href="#linearGradient1887-1-0" inkscape:collect="always" />
+<linearGradient id="linearGradient1887-1-0-3">
+<stop id="stop1888-0-6-7" offset="0.0000000" style="stop-color:#fffdf8;stop-opacity:1.0000000;" />
+<stop id="stop1889-9-4-2" offset="1.0000000" style="stop-color:#cdccc7;stop-opacity:1.0000000;" />
+</linearGradient>
+<linearGradient y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientTransform="matrix(1,0,0,0.996869,165.9423,-181.2098)" gradientUnits="userSpaceOnUse" id="linearGradient11130" xlink:href="#linearGradient1887-1-0-3" inkscape:collect="always" />
<linearGradient xlink:href="#linearGradient1887-3" y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientTransform="matrix(1,0,0,0.996869,165.9423,-181.2098)" gradientUnits="userSpaceOnUse" id="linearGradient15175-8" inkscape:collect="always" />
<linearGradient id="linearGradient1887-3">
<stop id="stop1888-2" offset="0.0000000" style="stop-color:#fffdf8;stop-opacity:1.0000000;" />
<stop id="stop1889-94" offset="1.0000000" style="stop-color:#cdccc7;stop-opacity:1.0000000;" />
</linearGradient>
+<linearGradient y2="350.1636" x2="130.3522" y1="343.258" x1="121.1177" gradientTransform="matrix(1,0,0,0.996869,-115.0577,-334.2098)" gradientUnits="userSpaceOnUse" id="linearGradient11238" xlink:href="#linearGradient1887-3" inkscape:collect="always" />
+<linearGradient inkscape:collect="always" xlink:href="#linearGradient10331" id="linearGradient10337" x1="255.513" y1="92.579002" x2="264.6582" y2="83.394058" gradientUnits="userSpaceOnUse" />
+<linearGradient inkscape:collect="always" xlink:href="#linearGradient10331" id="linearGradient10372" gradientUnits="userSpaceOnUse" x1="255.513" y1="92.579002" x2="264.6582" y2="83.394058" />
<linearGradient inkscape:collect="always" xlink:href="#linearGradient10331" id="linearGradient10399" gradientUnits="userSpaceOnUse" x1="255.513" y1="92.579002" x2="264.6582" y2="83.394058" />
</defs>
-<sodipodi:namedview inkscape:guide-bbox="true" inkscape:current-layer="svg1" inkscape:grid-bbox="true" inkscape:pageopacity="1.0000000" pagecolor="#e8e8e4" snaptoguides="true" showguides="true" inkscape:window-y="27" inkscape:window-x="0" inkscape:window-height="894" inkscape:window-width="1280" inkscape:cy="489.8736" inkscape:cx="1010.206" inkscape:zoom="2.759271" gridtolerance="6" snaptogrid="false" showgrid="false" id="base" inkscape:document-units="px" inkscape:grid-points="true" guidetolerance="8" fill="#8ab3de" stroke="#646464" inkscape:object-nodes="false" objecttolerance="11" inkscape:snap-bbox="false" inkscape:snap-nodes="true" inkscape:bbox-nodes="false" inkscape:bbox-paths="false" inkscape:snap-global="false" inkscape:snap-center="false" inkscape:snap-midpoints="false" inkscape:snap-intersection-paths="true" inkscape:object-paths="false" inkscape:snap-object-midpoints="true" inkscape:window-maximized="1" inkscape:snap-grids="true" inkscape:snap-smooth-nodes="false" inkscape:snap-text-baseline="false" inkscape:snap-page="true" inkscape:snap-bbox-midpoints="false" inkscape:snap-bbox-edge-midpoints="false">
+<sodipodi:namedview inkscape:guide-bbox="true" inkscape:current-layer="svg1" inkscape:grid-bbox="true" inkscape:pageopacity="1.0000000" pagecolor="#e8e8e4" snaptoguides="true" showguides="true" inkscape:window-y="0" inkscape:window-x="40" inkscape:window-height="745" inkscape:window-width="1326" inkscape:cy="417.9499" inkscape:cx="364.8285" inkscape:zoom="3.343024" gridtolerance="6" snaptogrid="false" showgrid="false" id="base" inkscape:document-units="px" inkscape:grid-points="true" guidetolerance="8" fill="#8ab3de" stroke="#646464" inkscape:object-nodes="false" objecttolerance="11" inkscape:snap-bbox="false" inkscape:snap-nodes="true" inkscape:bbox-nodes="false" inkscape:bbox-paths="false" inkscape:snap-global="false" inkscape:snap-center="false" inkscape:snap-midpoints="false" inkscape:snap-intersection-paths="true" inkscape:object-paths="false" inkscape:snap-object-midpoints="true" inkscape:window-maximized="1" inkscape:snap-grids="true" inkscape:snap-smooth-nodes="false" inkscape:snap-text-baseline="false" inkscape:snap-page="true" inkscape:snap-bbox-midpoints="false" inkscape:snap-bbox-edge-midpoints="false">
<inkscape:grid type="xygrid" id="grid9252" originx="0px" originy="0px" spacingx="0.5px" spacingy="0.5px" empspacing="2" visible="true" enabled="true" snapvisiblegridlinesonly="true" />
<sodipodi:guide orientation="0,1" position="630.08101,968.02815" id="guide4946" />
<sodipodi:guide orientation="0,1" position="618.47896,943.93157" id="guide4948" />
@@ -856,7 +887,7 @@ http://www.inkscape.org/</dc:description>
<dc:title>Inkscape Developers</dc:title>
</cc:Agent>
</dc:rights>
-<dc:title />
+<dc:title></dc:title>
</cc:Work>
<cc:License rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
<cc:permits rdf:resource="http://web.resource.org/cc/Reproduction" />
@@ -3825,55 +3856,71 @@ http://www.inkscape.org/</dc:description>
<path transform="matrix(2.894146,0,0,2.833322,-656.743,-353.6308)" d="m 341.3078,163.0209 c 0,2.2716 -1.7745,4.113 -3.9635,4.113 l 0,-4.113 z" sodipodi:ry="4.113043" sodipodi:rx="3.963478" sodipodi:cy="163.0209" sodipodi:cx="337.3443" id="path11111" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#99b7d6;fill-opacity:0.7019608;fill-rule:evenodd;stroke:#000000;stroke-width:0.3492142;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" sodipodi:type="arc" sodipodi:start="0" sodipodi:end="1.570796" />
<path sodipodi:type="arc" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:none;stroke:#c80000;stroke-width:0.9166215;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:0.9166215, 0.9166215;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="path11051-8" sodipodi:cx="337.3443" sodipodi:cy="163.0209" sodipodi:rx="3.963478" sodipodi:ry="4.113043" d="m 341.3078,163.0209 c 0,2.2716 -1.7745,4.113 -3.9635,4.113 -2.189,0 -3.9635,-1.8414 -3.9635,-4.113 0,-2.2716 1.7745,-4.113 3.9635,-4.113 2.189,0 3.9635,1.8414 3.9635,4.113 z" transform="matrix(1.101789,0,0,1.080243,-44.03243,-59.90819)" />
</g>
+<g id="pack-more">
+<rect y="235" x="350" height="16" width="16" style="fill:none" />
+<g style="fill:#98b6d6;fill-opacity:0.70;stroke:#000000">
+ <rect x="351.5" y="236.5" width="3" height="3"/>
+ <rect x="356.5" y="236.5" width="3" height="3"/>
+ <rect x="361.5" y="236.5" width="3" height="3"/>
+ <rect x="351.5" y="241.5" width="3" height="3"/>
+ <rect x="356.5" y="241.5" width="3" height="3"/>
+ <rect x="361.5" y="241.5" width="3" height="3"/>
+ <rect x="351.5" y="246.5" width="3" height="3"/>
+ <rect x="356.5" y="246.5" width="3" height="3"/>
+ <rect x="361.5" y="246.5" width="3" height="3"/>
+</g>
+</g>
+<g id="pack-less">
+<rect y="215" x="350" height="16" width="16" style="fill:none" />
+<g style="fill:#98b6d6;fill-opacity:0.70;stroke:#000000">
+ <rect x="351.5" y="216.5" width="5" height="5"/>
+ <rect x="359.5" y="216.5" width="5" height="5"/>
+ <rect x="351.5" y="224.5" width="5" height="5"/>
+ <rect x="359.5" y="224.5" width="5" height="5"/>
+</g>
+</g>
<g id="boundingbox_top_left" transform="translate(998.14709,-107)" inkscape:label="#boundingbox_top_left" style="display:inline">
<rect y="475" x="-262.14709" height="16" width="16" id="rect7835" style="fill:none;stroke:none" />
<path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" id="path7837" d="m -257.64708,489.5 0,-10 10,0 0,2 -8,0 0,8 z" style="fill:#ffffff;fill-opacity:1;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
-<path transform="matrix(1.05938,0,0,1.0593804,-645.21436,-1289.4664)" d="m 370.5632,1670.756 c 0,2.086 -1.6904,3.776 -3.7758,3.776 -2.0853,0 -3.7757,-1.69 -3.7757,-3.776 0,-2.085 1.6904,-3.776 3.7757,-3.776 2.0854,0 3.7758,1.691 3.7758,3.776 z" sodipodi:ry="3.7757924" sodipodi:rx="3.7757924" sodipodi:cy="1670.7562" sodipodi:cx="366.78745" id="path7824" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" sodipodi:type="arc" />
+<path transform="matrix(1.05938,0,0,1.0593804,-645.21436,-1289.4664)" d="m 370.56324,1670.7562 a 3.7757924,3.7757924 0 0 1 -3.77579,3.7758 3.7757924,3.7757924 0 0 1 -3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.77579,3.7758 z" sodipodi:ry="3.7757924" sodipodi:rx="3.7757924" sodipodi:cy="1670.7562" sodipodi:cx="366.78745" id="path7824" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" sodipodi:type="arc" />
</g>
<g id="boundingbox_top" transform="translate(1022.1471,-107)" style="display:inline">
<rect style="fill:none;stroke:none" id="rect7846" width="16" height="16" x="-262.14709" y="475" />
<path style="fill:#ffffff;fill-opacity:1;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" d="m -260.64708,479.5 13,0 0,2 -13,0 z" id="path7848" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc" />
-<path sodipodi:type="arc" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="path7850" sodipodi:cx="366.78745" sodipodi:cy="1670.7562" sodipodi:rx="3.7757924" sodipodi:ry="3.7757924" d="m 370.5632,1670.756 c 0,2.086 -1.6904,3.776 -3.7758,3.776 -2.0853,0 -3.7757,-1.69 -3.7757,-3.776 0,-2.085 1.6904,-3.776 3.7757,-3.776 2.0854,0 3.7758,1.691 3.7758,3.776 z" transform="matrix(1.05938,0,0,1.0593804,-642.71436,-1289.4664)" />
+<path sodipodi:type="arc" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="path7850" sodipodi:cx="366.78745" sodipodi:cy="1670.7562" sodipodi:rx="3.7757924" sodipodi:ry="3.7757924" d="m 370.56324,1670.7562 a 3.7757924,3.7757924 0 0 1 -3.77579,3.7758 3.7757924,3.7757924 0 0 1 -3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.77579,3.7758 z" transform="matrix(1.05938,0,0,1.0593804,-642.71436,-1289.4664)" />
</g>
<g id="boundingbox_top_right" transform="matrix(0,1,-1,0,1275,630.14709)" style="display:inline">
<rect style="fill:none;stroke:none" id="rect7856" width="16" height="16" x="-262.14709" y="475" />
<path style="fill:#ffffff;fill-opacity:1;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" d="m -257.64708,489.5 0,-10 10,0 0,2 -8,0 0,8 z" id="path7858" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc" />
-<path sodipodi:type="arc" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="path7860" sodipodi:cx="366.78745" sodipodi:cy="1670.7562" sodipodi:rx="3.7757924" sodipodi:ry="3.7757924" d="m 370.5632,1670.756 c 0,2.086 -1.6904,3.776 -3.7758,3.776 -2.0853,0 -3.7757,-1.69 -3.7757,-3.776 0,-2.085 1.6904,-3.776 3.7757,-3.776 2.0854,0 3.7758,1.691 3.7758,3.776 z" transform="matrix(1.05938,0,0,1.0593804,-645.21436,-1289.4664)" />
+<path sodipodi:type="arc" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="path7860" sodipodi:cx="366.78745" sodipodi:cy="1670.7562" sodipodi:rx="3.7757924" sodipodi:ry="3.7757924" d="m 370.56324,1670.7562 a 3.7757924,3.7757924 0 0 1 -3.77579,3.7758 3.7757924,3.7757924 0 0 1 -3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.77579,3.7758 z" transform="matrix(1.05938,0,0,1.0593804,-645.21436,-1289.4664)" />
</g>
<g transform="matrix(0,1,-1,0,1275,654.14709)" id="boundingbox_right" style="display:inline">
<rect y="475" x="-262.14709" height="16" width="16" id="rect7864" style="fill:none;stroke:none" />
<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path7866" d="m -260.64708,479.5 13,0 0,2 -13,0 z" style="fill:#ffffff;fill-opacity:1;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
-<path transform="matrix(1.05938,0,0,1.0593804,-642.71436,-1289.4664)" d="m 370.5632,1670.756 c 0,2.086 -1.6904,3.776 -3.7758,3.776 -2.0853,0 -3.7757,-1.69 -3.7757,-3.776 0,-2.085 1.6904,-3.776 3.7757,-3.776 2.0854,0 3.7758,1.691 3.7758,3.776 z" sodipodi:ry="3.7757924" sodipodi:rx="3.7757924" sodipodi:cy="1670.7562" sodipodi:cx="366.78745" id="path7868" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" sodipodi:type="arc" />
+<path transform="matrix(1.05938,0,0,1.0593804,-642.71436,-1289.4664)" d="m 370.56324,1670.7562 a 3.7757924,3.7757924 0 0 1 -3.77579,3.7758 3.7757924,3.7757924 0 0 1 -3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.77579,3.7758 z" sodipodi:ry="3.7757924" sodipodi:rx="3.7757924" sodipodi:cy="1670.7562" sodipodi:cx="366.78745" id="path7868" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" sodipodi:type="arc" />
</g>
<g transform="matrix(-1,0,0,-1,537.85291,907)" id="boundingbox_bottom_right" style="display:inline">
<rect y="475" x="-262.14709" height="16" width="16" id="rect7876" style="fill:none;stroke:none" />
<path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" id="path7878" d="m -257.64708,489.5 0,-10 10,0 0,2 -8,0 0,8 z" style="fill:#ffffff;fill-opacity:1;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
-<path transform="matrix(1.05938,0,0,1.0593804,-645.21436,-1289.4664)" d="m 370.5632,1670.756 c 0,2.086 -1.6904,3.776 -3.7758,3.776 -2.0853,0 -3.7757,-1.69 -3.7757,-3.776 0,-2.085 1.6904,-3.776 3.7757,-3.776 2.0854,0 3.7758,1.691 3.7758,3.776 z" sodipodi:ry="3.7757924" sodipodi:rx="3.7757924" sodipodi:cy="1670.7562" sodipodi:cx="366.78745" id="path7880" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" sodipodi:type="arc" />
+<path transform="matrix(1.05938,0,0,1.0593804,-645.21436,-1289.4664)" d="m 370.56324,1670.7562 a 3.7757924,3.7757924 0 0 1 -3.77579,3.7758 3.7757924,3.7757924 0 0 1 -3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.77579,3.7758 z" sodipodi:ry="3.7757924" sodipodi:rx="3.7757924" sodipodi:cy="1670.7562" sodipodi:cx="366.78745" id="path7880" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" sodipodi:type="arc" />
</g>
<g id="boundingbox_bottom" transform="matrix(-1,0,0,-1,513.85291,907)" style="display:inline">
<rect style="fill:none;stroke:none" id="rect7884" width="16" height="16" x="-262.14709" y="475" />
<path style="fill:#ffffff;fill-opacity:1;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" d="m -260.64708,479.5 13,0 0,2 -13,0 z" id="path7886" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc" />
-<path sodipodi:type="arc" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="path7888" sodipodi:cx="366.78745" sodipodi:cy="1670.7562" sodipodi:rx="3.7757924" sodipodi:ry="3.7757924" d="m 370.5632,1670.756 c 0,2.086 -1.6904,3.776 -3.7758,3.776 -2.0853,0 -3.7757,-1.69 -3.7757,-3.776 0,-2.085 1.6904,-3.776 3.7757,-3.776 2.0854,0 3.7758,1.691 3.7758,3.776 z" transform="matrix(1.05938,0,0,1.0593804,-642.71436,-1289.4664)" />
+<path sodipodi:type="arc" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="path7888" sodipodi:cx="366.78745" sodipodi:cy="1670.7562" sodipodi:rx="3.7757924" sodipodi:ry="3.7757924" d="m 370.56324,1670.7562 a 3.7757924,3.7757924 0 0 1 -3.77579,3.7758 3.7757924,3.7757924 0 0 1 -3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.77579,3.7758 z" transform="matrix(1.05938,0,0,1.0593804,-642.71436,-1289.4664)" />
</g>
<g id="boundingbox_bottom_left" transform="matrix(0,-1,1,0,261,169.85291)" style="display:inline">
<rect style="fill:none;stroke:none" id="rect7896" width="16" height="16" x="-262.14709" y="475" />
<path style="fill:#ffffff;fill-opacity:1;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" d="m -257.64708,489.5 0,-10 10,0 0,2 -8,0 0,8 z" id="path7898" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc" />
-<path sodipodi:type="arc" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="path7900" sodipodi:cx="366.78745" sodipodi:cy="1670.7562" sodipodi:rx="3.7757924" sodipodi:ry="3.7757924" d="m 370.5632,1670.756 c 0,2.086 -1.6904,3.776 -3.7758,3.776 -2.0853,0 -3.7757,-1.69 -3.7757,-3.776 0,-2.085 1.6904,-3.776 3.7757,-3.776 2.0854,0 3.7758,1.691 3.7758,3.776 z" transform="matrix(1.05938,0,0,1.0593804,-645.21436,-1289.4664)" />
+<path sodipodi:type="arc" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" id="path7900" sodipodi:cx="366.78745" sodipodi:cy="1670.7562" sodipodi:rx="3.7757924" sodipodi:ry="3.7757924" d="m 370.56324,1670.7562 a 3.7757924,3.7757924 0 0 1 -3.77579,3.7758 3.7757924,3.7757924 0 0 1 -3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.77579,3.7758 z" transform="matrix(1.05938,0,0,1.0593804,-645.21436,-1289.4664)" />
</g>
<g transform="matrix(0,-1,1,0,261,145.85291)" id="boundingbox_left" style="display:inline">
<rect y="475" x="-262.14709" height="16" width="16" id="rect7905" style="fill:none;stroke:none" />
<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path7907" d="m -260.64708,479.5 13,0 0,2 -13,0 z" style="fill:#ffffff;fill-opacity:1;stroke:#888a85;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
-<path transform="matrix(1.05938,0,0,1.0593804,-642.71436,-1289.4664)" d="m 370.5632,1670.756 c 0,2.086 -1.6904,3.776 -3.7758,3.776 -2.0853,0 -3.7757,-1.69 -3.7757,-3.776 0,-2.085 1.6904,-3.776 3.7757,-3.776 2.0854,0 3.7758,1.691 3.7758,3.776 z" sodipodi:ry="3.7757924" sodipodi:rx="3.7757924" sodipodi:cy="1670.7562" sodipodi:cx="366.78745" id="path7909" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" sodipodi:type="arc" />
+<path transform="matrix(1.05938,0,0,1.0593804,-642.71436,-1289.4664)" d="m 370.56324,1670.7562 a 3.7757924,3.7757924 0 0 1 -3.77579,3.7758 3.7757924,3.7757924 0 0 1 -3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.77579,3.7758 z" sodipodi:ry="3.7757924" sodipodi:rx="3.7757924" sodipodi:cy="1670.7562" sodipodi:cx="366.78745" id="path7909" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" sodipodi:type="arc" />
</g>
<g transform="translate(1022.1471,-83)" id="boundingbox_center" style="display:inline">
<rect y="475" x="-262.14709" height="16" width="16" id="rect7917" style="fill:none;stroke:none" />
-<path transform="matrix(1.05938,0,0,1.0593804,-642.71438,-1286.9664)" d="m 370.5632,1670.756 c 0,2.086 -1.6904,3.776 -3.7758,3.776 -2.0853,0 -3.7757,-1.69 -3.7757,-3.776 0,-2.085 1.6904,-3.776 3.7757,-3.776 2.0854,0 3.7758,1.691 3.7758,3.776 z" sodipodi:ry="3.7757924" sodipodi:rx="3.7757924" sodipodi:cy="1670.7562" sodipodi:cx="366.78745" id="path7922" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" sodipodi:type="arc" />
-</g>
-<g id="path-mode-bspline" transform="matrix(1.395066,-1.366399,1.366399,1.395066,-466.9364,1306.511)" inkscape:label="#bspline_mode">
-<path inkscape:connector-curvature="0" style="color:#000000;fill:none;stroke:#0000ff;stroke-width:0.9960949;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline" d="m 961.8604,56.03607 c 0,0 1.3781,-1.49823 3.2604,-1.76058 1.8823,-0.26235 3.5841,1.78013 3.5841,1.78013" id="path-mode-spiro-3-8-8" sodipodi:nodetypes="czc" inkscape:label="#spiro_splines_mode" />
-<path inkscape:connector-curvature="0" sodipodi:nodetypes="ccc" id="path6177-8-2" d="m 960.716,54.82044 4.5038,-4.57407 4.5738,4.47984" style="fill:none;stroke:#646464;stroke-width:0.7501467;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
-<rect y="-639.9971" x="724.2002" height="1.022964" width="1.022542" id="rect8372-9-8" style="color:#000000;fill:#6464ff;fill-opacity:0.3921569;fill-rule:evenodd;stroke:#6464ff;stroke-width:0.2557612;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" transform="matrix(0.7144089,0.6997285,-0.6997285,0.7144089,0,0)" />
-<rect transform="matrix(0.7144089,0.6997285,-0.6997285,0.7144089,0,0)" style="color:#000000;fill:#6464ff;fill-opacity:0.3921569;fill-rule:evenodd;stroke:#6464ff;stroke-width:0.2557612;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" id="rect6941" width="1.022542" height="1.022964" x="724.2002" y="-633.3398" />
-<rect y="-639.9971" x="730.8575" height="1.022964" width="1.022542" id="rect6954" style="color:#000000;fill:#6464ff;fill-opacity:0.3921569;fill-rule:evenodd;stroke:#6464ff;stroke-width:0.2557612;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline" transform="matrix(0.7144089,0.6997285,-0.6997285,0.7144089,0,0)" />
+<path transform="matrix(1.05938,0,0,1.0593804,-642.71438,-1286.9664)" d="m 370.56324,1670.7562 a 3.7757924,3.7757924 0 0 1 -3.77579,3.7758 3.7757924,3.7757924 0 0 1 -3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.7758,-3.7758 3.7757924,3.7757924 0 0 1 3.77579,3.7758 z" sodipodi:ry="3.7757924" sodipodi:rx="3.7757924" sodipodi:cy="1670.7562" sodipodi:cx="366.78745" id="path7922" style="fill:url(#radialSnotBall);fill-opacity:1;stroke:#3a7304;stroke-width:0.94394815;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:3.33333325;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" sodipodi:type="arc" />
</g>
</svg>
diff --git a/share/symbols/FlowSymbols.svg b/share/symbols/FlowSymbols.svg
index 28a376820..a9dde4798 100644
--- a/share/symbols/FlowSymbols.svg
+++ b/share/symbols/FlowSymbols.svg
@@ -1,271 +1,321 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<!-- Created by Tavmjong Bah -->
-
-<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="512.5" height="522.5" version="1.1" style="fill:none;stroke:#000000;stroke-width:2" id="svg8045" inkscape:version="0.48+devel r12282" sodipodi:docname="FlowSymbols.svg">
-<metadata id="metadata8183">
-<rdf:RDF>
-<cc:Work rdf:about="">
-<dc:format>image/svg+xml</dc:format>
-<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-<dc:title>Flow Chart Shapes</dc:title>
-<dc:date>2013-04-18</dc:date>
-<dc:creator>
-<cc:Agent>
-<dc:title>Martin Owens</dc:title>
-</cc:Agent>
-</dc:creator>
-<dc:rights>
-<cc:Agent>
-<dc:title />
-</cc:Agent>
-</dc:rights>
-<dc:publisher>
-<cc:Agent>
-<dc:title>Martin Owens</dc:title>
-</cc:Agent>
-</dc:publisher>
-<dc:language>English</dc:language>
-<dc:description>Basic Flowchart Symbols</dc:description>
-<cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
-</cc:Work>
-<cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
-<cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction" />
-<cc:permits rdf:resource="http://creativecommons.org/ns#Distribution" />
-<cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
-</cc:License>
-</rdf:RDF>
-</metadata>
-<sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1301" inkscape:window-height="744" id="namedview8181" showgrid="false" inkscape:zoom="1" inkscape:cx="199.8151" inkscape:cy="276.2787" inkscape:window-x="65" inkscape:window-y="24" inkscape:window-maximized="1" inkscape:current-layer="svg8045" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" />
-<title id="title8047">Flow Chart Shapes</title>
-<defs id="defs8049">
-<marker inkscape:stockid="DotM" orient="auto" refY="0" refX="0" id="DotM" style="overflow:visible" inkscape:isstock="true">
-<path id="path15937" d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 C -4.74,-6 -2.5,-3.76 -2.5,-1 Z" style="fill:#eeeeee;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" transform="matrix(0.4,0,0,0.4,2.96,0.4)" inkscape:connector-curvature="0" />
-</marker>
-<marker inkscape:stockid="Arrow2Mstart" orient="auto" refY="0" refX="0" id="Arrow2Mstart" style="overflow:visible" inkscape:isstock="true">
-<path id="path15897" style="fill:#eeeeee;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 Z" transform="scale(0.6,0.6)" inkscape:connector-curvature="0" />
-</marker>
-<marker inkscape:stockid="Arrow2Mstart" orient="auto" refY="0" refX="0" id="Arrow2Mstart-1" style="overflow:visible" inkscape:isstock="true">
-<path inkscape:connector-curvature="0" id="path15897-1" style="fill:#eeeeee;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1" d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 Z" transform="scale(0.6,0.6)" />
-</marker>
-<symbol style="stroke-width:1.66112018" transform="matrix(1.2040057,0,0,1.2040079,-470.35928,5.67678)" id="process">
-<desc id="desc16867">An operation or action step</desc>
-<title id="title16865">Process</title>
-<rect style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#aaccee;stroke:#000000;stroke-width:1.66112018;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="rect1738" width="51.494774" height="51.480068" x="425.19449" y="27.805664" inkscape:label="Process" />
-<text xml:space="preserve" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="450.68307" y="56.485222" id="text2344" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2346" x="450.68307" y="56.485222" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Process</tspan></text>
-</symbol>
-<symbol style="fill:none;stroke:#000000;stroke-width:1.66112018" transform="matrix(1.2040057,0,0,1.2040079,-452.31547,71.89277)" id="pprocess">
-<desc id="desc16887">A formally defined sub-process.</desc>
-<title id="title16885">Predefined Process</title>
-<rect inkscape:label="Process" y="49.041424" x="410.20801" height="30.24431" width="51.494774" id="rect15309" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#aaccee;stroke:#000000;stroke-width:1.66112018;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
-<rect style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#6699cc;stroke:#000000;stroke-width:1.66112018;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="rect1738-8" width="37.386806" height="30.24431" x="417.26199" y="49.041424" inkscape:label="Process" />
-<text xml:space="preserve" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="435.69876" y="61.926075" id="text2344-9" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2346-4" x="435.69876" y="61.926075" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Defined</tspan><tspan sodipodi:role="line" x="435.69876" y="72.308075" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" id="tspan15317">Process</tspan></text>
-</symbol>
-<symbol style="fill:none;stroke:#000000;stroke-width:1.66112018" transform="matrix(1.2040057,0,0,1.2040079,-547.03458,150.51031)" id="aproc">
-<desc id="desc16907">An alternate to the normal process step.</desc>
-<title id="title16905">Alternate Process</title>
-<rect inkscape:label="Process" y="49.359077" x="488.87799" height="30.244308" width="51.494774" id="rect15309-7" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#6699cc;stroke:#000000;stroke-width:1.66112018;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" ry="5.1461339" />
-<text transform="scale(1.0001428,0.99985722)" sodipodi:linespacing="125%" id="text2344-9-1" y="61.600418" x="514.35754" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" xml:space="preserve"><tspan id="tspan15317-7" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" y="61.600418" x="514.35754" sodipodi:role="line">Alternate</tspan><tspan style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" y="71.982422" x="514.35754" sodipodi:role="line" id="tspan15370">Process</tspan></text>
-</symbol>
-<symbol transform="translate(-289.32377,-61.515372)" id="extract">
-<desc id="desc16871">Split processes or a measurement or finished goods.</desc>
-<title id="title16869">Extract</title>
-<path sodipodi:type="star" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#aaccee;stroke:#000000;stroke-width:4.53201246;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="path1762" sodipodi:sides="3" sodipodi:cx="196.97975" sodipodi:cy="102.81879" sodipodi:r1="79.185905" sodipodi:r2="39.592953" sodipodi:arg1="0.52359878" sodipodi:arg2="1.5707963" inkscape:flatsided="false" inkscape:rounded="0" inkscape:randomized="0" d="m 265.5568,142.4117 -68.577,0 -68.5771,0 L 162.6912,83.02231 196.9798,23.63288 231.2683,83.02231 Z" transform="matrix(0.44136809,0,0,0.44124208,365.13681,95.528587)" inkscape:label="Extract" />
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="451.70932" y="145.59412" id="text2312" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2314" x="451.70932" y="145.59412" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Extract</tspan></text>
-</symbol>
-<symbol transform="translate(-521.74938,22.99095)" id="minput">
-<desc id="desc16879">Manually input into a system.</desc>
-<title id="title16877">Manual Input</title>
-<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#aaccee;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" d="m 743.68117,75.17848 61.99823,0 0,-55.783134 L 743.76102,33.997942 Z" id="path3054" inkscape:label="ManualInput" />
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="774.52301" y="50.447914" id="text2328" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2330" x="774.52301" y="50.447914" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Manual</tspan><tspan sodipodi:role="line" x="774.52301" y="62.947914" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" id="tspan14761">Input</tspan></text>
-</symbol>
-<symbol transform="translate(-268.21448,-62.515268)" id="merge">
-<desc id="desc16875">Merge multiple processes into one or raw material storage.</desc>
-<title id="title16873">Merge</title>
-<path sodipodi:type="star" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#aaccee;stroke:#000000;stroke-width:4.53201246;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="path2808" sodipodi:sides="3" sodipodi:cx="196.97975" sodipodi:cy="102.81879" sodipodi:r1="79.185905" sodipodi:r2="39.592953" sodipodi:arg1="0.52359878" sodipodi:arg2="1.5707963" inkscape:flatsided="false" inkscape:rounded="0" inkscape:randomized="0" d="m 265.5568,142.4117 -68.577,0 -68.5771,0 L 162.6912,83.02231 196.9798,23.63288 231.2683,83.02231 Z" transform="matrix(-0.44136809,0,0,-0.44124208,698.2613,168.7945)" inkscape:label="Merge" />
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="610.98444" y="124.93257" id="text2320" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2322" x="610.98444" y="124.93257" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Merge</tspan></text>
-</symbol>
-<symbol transform="translate(282.54638,-20.64998)" id="delay">
-<desc id="desc16883">A waiting period.</desc>
-<title id="title16881">Delay</title>
-<path style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#aaccee;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" d="m 123.73618,114.12043 0,-46.648458 22.89125,0 C 188.53652,67.471972 187.67278,114.12043 146.62743,114.12043 Z" id="path15200-3" inkscape:connector-curvature="0" sodipodi:nodetypes="ccssc" />
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="146.86577" y="94.339165" id="text2375-0" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2377-3" x="146.86577" y="94.339165" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Delay</tspan></text>
-</symbol>
-<symbol transform="translate(-107.14137,96.80508)" id="data">
-<desc id="desc16891">Indicates data inputs and outputs to and from a process.</desc>
-<title id="title16889">Data I/O</title>
-<rect inkscape:label="Process" y="31.435099" x="265.58328" height="48.066864" width="45.347401" id="rect1738-1" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ccff99;stroke:#000000;stroke-width:2.05888343;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" transform="matrix(1,0,-0.33103436,0.9436187,0,0)" />
-<text transform="scale(1.0001419,0.99985813)" sodipodi:linespacing="125%" id="text2344-8" y="55.878571" x="269.55655" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" xml:space="preserve"><tspan style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" y="55.878571" x="269.55655" id="tspan2346-0" sodipodi:role="line">Data</tspan></text>
-</symbol>
-<symbol transform="translate(-63.07007,-286.84938)" id="istorage">
-<desc id="desc16895">Data stored in memory.</desc>
-<title id="title16893">Internal Storage</title>
-<g transform="translate(50,-97)" id="g15839">
-<rect inkscape:label="Process" y="502.00879" x="235" height="61.98241" width="62" id="rect1738-0" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ccff99;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
-<text transform="scale(1.0001419,0.99985813)" sodipodi:linespacing="125%" id="text2344-0" y="536.60553" x="273.72705" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" xml:space="preserve"><tspan style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" y="536.60553" x="273.72705" id="tspan2346-9" sodipodi:role="line">Internal</tspan><tspan style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" y="549.10553" x="273.72705" sodipodi:role="line" id="tspan15837">Storage</tspan></text>
-<path inkscape:connector-curvature="0" id="path15777" d="m 250,563 0,-61 -1,0 1,0" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#6699cc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
-<path inkscape:connector-curvature="0" id="path15779" d="m 235,518 62,0" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#6699cc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
-</g>
-</symbol>
-<symbol style="fill:none;stroke:#000000;stroke-width:1.66112018" transform="matrix(1.2040057,0,0,1.2040079,-196.83034,87.67678)" id="card">
-<desc id="desc16899">Old computer punch card</desc>
-<title id="title16897">Card</title>
-<path sodipodi:nodetypes="cccccc" inkscape:connector-curvature="0" id="rect1738-4" d="m 438.06818,27.805664 33.63771,0 0,46.496712 -46.5114,0 L 425.19449,40.675681 Z" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ccff99;stroke:#000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
-<text xml:space="preserve" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="448.46753" y="54.043022" id="text2344-3" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2346-1" x="448.46753" y="54.043022" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Card</tspan></text>
-</symbol>
-<symbol transform="translate(-259.26254,-146.9955)" id="doc">
-<desc id="desc16903">A document or report</desc>
-<title id="title16901">Document</title>
-<path sodipodi:nodetypes="ccsccc" inkscape:connector-curvature="0" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ccff99;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" d="m 664.05943,271.13949 0,48.46273 c 0.15644,-0.16804 5.34098,-5.50818 27.77334,-1.78093 22.43234,3.72728 28.9984,-3.56857 29.198,-3.79732 L 721.03077,271.13949 Z" id="path3082" inkscape:label="Document" />
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="692.1427" y="299.71402" id="text2292" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2294" x="692.1427" y="299.71402" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Document</tspan></text>
-</symbol>
-<symbol transform="translate(-3.74542,-307.85859)" id="dastore">
-<desc id="desc16911">Storage on a hard drive</desc>
-<title id="title16909">Direct Access Storage</title>
-<g id="g3140-9" transform="matrix(0,0.45151541,-0.50222367,0,262.80673,328.38817)" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:none;stroke:#000000;stroke-width:4.19995975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto">
-<path inkscape:connector-curvature="0" inkscape:label="MagneticStorage" id="path1774-7" d="m 399.27296,142.26965 0,99.625 c -0.007,0.11709 0,0.25738 0,0.375 0,0.11762 -0.007,0.22666 0,0.34375 l 0,0.65625 0.0937,0 c 1.75969,9.56464 28.20983,17.1875 60.53125,17.1875 32.32143,0 58.74032,-7.62285 60.5,-17.1875 l 0.0937,0 0,-0.53125 c 0.0132,-0.15588 0,-0.31192 0,-0.46875 0,-0.15683 0.0132,-0.31287 0,-0.46875 l 0,-99.53125 L 399.27296,142.26965 Z" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ccff99;stroke:#000000;stroke-width:4.19995975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
-<path transform="matrix(0.991803,0,0,1,374.0872,77.83652)" d="m 147.4823,63.42284 c 0,10.04205 -27.3618,18.18275 -61.11426,18.18275 -33.75245,0 -61.11423,-8.1407 -61.11423,-18.18275 0,-10.04205 27.36178,-18.18274 61.11423,-18.18274 C 120.1205,45.2401 147.4823,53.38079 147.4823,63.42284 Z" sodipodi:ry="18.182745" sodipodi:rx="61.114227" sodipodi:cy="63.42284" sodipodi:cx="86.368042" id="path1772-8" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ccff99;stroke:#000000;stroke-width:4.21727943;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" sodipodi:type="arc" />
-</g>
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="158.72659" y="532.38654" id="text2316-7" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" x="158.72659" y="532.38654" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" id="tspan2361-5">Direct</tspan><tspan id="tspan16915" sodipodi:role="line" x="158.72659" y="544.88654" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Access</tspan></text>
-</symbol>
-<symbol transform="translate(-442.60333,16.65882)" id="stored">
-<desc id="desc16919">A general data storage flowchart symbol.</desc>
-<title id="title16917">Stored Data</title>
-<path inkscape:connector-curvature="0" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ccff99;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" d="m 726.36321,184.49018 -51.97557,0 c -0.0611,-0.003 -0.1343,0 -0.19569,0 -0.0612,0 -0.11828,-0.003 -0.17934,0 l -0.34236,0 0,0.0416 c -4.98998,0.7838 -8.96693,12.56513 -8.96693,26.96163 0,14.3965 3.97695,26.16391 8.96693,26.94771 l 0,0.0416 0.27721,0 c 0.0813,0.006 0.16266,0 0.24449,0 0.0818,-1e-5 0.16326,0.006 0.24456,0 l 51.63327,0 c -5.09509,-0.45976 -9.17884,-12.37755 -9.17884,-26.98946 0,-14.90298 4.23596,-26.98946 9.47227,-26.98946 L 726.36321,184.49018 Z" id="path3037" inkscape:label="Transaction" />
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:center;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:middle;baseline-shift:baseline;color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="690.9895" y="215.1076" id="text2371" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2373" x="690.9895" y="215.1076" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:center;text-decoration:none;line-height:125%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:middle;baseline-shift:baseline;color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;font-family:FreeSans;-inkscape-font-specification:FreeSans">Stored</tspan></text>
-</symbol>
-<symbol transform="translate(-189.08032,96.83018)" id="mstore">
-<desc id="desc16923">A database</desc>
-<title id="title16921">Magnetic Disk (Database)</title>
-<g id="g3140" transform="matrix(0.45151541,0,0,0.45127326,324.56977,44.778837)" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:none;stroke:#000000;stroke-width:4.43071604;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto">
-<path inkscape:connector-curvature="0" inkscape:label="MagneticStorage" id="path1774" d="m 399.27296,142.26965 0,99.625 c -0.007,0.11709 0,0.25738 0,0.375 0,0.11762 -0.007,0.22666 0,0.34375 l 0,0.65625 0.0937,0 c 1.75969,9.56464 28.20983,17.1875 60.53125,17.1875 32.32143,0 58.74032,-7.62285 60.5,-17.1875 l 0.0937,0 0,-0.53125 c 0.0132,-0.15588 0,-0.31192 0,-0.46875 0,-0.15683 0.0132,-0.31287 0,-0.46875 l 0,-99.53125 L 399.27296,142.26965 Z" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ccff99;stroke:#000000;stroke-width:4.43071604;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
-<path transform="matrix(0.991803,0,0,1,374.0872,77.83652)" d="m 147.4823,63.42284 c 0,10.04205 -27.3618,18.18275 -61.11426,18.18275 -33.75245,0 -61.11423,-8.1407 -61.11423,-18.18275 0,-10.04205 27.36178,-18.18274 61.11423,-18.18274 C 120.1205,45.2401 147.4823,53.38079 147.4823,63.42284 Z" sodipodi:ry="18.182745" sodipodi:rx="61.114227" sodipodi:cy="63.42284" sodipodi:cx="86.368042" id="path1772" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ccff99;stroke:#000000;stroke-width:4.44898748;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" sodipodi:type="arc" />
-</g>
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="531.85986" y="134.82974" id="text2316" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2318" x="531.85986" y="134.82974" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Magnetic</tspan><tspan sodipodi:role="line" x="531.85986" y="147.32974" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" id="tspan2361">Storage</tspan></text>
-</symbol>
-<symbol transform="translate(198.63092,312.196)" id="tape">
-<desc id="desc16927">Old computer punched tape input.</desc>
-<title id="title16925">Punched Tape</title>
-<path sodipodi:nodetypes="cscccccscccccc" inkscape:connector-curvature="0" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ccff99;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" d="m 265.65164,-109.58642 c 0,0 -5.4249,6.14841 -30.22479,1.98124 -24.7999,-4.16718 -31.7752,4.16602 -31.7752,4.16602 l 0,3.06682 0,33.161001 0,1.764119 0,7.015731 c 0.17023,-0.184959 5.81238,-6.069723 30.2248,-1.967654 24.41241,4.10207 31.558,-3.92785 31.77519,-4.179585 l 0,-0.868492 0,-2.198359 0,-33.161001 L 265.65164,-103.43916 Z" id="rect2921" inkscape:label="PaperTape" />
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.22499999;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="234.61916" y="-81.506783" id="text2300" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2302" x="234.61916" y="-81.506783" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.22499999;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Tape</tspan></text>
-</symbol>
-<symbol transform="translate(-55.50095,267.22175)" id="term">
-<desc id="desc16931">A start or stop point in a process.</desc>
-<title id="title16929">Terminator</title>
-<path style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" d="m 105.14401,53.478192 c -12.723391,0 -12.788458,-27.107441 0,-27.107441 l 46.08265,0 C 163.36709,26.370751 164.02264,53.478192 151.22666,53.478192 Z" id="path15200" inkscape:connector-curvature="0" sodipodi:nodetypes="sssss" />
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="128.21051" y="43.460175" id="text2375" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2377" x="128.21051" y="43.460175" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Termination</tspan></text>
-</symbol>
-<symbol id="tarrow">
-<title id="title2283">Thick Arrow</title>
-<desc id="desc2281">Indicates movement of blocks.</desc>
-<path inkscape:connector-curvature="0" id="internalt" d="m 146.78332,233.23184 -9.38314,13.27679 5.66399,0 0,47.28792 7.4383,0 0,-47.28792 L 156.11336,246.50863 Z" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" sodipodi:nodetypes="cccccccc" inkscape:label="#thickinternal" />
-</symbol>
-<symbol style="fill:#eeeeee;stroke-width:1.80955124" transform="matrix(1.1014632,0,0,1.1090426,-228.80291,173.3747)" id="transfer">
-<desc id="desc16965">Transfer of materials.</desc>
-<title id="title16963">Transfer</title>
-<path sodipodi:nodetypes="cccccccc" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;stroke:#000000;stroke-width:1.80955112;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" d="m 628.78052,120.56386 -20.39208,18.12317 0,-10.93978 -35.43572,0 0,-14.36678 35.43572,0 L 608.38844,102.54325 Z" id="path2672-1" inkscape:connector-curvature="0" />
-</symbol>
-<symbol transform="translate(-531.78115,326.77543)" id="dec">
-<desc id="desc16969">A question or branch in the process.</desc>
-<title id="title16967">Decision</title>
-<rect style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="rect1748" width="43.248375" height="43.248375" x="447.64825" y="-406.92166" transform="matrix(0.70720774,0.70700581,-0.70720774,0.70700581,0,0)" inkscape:label="Decision" />
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="604.17273" y="62.909267" id="text2336" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2338" x="604.17273" y="62.909267" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Decision</tspan></text>
-</symbol>
-<symbol id="arrow">
-<desc id="desc16945">Shows flow from one block to another.</desc>
-<title id="title16943">Flow Arrow</title>
-<path id="path192" inkscape:connector-curvature="0" d="m 222.67855,276.29885 63,46" style="fill:#eeeeee;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Mstart)" />
-</symbol>
-<symbol id="carrow">
-<desc id="desc16961">Arrow with additional circle.</desc>
-<title id="title16959">Circle Arrow</title>
-<path id="path197" inkscape:label="#circle-arrow" inkscape:connector-curvature="0" d="m 309.86158,273.28761 63,46" style="fill:#eeeeee;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Mstart-1);marker-end:url(#DotM)" />
-</symbol>
-<symbol style="fill:none;stroke:#000000;stroke-width:2" transform="translate(-201.73482,156.11026)" id="page">
-<desc id="desc16973">Continuation on another page</desc>
-<title id="title16971">Off-Page Connector</title>
-<path sodipodi:nodetypes="cccccc" inkscape:connector-curvature="0" id="path15445-6" d="m 333.38546,239.7364 0.013,-36.16948 62.19282,0.0281 -0.0129,36.16949 L 364.47541,256.37157 Z" inkscape:transform-center-y="-6.8590643" inkscape:transform-center-x="-4.1596926" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
-<text transform="scale(1.0001428,0.99985722)" sodipodi:linespacing="125%" id="text2292-0-9" y="226.62294" x="364.33694" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" xml:space="preserve"><tspan style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" y="226.62294" x="364.33694" id="tspan2294-7-5" sodipodi:role="line">Page ...</tspan></text>
-</symbol>
-<symbol transform="translate(-441.91488,337.637)" id="conn">
-<desc id="desc16977">A jump from one point to another.</desc>
-<title id="title16975">Connector</title>
-<path sodipodi:type="arc" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;stroke:#000000;stroke-width:3.94343448;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="path1768" sodipodi:cx="514.67273" sodipodi:cy="106.35432" sodipodi:rx="61.114227" sodipodi:ry="61.114227" d="m 575.787,106.3543 c 0,33.7525 -27.3618,61.1142 -61.1143,61.1142 -33.7524,0 -61.1142,-27.3617 -61.1142,-61.1142 0,-33.75244 27.3618,-61.11421 61.1142,-61.11421 C 548.4252,45.24009 575.787,72.60186 575.787,106.3543 Z" inkscape:label="Connector" transform="matrix(0.50724453,0,0,0.50709971,433.77989,-5.423025)" />
-<text xml:space="preserve" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="694.64575" y="52.106144" id="text2332" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2334" x="694.64575" y="52.106144" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Connector</tspan></text>
-</symbol>
-<symbol style="fill:#eeeeee;stroke:#000000;stroke-width:1.67472553" transform="matrix(0.84444487,-0.84444487,0.84444487,0.84444487,-351.81177,721.76382)" id="or">
-<title id="title15627">Logical Or</title>
-<path sodipodi:type="arc" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;stroke:#000000;stroke-width:3.94285369;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="path2798-5" sodipodi:cx="514.67273" sodipodi:cy="106.35432" sodipodi:rx="61.114227" sodipodi:ry="61.114227" d="m 575.787,106.3543 c 0,33.7525 -27.3618,61.1142 -61.1143,61.1142 -33.7524,0 -61.1142,-27.3617 -61.1142,-61.1142 0,-33.75244 27.3618,-61.11421 61.1142,-61.11421 C 548.4252,45.24009 575.787,72.60186 575.787,106.3543 Z" transform="matrix(0.30038626,0.3003005,-0.30038626,0.3003005,487.53201,26.248832)" />
-<rect style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;stroke:#000000;stroke-width:1.67472553;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="rect2800-6" width="1.0726552" height="51.278145" x="581.83026" y="-306.55136" transform="matrix(0.70720773,0.70700582,-0.70720773,0.70700582,0,0)" />
-<rect style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;stroke:#000000;stroke-width:1.67472553;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="rect2802-5" width="1.0726552" height="51.278145" x="-281.34137" y="-607.48657" transform="matrix(-0.70720773,0.70700582,-0.70720773,-0.70700582,0,0)" />
-</symbol>
-<symbol style="fill:#eeeeee;stroke-width:1.67463279" transform="matrix(1.1942916,0,0,1.1942916,-295.45656,132.06837)" id="and">
-<desc id="desc16979">Summing Junction</desc>
-<title id="title15629">Logical And</title>
-<path sodipodi:type="arc" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;stroke:#000000;stroke-width:3.94263458;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="path2798" sodipodi:cx="514.67273" sodipodi:cy="106.35432" sodipodi:rx="61.114227" sodipodi:ry="61.114227" d="m 575.787,106.3543 c 0,33.7525 -27.3618,61.1142 -61.1143,61.1142 -33.7524,0 -61.1142,-27.3617 -61.1142,-61.1142 0,-33.75244 27.3618,-61.11421 61.1142,-61.11421 C 548.4252,45.24009 575.787,72.60186 575.787,106.3543 Z" transform="matrix(0.30038626,0.3003005,-0.30038626,0.3003005,487.53201,26.248832)" />
-<rect style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;stroke:#000000;stroke-width:1.67463279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="rect2800" width="1.0726552" height="51.278145" x="581.83026" y="-306.55136" transform="matrix(0.70720773,0.70700582,-0.70720773,0.70700582,0,0)" />
-<rect style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#eeeeee;stroke:#000000;stroke-width:1.67463279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="rect2802" width="1.0726552" height="51.278145" x="-281.34137" y="-607.48657" transform="matrix(-0.70720773,0.70700582,-0.70720773,-0.70700582,0,0)" />
-</symbol>
-<symbol style="fill:none;stroke:#000000;stroke-width:1.66112018" transform="matrix(1.2040057,0,0,1.2040079,-470.35928,392.67678)" id="manual">
-<desc id="desc16983">A process step that isn't automated.</desc>
-<title id="title16981">Manual Operation</title>
-<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="rect1738-82" d="m 425.19449,41.094613 51.49477,0 -9.96673,38.191119 L 435.16122,79.285732 Z" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#fdd99b;stroke:#000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
-<text xml:space="preserve" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" x="450.68307" y="57.129848" id="text2344-6" sodipodi:linespacing="125%" transform="scale(1.0001428,0.99985722)"><tspan sodipodi:role="line" id="tspan2346-5" x="450.68307" y="57.129848" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Manual</tspan><tspan id="tspan15536" sodipodi:role="line" x="450.68307" y="67.511848" style="font-size:8.30560112px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08305602;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans">Operation</tspan></text>
-</symbol>
-<symbol transform="translate(-189.40744,233.66195)" id="prep">
-<desc id="desc16987">A preparation or setup process step.</desc>
-<title id="title16985">Preparation</title>
-<path sodipodi:type="star" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#fdd99b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.2332437;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" id="path15445" sodipodi:sides="6" sodipodi:cx="323.353" sodipodi:cy="232.61865" sodipodi:r1="44.52523" sodipodi:r2="22.262615" sodipodi:arg1="0.87160374" sodipodi:arg2="1.3952025" inkscape:flatsided="true" inkscape:rounded="0" inkscape:randomized="0" d="m 352.0094,266.6966 -43.8405,7.7782 -28.6565,-34.0779 15.1842,-41.8562 43.8405,-7.7782 L 367.1936,224.8404 Z" inkscape:transform-center-x="4.6863777" inkscape:transform-center-y="-2.8612843" transform="matrix(0.67912477,0.09710304,-0.12074373,0.54615741,160.65128,73.039317)" />
-<text transform="scale(1.0001428,0.99985722)" sodipodi:linespacing="125%" id="text2292-0" y="234.07233" x="352.01132" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" xml:space="preserve"><tspan style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" y="234.07233" x="352.01132" id="tspan2294-7" sodipodi:role="line">Preparation</tspan></text>
-</symbol>
-<symbol style="fill:none;stroke:#000000;stroke-width:2" transform="translate(-99.78792,233.66204)" id="display">
-<desc id="desc16991">A machine display.</desc>
-<title id="title16989">Display</title>
-<path sodipodi:nodetypes="scccss" inkscape:connector-curvature="0" id="path15445-4" d="m 352.00943,266.69658 -43.84056,7.77823 -28.65644,-34.07792 15.18413,-41.85616 43.84057,-7.77824 C 370.43074,185.10389 383.46451,261.11579 352.00943,266.69658 Z" inkscape:transform-center-y="-2.8612843" inkscape:transform-center-x="4.6863777" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#fdd99b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.2332437;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" transform="matrix(0.67912477,0.09710304,-0.12074373,0.54615741,160.65128,73.039317)" />
-<text transform="scale(1.0001428,0.99985722)" sodipodi:linespacing="125%" id="text2292-0-5" y="234.07233" x="352.01132" style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" xml:space="preserve"><tspan style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.10000001;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:FreeSans;-inkscape-font-specification:FreeSans" y="234.07233" x="352.01132" id="tspan2294-7-0" sodipodi:role="line">Display</tspan></text>
-</symbol>
-<symbol style="fill:#fdd99b;stroke-width:1.76906455" transform="matrix(1.1325502,0,0,1.1285354,202.01424,414.38018)" id="sort">
-<desc id="desc15677">Sorting of data into a pre-defined order.</desc>
-<title id="title15675">Sort</title>
-<path inkscape:connector-curvature="0" id="path15673" d="m 124.5625,18.40625 -26.09375,26.125 52.21875,0 L 124.5625,18.40625 Z" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#fdd99b;stroke:#000000;stroke-width:1.76906455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
-<path inkscape:connector-curvature="0" id="rect1748-3" d="m 98.4375,45.4375 26.125,26.125 26.15625,-26.125 L 98.4375,45.4375 Z" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#fdd99b;stroke:#000000;stroke-width:1.76906455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" />
-</symbol>
-<symbol style="fill:#fdd99b;stroke-width:1.76993906" transform="matrix(1.1328602,0,0,1.1271119,130.80902,-76.995081)" id="collate">
-<desc id="desc16993">Organising data into a standard format or arrangement.</desc>
-<title id="title15669">Collate</title>
-<path style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#fdd99b;stroke:#000000;stroke-width:1.76993906;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" d="m 266.98335,481.4223 -26.09375,26.125 52.21875,0 L 266.98335,481.4223 Z" id="path15663" inkscape:connector-curvature="0" />
-<path inkscape:connector-curvature="0" style="color:#000000;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#fdd99b;stroke:#000000;stroke-width:1.76993906;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;clip-rule:nonzero;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto" d="m 240.85835,454.45355 26.125,26.125 26.15625,-26.125 L 240.85835,454.45355 Z" id="rect1748-3-4" />
-</symbol>
-</defs>
-<use id="use3390" xlink:href="#process" x="0" y="0" transform="translate(-0.076101,-8.646224)" />
-<use id="use3421" xlink:href="#extract" x="0" y="0" transform="translate(-0.076096,-8.646224)" />
-<use id="use3453" xlink:href="#minput" x="0" y="0" transform="translate(-0.0761,-8.646229)" />
-<use id="use3485" xlink:href="#merge" x="0" y="0" transform="translate(-0.076095,-8.646224)" />
-<use id="use3516" xlink:href="#delay" x="0" y="0" transform="translate(-0.076098,-8.646221)" />
-<use id="use3549" xlink:href="#pprocess" x="0" y="0" transform="translate(-0.076103,-8.646227)" />
-<use id="use3583" xlink:href="#aproc" x="0" y="0" transform="translate(-0.076101,-8.646223)" />
-<use id="use3615" xlink:href="#data" x="0" y="0" transform="translate(-0.076102,-8.646223)" />
-<use id="use3650" xlink:href="#istorage" x="0" y="0" transform="translate(-0.076096,-8.64622)" />
-<use id="use3685" xlink:href="#card" x="0" y="0" transform="translate(-0.076097,-8.646224)" />
-<use id="use3716" xlink:href="#doc" x="0" y="0" transform="translate(-0.076099,-8.646222)" />
-<use id="use3750" xlink:href="#dastore" x="0" y="0" transform="translate(-0.076096,-8.646228)" />
-<use id="use3784" xlink:href="#stored" x="0" y="0" transform="translate(-0.076101,-8.646228)" />
-<use id="use3818" xlink:href="#mstore" x="0" y="0" transform="translate(-0.076102,-8.646223)" />
-<use id="use3852" xlink:href="#tape" x="0" y="0" transform="translate(-0.076104,-8.646224)" />
-<use id="use3883" xlink:href="#term" x="0" y="0" transform="translate(-0.0761,-8.646223)" />
-<use id="use3912" xlink:href="#tarrow" x="0" y="0" transform="translate(15.923903,35.353776)" />
-<use id="use3939" xlink:href="#transfer" x="0" y="0" transform="translate(-0.076097,-8.646227)" />
-<use id="use3968" xlink:href="#dec" x="0" y="0" transform="translate(-0.076101,-8.646222)" />
-<use id="use3999" xlink:href="#page" x="0" y="0" transform="translate(-0.0761,-8.646222)" />
-<use id="use4030" xlink:href="#conn" x="0" y="0" transform="translate(-0.076102,-8.64622)" />
-<use id="use4060" xlink:href="#or" x="0" y="0" transform="translate(-0.076099,-8.646228)" />
-<use id="use4090" xlink:href="#and" x="0" y="0" transform="translate(-0.076098,-8.646224)" />
-<use id="use4122" xlink:href="#manual" x="0" y="0" transform="translate(-0.0761,-8.646225)" />
-<use id="use4154" xlink:href="#prep" x="0" y="0" transform="translate(-0.076105,-8.646228)" />
-<use id="use4185" xlink:href="#display" x="0" y="0" transform="translate(-0.076104,-8.646227)" />
-<use id="use4215" xlink:href="#sort" x="0" y="0" transform="translate(-0.076095,-8.646219)" />
-<use id="use4244" xlink:href="#collate" x="0" y="0" transform="translate(-0.076095,-8.646224)" />
-<use id="use3337" xlink:href="#carrow" x="0" y="0" transform="translate(-87.03015,2.000003)" />
-<use id="use3364" xlink:href="#arrow" x="0" y="0" transform="translate(94.146162,0.99999688)" />
+<svg
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ width="900"
+ height="900"
+ viewBox="0,0,900,900"
+ version="1.1"
+ style="fill:#aaccee;stroke:black">
+ <metadata>
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Flow Chart Shapes</dc:title>
+ <dc:date>2013-04-18</dc:date>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Tavmjong Bah</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title />
+ </cc:Agent>
+ </dc:rights>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>Martin Owens</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:language>English</dc:language>
+ <dc:description>Basic Flowchart Symbols</dc:description>
+ <cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
+ </cc:Work>
+ <cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/">
+ <cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction" />
+ <cc:permits rdf:resource="http://creativecommons.org/ns#Distribution" />
+ <cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <title>Flow Chart Shapes</title>
+ <defs>
+
+ <!--
+ Based on IBM Flowcharting Template X20-8020, 1970 Revision.
+ Also DIN 66001 and ISO 5807.
+ Original grid is 1/10", Basic height = 8 units, Basic width = 12 units.
+ Drawn at 1 unit = 10 px (slightly larger that actual template).
+ Symbols are centered in a 150x150px square.
+ -->
+
+ <symbol id="Process">
+ <title>Process</title>
+ <desc>Any processing function.</desc>
+ <rect x="15" y="35" width="120" height="80" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="InputOutput">
+ <title>Input/Output</title>
+ <desc>General input/output functions.</desc>
+ <path d="m 35,35 100,0 -20,80 -100,0 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="Document">
+ <title>Document</title>
+ <desc>A document or report</desc>
+ <path d="m 15,35 120,0 0,60 c -50,-5 -70,35 -120,10 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="ManualOperation">
+ <title>Manual Operation</title>
+ <desc>An offline process (at "human speed").</desc>
+ <path d="m 15,35 120,0 -30,80 -60,0 z" style="stroke-width:2px"/>
+ </symbol>
+
+ <symbol id="Preparation">
+ <title>Preparation</title>
+ <desc>A preparation or setup process step. (ISO)</desc>
+ <path d="m 35,35 80,0 20,40 -20,40 -80,0 -20,-40 z" style="stroke-width:2px"/>
+ </symbol>
+
+ <symbol id="Merge">
+ <title>Merge</title>
+ <desc>Combine two or more sets of items into one set. (ISO)</desc>
+ <path d="m 35,35 80,0 -40,70 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="Decision">
+ <title>Decision</title>
+ <desc>A decision or switching type operation.</desc>
+ <path d="m 15,75 60,-40 60,40 -60,40 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="MagneticTape">
+ <title>Magnetic Tape</title>
+ <desc>Magnetic tape storage</desc>
+ <circle cx="75" cy="75" r="40" style="stroke-width:2"/>
+ <path d="m 75,115 40,0" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="Display">
+ <title>Display</title>
+ <desc>Information display by online indicators, video devices, printers, etc.</desc>
+ <path d="m 15,75 a 100,100 0 0 1 40,-40 l 65,0 a 60,60 0 0 1 0,80 l -65,0 a 100,100 0 0 1 -40,-40 z" style="stroke-width:2px"/>
+ </symbol>
+
+ <symbol id="AuxillaryOp">
+ <title>Auxillary Operation</title>
+ <desc>Offline operation.</desc>
+ <rect x="35" y="35" width="80" height="80" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="ManualInput">
+ <title>Manual Input</title>
+ <desc>Information input by online keyboards, switches, etc.</desc>
+ <path d="m 15,65 120,-20 0,60 -120,0 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="Extract">
+ <title>Extract</title>
+ <desc>Removel of one or more specific sets of times from a set. (ISO)</desc>
+ <path d="m 35,115 40,-70 40,70 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="Terminal">
+ <title>Terminal/Interupt</title>
+ <desc>A terminal point in a flowchart: start, stop, halt, etc.</desc>
+ <path d="m 35,95 a 20,20 0 0 1 0,-40 l 80,0 a 20,20 0 0 1 0,40 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="PunchedCard">
+ <title>Punched Card</title>
+ <desc>Input/output function in card medium.</desc>
+ <path d="m 15,55 10,-10 110,0 0,60 -120,0 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="PunchedTape">
+ <title>Punch Tape</title>
+ <desc>Punched tape.</desc>
+ <path d="m 15,50 c 50,20 70,-20 120,0 l 0,50 c -50,-20 -70,20 -120,0 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="OnlineStorage">
+ <title>Online Storage</title>
+ <desc>Input/output using any kind of online storage.</desc>
+ <path d="m 25,115 a 65,65 0 0 1 0,-80 l 110,0 a 65,65 0 0 0 0,80 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="Keying">
+ <title>Keying</title>
+ <desc>Operation using a key-driven device, e.g. typing. (IBM)</desc>
+ <path d="m 25,115 a 65,65 0 0 1 0,-80 l 100,0 a 65,65 0 0 1 0,80 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="Sort">
+ <title>Sort</title>
+ <desc>Arrange a set of items into sequence. (ISO)</desc>
+ <path d="m 35,75 40,-75 40,75 -40,75 z m 0,0 80,0" style="stroke-width:2px"/>
+ </symbol>
+
+ <symbol id="Connector">
+ <title>Connector</title>
+ <desc>Exit to or entry from another part of chart.</desc>
+ <circle cx="75" cy="75" r="20" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="Offpage">
+ <title>Off-Page Connector</title>
+ <desc>Exit to or entry from a page. (IBM)</desc>
+ <path d="m 55,55 40,0 0,30 -20,20 -20,-20 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="TransmittalTape">
+ <title>Transmittal Tape</title>
+ <desc>Adding machine tape or other batch control information. (IBM)</desc>
+ <path d="m 35,45 40,0 0,80 c -10,-10 -30,-15 -40,-15 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="CommunicationLink">
+ <title>Communication Link</title>
+ <desc>Transcommunication link.</desc>
+ <path d="m 65,25 0,60 20,-20 0,60" style="fill:none;stroke-width:2"/>
+ </symbol>
+
+ <symbol id="Collate">
+ <title>Collate</title>
+ <desc>Merge with extracting. (ISO)</desc>
+ <path d="m 75,75 -40,-70 80,0 z m 0,0 40,70 -80,0 z" style="stroke-width:2px"/>
+ </symbol>
+
+ <symbol id="Comment">
+ <title>Comment/Annotation</title>
+ <desc>Additional descriptive clarification (connect by dotted line).</desc>
+ <path d="m 135,115 -120,0 0,-80 120,0" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="Core">
+ <title>Core</title>
+ <desc>Core memory. (ISO)</desc>
+ <rect x="35" y="35" width="80" height="80" style="stroke-width:2"/>
+ <path d="m 35,50 80,0" style="stroke-width:2"/>
+ <path d="m 50,35 0,80" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="PredefinedProcess">
+ <title>Predefined Process</title>
+ <desc>A formally defined sub-process.</desc>
+ <rect x="15" y="35" width="120" height="80" style="stroke-width:2"/>
+ <rect x="35" y="35" width="80" height="80" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="MagneticDisk">
+ <title>Magnetic Disk (Database)</title>
+ <desc>A magnetic disk. (ISO)</desc>
+ <path d="m 35,25 a 65,65 0 0 1 80,0 l 0,100 a 65,65 0 0 1 -80,0 z" style="stroke-width:2"/>
+ <path d="m 115,25 a 65,65 0 0 1 -80,0" style="fill:none;stroke-width:2;stroke-linecap:butt"/>
+ <path d="m 115,40 a 65,65 0 0 1 -80,0" style="fill:none;stroke-width:2;stroke-linecap:butt"/>
+ <path d="m 115,55 a 65,65 0 0 1 -80,0" style="fill:none;stroke-width:2;stroke-linecap:butt"/>
+ </symbol>
+
+ <symbol id="MagneticDrum">
+ <title>Magnetic Drum (Direct Access)</title>
+ <desc>Magnetic drum. (ISO)</desc>
+ <path d="m 25,115 a 65,65 0 0 1 0,-80 l 100,0 a 65,65 1 0 1 0,80 z" style="stroke-width:2"/>
+ <path d="m 125,115 a 65,65 0 0 1 0,-80" style="fill:none;stroke-width:2;stroke-linecap:butt"/>
+ </symbol>
+
+ <symbol id="OfflineStorage">
+ <title>Offline Storage</title>
+ <desc>Offline storage.</desc>
+ <path d="m 35,35 80,0 -40,70 z" style="stroke-width:2"/>
+ <path d="m 60,80 30,0" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="LogicalOr">
+ <title>Logical Or</title>
+ <desc>Shows when a process diverges.</desc>
+ <circle cx="75" cy="75" r="20" style="stroke-width:2"/>
+ <path d="m 55,75 40,0" style="stroke-width:2"/>
+ <path d="m 75,55 0,40" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="LogicalAnd">
+ <title>Logical And</title>
+ <desc>Summing junction. Shows when multiple branches converge.</desc>
+ <circle cx="75" cy="75" r="20" style="stroke-width:2"/>
+ <path d="m 61,61 28,28" style="stroke-width:2"/>
+ <path d="m 61,89 28,-28" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="Delay">
+ <title>Delay</title>
+ <desc>A waiting period.</desc>
+ <path d="m 15,35 60,0 a 60,40 0 0 1 0,80 l -60,0 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="LoopLimitBegin">
+ <title>Loop Limit Begin</title>
+ <desc>Start of a loop.</desc>
+ <path d="m 15,75 20,-40 80,0 20,40 0,40 -120,0 z" style="stroke-width:2"/>
+ </symbol>
+
+ <symbol id="LoopLimitEnd">
+ <title>Loop Limit End</title>
+ <desc>End of a loop.</desc>
+ <path d="m 15,75 0,-40 120,0 0,40 -20,40 -80,0 z" style="stroke-width:2"/>
+ </symbol>
+
+ </defs>
+
+ <use xlink:href="#Process" x="0" y="0" />
+ <use xlink:href="#InputOutput" x="150" y="0" />
+ <use xlink:href="#Document" x="300" y="0" />
+ <use xlink:href="#ManualOperation" x="450" y="0" />
+ <use xlink:href="#Preparation" x="600" y="0" />
+ <use xlink:href="#Merge" x="750" y="0" />
+
+ <use xlink:href="#Decision" x="0" y="150" />
+ <use xlink:href="#MagneticTape" x="150" y="150" />
+ <use xlink:href="#Display" x="300" y="150" />
+ <use xlink:href="#AuxillaryOp" x="450" y="150" />
+ <use xlink:href="#ManualInput" x="600" y="150" />
+ <use xlink:href="#Extract" x="750" y="150" />
+
+ <use xlink:href="#Terminal" x="0" y="300" />
+ <use xlink:href="#PunchedCard" x="150" y="300" />
+ <use xlink:href="#PunchedTape" x="300" y="300" />
+ <use xlink:href="#OnlineStorage" x="450" y="300" />
+ <use xlink:href="#Keying" x="600" y="300" />
+
+ <use xlink:href="#Connector" x="0" y="450" />
+ <use xlink:href="#Offpage" x="150" y="450" />
+ <use xlink:href="#TransmittalTape" x="300" y="450" />
+ <use xlink:href="#CommunicationLink" x="450" y="450" />
+
+ <!-- Symbols made using the above symbols -->
+ <use xlink:href="#Sort" x="600" y="450" />
+ <use xlink:href="#Collate" x="750" y="450" />
+
+ <use xlink:href="#Comment" x="0" y="600" />
+ <use xlink:href="#Core" x="150" y="600" />
+ <use xlink:href="#PredefinedProcess" x="300" y="600" />
+ <use xlink:href="#MagneticDisk" x="450" y="600" />
+ <use xlink:href="#MagneticDrum" x="600" y="600" />
+ <use xlink:href="#OfflineStorage" x="750" y="600" />
+
+ <!-- Symbols not in IBM Flowcharting Template -->
+ <use xlink:href="#LogicalOr" x="0" y="750" />
+ <use xlink:href="#LogicalAnd" x="150" y="750" />
+ <use xlink:href="#Delay" x="450" y="750" />
+
+ <!-- ISO 5807 -->
+ <use xlink:href="#LoopLimitBegin" x="600" y="750" />
+ <use xlink:href="#LoopLimitEnd" x="750" y="750" />
+
</svg>
diff --git a/src/box3d-side.cpp b/src/box3d-side.cpp
index dfccb63bf..a5e7eaa94 100644
--- a/src/box3d-side.cpp
+++ b/src/box3d-side.cpp
@@ -213,6 +213,8 @@ void Box3DSide::set_shape() {
bool success = this->performPathEffect(c_lpe);
if (success) {
+ sp_lpe_item_apply_to_mask(this);
+ sp_lpe_item_apply_to_clippath(this);
this->setCurveInsync(c_lpe, TRUE);
}
diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp
index 37f537cc5..f6347e5c0 100644
--- a/src/desktop-style.cpp
+++ b/src/desktop-style.cpp
@@ -211,11 +211,17 @@ sp_desktop_set_style(SPDesktop *desktop, SPCSSAttr *css, bool change, bool write
for (GSList const *i = desktop->selection->itemList(); i != NULL; i = i->next) {
- // If not text, don't apply text attributes (can a group have text attributes?)
+ // If not text, don't apply text attributes (can a group have text attributes? Yes! FIXME)
if ( SP_IS_TEXT(i->data) || SP_IS_FLOWTEXT(i->data)
|| SP_IS_TSPAN(i->data) || SP_IS_TREF(i->data) || SP_IS_TEXTPATH(i->data)
|| SP_IS_FLOWDIV(i->data) || SP_IS_FLOWPARA(i->data) || SP_IS_FLOWTSPAN(i->data)) {
+ // If any font property has changed, then we have written out the font
+ // properties in longhand and we need to remove the 'font' shorthand.
+ if( !sp_repr_css_property_is_unset(css, "font-family") ) {
+ sp_repr_css_unset_property(css, "font");
+ }
+
sp_desktop_apply_css_recursive(SP_OBJECT(i->data), css, true);
} else {
diff --git a/src/libnrtype/FontFactory.cpp b/src/libnrtype/FontFactory.cpp
index 4ae408397..6859a4a5c 100644
--- a/src/libnrtype/FontFactory.cpp
+++ b/src/libnrtype/FontFactory.cpp
@@ -54,226 +54,11 @@ bool font_descr_equal::operator()( PangoFontDescription *const&a, PangoFontDesc
/////////////////// helper functions
-/**
- * A wrapper for strcasestr that also provides an implementation for Win32.
- */
-static bool
-ink_strstr(char const *haystack, char const *pneedle)
-{
- // windows has no strcasestr implementation, so here is ours...
- // stolen from nmap
- /* FIXME: This is broken for e.g. ink_strstr("aab", "ab"). Report to nmap.
- *
- * Also, suggest use of g_ascii_todown instead of buffer stuff, and g_ascii_tolower instead
- * of tolower. Given that haystack is a font name (i.e. fairly short), it should be ok to
- * do g_ascii_strdown on both haystack and pneedle, and do normal strstr.
- *
- * Rather than fixing in inkscape, consider getting rid of this routine, instead using
- * strdown and plain strstr at caller. We have control over the needle values, so we can
- * modify the callers rather than calling strdown there.
- */
- char buf[512];
- register char const *p;
- char *needle, *q, *foundto;
- if (!*pneedle) return true;
- if (!haystack) return false;
-
- needle = buf;
- p = pneedle; q = needle;
- while ((*q++ = tolower(*p++)))
- ;
- p = haystack - 1; foundto = needle;
- while (*++p) {
- if (tolower(*p) == *foundto) {
- if (!*++foundto) {
- /* Yeah, we found it */
- return true;
- }
- } else foundto = needle;
- }
- return false;
-}
-
-/**
- * Regular fonts are 'Regular', 'Roman', 'Normal', or 'Plain'
- */
-// FIXME: make this UTF8, add non-English style names
-static bool
-is_regular(char const *s)
-{
- if (ink_strstr(s, "Regular")) return true;
- if (ink_strstr(s, "Roman")) return true;
- if (ink_strstr(s, "Normal")) return true;
- if (ink_strstr(s, "Plain")) return true;
- return false;
-}
-
-/**
- * Non-bold fonts are 'Medium' or 'Book'
- */
-static bool
-is_nonbold(char const *s)
-{
- if (ink_strstr(s, "Medium")) return true;
- if (ink_strstr(s, "Book")) return true;
- return false;
-}
-
-/**
- * Italic fonts are 'Italic', 'Oblique', or 'Slanted'
- */
-static bool
-is_italic(char const *s)
-{
- if (ink_strstr(s, "Italic")) return true;
- if (ink_strstr(s, "Oblique")) return true;
- if (ink_strstr(s, "Slanted")) return true;
- return false;
-}
-
-/**
- * Bold fonts are 'Bold'
- */
-static bool
-is_bold(char const *s)
-{
- if (ink_strstr(s, "Bold")) return true;
- return false;
-}
-
-/**
- * Caps fonts are 'Caps'
- */
-static bool
-is_caps(char const *s)
-{
- if (ink_strstr(s, "Caps")) return true;
- return false;
-}
-
-#if 0 /* FIXME: These are all unused. Please delete them or use them (presumably in
-* style_name_compare). */
-/**
- * Monospaced fonts are 'Mono'
- */
-static bool
-is_mono(char const *s)
-{
- if (ink_strstr(s, "Mono")) return true;
- return false;
-}
-
-/**
- * Rounded fonts are 'Round'
- */
-static bool
-is_round(char const *s)
-{
- if (ink_strstr(s, "Round")) return true;
- return false;
-}
-
-/**
- * Outline fonts are 'Outline'
- */
-static bool
-is_outline(char const *s)
-{
- if (ink_strstr(s, "Outline")) return true;
- return false;
-}
-
-/**
- * Swash fonts are 'Swash'
- */
-static bool
-is_swash(char const *s)
-{
- if (ink_strstr(s, "Swash")) return true;
- return false;
-}
-#endif
-
-/**
- * Determines if two style names match. This allows us to match
- * based on the type of style rather than simply doing string matching,
- * because for instance 'Plain' and 'Normal' mean the same thing.
- *
- * Q: Shouldn't this include the other tests such as is_outline, etc.?
- * Q: Is there a problem with strcasecmp on Win32? Should it use stricmp?
- */
-int
-style_name_compare(char const *aa, char const *bb)
-{
- char const *a = (char const *) aa;
- char const *b = (char const *) bb;
-
- if (is_regular(a) && !is_regular(b)) return -1;
- if (is_regular(b) && !is_regular(a)) return 1;
-
- if (is_bold(a) && !is_bold(b)) return 1;
- if (is_bold(b) && !is_bold(a)) return -1;
-
- if (is_italic(a) && !is_italic(b)) return 1;
- if (is_italic(b) && !is_italic(a)) return -1;
-
- if (is_nonbold(a) && !is_nonbold(b)) return 1;
- if (is_nonbold(b) && !is_nonbold(a)) return -1;
-
- if (is_caps(a) && !is_caps(b)) return 1;
- if (is_caps(b) && !is_caps(a)) return -1;
-
- return strcasecmp(a, b);
-}
-
-/*
- defined but not used:
-
-static int
-style_record_compare(void const *aa, void const *bb)
-{
- NRStyleRecord const *a = (NRStyleRecord const *) aa;
- NRStyleRecord const *b = (NRStyleRecord const *) bb;
-
- return (style_name_compare(a->name, b->name));
-}
-
-static void font_factory_name_list_destructor(NRNameList *list)
-{
- for (unsigned int i = 0; i < list->length; i++)
- g_free(list->names[i]);
- if ( list->names ) g_free(list->names);
-}
-
-static void font_factory_style_list_destructor(NRStyleList *list)
-{
- for (unsigned int i = 0; i < list->length; i++) {
- g_free((void *) (list->records)[i].name);
- g_free((void *) (list->records)[i].descr);
- }
- if ( list->records ) g_free(list->records);
-}
-*/
-
-/**
- * On Win32 performs a stricmp(a,b), otherwise does a strcasecmp(a,b)
- */
-int
-family_name_compare(char const *a, char const *b)
-{
-#ifndef WIN32
- return strcasecmp((*((char const **) a)), (*((char const **) b)));
-#else
- return stricmp((*((char const **) a)), (*((char const **) b)));
-#endif
-}
-
static void noop(...) {}
//#define PANGO_DEBUG g_print
#define PANGO_DEBUG noop
-
///////////////////// FontFactory
#ifndef USE_PANGO_WIN32
// the substitute function to tell fontconfig to enforce outline fonts
@@ -708,9 +493,24 @@ Glib::ustring font_factory::FontSpecificationBestMatch(const Glib::ustring & fon
/////
-static bool StyleNameCompareInternal(Glib::ustring style1, Glib::ustring style2)
+// Calculate a Style "value" based on CSS values for ordering styles.
+static int StyleNameValue( const Glib::ustring &style )
+{
+
+ PangoFontDescription *pfd = pango_font_description_from_string ( style.c_str() );
+ int value =
+ pango_font_description_get_weight ( pfd ) * 1000000 +
+ pango_font_description_get_style ( pfd ) * 10000 +
+ pango_font_description_get_stretch( pfd ) * 100 +
+ pango_font_description_get_variant( pfd );
+ pango_font_description_free ( pfd );
+ return value;
+}
+
+// Determines order in which styles are presented (sorted by CSS style values)
+static bool StyleNameCompareInternal(const StyleNames &style1, const StyleNames &style2)
{
- return (style_name_compare(style1.c_str(), style2.c_str()) < 0);
+ return( StyleNameValue( style1.CssName ) < StyleNameValue( style2.CssName ) );
}
void font_factory::GetUIFamiliesAndStyles(FamilyToStylesMap *map)
@@ -736,7 +536,8 @@ void font_factory::GetUIFamiliesAndStyles(FamilyToStylesMap *map)
// If the face has a name, describe it, and then use the
// description to get the UI family and face strings
- if (pango_font_face_get_face_name(faces[currentFace]) == NULL) {
+ const gchar* displayName = pango_font_face_get_face_name(faces[currentFace]);
+ if (displayName == NULL) {
continue;
}
@@ -766,26 +567,26 @@ void font_factory::GetUIFamiliesAndStyles(FamilyToStylesMap *map)
// Insert new family
if (iter == map->end()) {
- map->insert(std::make_pair(familyUIName, std::list<Glib::ustring>()));
+ map->insert(std::make_pair(familyUIName, std::list<StyleNames>()));
}
// Insert into the style list and save the info in the reference maps
// only if the style does not yet exist
bool exists = false;
- std::list<Glib::ustring> &styleList = (*map)[familyUIName];
+ std::list<StyleNames> &styleList = (*map)[familyUIName];
- for (std::list<Glib::ustring>::iterator it=styleList.begin();
+ for (std::list<StyleNames>::iterator it=styleList.begin();
it != styleList.end();
++it) {
- if (*it == styleUIName) {
+ if ( (*it).CssName == styleUIName) {
exists = true;
break;
}
}
if (!exists) {
- styleList.push_back(styleUIName);
+ styleList.push_back( StyleNames(styleUIName,displayName) );
// Add the string info needed in the reference maps
fontStringMap.insert(
diff --git a/src/libnrtype/FontFactory.h b/src/libnrtype/FontFactory.h
index 7b606d200..513ee4bf7 100644
--- a/src/libnrtype/FontFactory.h
+++ b/src/libnrtype/FontFactory.h
@@ -51,15 +51,26 @@ struct font_descr_equal : public std::binary_function<PangoFontDescription*, Pan
bool operator()(PangoFontDescription *const &a, PangoFontDescription *const &b) const;
};
-// Comparison functions for style names
-int style_name_compare(char const *aa, char const *bb);
-int family_name_compare(char const *a, char const *b);
-
// Wraps calls to pango_font_description_get_family with some name substitution
const char *sp_font_description_get_family(PangoFontDescription const *fontDescr);
-// Map type for gathering UI family and style strings
-typedef std::map<Glib::ustring, std::list<Glib::ustring> > FamilyToStylesMap;
+// Class for style strings: both CSS and as suggested by font.
+class StyleNames {
+
+public:
+ StyleNames() {};
+ StyleNames( Glib::ustring name ) :
+ CssName( name ), DisplayName( name ) {};
+ StyleNames( Glib::ustring cssname, Glib::ustring displayname ) :
+ CssName( cssname ), DisplayName( displayname ) {};
+
+public:
+ Glib::ustring CssName; // Style as Pango/CSS would write it.
+ Glib::ustring DisplayName; // Style as Font designer named it.
+};
+
+// Map type for gathering UI family and style names
+typedef std::map<Glib::ustring, std::list<StyleNames> > FamilyToStylesMap;
class font_factory {
public:
diff --git a/src/libnrtype/font-lister.cpp b/src/libnrtype/font-lister.cpp
index 8ce5eccfc..43c3045b1 100644
--- a/src/libnrtype/font-lister.cpp
+++ b/src/libnrtype/font-lister.cpp
@@ -64,11 +64,13 @@ namespace Inkscape
// Now go through the styles
GList *styles = NULL;
- std::list<Glib::ustring> &styleStrings = familyStyleMap[familyName];
- for (std::list<Glib::ustring>::iterator it=styleStrings.begin();
+ std::list<StyleNames> &styleStrings = familyStyleMap[familyName];
+ for (std::list<StyleNames>::iterator it=styleStrings.begin();
it != styleStrings.end();
++it) {
- styles = g_list_append(styles, g_strdup((*it).c_str()));
+ // Our own copy
+ StyleNames *copy = new StyleNames( *it );
+ styles = g_list_append(styles, copy);
}
(*treeModelIter)[FontList.styles] = styles;
@@ -81,11 +83,11 @@ namespace Inkscape
current_fontspec = "sans-serif"; // Empty style -> Normal
current_fontspec_system = "Sans";
- /* Create default styles for use when font-family is unknown on system. */
- default_styles = g_list_append( NULL, g_strdup("Normal") );
- default_styles = g_list_append( default_styles, g_strdup("Italic") );
- default_styles = g_list_append( default_styles, g_strdup("Bold") );
- default_styles = g_list_append( default_styles, g_strdup("Bold Italic") );
+ /* Create default styles for use when font-family is unknown on system. */
+ default_styles = g_list_append( NULL, new StyleNames( "Normal" ) );
+ default_styles = g_list_append( default_styles, new StyleNames( "Italic" ) );
+ default_styles = g_list_append( default_styles, new StyleNames( "Bold" ) );
+ default_styles = g_list_append( default_styles, new StyleNames( "Bold Italic" ) );
font_list_store->thaw_notify();
@@ -96,11 +98,31 @@ namespace Inkscape
style_list_store->clear();
for (GList *l=default_styles; l; l = l->next) {
Gtk::TreeModel::iterator treeModelIter = style_list_store->append();
- (*treeModelIter)[FontStyleList.styles] = (char*)l->data;
+ (*treeModelIter)[FontStyleList.cssStyle] = ((StyleNames*)l->data)->CssName;
+ (*treeModelIter)[FontStyleList.displayStyle] = ((StyleNames*)l->data)->DisplayName;
}
style_list_store->thaw_notify();
}
+ FontLister::~FontLister() {
+
+ // Delete default_styles
+ for (GList *l=default_styles; l; l = l->next) {
+ delete ((StyleNames*)l->data);
+ }
+
+ // Delete other styles
+ Gtk::TreeModel::iterator iter = font_list_store->get_iter( "0" );
+ while( iter != font_list_store->children().end() ) {
+ Gtk::TreeModel::Row row = *iter;
+ GList *styles = row[FontList.styles];
+ for (GList *l=styles; l; l = l->next) {
+ delete ((StyleNames*)l->data);
+ }
+ ++iter;
+ }
+ }
+
// Example of how to use "foreach_iter"
// bool
// FontLister::print_document_font( const Gtk::TreeModel::iterator &iter ) {
@@ -113,7 +135,6 @@ namespace Inkscape
// }
// font_list_store->foreach_iter( sigc::mem_fun(*this, &FontLister::print_document_font ));
-
/* Used to insert a font that was not in the document and not on the system into the font list. */
void
FontLister::insert_font_family( Glib::ustring new_family ) {
@@ -471,7 +492,8 @@ std::pair<Glib::ustring, Glib::ustring> FontLister::new_font_family (Glib::ustri
for (GList *l=styles; l; l = l->next) {
Gtk::TreeModel::iterator treeModelIter = style_list_store->append();
- (*treeModelIter)[FontStyleList.styles] = (char*)l->data;
+ (*treeModelIter)[FontStyleList.cssStyle] = ((StyleNames*)l->data)->CssName;
+ (*treeModelIter)[FontStyleList.displayStyle] = ((StyleNames*)l->data)->DisplayName;
}
style_list_store->thaw_notify();
@@ -579,8 +601,15 @@ std::pair<Glib::ustring, Glib::ustring> FontLister::new_font_family (Glib::ustri
Glib::ustring family = ui.first;
- sp_repr_css_set_property (css, "-inkscape-font-specification", fontspec.c_str() );
- sp_repr_css_set_property (css, "font-family", family.c_str() ); //Canonized w/ spaces
+
+ // Font spec is single quoted... for the moment
+ Glib::ustring fontspec_quoted( fontspec );
+ css_quote( fontspec_quoted );
+ sp_repr_css_set_property (css, "-inkscape-font-specification", fontspec_quoted.c_str() );
+
+ // Font families needs to be properly quoted in CSS (used unquoted in font-lister)
+ css_font_family_quote( family );
+ sp_repr_css_set_property (css, "font-family", family.c_str() );
PangoFontDescription *desc = pango_font_description_from_string( fontspec.c_str() );
PangoWeight weight = pango_font_description_get_weight( desc );
@@ -856,7 +885,7 @@ std::pair<Glib::ustring, Glib::ustring> FontLister::new_font_family (Glib::ustri
Gtk::TreeModel::Row row = *iter;
- if( familyNamesAreEqual( style, row[FontStyleList.styles] ) ) {
+ if( familyNamesAreEqual( style, row[FontStyleList.cssStyle] ) ) {
return row;
}
@@ -983,10 +1012,6 @@ std::pair<Glib::ustring, Glib::ustring> FontLister::new_font_family (Glib::ustri
return best_style;
}
- FontLister::~FontLister ()
- {
- };
-
const Glib::RefPtr<Gtk::ListStore>
FontLister::get_font_list () const
{
diff --git a/src/libnrtype/font-lister.h b/src/libnrtype/font-lister.h
index a460388d3..c89dab550 100644
--- a/src/libnrtype/font-lister.h
+++ b/src/libnrtype/font-lister.h
@@ -100,13 +100,18 @@ namespace Inkscape
: public Gtk::TreeModelColumnRecord
{
public:
- /** Column containing the styles
+ /** Column containing the styles as Font designer used.
*/
- Gtk::TreeModelColumn<Glib::ustring> styles;
+ Gtk::TreeModelColumn<Glib::ustring> displayStyle;
+
+ /** Column containing the styles in CSS/Pango format.
+ */
+ Gtk::TreeModelColumn<Glib::ustring> cssStyle;
FontStyleListClass ()
{
- add (styles);
+ add (cssStyle);
+ add (displayStyle);
}
};
@@ -276,7 +281,7 @@ namespace Inkscape
private:
FontLister ();
-
+
NRNameList families;
Glib::RefPtr<Gtk::ListStore> font_list_store;
diff --git a/src/live_effects/effect.cpp b/src/live_effects/effect.cpp
index 4157e14d7..e51fb186e 100644
--- a/src/live_effects/effect.cpp
+++ b/src/live_effects/effect.cpp
@@ -580,14 +580,6 @@ Effect::getCanvasIndicators(SPLPEItem const* lpeitem)
{
std::vector<Geom::PathVector> hp_vec;
- // TODO: we can probably optimize this by using a lot more references
- // rather than copying PathVectors all over the place
- if (SP_IS_SHAPE(lpeitem) && show_orig_path) {
- // add original path to helperpaths
- SPCurve* curve = SP_SHAPE(lpeitem)->getCurve ();
- hp_vec.push_back(curve->get_pathvector());
- }
-
// add indicators provided by the effect itself
addCanvasIndicators(lpeitem, hp_vec);
diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp
index 868a9d743..a350dd7a7 100644
--- a/src/selection-chemistry.cpp
+++ b/src/selection-chemistry.cpp
@@ -3950,6 +3950,10 @@ void sp_selection_unset_mask(SPDesktop *desktop, bool apply_clip_path) {
for ( SPObject *child = obj->firstChild() ; child; child = child->getNext() ) {
// Collect all clipped paths and masks within a single group
Inkscape::XML::Node *copy = SP_OBJECT(child)->getRepr()->duplicate(xml_doc);
+ if(copy->attribute("inkscape:original-d"))
+ {
+ copy->setAttribute("d", copy->attribute("inkscape:original-d"));
+ }
items_to_move = g_slist_prepend(items_to_move, copy);
}
diff --git a/src/sp-ellipse.cpp b/src/sp-ellipse.cpp
index cda59e057..428e0e3dd 100644
--- a/src/sp-ellipse.cpp
+++ b/src/sp-ellipse.cpp
@@ -467,6 +467,8 @@ void SPGenericEllipse::set_shape()
bool success = this->performPathEffect(c_lpe);
if (success) {
+ sp_lpe_item_apply_to_mask(this);
+ sp_lpe_item_apply_to_clippath(this);
this->setCurveInsync(c_lpe, TRUE);
}
diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp
index fbd9a6538..8c8a1e45d 100644
--- a/src/sp-item-group.cpp
+++ b/src/sp-item-group.cpp
@@ -790,17 +790,31 @@ void SPGroup::update_patheffect(bool write) {
}
}
+
+void
+sp_gslist_update_by_clip_or_mask(GSList *item_list,SPItem * item)
+{
+ if(item->mask_ref->getObject()) {
+ SPObject * clipormask = item->mask_ref->getObject()->firstChild();
+ item_list = g_slist_append(item_list,clipormask);
+ }
+ if(item->clip_ref->getObject()) {
+ SPObject * clipormask = item->clip_ref->getObject()->firstChild();
+ item_list = g_slist_append(item_list,clipormask);
+ }
+}
+
static void
sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write)
{
- GSList const *item_list = sp_item_group_item_list(SP_GROUP(group));
-
- for ( GSList const *iter = item_list; iter; iter = iter->next ) {
+ GSList *item_list = sp_item_group_item_list(group);
+ sp_gslist_update_by_clip_or_mask(item_list,group);
+ for ( GSList *iter = item_list; iter; iter = iter->next ) {
SPObject *subitem = static_cast<SPObject *>(iter->data);
-
if (SP_IS_GROUP(subitem)) {
sp_group_perform_patheffect(SP_GROUP(subitem), topgroup, write);
} else if (SP_IS_SHAPE(subitem)) {
+ sp_gslist_update_by_clip_or_mask(item_list,SP_ITEM(subitem));
SPCurve * c = NULL;
if (SP_IS_PATH(subitem)) {
@@ -811,9 +825,17 @@ sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write)
// only run LPEs when the shape has a curve defined
if (c) {
- c->transform(i2anc_affine(subitem, topgroup));
+ if(SP_IS_MASK(subitem->parent) || SP_IS_CLIPPATH(subitem->parent)) {
+ c->transform(i2anc_affine(group, topgroup));
+ } else {
+ c->transform(i2anc_affine(subitem, topgroup));
+ }
SP_LPE_ITEM(topgroup)->performPathEffect(c);
- c->transform(i2anc_affine(subitem, topgroup).inverse());
+ if(SP_IS_MASK(subitem->parent) || SP_IS_CLIPPATH(subitem->parent)) {
+ c->transform(i2anc_affine(group, topgroup).inverse());
+ } else {
+ c->transform(i2anc_affine(subitem, topgroup).inverse());
+ }
SP_SHAPE(subitem)->setCurve(c, TRUE);
if (write) {
@@ -821,7 +843,7 @@ sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write)
gchar *str = sp_svg_write_path(c->get_pathvector());
repr->setAttribute("d", str);
#ifdef GROUP_VERBOSE
-g_message("sp_group_perform_patheffect writes 'd' attribute");
+ g_message("sp_group_perform_patheffect writes 'd' attribute");
#endif
g_free(str);
}
diff --git a/src/sp-item-group.h b/src/sp-item-group.h
index 68bbd083a..ee3cd75f9 100644
--- a/src/sp-item-group.h
+++ b/src/sp-item-group.h
@@ -96,7 +96,7 @@ public:
void sp_item_group_ungroup (SPGroup *group, GSList **children, bool do_done = true);
-
+void sp_gslist_update_by_clip_or_mask(GSList *item_list, SPItem * item);
GSList *sp_item_group_item_list (SPGroup *group);
SPObject *sp_item_group_get_child_by_name (SPGroup *group, SPObject *ref, const gchar *name);
diff --git a/src/sp-lpe-item.cpp b/src/sp-lpe-item.cpp
index c98035c43..7780e1679 100644
--- a/src/sp-lpe-item.cpp
+++ b/src/sp-lpe-item.cpp
@@ -38,6 +38,11 @@
#include "desktop.h"
#include "shape-editor.h"
#include "sp-ellipse.h"
+#include "display/curve.h"
+#include "svg/svg.h"
+#include <2geom/pathvector.h>
+#include "sp-clippath.h"
+#include "sp-mask.h"
#include "tools-switch.h"
#include "ui/tools/node-tool.h"
#include "ui/tools/tool-base.h"
@@ -51,6 +56,8 @@ static void lpeobject_ref_modified(SPObject *href, guint flags, SPLPEItem *lpeit
static void sp_lpe_item_create_original_path_recursive(SPLPEItem *lpeitem);
static void sp_lpe_item_cleanup_original_path_recursive(SPLPEItem *lpeitem);
+static void sp_lpe_item_apply_to_clip_or_mask_group(SPGroup * group, SPItem * item);
+
typedef std::list<std::string> HRefList;
static std::string patheffectlist_write_svg(PathEffectList const & list);
static std::string hreflist_write_svg(HRefList const & list);
@@ -335,6 +342,16 @@ lpeobject_ref_modified(SPObject */*href*/, guint /*flags*/, SPLPEItem *lpeitem)
static void
sp_lpe_item_create_original_path_recursive(SPLPEItem *lpeitem)
{
+ SPMask * mask = lpeitem->mask_ref->getObject();
+ if(mask)
+ {
+ sp_lpe_item_create_original_path_recursive(SP_LPE_ITEM(mask->firstChild()));
+ }
+ SPClipPath * clipPath = lpeitem->clip_ref->getObject();
+ if(clipPath)
+ {
+ sp_lpe_item_create_original_path_recursive(SP_LPE_ITEM(clipPath->firstChild()));
+ }
if (SP_IS_GROUP(lpeitem)) {
GSList const *item_list = sp_item_group_item_list(SP_GROUP(lpeitem));
for ( GSList const *iter = item_list; iter; iter = iter->next ) {
@@ -355,6 +372,17 @@ sp_lpe_item_create_original_path_recursive(SPLPEItem *lpeitem)
static void
sp_lpe_item_cleanup_original_path_recursive(SPLPEItem *lpeitem)
{
+ SPMask * mask = lpeitem->mask_ref->getObject();
+ if(mask)
+ {
+ sp_lpe_item_cleanup_original_path_recursive(SP_LPE_ITEM(mask->firstChild()));
+ }
+ SPClipPath * clipPath = lpeitem->clip_ref->getObject();
+ if(clipPath)
+ {
+ sp_lpe_item_cleanup_original_path_recursive(SP_LPE_ITEM(clipPath->firstChild()));
+ }
+
if (SP_IS_GROUP(lpeitem)) {
GSList const *item_list = sp_item_group_item_list(SP_GROUP(lpeitem));
for ( GSList const *iter = item_list; iter; iter = iter->next ) {
@@ -603,6 +631,124 @@ bool SPLPEItem::hasPathEffectRecursive() const
}
}
+void
+sp_lpe_item_apply_to_clippath(SPItem * item)
+{
+ SPClipPath *clipPath = item->clip_ref->getObject();
+ if(clipPath) {
+ SPObject * clip_data = clipPath->firstChild();
+ SPCurve * clip_curve = NULL;
+
+ if (SP_IS_PATH(clip_data)) {
+ clip_curve = SP_PATH(clip_data)->get_original_curve();
+ } else if(SP_IS_SHAPE(clip_data)) {
+ clip_curve = SP_SHAPE(clip_data)->getCurve();
+ } else if(SP_IS_GROUP(clip_data)) {
+ sp_lpe_item_apply_to_clip_or_mask_group(SP_GROUP(clip_data), item);
+ return;
+ }
+ if(clip_curve) {
+ bool success = SP_LPE_ITEM(item)->performPathEffect(clip_curve);
+ Inkscape::XML::Node *reprClip = clip_data->getRepr();
+ if (success) {
+ gchar *str = sp_svg_write_path(clip_curve->get_pathvector());
+ reprClip->setAttribute("d", str);
+ g_free(str);
+ } else {
+ // LPE was unsuccesfull. Read the old 'd'-attribute.
+ if (gchar const * value = reprClip->attribute("d")) {
+ Geom::PathVector pv = sp_svg_read_pathv(value);
+ SPCurve *oldcurve = new SPCurve(pv);
+ if (oldcurve) {
+ SP_SHAPE(clip_data)->setCurve(oldcurve, TRUE);
+ oldcurve->unref();
+ }
+ }
+ }
+ clip_curve->unref();
+ }
+ }
+}
+
+void
+sp_lpe_item_apply_to_mask(SPItem * item)
+{
+ SPMask *mask = item->mask_ref->getObject();
+ if(mask) {
+ SPObject * mask_data = mask->firstChild();
+ SPCurve * mask_curve = NULL;
+ mask_data = mask->firstChild();
+ if (SP_IS_PATH(mask_data)) {
+ mask_curve = SP_PATH(mask_data)->get_original_curve();
+ } else if(SP_IS_SHAPE(mask_data)) {
+ mask_curve = SP_SHAPE(mask_data)->getCurve();
+ } else if(SP_IS_GROUP(mask_data)) {
+ sp_lpe_item_apply_to_clip_or_mask_group(SP_GROUP(mask_data), item);
+ return;
+ }
+ if(mask_curve) {
+ bool success = SP_LPE_ITEM(item)->performPathEffect(mask_curve);
+ Inkscape::XML::Node *reprmask = mask_data->getRepr();
+ if (success) {
+ gchar *str = sp_svg_write_path(mask_curve->get_pathvector());
+ reprmask->setAttribute("d", str);
+ g_free(str);
+ } else {
+ // LPE was unsuccesfull. Read the old 'd'-attribute.
+ if (gchar const * value = reprmask->attribute("d")) {
+ Geom::PathVector pv = sp_svg_read_pathv(value);
+ SPCurve *oldcurve = new SPCurve(pv);
+ if (oldcurve) {
+ SP_SHAPE(mask_data)->setCurve(oldcurve, TRUE);
+ oldcurve->unref();
+ }
+ }
+ }
+ mask_curve->unref();
+ }
+ }
+}
+
+static void
+sp_lpe_item_apply_to_clip_or_mask_group(SPGroup *group, SPItem *item)
+{
+ GSList *item_list = sp_item_group_item_list(group);
+ for ( GSList *iter = item_list; iter; iter = iter->next ) {
+ SPObject *subitem = static_cast<SPObject *>(iter->data);
+ if (SP_IS_GROUP(subitem)) {
+ sp_lpe_item_apply_to_clip_or_mask_group(SP_GROUP(subitem), item);
+ } else if (SP_IS_SHAPE(subitem)) {
+ SPCurve * c = NULL;
+
+ if (SP_IS_PATH(subitem)) {
+ c = SP_PATH(subitem)->get_original_curve();
+ } else {
+ c = SP_SHAPE(subitem)->getCurve();
+ }
+ if (c) {
+ bool success = SP_LPE_ITEM(item)->performPathEffect(c);
+ Inkscape::XML::Node *repr = subitem->getRepr();
+ if (success) {
+ gchar *str = sp_svg_write_path(c->get_pathvector());
+ repr->setAttribute("d", str);
+ g_free(str);
+ } else {
+ // LPE was unsuccesfull. Read the old 'd'-attribute.
+ if (gchar const * value = repr->attribute("d")) {
+ Geom::PathVector pv = sp_svg_read_pathv(value);
+ SPCurve *oldcurve = new SPCurve(pv);
+ if (oldcurve) {
+ SP_SHAPE(subitem)->setCurve(oldcurve, TRUE);
+ oldcurve->unref();
+ }
+ }
+ }
+ c->unref();
+ }
+ }
+ }
+}
+
Inkscape::LivePathEffect::Effect*
SPLPEItem::getPathEffectOfType(int type)
{
diff --git a/src/sp-lpe-item.h b/src/sp-lpe-item.h
index 85878a95b..3e858748d 100644
--- a/src/sp-lpe-item.h
+++ b/src/sp-lpe-item.h
@@ -98,6 +98,8 @@ public:
void editNextParamOncanvas(SPDesktop *dt);
};
+void sp_lpe_item_apply_to_mask(SPItem * item);
+void sp_lpe_item_apply_to_clippath(SPItem * item);
void sp_lpe_item_update_patheffect (SPLPEItem *lpeitem, bool wholetree, bool write); // careful, class already has method with *very* similar name!
#endif /* !SP_LPE_ITEM_H_SEEN */
diff --git a/src/sp-path.cpp b/src/sp-path.cpp
index d1fb850e1..9d88ec732 100644
--- a/src/sp-path.cpp
+++ b/src/sp-path.cpp
@@ -325,6 +325,8 @@ g_message("sp_path_update_patheffect");
bool success = this->performPathEffect(curve);
if (success && write) {
+ sp_lpe_item_apply_to_mask(this);
+ sp_lpe_item_apply_to_clippath(this);
// could also do this->getRepr()->updateRepr(); but only the d attribute needs updating.
#ifdef PATH_VERBOSE
g_message("sp_path_update_patheffect writes 'd' attribute");
diff --git a/src/sp-spiral.cpp b/src/sp-spiral.cpp
index 9ef73d56d..8d4a37bf0 100644
--- a/src/sp-spiral.cpp
+++ b/src/sp-spiral.cpp
@@ -385,6 +385,8 @@ void SPSpiral::set_shape() {
bool success = this->performPathEffect(c_lpe);
if (success) {
+ sp_lpe_item_apply_to_mask(this);
+ sp_lpe_item_apply_to_clippath(this);
this->setCurveInsync( c_lpe, TRUE);
}
diff --git a/src/sp-star.cpp b/src/sp-star.cpp
index eac33ed7b..170a863b5 100644
--- a/src/sp-star.cpp
+++ b/src/sp-star.cpp
@@ -465,6 +465,8 @@ void SPStar::set_shape() {
bool success = this->performPathEffect(c_lpe);
if (success) {
+ sp_lpe_item_apply_to_mask(this);
+ sp_lpe_item_apply_to_clippath(this);
this->setCurveInsync( c_lpe, TRUE);
}
diff --git a/src/style-internal.cpp b/src/style-internal.cpp
index 8b4f3c1cd..c686a1807 100644
--- a/src/style-internal.cpp
+++ b/src/style-internal.cpp
@@ -656,20 +656,21 @@ SPIString::read( gchar const *str ) {
set = true;
inherit = false;
- // libcroco puts quotes around some strings... remove
- Glib::ustring str_unquoted(str);
- css_unquote( str_unquoted );
-
- // Unquote individual family names, Pango always uses unquoted names.
+ Glib::ustring str_temp(str);
if( name.compare( "font-family" ) == 0 ) {
- css_font_family_unquote( str_unquoted );
+ // Family names may be quoted in CSS, internally we use unquoted names.
+ css_font_family_unquote( str_temp );
+ } else if( name.compare( "-inkscape-font-specification" ) == 0 ) {
+ css_unquote( str_temp );
}
- value = g_strdup(str_unquoted.c_str());
+ value = g_strdup(str_temp.c_str());
}
}
+// This routine is actually rarely used. Writing is done usually
+// in sp_repr_css_write_string...
const Glib::ustring
SPIString::write( guint const flags, SPIBase const *const base) const {
@@ -684,13 +685,13 @@ SPIString::write( guint const flags, SPIBase const *const base) const {
} else {
if( this->value ) {
if( name.compare( "font-family" ) == 0 ) {
- // This is for compatibilty with the C version of code.
- // This is incorrect as it puts single quotes around the
- // entire string rather around the individule font names.
- // This should be handled by the routines that extract
- // out the font family names and reassembles them into a
- // font fallback list. FIXME
- return (name + ":" + css2_escape_quote(this->value) + ";");
+ Glib::ustring font_family( this->value );
+ css_font_family_quote( font_family );
+ return (name + ":" + font_family + ";");
+ } else if( name.compare( "-inkscape-font-specification" ) == 0 ) {
+ Glib::ustring font_spec( this->value );
+ css_quote( font_spec );
+ return (name + ":" + font_spec + ";");
} else {
return (name + ":" + this->value + ";");
}
diff --git a/src/style.cpp b/src/style.cpp
index 8e4c89839..c6a98e7f4 100644
--- a/src/style.cpp
+++ b/src/style.cpp
@@ -1826,12 +1826,67 @@ sp_css_attr_scale(SPCSSAttr *css, double ex)
}
+/**
+ * Quote and/or escape string for writing to CSS, changing strings in place.
+ * See: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ */
+void
+css_quote(Glib::ustring &val)
+{
+ Glib::ustring out;
+ bool quote = false;
+
+ // Can't wait for C++11!
+ for( Glib::ustring::iterator it = val.begin(); it != val.end(); ++it) {
+ if(g_ascii_isalnum(*it) || *it=='-' || *it=='_' || *it > 0xA0) {
+ out += *it;
+ } else if (*it == '\'') {
+ // Single quotes require escaping and quotes.
+ out += '\\';
+ out += *it;
+ quote = true;
+ } else {
+ // Quote everything else including spaces.
+ // (CSS Fonts Level 3 recommends quoting with spaces.)
+ out += *it;
+ quote = true;
+ }
+ if( it == val.begin() && !g_ascii_isalpha(*it) ) {
+ // A non-ASCII/non-alpha initial value on any indentifier needs quotes.
+ // (Actually it's a bit more complicated but as it never hurts to quote...)
+ quote = true;
+ }
+ }
+ if( quote ) {
+ out.insert( out.begin(), '\'' );
+ out += '\'';
+ }
+ val = out;
+}
+
+
+/**
+ * Quote font names in font-family lists, changing string in place.
+ * We use unquoted names internally but some need to be quoted in CSS.
+ */
+void
+css_font_family_quote(Glib::ustring &val)
+{
+ std::vector<Glib::ustring> tokens = Glib::Regex::split_simple("\\s*,\\s*", val );
+
+ val.erase();
+ for( unsigned i=0; i < tokens.size(); ++i ) {
+ css_quote( tokens[i] );
+ val += tokens[i] + ", ";
+ }
+ if( val.size() > 1 )
+ val.erase( val.size() - 2 ); // Remove trailing ", "
+}
+
+
// Called in style-internal.cpp, xml/repr-css.cpp
/**
* Remove paired single and double quotes from a string, changing string in place.
- * Note: in CSS (in style= and in stylesheets), unquoting and unescaping is done
- * by libcroco, our CSS parser, though it adds a new pair of "" quotes for the strings
- * it parsed for us.
*/
void
css_unquote(Glib::ustring &val)
@@ -1849,7 +1904,7 @@ css_unquote(Glib::ustring &val)
/**
* Remove paired single and double quotes from font names in font-family lists,
* changing string in place.
- * Pango expects unquoted font family names. We use unquoted names in interface.
+ * We use unquoted family names internally but CSS sometimes uses quoted names.
*/
void
css_font_family_unquote(Glib::ustring &val)
@@ -1865,57 +1920,6 @@ css_font_family_unquote(Glib::ustring &val)
val.erase( val.size() - 2 ); // Remove trailing ", "
}
-// Called in style.cpp, xml/repr-css.cpp
-/**
- * Quote and/or escape string for writing to CSS (style=). Returned value must be g_free'd.
- */
-Glib::ustring css2_escape_quote(gchar const *val) {
-
- Glib::ustring t;
- bool quote = false;
- bool last_was_space = false;
-
- for (gchar const *i = val; *i; i++) {
- bool is_space = ( *i == ' ' );
- if (g_ascii_isalnum(*i) || *i=='-' || *i=='_') {
- // ASCII alphanumeric, - and _ don't require quotes
- t.push_back(*i);
- } else if ( is_space && !last_was_space ) {
- // non-consecutive spaces don't require quotes
- t.push_back(*i);
- } else if (*i=='\'') {
- // single quotes require escaping and quotes
- t.push_back('\\');
- t.push_back(*i);
- quote = true;
- } else {
- // everything else requires quotes
- t.push_back(*i);
- quote = true;
- }
- if (i == val && !g_ascii_isalpha(*i)) {
- // a non-ASCII/non-alpha initial character requires quotes
- quote = true;
- }
- last_was_space = is_space;
- }
-
- if (last_was_space) {
- // a trailing space requires quotes
- quote = true;
- }
-
- if (quote) {
- // we use single quotes so the result can be stored in an XML
- // attribute without incurring un-aesthetic additional quoting
- // (our XML emitter always uses double quotes)
- t.insert(t.begin(), '\'');
- t.push_back('\'');
- }
-
- return t;
-}
-
/*
Local Variables:
mode:c++
diff --git a/src/style.h b/src/style.h
index 506b90b44..931dcc90e 100644
--- a/src/style.h
+++ b/src/style.h
@@ -292,7 +292,9 @@ void sp_style_unset_property_attrs(SPObject *o);
void sp_style_set_property_url (SPObject *item, gchar const *property, SPObject *linked, bool recursive);
+void css_quote( Glib::ustring &val ); // Add quotes around CSS values
void css_unquote( Glib::ustring &val ); // Remove quotes from CSS values (style-internal.cpp, xml/repr-css.cpp)
+void css_font_family_quote( Glib::ustring &val ); // style-internal.cpp, text-toolbar.cpp
void css_font_family_unquote( Glib::ustring &val ); // style-internal.cpp, text-toolbar.cpp
Glib::ustring css2_escape_quote(gchar const *val);
diff --git a/src/ui/dialog/symbols.cpp b/src/ui/dialog/symbols.cpp
index 8e0d085a4..c58df864c 100644
--- a/src/ui/dialog/symbols.cpp
+++ b/src/ui/dialog/symbols.cpp
@@ -219,25 +219,27 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) :
Gtk::Label* spacer = Gtk::manage(new Gtk::Label(""));
tools->pack_start(* Gtk::manage(spacer));
- in_sizes = 2; // Default 32px
+ // Pack size (controls display area)
+ pack_size = 2; // Default 32px
button = Gtk::manage(new Gtk::Button());
button->add(*Gtk::manage(Glib::wrap(
- sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("symbol-bigger")))) );
- button->set_tooltip_text(_("Make Icons bigger by zooming in."));
+ sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("pack-more")))) );
+ button->set_tooltip_text(_("Display more icons in row."));
button->set_relief( Gtk::RELIEF_NONE );
button->set_focus_on_click( false );
- button->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::zoomin));
+ button->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::packmore));
tools->pack_start(* button, Gtk::PACK_SHRINK);
button = Gtk::manage(new Gtk::Button());
button->add(*Gtk::manage(Glib::wrap(
- sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("symbol-smaller")))) );
- button->set_tooltip_text(_("Make Icons smaller by zooming out."));
+ sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("pack-less")))) );
+ button->set_tooltip_text(_("Display fewer icons in row."));
button->set_relief( Gtk::RELIEF_NONE );
button->set_focus_on_click( false );
- button->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::zoomout));
+ button->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::packless));
tools->pack_start(* button, Gtk::PACK_SHRINK);
+ // Toggle scale to fit on/off
fitSymbol = Gtk::manage(new Gtk::ToggleButton());
fitSymbol->add(*Gtk::manage(Glib::wrap(
sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("symbol-fit")))) );
@@ -248,6 +250,28 @@ SymbolsDialog::SymbolsDialog( gchar const* prefsPath ) :
fitSymbol->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::rebuild));
tools->pack_start(* fitSymbol, Gtk::PACK_SHRINK);
+ // Render size (scales symbols within display area)
+ scale_factor = 0; // Default 1:1 * pack_size/pack_size default
+ zoomOut = Gtk::manage(new Gtk::Button());
+ zoomOut->add(*Gtk::manage(Glib::wrap(
+ sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("symbol-smaller")))) );
+ zoomOut->set_tooltip_text(_("Make symbols smaller by zooming out."));
+ zoomOut->set_relief( Gtk::RELIEF_NONE );
+ zoomOut->set_focus_on_click( false );
+ zoomOut->set_sensitive( false );
+ zoomOut->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::zoomout));
+ tools->pack_start(* zoomOut, Gtk::PACK_SHRINK);
+
+ zoomIn = Gtk::manage(new Gtk::Button());
+ zoomIn->add(*Gtk::manage(Glib::wrap(
+ sp_icon_new (Inkscape::ICON_SIZE_SMALL_TOOLBAR, INKSCAPE_ICON("symbol-bigger")))) );
+ zoomIn->set_tooltip_text(_("Make symbols bigger by zooming in."));
+ zoomIn->set_relief( Gtk::RELIEF_NONE );
+ zoomIn->set_focus_on_click( false );
+ zoomIn->set_sensitive( false );
+ zoomIn->signal_clicked().connect(sigc::mem_fun(*this, &SymbolsDialog::zoomin));
+ tools->pack_start(* zoomIn, Gtk::PACK_SHRINK);
+
++row;
/**********************************************************/
@@ -298,22 +322,44 @@ SymbolsDialog& SymbolsDialog::getInstance()
return *new SymbolsDialog();
}
+void SymbolsDialog::packless() {
+ if(pack_size < 4) {
+ pack_size++;
+ rebuild();
+ }
+}
+
+void SymbolsDialog::packmore() {
+ if(pack_size > 0) {
+ pack_size--;
+ rebuild();
+ }
+}
+
void SymbolsDialog::zoomin() {
- if(in_sizes < 4) {
- in_sizes++;
+ if(scale_factor < 4) {
+ scale_factor++;
rebuild();
}
}
void SymbolsDialog::zoomout() {
- if(in_sizes > 0) {
- in_sizes--;
+ if(scale_factor > -8) {
+ scale_factor--;
rebuild();
}
}
void SymbolsDialog::rebuild() {
+ if( fitSymbol->get_active() ) {
+ zoomIn->set_sensitive( false );
+ zoomOut->set_sensitive( false );
+ } else {
+ zoomIn->set_sensitive( true);
+ zoomOut->set_sensitive( true );
+ }
+
store->clear();
Glib::ustring symbolSetString = symbolSet->get_active_text();
@@ -613,6 +659,7 @@ GSList* SymbolsDialog::symbols_in_doc( SPDocument* symbolDocument ) {
GSList *l = NULL;
l = symbols_in_doc_recursive (symbolDocument->getRoot(), l );
+ l = g_slist_reverse( l );
return l;
}
@@ -756,7 +803,7 @@ SymbolsDialog::draw_symbol(SPObject *symbol)
previewDocument->ensureUpToDate();
SPItem *item = SP_ITEM(object_temp);
- unsigned psize = SYMBOL_ICON_SIZES[in_sizes];
+ unsigned psize = SYMBOL_ICON_SIZES[pack_size];
Glib::RefPtr<Gdk::Pixbuf> pixbuf(NULL);
// We could use cache here, but it doesn't really work with the structure
@@ -778,6 +825,8 @@ SymbolsDialog::draw_symbol(SPObject *symbol)
if( fitSymbol->get_active() )
scale = psize / std::max(width, height);
+ else
+ scale = pow( 2.0, scale_factor/2.0 ) * psize / 32.0;
pixbuf = Glib::wrap(render_pixbuf(renderDrawing, scale, *dbox, psize));
}
diff --git a/src/ui/dialog/symbols.h b/src/ui/dialog/symbols.h
index 8021fb0c1..5dc1e3cad 100644
--- a/src/ui/dialog/symbols.h
+++ b/src/ui/dialog/symbols.h
@@ -65,6 +65,8 @@ private:
static SymbolColumns *getColumns();
+ void packless();
+ void packmore();
void zoomin();
void zoomout();
void rebuild();
@@ -95,13 +97,18 @@ private:
std::map<Glib::ustring, SPDocument*> symbolSets;
// Index into sizes which is selected
- int in_sizes;
+ int pack_size;
+
+ // Scale factor
+ int scale_factor;
Glib::RefPtr<Gtk::ListStore> store;
Gtk::ComboBoxText* symbolSet;
Gtk::IconView* iconView;
Gtk::Button* addSymbol;
Gtk::Button* removeSymbol;
+ Gtk::Button* zoomIn;
+ Gtk::Button* zoomOut;
Gtk::ToggleButton* fitSymbol;
void setTargetDesktop(SPDesktop *desktop);
diff --git a/src/ui/tools/pen-tool.cpp b/src/ui/tools/pen-tool.cpp
index 386dc43e9..f8243fb7f 100644
--- a/src/ui/tools/pen-tool.cpp
+++ b/src/ui/tools/pen-tool.cpp
@@ -1556,12 +1556,11 @@ void PenTool::_bspline_spiro_start_anchor_off()
//and we add it again with the recreation
tmpCurve->append_continuous(lastSeg, 0.0625);
}
- if (this->sa->start) {
- tmpCurve = tmpCurve->create_reverse();
- }
- this->overwriteCurve = tmpCurve;
}
-
+ if (this->sa->start) {
+ tmpCurve = tmpCurve->create_reverse();
+ }
+ this->overwriteCurve = tmpCurve;
}
void PenTool::_bspline_spiro_motion(bool shift){
@@ -1645,7 +1644,7 @@ void PenTool::_bspline_spiro_end_anchor_on()
}
reverse = true;
} else if(this->sa){
- tmpCurve = this->overwriteCurve;
+ tmpCurve = this->overwriteCurve->copy();
if(!this->sa->start){
tmpCurve = tmpCurve->create_reverse();
reverse = true;
@@ -1665,7 +1664,7 @@ void PenTool::_bspline_spiro_end_anchor_on()
lastSeg->curveto((*cubic)[1],C,(*cubic)[3]);
}else{
lastSeg->moveto(tmpCurve->last_segment()->initialPoint());
- lastSeg->curveto(tmpCurve->last_segment()->initialPoint(),C,tmpCurve->last_segment()->finalPoint());
+ lastSeg->lineto(tmpCurve->last_segment()->finalPoint());
}
if( tmpCurve->get_segment_count() == 1){
tmpCurve = lastSeg;
@@ -1702,7 +1701,7 @@ void PenTool::_bspline_spiro_end_anchor_off()
}
reverse = true;
} else if(this->sa){
- tmpCurve = this->overwriteCurve;
+ tmpCurve = this->overwriteCurve->copy();
if(!this->sa->start){
tmpCurve = tmpCurve->create_reverse();
reverse = true;
@@ -1714,25 +1713,28 @@ void PenTool::_bspline_spiro_end_anchor_off()
if(cubic){
lastSeg->moveto((*cubic)[0]);
lastSeg->curveto((*cubic)[1],(*cubic)[3],(*cubic)[3]);
- if( tmpCurve->get_segment_count() == 1){
- tmpCurve = lastSeg;
- }else{
- //we eliminate the last segment
- tmpCurve->backspace();
- //and we add it again with the recreation
- tmpCurve->append_continuous(lastSeg, 0.0625);
- }
- if (reverse) {
- tmpCurve = tmpCurve->create_reverse();
- }
- if( this->green_anchor && this->green_anchor->active )
- {
- this->green_curve->reset();
- this->green_curve = tmpCurve;
- }else{
- this->overwriteCurve->reset();
- this->overwriteCurve = tmpCurve;
- }
+ }else{
+ lastSeg->moveto(tmpCurve->last_segment()->initialPoint());
+ lastSeg->lineto(tmpCurve->last_segment()->finalPoint());
+ }
+ if( tmpCurve->get_segment_count() == 1){
+ tmpCurve = lastSeg;
+ }else{
+ //we eliminate the last segment
+ tmpCurve->backspace();
+ //and we add it again with the recreation
+ tmpCurve->append_continuous(lastSeg, 0.0625);
+ }
+ if (reverse) {
+ tmpCurve = tmpCurve->create_reverse();
+ }
+ if( this->green_anchor && this->green_anchor->active )
+ {
+ this->green_curve->reset();
+ this->green_curve = tmpCurve;
+ }else{
+ this->overwriteCurve->reset();
+ this->overwriteCurve = tmpCurve;
}
}
diff --git a/src/widgets/font-selector.cpp b/src/widgets/font-selector.cpp
index 0e862638c..ccaf93e55 100644
--- a/src/widgets/font-selector.cpp
+++ b/src/widgets/font-selector.cpp
@@ -179,6 +179,7 @@ static void sp_font_selector_init(SPFontSelector *fsel)
Inkscape::FontLister* fontlister = Inkscape::FontLister::get_instance();
Glib::RefPtr<Gtk::ListStore> store = fontlister->get_font_list();
gtk_tree_view_set_model (GTK_TREE_VIEW(fsel->family_treeview), GTK_TREE_MODEL (Glib::unwrap (store)));
+ //gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(fsel->family_treeview),2);
gtk_container_add(GTK_CONTAINER(sw), fsel->family_treeview);
gtk_widget_show_all (sw);
@@ -210,12 +211,22 @@ static void sp_font_selector_init(SPFontSelector *fsel)
gtk_box_pack_start(GTK_BOX (vb), sw, TRUE, TRUE, 0);
fsel->style_treeview = gtk_tree_view_new ();
- column = gtk_tree_view_column_new ();
+
+ // CSS Style name
cell = gtk_cell_renderer_text_new ();
- gtk_tree_view_column_pack_start (column, cell, FALSE);
- gtk_tree_view_column_set_attributes (column, cell, "text", 0, NULL);
+ column = gtk_tree_view_column_new_with_attributes ("CSS", cell, "text", 0, NULL );
+ //gtk_tree_view_column_pack_start (column, cell, FALSE);
+ gtk_tree_view_column_set_resizable (column, TRUE);
+ gtk_tree_view_append_column (GTK_TREE_VIEW(fsel->style_treeview), column);
+
+ // Display Style name
+ cell = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("Face"), cell, "text", 1, NULL );
+ //gtk_tree_view_column_pack_start (column, cell, FALSE);
gtk_tree_view_append_column (GTK_TREE_VIEW(fsel->style_treeview), column);
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(fsel->style_treeview), FALSE);
+
+ //gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(fsel->style_treeview), 1);
+ gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(fsel->style_treeview), TRUE);
gtk_container_add(GTK_CONTAINER(sw), fsel->style_treeview);
gtk_widget_show_all (sw);
@@ -306,13 +317,15 @@ static void sp_font_selector_family_select_row(GtkTreeSelection *selection,
// Create our own store of styles for selected font-family and find index of best style match
int path_index = 0;
int index = 0;
- GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING); // Where is this deleted?
+ GtkListStore *store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); // Where is this deleted?
for ( ; list ; list = list->next )
{
gtk_list_store_append (store, &iter);
- gtk_list_store_set (store, &iter, 0, (char*)list->data, -1);
-
- if( best.compare( (char*)list->data ) == 0 ) {
+ gtk_list_store_set (store, &iter,
+ 0, ((StyleNames*)list->data)->CssName.c_str(),
+ 1, ((StyleNames*)list->data)->DisplayName.c_str(),
+ -1);
+ if( best.compare( ((StyleNames*)list->data)->CssName ) == 0 ) {
path_index = index;
}
++index;
@@ -320,6 +333,7 @@ static void sp_font_selector_family_select_row(GtkTreeSelection *selection,
// Attach store to tree view. Can trigger style changed signal (but not FONT_SET):
gtk_tree_view_set_model (GTK_TREE_VIEW (fsel->style_treeview), GTK_TREE_MODEL (store));
+ //gtk_tree_view_set_tooltip_column(GTK_TREE_VIEW(fsel->style_treeview),1);
// Get path to best style
GtkTreePath *path = gtk_tree_path_new ();
diff --git a/src/xml/repr-css.cpp b/src/xml/repr-css.cpp
index e462f70da..c043904a7 100644
--- a/src/xml/repr-css.cpp
+++ b/src/xml/repr-css.cpp
@@ -283,14 +283,7 @@ void sp_repr_css_write_string(SPCSSAttr *css, Glib::ustring &str)
str.append(g_quark_to_string(iter->key));
str.push_back(':');
- if (!strcmp(g_quark_to_string(iter->key), "font-family")
- || !strcmp(g_quark_to_string(iter->key), "-inkscape-font-specification")) {
- // we only quote font-family/font-specification, as SPStyle does
- Glib::ustring val_quoted = css2_escape_quote (iter->value);
- str.append(val_quoted);
- } else {
- str.append(iter->value); // unquoted
- }
+ str.append(iter->value); // Any necessary quoting to be done by calling routine.
if (rest(iter)) {
str.push_back(';');
@@ -346,13 +339,23 @@ void sp_repr_css_merge(SPCSSAttr *dst, SPCSSAttr *src)
/**
* Merges style properties as parsed by libcroco into an existing SPCSSAttr.
+ * libcroco converts all single quotes to double quotes, which needs to be
+ * undone as we always use single quotes inside our 'style' strings since
+ * double quotes are used outside: e.g.:
+ * style="font-family:'DejaVu Sans'"
*/
static void sp_repr_css_merge_from_decl(SPCSSAttr *css, CRDeclaration const *const decl)
{
guchar *const str_value_unsigned = cr_term_to_string(decl->value);
- Glib::ustring value_unquoted( reinterpret_cast<gchar *>(str_value_unsigned ) );
- css_unquote( value_unquoted ); // libcroco returns strings quoted in "", remove
+ Glib::ustring value( reinterpret_cast<gchar *>(str_value_unsigned ) );
+ g_free(str_value_unsigned);
+
+ Glib::ustring::size_type pos = 0;
+ while( (pos=value.find("\"",pos)) != Glib::ustring::npos) {
+ value.replace(pos,1,"'");
+ ++pos;
+ }
Glib::ustring units;
@@ -363,11 +366,11 @@ static void sp_repr_css_merge_from_decl(SPCSSAttr *css, CRDeclaration const *con
*
* HACK for now is to strip off em and ex units and add them back at the end
*/
- int le = value_unquoted.length();
+ int le = value.length();
if (le > 2) {
- units = value_unquoted.substr(le-2, 2);
+ units = value.substr(le-2, 2);
if ((units == "em") || (units == "ex")) {
- value_unquoted = value_unquoted.substr(0, le-2);
+ value = value.substr(0, le-2);
}
else {
units.clear();
@@ -378,7 +381,7 @@ static void sp_repr_css_merge_from_decl(SPCSSAttr *css, CRDeclaration const *con
// CSSOStringStream is used here to write valid CSS (as in sp_style_write_string). This has
// the additional benefit of respecting the numerical precission set in the SVG Output
// preferences. We assume any numerical part comes first (if not, the whole string is copied).
- std::stringstream ss( value_unquoted );
+ std::stringstream ss( value );
double number = 0;
std::string characters;
std::string temp;
@@ -400,7 +403,6 @@ static void sp_repr_css_merge_from_decl(SPCSSAttr *css, CRDeclaration const *con
//g_message("sp_repr_css_merge_from_decl looks like em or ex units %s --> %s", str_value, os.str().c_str());
}
((Node *) css)->setAttribute(decl->property->stryng->str, os.str().c_str(), false);
- g_free(str_value_unsigned);
}
/**