diff options
| author | Liam P. White <inkscapebronyat-signgmaildotcom> | 2014-06-14 15:02:20 +0000 |
|---|---|---|
| committer | Liam P. White <inkscapebronyat-signgmaildotcom> | 2014-06-14 15:02:20 +0000 |
| commit | 9f0c5f6c387b155ad6a864c202eafff27f1280a6 (patch) | |
| tree | e0cfaa0ac816be73d960e09a8cf006b1751b355b | |
| parent | Update to experimental r13389 (diff) | |
| parent | Removed original path helper paths pointed by LiamW (diff) | |
| download | inkscape-9f0c5f6c387b155ad6a864c202eafff27f1280a6.tar.gz inkscape-9f0c5f6c387b155ad6a864c202eafff27f1280a6.zip | |
Update to experimental r13402
(bzr r13090.1.82)
| -rw-r--r-- | share/icons/icons.svg | 83 | ||||
| -rw-r--r-- | share/symbols/FlowSymbols.svg | 588 | ||||
| -rw-r--r-- | src/box3d-side.cpp | 2 | ||||
| -rw-r--r-- | src/desktop-style.cpp | 8 | ||||
| -rw-r--r-- | src/libnrtype/FontFactory.cpp | 247 | ||||
| -rw-r--r-- | src/libnrtype/FontFactory.h | 23 | ||||
| -rw-r--r-- | src/libnrtype/font-lister.cpp | 61 | ||||
| -rw-r--r-- | src/libnrtype/font-lister.h | 13 | ||||
| -rw-r--r-- | src/live_effects/effect.cpp | 8 | ||||
| -rw-r--r-- | src/selection-chemistry.cpp | 4 | ||||
| -rw-r--r-- | src/sp-ellipse.cpp | 2 | ||||
| -rw-r--r-- | src/sp-item-group.cpp | 36 | ||||
| -rw-r--r-- | src/sp-item-group.h | 2 | ||||
| -rw-r--r-- | src/sp-lpe-item.cpp | 146 | ||||
| -rw-r--r-- | src/sp-lpe-item.h | 2 | ||||
| -rw-r--r-- | src/sp-path.cpp | 2 | ||||
| -rw-r--r-- | src/sp-spiral.cpp | 2 | ||||
| -rw-r--r-- | src/sp-star.cpp | 2 | ||||
| -rw-r--r-- | src/style-internal.cpp | 29 | ||||
| -rw-r--r-- | src/style.cpp | 114 | ||||
| -rw-r--r-- | src/style.h | 2 | ||||
| -rw-r--r-- | src/ui/dialog/symbols.cpp | 73 | ||||
| -rw-r--r-- | src/ui/dialog/symbols.h | 9 | ||||
| -rw-r--r-- | src/ui/tools/pen-tool.cpp | 56 | ||||
| -rw-r--r-- | src/widgets/font-selector.cpp | 30 | ||||
| -rw-r--r-- | src/xml/repr-css.cpp | 32 |
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); } /** |
