mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2025-12-17 09:41:24 +01:00
v1.5.12 - emblems adding, save/load
This commit is contained in:
parent
dc3dbe9881
commit
a5b2f23cee
12 changed files with 1379 additions and 743 deletions
|
|
@ -1451,9 +1451,13 @@ div.states > .coaIcon > use {
|
||||||
line-height: 1.4em;
|
line-height: 1.4em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#burgBody div.label {
|
||||||
|
display: inline-block;
|
||||||
|
width: 6em;
|
||||||
|
}
|
||||||
|
|
||||||
#stateNameEditor div.label,
|
#stateNameEditor div.label,
|
||||||
#provinceNameEditor div.label,
|
#provinceNameEditor div.label,
|
||||||
#burgBody div.label,
|
|
||||||
#regimentBody div.label {
|
#regimentBody div.label {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 5.5em;
|
width: 5.5em;
|
||||||
|
|
@ -1588,6 +1592,7 @@ rect.fillRect {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#emblemUploadControl,
|
||||||
#emblemDownloadControl {
|
#emblemDownloadControl {
|
||||||
margin-top: .3em;
|
margin-top: .3em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|
|
||||||
605
index.html
605
index.html
|
|
@ -142,6 +142,7 @@
|
||||||
<feColorMatrix values="1.1 0 0 0 0 0 1.1 0 0 0 0 0 0.9 0 0 0 0 0 1 0"></feColorMatrix>
|
<feColorMatrix values="1.1 0 0 0 0 0 1.1 0 0 0 0 0 0.9 0 0 0 0 0 1 0"></feColorMatrix>
|
||||||
</filter>
|
</filter>
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
<g id="hatching">
|
<g id="hatching">
|
||||||
<pattern id="hatch0" patternUnits="userSpaceOnUse" width="4" height="4">
|
<pattern id="hatch0" patternUnits="userSpaceOnUse" width="4" height="4">
|
||||||
<line x1="0" y1="0" x2="0" y2="4" style="stroke:black; stroke-width:2"/>
|
<line x1="0" y1="0" x2="0" y2="4" style="stroke:black; stroke-width:2"/>
|
||||||
|
|
@ -203,6 +204,7 @@
|
||||||
<line x1="0" y1="0" x2="3" y2="0" style="stroke:black; stroke-width:1.5"></line>
|
<line x1="0" y1="0" x2="3" y2="0" style="stroke:black; stroke-width:1.5"></line>
|
||||||
</pattern>
|
</pattern>
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
<g id="deftemp">
|
<g id="deftemp">
|
||||||
<mask id="land"></mask>
|
<mask id="land"></mask>
|
||||||
<mask id="water">
|
<mask id="water">
|
||||||
|
|
@ -213,16 +215,16 @@
|
||||||
</mask>
|
</mask>
|
||||||
<g id="textPaths"></g>
|
<g id="textPaths"></g>
|
||||||
<g id="statePaths"></g>
|
<g id="statePaths"></g>
|
||||||
|
<g id="defs-emblems"></g>
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
<g id="defs-icons">
|
<g id="defs-icons">
|
||||||
<symbol id="icon-anchor" viewBox="0 0 30 28">
|
<symbol id="icon-anchor" viewBox="0 0 30 28">
|
||||||
<title>Port</title>
|
<title>Port</title>
|
||||||
<path d="M15 4c0-0.547-0.453-1-1-1s-1 0.453-1 1 0.453 1 1 1 1-0.453 1-1zM28 18.5v5.5c0 0.203-0.125 0.391-0.313 0.469-0.063 0.016-0.125 0.031-0.187 0.031-0.125 0-0.25-0.047-0.359-0.141l-1.453-1.453c-2.453 2.953-6.859 4.844-11.688 4.844s-9.234-1.891-11.688-4.844l-1.453 1.453c-0.094 0.094-0.234 0.141-0.359 0.141-0.063 0-0.125-0.016-0.187-0.031-0.187-0.078-0.313-0.266-0.313-0.469v-5.5c0-0.281 0.219-0.5 0.5-0.5h5.5c0.203 0 0.391 0.125 0.469 0.313s0.031 0.391-0.109 0.547l-1.563 1.563c1.406 1.891 4.109 3.266 7.203 3.687v-10.109h-3c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h3v-2.547c-1.188-0.688-2-1.969-2-3.453 0-2.203 1.797-4 4-4s4 1.797 4 4c0 1.484-0.812 2.766-2 3.453v2.547h3c0.547 0 1 0.453 1 1v2c0 0.547-0.453 1-1 1h-3v10.109c3.094-0.422 5.797-1.797 7.203-3.687l-1.563-1.563c-0.141-0.156-0.187-0.359-0.109-0.547s0.266-0.313 0.469-0.313h5.5c0.281 0 0.5 0.219 0.5 0.5z"></path>
|
<path d="M15 4c0-0.547-0.453-1-1-1s-1 0.453-1 1 0.453 1 1 1 1-0.453 1-1zM28 18.5v5.5c0 0.203-0.125 0.391-0.313 0.469-0.063 0.016-0.125 0.031-0.187 0.031-0.125 0-0.25-0.047-0.359-0.141l-1.453-1.453c-2.453 2.953-6.859 4.844-11.688 4.844s-9.234-1.891-11.688-4.844l-1.453 1.453c-0.094 0.094-0.234 0.141-0.359 0.141-0.063 0-0.125-0.016-0.187-0.031-0.187-0.078-0.313-0.266-0.313-0.469v-5.5c0-0.281 0.219-0.5 0.5-0.5h5.5c0.203 0 0.391 0.125 0.469 0.313s0.031 0.391-0.109 0.547l-1.563 1.563c1.406 1.891 4.109 3.266 7.203 3.687v-10.109h-3c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h3v-2.547c-1.188-0.688-2-1.969-2-3.453 0-2.203 1.797-4 4-4s4 1.797 4 4c0 1.484-0.812 2.766-2 3.453v2.547h3c0.547 0 1 0.453 1 1v2c0 0.547-0.453 1-1 1h-3v10.109c3.094-0.422 5.797-1.797 7.203-3.687l-1.563-1.563c-0.141-0.156-0.187-0.359-0.109-0.547s0.266-0.313 0.469-0.313h5.5c0.281 0 0.5 0.219 0.5 0.5z"></path>
|
||||||
</symbol>
|
</symbol>
|
||||||
<symbol id="icon-store" viewBox="0 0 616 512">
|
|
||||||
<path d="M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z"></path>
|
|
||||||
</symbol>
|
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
<g id="defs-relief">
|
<g id="defs-relief">
|
||||||
<symbol id="relief-mount-1" viewBox="0 0 100 100">
|
<symbol id="relief-mount-1" viewBox="0 0 100 100">
|
||||||
<path d="m3,69 16,-12 31,-32 15,20 30,24" fill="#fff" stroke="#5c5c70" stroke-width="1"></path>
|
<path d="m3,69 16,-12 31,-32 15,20 30,24" fill="#fff" stroke="#5c5c70" stroke-width="1"></path>
|
||||||
|
|
@ -875,11 +877,6 @@
|
||||||
</g>
|
</g>
|
||||||
<use xlink:href="#s3" transform="scale(-1)"/>
|
<use xlink:href="#s3" transform="scale(-1)"/>
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
<marker id="end-arrow" viewBox="0 -5 10 10" refX="6" markerWidth="7" markerHeight="7" orient="auto">
|
|
||||||
<path d="M0,-5L10,0L0,5" fill="#000"></path>
|
|
||||||
</marker>
|
|
||||||
|
|
||||||
</defs>
|
</defs>
|
||||||
<g id="viewbox"></g>
|
<g id="viewbox"></g>
|
||||||
<g id="scaleBar" onclick="editUnits()"></g>
|
<g id="scaleBar" onclick="editUnits()"></g>
|
||||||
|
|
@ -1929,9 +1926,6 @@
|
||||||
<button id="overviewRiversButton" data-tip="Click to open Rivers Overview. Shortcut: Shift + V">Rivers</button>
|
<button id="overviewRiversButton" data-tip="Click to open Rivers Overview. Shortcut: Shift + V">Rivers</button>
|
||||||
<button id="overviewMilitaryButton" data-tip="Click to open Military Forces Overview. Shortcut: Shift + M">Military</button>
|
<button id="overviewMilitaryButton" data-tip="Click to open Military Forces Overview. Shortcut: Shift + M">Military</button>
|
||||||
<button id="overviewCellsButton" data-tip="Click to open Cell details view. Shortcut: Shift + E">Cells</button>
|
<button id="overviewCellsButton" data-tip="Click to open Cell details view. Shortcut: Shift + E">Cells</button>
|
||||||
<!-- <button id="overviewLandmassedButton" data-tip="Click to open Landmasses Overview. Shortcut: Shift + L">Landmasses</button> -->
|
|
||||||
<!-- <button id="overviewWaterbodiesButton" data-tip="Click to open Waterbodies Overview. Shortcut: Shift + W">Waterbodies</button> -->
|
|
||||||
<!-- <button id="overviewRoutesButton" data-tip="Click to open Routes Overview. Shortcut: Shift + U">Routes</button> -->
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="regenerateFeature">
|
<div id="regenerateFeature">
|
||||||
|
|
@ -1941,7 +1935,7 @@
|
||||||
<button id="regenerateRoutes" data-tip="Click to regenerate all routes">Routes</button>
|
<button id="regenerateRoutes" data-tip="Click to regenerate all routes">Routes</button>
|
||||||
<button id="regenerateRivers" data-tip="Click to regenerate all rivers (restore default state)">Rivers</button>
|
<button id="regenerateRivers" data-tip="Click to regenerate all rivers (restore default state)">Rivers</button>
|
||||||
<button id="regeneratePopulation" data-tip="Click to recalculate rural and urban population">Population</button>
|
<button id="regeneratePopulation" data-tip="Click to recalculate rural and urban population">Population</button>
|
||||||
<button id="regenerateStates" data-tip="Click to select new capitals and regenerate states. Military forces will be regenerated as well, burgs will remain as they are">States</button>
|
<button id="regenerateStates" data-tip="Click to select new capitals and regenerate states. Emblems and military forces will be regenerated as well, burgs will remain as they are">States</button>
|
||||||
<button id="regenerateProvinces" data-tip="Click to regenerate provinces. States will remain as they are">Provinces</button>
|
<button id="regenerateProvinces" data-tip="Click to regenerate provinces. States will remain as they are">Provinces</button>
|
||||||
<button id="regenerateBurgs" data-tip="Click to regenerate all burgs and routes. States will remain as they are">Burgs</button>
|
<button id="regenerateBurgs" data-tip="Click to regenerate all burgs and routes. States will remain as they are">Burgs</button>
|
||||||
<button id="regenerateEmblems" data-tip="Click to regenerate all emblems">Emblems</button>
|
<button id="regenerateEmblems" data-tip="Click to regenerate all emblems">Emblems</button>
|
||||||
|
|
@ -2433,8 +2427,10 @@
|
||||||
<div id="burgEditor" class="dialog" style="display: none">
|
<div id="burgEditor" class="dialog" style="display: none">
|
||||||
|
|
||||||
<div id="burgBody" style="padding-bottom: .3em">
|
<div id="burgBody" style="padding-bottom: .3em">
|
||||||
<svg viewBox="0 0 200 200" width="85" height="85"><use id="burgEmblem"></use></svg>
|
<svg viewBox="0 0 200 200" width="130" height="130"><use id="burgEmblem"></use></svg>
|
||||||
<div style="float: right">
|
<div style="float: right">
|
||||||
|
<div id="burgProvinceAndState" style="padding: .1em; font-style: italic"></div>
|
||||||
|
|
||||||
<div style="padding: .1em">
|
<div style="padding: .1em">
|
||||||
<div class="label">Name:</div>
|
<div class="label">Name:</div>
|
||||||
<input id="burgName" data-tip="Type to rename the burg" autocorrect="off" spellcheck="false" style="width: 8em">
|
<input id="burgName" data-tip="Type to rename the burg" autocorrect="off" spellcheck="false" style="width: 8em">
|
||||||
|
|
@ -2463,6 +2459,17 @@
|
||||||
<span id="burgTemple" data-tip="Shows whether the burg is a religious center. Click to toggle" data-feature="temple" class="burgFeature icon-chess-bishop" style="font-size: 1.1em; margin-left: 3px"></span>
|
<span id="burgTemple" data-tip="Shows whether the burg is a religious center. Click to toggle" data-feature="temple" class="burgFeature icon-chess-bishop" style="font-size: 1.1em; margin-left: 3px"></span>
|
||||||
<span id="burgShanty" data-tip="Shows whether the burg has a shanty town. Click to toggle" data-feature="shanty" class="burgFeature icon-campground" style="font-size: 1em"></span>
|
<span id="burgShanty" data-tip="Shows whether the burg has a shanty town. Click to toggle" data-feature="shanty" class="burgFeature icon-campground" style="font-size: 1em"></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div style="padding: .1em" data-tip="Burg mean annual temperature and real-world city for comparison">
|
||||||
|
<div class="label">Temperature:</div>
|
||||||
|
<span id="burgTemperature"></span>, like in
|
||||||
|
<span id="burgTemperatureLikeIn"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="padding: .1em" data-tip="Burg height above mean sea level">
|
||||||
|
<div class="label">Elevation:</div>
|
||||||
|
<span id="burgElevation"></span> above sea level
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -3460,6 +3467,10 @@
|
||||||
<button id="emblemsGallery" data-tip="Download emblems gallery as html document (open in browser; downloading takes some time)" class="icon-layer-group"></button>
|
<button id="emblemsGallery" data-tip="Download emblems gallery as html document (open in browser; downloading takes some time)" class="icon-layer-group"></button>
|
||||||
<button id="emblemsFocus" data-tip="Show emblem associated area or place" class="icon-target"></button>
|
<button id="emblemsFocus" data-tip="Show emblem associated area or place" class="icon-target"></button>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="emblemUploadControl" class="hidden">
|
||||||
|
<button id="emblemsUploadImage" data-tip="Upload SVG or PNG image from any source. Make sure background is transparent">Any image</button>
|
||||||
|
<button id="emblemsUploadSVG" data-tip="Upload prepared SVG image, e.g. SVG from Armoria">Prepared SVG</button>
|
||||||
|
</div>
|
||||||
<div id="emblemDownloadControl" class="hidden">
|
<div id="emblemDownloadControl" class="hidden">
|
||||||
<input id="emblemsDownloadSize" data-tip="Set image size in pixels" type="number" value="500" step="100" min="100" max="10000"/>
|
<input id="emblemsDownloadSize" data-tip="Set image size in pixels" type="number" value="500" step="100" min="100" max="10000"/>
|
||||||
<button id="emblemsDownloadSVG" data-tip="Download as SVG: scalable vector image. Best quality, can be opened in browser or Inkscape">SVG</button>
|
<button id="emblemsDownloadSVG" data-tip="Download as SVG: scalable vector image. Best quality, can be opened in browser or Inkscape">SVG</button>
|
||||||
|
|
@ -3899,571 +3910,25 @@
|
||||||
<input type="file" accept=".txt,.csv" id="burgsListToLoad">
|
<input type="file" accept=".txt,.csv" id="burgsListToLoad">
|
||||||
<input type="file" accept=".txt" id="legendsToLoad">
|
<input type="file" accept=".txt" id="legendsToLoad">
|
||||||
<input type="file" accept="image/*" id="imageToLoad">
|
<input type="file" accept="image/*" id="imageToLoad">
|
||||||
|
<input type="file" accept="image/*" id="emblemImageToLoad">
|
||||||
|
<input type="file" accept=".svg" id="emblemSVGToLoad">
|
||||||
<input type="file" accept=".txt" id="templateToLoad">
|
<input type="file" accept=".txt" id="templateToLoad">
|
||||||
<input type="file" accept=".txt" id="namesbaseToLoad">
|
<input type="file" accept=".txt" id="namesbaseToLoad">
|
||||||
<input type="file" accept=".json" id="styleToLoad">
|
<input type="file" accept=".json" id="styleToLoad">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<svg id="coaDefs" width="0" height="0" style="position: absolute">
|
<!-- svg elements not required for map display -->
|
||||||
|
<svg width="0" height="0" style="position: absolute">
|
||||||
<defs>
|
<defs>
|
||||||
<g id="shields">
|
<marker id="end-arrow" viewBox="0 -5 10 10" refX="6" markerWidth="7" markerHeight="7" orient="auto">
|
||||||
<clipPath id="heater"><path d="m25,25 h150 v50 a150,150,0,0,1,-75,125 a150,150,0,0,1,-75,-125 z" /></clipPath>
|
<path d="M0,-5L10,0L0,5" fill="#000"></path>
|
||||||
<clipPath id="spanish"><path d="m25,25 h150 v100 a75,75,0,0,1,-150,0 z" /></clipPath>
|
</marker>
|
||||||
<clipPath id="french"><path d="m 25,25 h 150 v 139.15 c 0,41.745 -66,18.15 -75,36.3 -9,-18.15 -75,5.445 -75,-36.3 v 0 z" /></clipPath>
|
|
||||||
|
|
||||||
<clipPath id="horsehead"><path d="m 20,40 c 0,60 40,80 40,100 0,10 -4,15 -0.35,30 C 65,185.7 81,200 100,200 c 19.1,0 35.3,-14.6 40.5,-30.4 C 144.2,155 140,150 140,140 140,120 180,100 180,40 142.72,40 150,15 100,15 55,15 55,40 20,40 Z" /></clipPath>
|
<symbol id="icon-store" viewBox="0 0 616 512">
|
||||||
<clipPath id="horsehead2"><path d="M60 20c-5 20-10 35-35 55 25 35 35 65 30 100 20 0 35 10 45 26 10-16 30-26 45-26-5-35 5-65 30-100a87 87 0 01-35-55c-25 3-55 3-80 0z" /></clipPath>
|
<path d="M602 118.6L537.1 15C531.3 5.7 521 0 510 0H106C95 0 84.7 5.7 78.9 15L14 118.6c-33.5 53.5-3.8 127.9 58.8 136.4 4.5.6 9.1.9 13.7.9 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18 20.1 44.3 33.1 73.8 33.1 29.6 0 55.8-13 73.8-33.1 18.1 20.1 44.3 33.1 73.8 33.1 4.7 0 9.2-.3 13.7-.9 62.8-8.4 92.6-82.8 59-136.4zM529.5 288c-10 0-19.9-1.5-29.5-3.8V384H116v-99.8c-9.6 2.2-19.5 3.8-29.5 3.8-6 0-12.1-.4-18-1.2-5.6-.8-11.1-2.1-16.4-3.6V480c0 17.7 14.3 32 32 32h448c17.7 0 32-14.3 32-32V283.2c-5.4 1.6-10.8 2.9-16.4 3.6-6.1.8-12.1 1.2-18.2 1.2z"></path>
|
||||||
<clipPath id="polish"><path d="m 90.3,6.3 c -12.7,0 -20.7,10.9 -40.5,14 0,11.8 -4.9,23.5 -11.4,31.1 0,0 12.7,6 12.7,19.3 C 51.1,90.8 30,90.8 30,90.8 c 0,0 -3.6,7.4 -3.6,22.4 0,34.3 23.1,60.2 40.7,68.2 17.6,8 27.7,11.4 32.9,18.6 5.2,-7.3 15.3,-10.7 32.8,-18.6 17.6,-8 40.7,-33.9 40.7,-68.2 0,-15 -3.6,-22.4 -3.6,-22.4 0,0 -21.1,0 -21.1,-20.1 0,-13.3 12.7,-19.3 12.7,-19.3 C 155.1,43.7 150.2,32.1 150.2,20.3 130.4,17.2 122.5,6.3 109.7,6.3 102.5,6.3 100,10 100,10 c 0,0 -2.5,-3.7 -9.7,-3.7 z" /></clipPath>
|
</symbol>
|
||||||
<clipPath id="hessen"><path d="M170 20c4 5 8 13 15 20 0 0-10 0-10 15 0 100-15 140-75 145-65-5-75-45-75-145 0-15-10-15-10-15l15-20c0 15 10-5 70-5s70 20 70 5z" /></clipPath>
|
|
||||||
<clipPath id="swiss"><path d="m 25,20 c -0.1,0 25.2,8.5 37.6,8.5 C 75.1,28.5 99.1,20 100,20 c 0.6,0 24.9,8.5 37.3,8.5 C 149.8,28.5 174.4,20 175,20 l -0.3,22.6 C 173.2,160.3 100,200 100,200 100,200 26.5,160.9 25.2,42.6 Z" /></clipPath>
|
|
||||||
|
|
||||||
<clipPath id="boeotian"><path d="M150 115c-5 0-10-5-10-15s5-15 10-15c10 0 7 10 15 10 10 0 0-30 0-30-10-25-30-55-65-55S45 40 35 65c0 0-10 30 0 30 8 0 5-10 15-10 5 0 10 5 10 15s-5 15-10 15c-10 0-7-10-15-10-10 0 0 30 0 30 10 25 30 55 65 55s55-30 65-55c0 0 10-30 0-30-8 0-5 10-15 10z" /></clipPath>
|
<g id="coas"></g>
|
||||||
<clipPath id="roman"><path d="m 160,170 c -40,20 -80,20 -120,0 V 30 C 80,10 120,10 160,30 Z" /></clipPath>
|
|
||||||
<clipPath id="kite"><path d="m 53.3,46.4 c 0,4.1 1,12.3 1,12.3 7.1,55.7 45.7,141.3 45.7,141.3 0,0 38.6,-85.6 45.7,-141.2 0,0 1,-8.1 1,-12.3 C 146.7,20.9 125.8,0.1 100,0.1 74.2,0.1 53.3,20.9 53.3,46.4 Z" /></clipPath>
|
|
||||||
<clipPath id="oldFrench"><path d="m25,25 h150 v75 a100,100,0,0,1,-75,100 a100,100,0,0,1,-75,-100 z" /></clipPath>
|
|
||||||
<clipPath id="renaissance"><path d="M 25,33.9 C 33.4,50.3 36.2,72.9 36.2,81.7 36.2,109.9 25,122.6 25,141 c 0,29.4 24.9,44.1 40.2,47.7 15.3,3.7 29.3,0 34.8,11.3 5.5,-11.3 19.6,-7.6 34.8,-11.3 C 150.1,185 175,170.3 175,141 c 0,-18.4 -11.2,-31.1 -11.2,-59.3 0,-8.8 2.8,-31.3 11.2,-47.7 L 155.7,14.4 C 138.2,21.8 119.3,25.7 100,25.7 c -19.3,0 -38.2,-3.9 -55.7,-11.3 z" /></clipPath>
|
|
||||||
<clipPath id="baroque"><path d="m 100,25 c 18,0 50,2 75,14 v 37 l -2.7,3.2 c -4.9,5.4 -6.6,9.6 -6.7,16.2 0,6.5 2,11.6 6.9,17.2 l 2.8,3.1 v 10.2 c 0,17.7 -2.2,27.7 -7.8,35.9 -5,7.3 -11.7,11.3 -32.3,19.4 -12.6,5 -20.2,8.8 -28.6,14.5 C 103.3,198 100,200 100,200 c 0,0 -2.8,-2.3 -6.4,-4.7 C 85.6,189.8 78,186 65,180.9 32.4,168.1 26.9,160.9 25.8,129.3 L 25,116 l 3.3,-3.3 c 4.8,-5.2 7,-10.7 7,-17.3 0,-6.8 -1.8,-11.1 -6.5,-16.1 L 25,76 V 39 C 50,27 82,25 100,25 Z" /></clipPath>
|
|
||||||
|
|
||||||
<clipPath id="targe"><path d="m 20,35 c 15,0 115,-60 155,-10 -5,10 -15,15 -10,50 5,45 10,70 -10,90 C 125,195 75,195 50,175 25,150 30,130 35,85 50,95 65,85 65,70 65,50 50,45 40,50 30,55 27,65 30,70 23,73 20,70 14,70 11,60 20,45 20,35 Z" /></clipPath>
|
|
||||||
<clipPath id="targe2"><path d="m 84,32.2 c 6.2,-1 19.5,-31.4 94.1,-20.2 -30.57,33.64 -21.66,67.37 -11.2,95 20.2,69.5 -41.17549,84.7 -66.88,84.7 C 74.32,191.7071 8.38,168.95 32,105.9 36.88,92.88 31,89 31,82.6 35.15,82.262199 56.79,86.17 56.5,69.8 56.20,52.74 42.2,47.9 25.9,55.2 25.9,51.4 39.8,6.7 84,32.2 Z" /></clipPath>
|
|
||||||
<clipPath id="pavise"><path d="M95 7L39.9 37.3a10 10 0 00-5.1 9.5L46 180c.4 5.2 3.7 10 9 10h90c5.3 0 9.6-4.8 10-10l10.6-133.2a10 10 0 00-5-9.5L105 7c-4.2-2.3-6.2-2.3-10 0z" /></clipPath>
|
|
||||||
<clipPath id="wedged"><path d="m 51.2,19 h 96.4 c 3.1,12.7 10.7,20.9 26.5,20.8 C 175.7,94.5 165.3,144.3 100,200 43.5,154.2 22.8,102.8 25.1,39.7 37,38.9 47.1,34.7 51.2,19 Z" /></clipPath>
|
|
||||||
|
|
||||||
<clipPath id="round"><path d="m 185,100 a 85,85 0 0 1 -85,85 85,85 0 0 1 -85,-85 85,85 0 0 1 85,-85 85,85 0 0 1 85,85" /></clipPath>
|
|
||||||
<clipPath id="oval"><path d="m 32.3,99.5 a 67.7,93.7 0 1 1 0,1.3 z" /></clipPath>
|
|
||||||
<clipPath id="vesicaPiscis"><path d="M 100,0 C 63.9,20.4 41,58.5 41,100 c 0,41.5 22.9,79.6 59,100 36.1,-20.4 59,-58.5 59,-100 C 159,58.5 136.1,20.4 100,0 Z" /></clipPath>
|
|
||||||
<clipPath id="square"><path d="M 25,25 H 175 V 175 H 25 Z" /></clipPath>
|
|
||||||
<clipPath id="diamond"><path d="M 25,100 100,200 175,100 100,0 Z" /></clipPath>
|
|
||||||
<clipPath id="no"><path d="m0,0 h200 v200 h-200 z" /></clipPath>
|
|
||||||
|
|
||||||
<clipPath id="flag"><path d="M 10,40 h180 v120 h-180 Z" /></clipPath>
|
|
||||||
<clipPath id="pennon"><path d="M 10,40 l190,60 -190,60 Z" /></clipPath>
|
|
||||||
<clipPath id="guidon"><path d="M 10,40 h190 l-65,60 65,60 h-190 Z" /></clipPath>
|
|
||||||
<clipPath id="banner"><path d="m 25,25 v 170 l 25,-40 25,40 25,-40 25,40 25,-40 25,40 V 25 Z" /></clipPath>
|
|
||||||
<clipPath id="dovetail"><path d="m 25,25 v 175 l 75,-40 75,40 V 25 Z" /></clipPath>
|
|
||||||
<clipPath id="gonfalon"><path d="m 25,25 v 125 l 75,50 75,-50 V 25 Z" /></clipPath>
|
|
||||||
<clipPath id="pennant"><path d="M 25,15 100,200 175,15 Z" /></clipPath>
|
|
||||||
|
|
||||||
<clipPath id="fantasy1"><path d="M 100,5 C 85,30 40,35 15,40 c 40,35 20,90 40,115 15,25 40,30 45,45 5,-15 30,-20 45,-45 20,-25 0,-80 40,-115 C 160,35 115,30 100,5 Z" /></clipPath>
|
|
||||||
<clipPath id="fantasy2"><path d="m 152,21 c 0,0 -27,14 -52,-4 C 75,35 48,21 48,21 50,45 30,55 30,75 60,75 60,115 32,120 c 3,40 53,50 68,80 15,-30 65,-40 68,-80 -28,-5 -28,-45 2,-45 C 170,55 150,45 152,21 Z" /></clipPath>
|
|
||||||
<clipPath id="fantasy3"><path d="M 167,67 C 165,0 35,0 33,67 c 32,-7 27,53 -3,43 -5,45 60,65 70,90 10,-25 75,-47.51058 70,-90 -30,10 -35,-50 -3,-43 z" /></clipPath>
|
|
||||||
<clipPath id="fantasy4"><path d="M100 9C55 48 27 27 13 39c23 50 3 119 49 150 14 9 28 11 38 11s27-4 38-11c55-39 24-108 49-150-14-12-45 7-87-30z" /></clipPath>
|
|
||||||
<clipPath id="fantasy5"><path d="M 100,0 C 75,25 30,25 30,25 c 0,69 20,145 70,175 50,-30 71,-106 70,-175 0,0 -45,0 -70,-25 z" /></clipPath>
|
|
||||||
|
|
||||||
<clipPath id="noldor"><path d="m 55,75 h 2 c 3,-25 38,-10 3,20 15,50 30,75 40,105 10,-30 25,-55 40,-105 -35,-30 0,-45 3,-20 h 2 C 150,30 110,20 100,0 90,20 50,30 55,75 Z" /></clipPath>
|
|
||||||
<clipPath id="gondor"><path d="m 100,200 c 15,-15 38,-35 45,-60 h 5 V 30 h -5 C 133,10 67,10 55,30 h -5 v 110 h 5 c 7,25 30,45 45,60 z" /></clipPath>
|
|
||||||
<clipPath id="easterling"><path d="M 160,185 C 120,170 80,170 40,185 V 15 c 40,15 80,15 120,0 z" /></clipPath>
|
|
||||||
<clipPath id="erebor"><path d="M25 135 V60 l22-13 16-37 h75 l15 37 22 13 v75l-22 18-16 37 H63l-16-37z" /></clipPath>
|
|
||||||
<clipPath id="ironHills"><path d="m 30,25 60,-10 10,10 10,-10 60,10 -5,125 -65,50 -65,-50 z" /></clipPath>
|
|
||||||
<clipPath id="urukHai"><path d="M 30,60 C 40,60 60,50 60,20 l -5,-3 45,-17 75,40 -5,5 -35,155 -5,-35 H 70 v 35 z" /></clipPath>
|
|
||||||
<clipPath id="moriaOrc"><path d="M45 35c5 3 7 10 13 9h19c4-2 7-4 9-9 6 1 9 9 16 11 7-2 14 0 21 0 6-3 6-10 10-15 2-5 1-10-2-15-2-4-5-14-4-16 3 6 7 11 12 14 7 3 3 12 7 16 3 6 4 12 9 18 2 4 6 8 5 14 0 6-1 12 3 18-3 6-2 13-1 20 1 6-2 12-1 18 0 6-3 13 0 18 8 4 0 8-5 7-4 3-9 3-13 9-5 5-5 13-8 19 0 6 0 15-7 16-1 6-7 6-10 12-1-6 0-6-2-9l2-19c2-4 5-12-3-12-4-5-11-5-15 1l-13-18c-3-4-2 9-3 12 2 2-4-6-7-5-8-2-8 7-11 11-2 4-5 10-8 9 3-10 3-16 1-23-1-4 2-9-4-11 0-6 1-13-2-19-4-2-9-6-13-7V91c4-7-5-13 0-19-3-7 2-11 2-18-1-6 1-12 3-17v-1z" /></clipPath>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<g id="gradients">
|
|
||||||
<linearGradient id="luster" x1="0%" y1="100%" x2="95%" y2="10%">
|
|
||||||
<stop stop-color="#000" stop-opacity=".3" offset="0" />
|
|
||||||
<stop stop-color="#ccc" stop-opacity="0" offset=".8" />
|
|
||||||
<stop stop-color="#fff" stop-opacity=".2" offset="1" />
|
|
||||||
</linearGradient>
|
|
||||||
<radialGradient id="spotlight" cx="35%" cy="35%" r="100%">
|
|
||||||
<stop stop-color="#fff" stop-opacity=".3" offset="0" />
|
|
||||||
<stop stop-color="#fff" stop-opacity=".15" offset=".2" />
|
|
||||||
<stop stop-color="#000" stop-opacity="0" offset=".7" />
|
|
||||||
</radialGradient>
|
|
||||||
<radialGradient id="backlight" cx="100%" cy="100%" r="150%">
|
|
||||||
<stop stop-color="#fff" stop-opacity=".3" offset="0" />
|
|
||||||
<stop stop-color="#fff" stop-opacity=".15" offset=".25" />
|
|
||||||
<stop stop-color="#000" stop-opacity="0" offset="1" />
|
|
||||||
</radialGradient>
|
|
||||||
<linearGradient id="brink" x1="0%" y1="100%" x2="100%" y2="100%">
|
|
||||||
<stop stop-color="#fff" stop-opacity=".3" offset="0" />
|
|
||||||
<stop stop-color="#000" stop-opacity=".2" offset=".5" />
|
|
||||||
</linearGradient>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<g id="diapers">
|
|
||||||
<pattern id="sulzbach" width=".101" height=".101" viewBox="0 0 100 100" patternTransform="rotate(45)">
|
|
||||||
<g fill="#000" stroke="none" opacity=".08">
|
|
||||||
<circle cx="50" cy="50" r="6" />
|
|
||||||
<circle cx="0" cy="0" r="6" />
|
|
||||||
<circle cx="100" cy="0" r="6" />
|
|
||||||
<circle cx="100" cy="100" r="6" />
|
|
||||||
<circle cx="0" cy="100" r="6" />
|
|
||||||
</g>
|
|
||||||
<g fill="none" stroke="#000" stroke-width="4" opacity=".08">
|
|
||||||
<path d="m6 80v-60" />
|
|
||||||
<path d="m20 6h60" />
|
|
||||||
<path d="m94 20v60" />
|
|
||||||
<path d="m80 94h-60" />
|
|
||||||
<path d="m6 6c11.787 2.9106 18.776 10.599 22 22-13.205-3.8261-19.647-11.696-22-22z" />
|
|
||||||
<path d="m28 72c-2.9106 11.787-10.599 18.776-22 22 3.8261-13.205 11.696-19.647 22-22z" />
|
|
||||||
<path d="m94 6c-2.9106 11.787-10.599 18.776-22 22 3.8261-13.205 11.696-19.647 22-22z" />
|
|
||||||
<path d="m72 72c11.787 2.9106 18.776 10.599 22 22-13.205-3.8261-19.647-11.696-22-22z" />
|
|
||||||
</g>
|
|
||||||
</pattern>
|
|
||||||
<pattern id="sennwald" width=".101" height=".101" viewBox="0 0 100 100" patternTransform="rotate(45)">
|
|
||||||
<g fill="none" stroke="#000" opacity=".2">
|
|
||||||
<path d="M6 6 h88 v88 H6 z" />
|
|
||||||
<path d="M29.8 47c-22.6 1-9.3 35.9 10 23.5-2.6 19 32.2 21.8 25.8-4.4 21 7.7 30.5-26.4 4-24.4C92 21.7 44.4 4.3 47.6 31.2 45 7.4 3.3 26.5 30 46.9z" />
|
|
||||||
<path d="M59.6 45a11 10.5 38.5 11-19 9.5 11 10.5 38.5 1119-9.4z" />
|
|
||||||
</g>
|
|
||||||
</pattern>
|
|
||||||
<pattern id="tessellation" width=".125" height=".125" viewBox="0 0 84 84">
|
|
||||||
<path
|
|
||||||
fill="#222"
|
|
||||||
opacity=".1"
|
|
||||||
stroke-width="2"
|
|
||||||
fill-rule="evenodd"
|
|
||||||
d="M84 23c-4.417 0-8-3.584-8-7.998V8h-7.002C64.58 8 61 4.42 61 0H23c0 4.417-3.584 8-7.998 8H8v7.002C8 19.42 4.42 23 0 23v38c4.417 0 8 3.584 8 7.998V76h7.002C19.42 76 23 79.58 23 84h38c0-4.417 3.584-8 7.998-8H76v-7.002C76 64.58 79.58 61 84 61V23zM59.05 83H43V66.95c5.054-.5 9-4.764 9-9.948V52h5.002c5.18 0 9.446-3.947 9.95-9H83v16.05c-5.054.5-9 4.764-9 9.948V74h-5.002c-5.18 0-9.446 3.947-9.95 9zm-34.1 0H41V66.95c-5.053-.502-9-4.768-9-9.948V52h-5.002c-5.184 0-9.447-3.946-9.95-9H1v16.05c5.053.502 9 4.768 9 9.948V74h5.002c5.184 0 9.447 3.946 9.95 9zm0-82H41v16.05c-5.054.5-9 4.764-9 9.948V32h-5.002c-5.18 0-9.446 3.947-9.95 9H1V24.95c5.054-.5 9-4.764 9-9.948V10h5.002c5.18 0 9.446-3.947 9.95-9zm34.1 0H43v16.05c5.053.502 9 4.768 9 9.948V32h5.002c5.184 0 9.447 3.946 9.95 9H83V24.95c-5.053-.502-9-4.768-9-9.948V10h-5.002c-5.184 0-9.447-3.946-9.95-9zM50 50v7.002C50 61.42 46.42 65 42 65c-4.417 0-8-3.584-8-7.998V50h-7.002C22.58 50 19 46.42 19 42c0-4.417 3.584-8 7.998-8H34v-7.002C34 22.58 37.58 19 42 19c4.417 0 8 3.584 8 7.998V34h7.002C61.42 34 65 37.58 65 42c0 4.417-3.584 8-7.998 8H50z"
|
|
||||||
/>
|
|
||||||
</pattern>
|
|
||||||
<pattern id="nourse" width=".25" height=".25" viewBox="0 0 26 26">
|
|
||||||
<g fill="none" stroke="#000" stroke-width="1" opacity=".06">
|
|
||||||
<path d="M26 1h-.2A25 25 0 001 26M25.2 26A25 25 0 000 1" />
|
|
||||||
<path d="M1 0v.2a25 25 0 0025 25" />
|
|
||||||
<path d="M0 25.2h.2A25 25 0 0025.2 0" />
|
|
||||||
<path stroke-width=".4" d="M10.5 10.6h5v5h-5z" />
|
|
||||||
<path stroke-width=".5" d="M11 10c0-3.2 4.1-3.2 4 0M15 16.2c0 3.4-4 3.3-4 0M16.2 11c3.2.2 3.1 4.3 0 4.1M9.9 15.1c-3.3 0-3.3-4 0-4" />
|
|
||||||
<g fill="#000" stroke="none">
|
|
||||||
<circle cx="21.9" cy="19.7" r="1" />
|
|
||||||
<circle cx="20" cy="20.7" r="1" />
|
|
||||||
<circle cx="21.9" cy="21.9" r="1" />
|
|
||||||
<circle cx="5" cy="7.2" r="1" />
|
|
||||||
<circle cx="6.9" cy="6.1" r="1" />
|
|
||||||
<circle cx="5" cy="5" r="1" />
|
|
||||||
<circle cx="21.9" cy="4.9" r="1" />
|
|
||||||
<circle cx="20" cy="6" r="1" />
|
|
||||||
<circle cx="21.9" cy="7.1" r="1" />
|
|
||||||
<circle cx="4.9" cy="22" r="1" />
|
|
||||||
<circle cx="6.9" cy="20.9" r="1" />
|
|
||||||
<circle cx="4.9" cy="19.8" r="1" />
|
|
||||||
<circle cx="12" cy="14.2" r=".9" />
|
|
||||||
<circle cx="14.1" cy="14.2" r=".9" />
|
|
||||||
<circle cx="12" cy="12" r=".9" />
|
|
||||||
<circle cx="14.1" cy="12" r=".9" />
|
|
||||||
<circle cx="1.8" cy="13.1" r=".8" />
|
|
||||||
<circle cx=".9" cy="14.6" r=".8" />
|
|
||||||
<circle cx=".9" cy="11.6" r=".8" />
|
|
||||||
<circle cx="24.3" cy="13.1" r=".8" />
|
|
||||||
<circle cx="25.2" cy="14.6" r=".8" />
|
|
||||||
<circle cx="25.2" cy="11.6" r=".8" />
|
|
||||||
<circle cx="13" cy="24.3" r=".8" />
|
|
||||||
<circle cx="14.6" cy="25.1" r=".8" />
|
|
||||||
<circle cx="11.5" cy="25.1" r=".8" />
|
|
||||||
<circle cx="13" cy="1.8" r=".8" />
|
|
||||||
<circle cx="11.4" cy="1" r=".8" />
|
|
||||||
<circle cx="14.6" cy="1" r=".8" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</pattern>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<g id="patterns">
|
|
||||||
<!-- Semy of Charges -->
|
|
||||||
<template id="semy">
|
|
||||||
<pattern id="{id}" width=.134 height=.1787 viewBox="0 0 150 200" stroke="#000">
|
|
||||||
<rect x=0 y=0 width=150 height=200 fill="{c1}" stroke="none"/>
|
|
||||||
<g fill="{c2}">
|
|
||||||
<g transform="translate(-60,-50)"><charge></g>
|
|
||||||
<g transform="translate(10,50)"><charge></g>
|
|
||||||
</g>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<!-- Furs -->
|
|
||||||
<template id="vair">
|
|
||||||
<pattern id="{id}" width=.125 height=.25 viewBox="0 0 25 50" stroke="#000" stroke-width=.2>
|
|
||||||
<rect x=0 y=0 width=25 height=25 fill="{c2}" stroke="none"/>
|
|
||||||
<path d="m12.5,0 l6.25,6.25 v12.5 l6.25,6.25 h-25 l6.25,-6.25 v-12.5 z" fill="{c1}"/>
|
|
||||||
<rect x=0 y=25 width=25 height=25 fill="{c1}" stroke-width=1 stroke="none"/>
|
|
||||||
<path d="m25,25 l-6.25,6.25 v12.5 l-6.25,6.25 l-6.25,-6.25 v-12.5 l-6.25,-6.25 z" fill="{c2}"/>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="vairInPale">
|
|
||||||
<pattern id="{id}" width=.125 height=.125 viewBox="0 0 25 25">
|
|
||||||
<rect x=0 y=0 width=25 height=25 fill="{c2}"/>
|
|
||||||
<path d="m12.5,0 l6.25,6.25 v12.5 l6.25,6.25 h-25 l6.25,-6.25 v-12.5 z" fill="{c1}" stroke="#000" stroke-width=".2"/>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="vairEnPointe">
|
|
||||||
<pattern id="{id}" width=.125 height=.25 viewBox="0 0 25 50">
|
|
||||||
<rect x=0 y=0 width=25 height=25 fill="{c2}"/>
|
|
||||||
<path d="m12.5,0 l6.25,6.25 v12.5 l6.25,6.25 h-25 l6.25,-6.25 v-12.5 z" fill="{c1}"/>
|
|
||||||
<rect x=0 y=25 width=25 height=25 fill="{c1}" stroke-width=1 stroke="{c1}"/>
|
|
||||||
<path d="m12.5,25 l6.25,6.25 v12.5 l6.25,6.25 h-25 l6.25,-6.25 v-12.5 z" fill="{c2}"/>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="ermine">
|
|
||||||
<pattern id="{id}" width=".125" height=".125" viewBox="0 0 25 25" fill="{c2}">
|
|
||||||
<rect x=0 y=0 width=25 height=25 fill="{c1}"/>
|
|
||||||
<path d="m19.1,14.8 c-0.7,2.9 -2.1,5 -3.5,6.5 0.6,-0.1 1.3,-0.6 2,-0.9 -0.4,0.8 -0.8,1.4 -1.2,2.1 0.2,-0.1 1,-0.8 2,-1.8 0.2,1.4 0.4,2.9 0.7,3.9 0.3,-0.9 0.5,-2.5 0.7,-3.9 0.6,0.6 1.2,1.3 2.1,1.8 l -1.2,-2.2 c 0.6,0.3 1.3,0.8 1.9,1 -1.5,-1.6 -2.8,-3.6 -3.5,-6.5z"/>
|
|
||||||
<path d="m16.1,14.9 c-0.1,-0.2 -1,0.4 -1.5,-0.8 1.2,1.1 2.5,-1.2 3.5,0.4 0.3,0.7 -1.1,1.8 -2,0.4z"/>
|
|
||||||
<path d="m21.9,14.9 c.1,-.2 1,0.4 1.5,-0.8 -1.2,1.1 -2.5,-1.2 -3.5,0.4 -0.3,0.7 1.1,1.8 2,0.4z"/>
|
|
||||||
<path d="m19.4,12.4 c-0.2,-0.1 0.7,-0.7 -0.6,-1.4 1.1,1.2 -2,1.7 -0.3,2.9 0.7,0.4 2.4,-0.5 0.9,-1.5z"/>
|
|
||||||
<path d="M5.8,4.6 C5.1,7.5 3.7,9.5 2.3,11 2.9,10.9 3.6,10.5 4.2,10.1 3.8,10.9 3.4,11.5 3,12.2 3.3,12.1 4,11.4 5.1,10.4 c 0.2,1.4 0.4,2.9 0.7,3.9 0.3,-0.9 0.5,-2.5 0.7,-3.9 0.6,0.6 1.2,1.3 2.1,1.8 L 7.3,10 c 0.6,0.3 1.3,0.8 1.9,1 C7.7,9.5 6.4,7.5 5.8,4.6Z"/>
|
|
||||||
<path d="M2.9,4.7 C2.8,4.6 1.9,5.1 1.3,4 2.6,5.1 3.8,2.8 4.9,4.3 5.2,5 3.8,6.1 2.9,4.7Z"/>
|
|
||||||
<path d="M8.6,4.7 C8.7,4.5 9.6,5.1 10.1,3.9 8.9,5.1 7.6,2.7 6.6,4.3 6.3,5 7.7,6.1 8.6,4.7Z"/>
|
|
||||||
<path d="M6.1,2.2 C 5.9,2.1 6.8,1.5 5.5,0.8 6.6,2.1 3.5,2.6 5.2,3.7 5.9,4.1 7.6,3.3 6.1,2.2Z"/>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<!-- Patterns -->
|
|
||||||
<template id="chequy">
|
|
||||||
<pattern id="{id}" width=.25 height=.25 viewBox="0 0 50 50" fill="{c2}">
|
|
||||||
<rect x=0 y=0 width=50 height=50 />
|
|
||||||
<rect x=0 y=0 width=25 height=25 fill="{c1}"/>
|
|
||||||
<rect x=25 y=25 width=25 height=25 fill="{c1}"/>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="lozengy">
|
|
||||||
<pattern id="{id}" width=.125 height=.125 viewBox="0 0 50 50">
|
|
||||||
<rect x=0 y=0 width=50 height=50 fill="{c1}"/>
|
|
||||||
<polygon points="25,0 50,25 25,50 0,25" fill="{c2}"/>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="fusily">
|
|
||||||
<pattern id="{id}" width=.125 height=.25 viewBox="0 0 50 100">
|
|
||||||
<rect x=0 y=0 width=50 height=100 fill="{c1}"/>
|
|
||||||
<polygon points="25,0 50,50 25,100 0,50" fill="{c2}"/>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="pally">
|
|
||||||
<pattern id="{id}" width=.5 height=.125 viewBox="0 0 100 25">
|
|
||||||
<rect x=0 y=0 width=100 height=25 fill="{c1}"/>
|
|
||||||
<rect x=25 y=0 width=25 height=25 fill="{c2}"/>
|
|
||||||
<rect x=75 y=0 width=25 height=25 fill="{c2}"/>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="barry">
|
|
||||||
<pattern id="{id}" width=.125 height=.5 viewBox="0 0 25 100">
|
|
||||||
<rect x=0 y=0 width=25 height=100 fill="{c2}"/>
|
|
||||||
<rect x=0 y=25 width=25 height=25 fill="{c1}"/>
|
|
||||||
<rect x=0 y=75 width=25 height=25 fill="{c1}"/>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="gemelles">
|
|
||||||
<pattern id="{id}" width=.125 height=.5 viewBox="0 0 25 100">
|
|
||||||
<rect x=0 y=0 width=25 height=100 fill="{c2}"/>
|
|
||||||
<rect x=0 y=35 width=25 height=10 fill="{c1}"/>
|
|
||||||
<rect x=0 y=55 width=25 height=10 fill="{c1}"/>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="bendy">
|
|
||||||
<pattern id="{id}" width=.36 height=.36 viewBox="0 0 50 50" patternTransform="rotate(45)">
|
|
||||||
<rect x=0 y=0 width=50 height=50 fill="{c2}"/>
|
|
||||||
<line x1=0 y1=37.5 x2=50 y2=37.5 stroke="{c1}" stroke-width=25 />
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="bendySinister">
|
|
||||||
<pattern id="{id}" width=.36 height=.36 viewBox="0 0 50 50" patternTransform="rotate(-45)">
|
|
||||||
<rect x=0 y=0 width=50 height=50 fill="{c2}"/>
|
|
||||||
<line x1=0 y1=37.5 x2=50 y2=37.5 stroke="{c1}" stroke-width=25 />
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="palyBendy">
|
|
||||||
<pattern id="{id}" width=.125 height=.25 viewBox="0 0 50 100" patternTransform="translate(22,44) rotate(-26.5)">
|
|
||||||
<rect x=0 y=0 width=50 height=100 fill="{c1}"/>
|
|
||||||
<polygon points="25,0 50,50 25,100 0,50" fill="{c2}"/>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="pappellony">
|
|
||||||
<pattern id="{id}" width=.125 height=.125 viewBox="0 0 100 100">
|
|
||||||
<rect x=0 y=0 width=100 height=100 fill="{c1}"/>
|
|
||||||
<circle cx=0 cy=51 r=45 stroke="{c2}" fill="{c1}" stroke-width=10></circle>
|
|
||||||
<circle cx=100 cy=51 r=45 stroke="{c2}" fill="{c1}" stroke-width=10></circle>
|
|
||||||
<circle cx=50 cy=1 r=45 stroke="{c2}" fill="{c1}" stroke-width=10></circle>
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="masoned">
|
|
||||||
<pattern id="{id}" width=.125 height=.125 viewBox="0 0 100 100" fill="none">
|
|
||||||
<rect x=0 y=0 width=100 height=100 fill="{c1}"/>
|
|
||||||
<rect x=0 y=0 width=100 height=50 stroke="{c2}" stroke-width=4 />
|
|
||||||
<line x1=50 y1=50 x2=50 y2=100 stroke="{c2}" stroke-width=5 />
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
<template id="fretty">
|
|
||||||
<pattern id="{id}" width=.28 height=.28 viewBox="0 0 200 200" patternTransform="translate(-19,21) rotate(45)" stroke="#000" stroke-width=2>
|
|
||||||
<rect x=0 y=0 width=200 height=200 stroke="none" fill="{c1}"/>
|
|
||||||
<rect x=0 y=35 width=200 height=30 stroke="none" fill="{c2}"/>
|
|
||||||
<rect x=0 y=135 width=200 height=30 stroke="none" fill="{c2}"/>
|
|
||||||
<rect x=35 y=0 width=30 height=200 stroke="none" fill="{c2}"/>
|
|
||||||
<rect x=135 y=0 width=30 height=200 stroke="none" fill="{c2}"/>
|
|
||||||
<line x1=0 y1=35 x2=35 y2=35 /><line x1=0 y1=65 x2=35 y2=65 />
|
|
||||||
<line x1=35 y1=165 x2=35 y2=200 /><line x1=65 y1=165 x2=65 y2=200 />
|
|
||||||
<line x1=135 y1=0 x2=135 y2=35 /><line x1=165 y1=0 x2=165 y2=35 />
|
|
||||||
<line x1=135 y1=65 x2=135 y2=200 /><line x1=165 y1=65 x2=165 y2=200 />
|
|
||||||
<line x1=35 y1=0 x2=35 y2=135 /><line x1=65 y1=0 x2=65 y2=135 />
|
|
||||||
<line x1=65 y1=35 x2=200 y2=35 /><line x1=65 y1=65 x2=200 y2=65 />
|
|
||||||
<line x1=0 y1=135 x2=135 y2=135 /><line x1=0 y1=165 x2=135 y2=165 />
|
|
||||||
<line x1=165 y1=135 x2=200 y2=135 /><line x1=165 y1=165 x2=200 y2=165 />
|
|
||||||
</pattern>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<!-- Generated patterns -->
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<g id="lines">
|
|
||||||
<path id="straight" d="m 0,100 v15 h 200 v -15 z" />
|
|
||||||
<path id="engrailed" d="m 0,95 a 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 v 20 H 0 Z" />
|
|
||||||
<path id="invecked" d="M0,102.5 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 v12.5 H0 z" />
|
|
||||||
<path id="embattled" d="M 0,105 H 2.5 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 2.5 v 10 H 0 Z" />
|
|
||||||
<path id="wavy" d="m 200,115 v -15 c -8.9,3.5 -16,3.1 -25,0 -8.9,-3.5 -16,-3.1 -25,0 -8.9,3.5 -16,3.2 -25,0 -8.9,-3.5 -16,-3.2 -25,0 -8.9,3.5 -16,3.1 -25,0 -8.9,-3.5 -16,-3.1 -25,0 -8.9,3.5 -16,3.2 -25,0 -8.9,-3.5 -16,-3.2 -25,0 v 15 z" />
|
|
||||||
<path id="raguly" d="m 200,95 h -3 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 H 97 l -5,10 H 82 L 87,95 H 77 l -5,10 H 62 L 67,95 H 57 l -5,10 H 42 L 47,95 H 37 l -5,10 H 22 L 27,95 H 17 l -5,10 H 2 L 7,95 H 0 v 20 h 200 z" />
|
|
||||||
<path id="dancetty" d="m 0,105 10,-15 15,20 15,-20 15,20 15,-20 15,20 15,-20 15,20 15,-20 15,20 15,-20 15,20 15,-20 10,15 v 10 H 0 Z" />
|
|
||||||
<path id="dentilly" d="M 180,105 170,95 v 10 L 160,95 v 10 L 150,95 v 10 L 140,95 v 10 L 130,95 v 10 L 120,95 v 10 L 110,95 v 10 L 100,95 v 10 L 90,95 v 10 L 80,95 v 10 L 70,95 v 10 L 60,95 v 10 L 50,95 v 10 L 40,95 v 10 L 30,95 v 10 L 20,95 v 10 L 10,95 v 10 L 0,95 v 20 H 200 V 105 L 190,95 v 10 L 180,95 Z" />
|
|
||||||
<path id="angled" d="m 0,95 h 100 v 10 h 100 v 10 H 0 Z" />
|
|
||||||
<path id="urdy" d="m 200,90 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,6 -5,-6 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,6 -5,-6 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 L 0,90 v 25 h 200" />
|
|
||||||
<path id="indented" d="m 100,95 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 v 20 H 0 V 95 l 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 z" />
|
|
||||||
<path id="bevilled" d="m 0,92.5 h 110 l -20,15 H 200 V 115 H 0 Z" />
|
|
||||||
<path id="nowy" d="m 0,95 h 80 c 0,0 0.1,20.1 20,20 19.9,-0.1 20,-20 20,-20 h 80 v 20 H 0 Z" />
|
|
||||||
<path id="nowyReversed" d="m 200,105 h -80 c 0,0 -0.1,-20.1 -20,-20 -19.9,0.1 -20,20 -20,20 H 0 v 10 h 200 z" />
|
|
||||||
<path id="potenty" d="m 3,95 v 5 h 5 v 5 H 0 v 10 h 200 l 0.5,-10 H 193 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 H 100.5 93 v -5 h 5 V 95 H 83 v 5 h 5 v 5 H 73 v -5 h 5 V 95 H 63 v 5 h 5 v 5 H 53 v -5 h 5 V 95 H 43 v 5 h 5 v 5 H 33 v -5 h 5 V 95 H 23 v 5 h 5 v 5 H 13 v -5 h 5 v -5 z" />
|
|
||||||
<path id="potentyDexter" d="m 200,105 h -2 v -10 0 0 h -10 v 5 h 5 v 5 H 183 V 95 h -10 v 5 h 5 v 5 H 168 V 95 h -10 v 5 h 5 v 5 H 153 V 95 h -10 v 5 h 5 v 5 H 138 V 95 h -10 v 5 h 5 v 5 H 123 V 95 h -10 v 5 h 5 v 5 h -10 v 0 0 -10 H 98 v 5 h 5 v 5 H 93 V 95 H 83 v 5 h 5 v 5 H 78 V 95 H 68 v 5 h 5 v 5 H 63 V 95 H 53 v 5 h 5 v 5 H 48 V 95 H 38 v 5 h 5 v 5 H 33 V 95 H 23 v 5 h 5 v 5 H 18 V 95 H 8 v 5 h 5 v 5 H 3 V 95 H 0 v 20 h 200 z" />
|
|
||||||
<path id="potentySinister" d="m 2.5,95 v 10 H 0 v 10 h 202.5 v -15 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 z" />
|
|
||||||
<path id="embattledGhibellin" d="M 200,200 V 100 l -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 v 15 h 200" />
|
|
||||||
<path id="embattledNotched" d="m 200,105 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 H 90 V 95 l -5,5 -5,-5 v 10 H 75 V 95 l -5,5 -5,-5 v 10 H 60 V 95 l -5,5 -5,-5 v 10 H 45 V 95 l -5,5 -5,-5 v 10 H 30 V 95 l -5,5 -5,-5 v 10 H 15 V 95 l -5,5 -5,-5 v 10 H 0 v 10 h 200" />
|
|
||||||
<path id="embattledGrady" d="m 0,95 v 20 H 200 V 95 h -2.5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 z" />
|
|
||||||
<path id="dovetailed" d="m 200,95 h -7 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 H 93 l 4,10 H 83 L 87,95 H 73 l 4,10 H 63 L 67,95 H 53 l 4,10 H 43 L 47,95 H 33 l 4,10 H 23 L 27,95 H 13 l 4,10 H 3 L 7,95 H 0 v 20 h 200" />
|
|
||||||
<path id="dovetailedIndented" d="m 200,100 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 v 15 h 200" />
|
|
||||||
<path id="nebuly" d="m 13.1,89.8 c -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.2,4.5 -7.3,4.5 -0.5,0 -2.2,-0.2 -2.2,-0.2 V 115 h 200 v -10.1 c -3.7,-0.2 -6.7,-2.2 -6.7,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.8,-1.9 1.8,-3.1 0,-2.5 -3.2,-4.5 -7.2,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.8,-1.9 1.8,-3.1 0,-2.5 -3.2,-4.5 -7.2,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 -1.5,4.1 -4.2,4.4 -8.8,4.5 -4.7,-0.1 -8.7,-1.5 -8.9,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 z"/>
|
|
||||||
<path id="rayonne" d="M0 115l-.1-6 .2.8c1.3-1 2.3-2.5 2.9-4.4.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4A9 9 0 015.5 90c-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 2.1 3.1 3.1 4.6 1 1.6 2.4 3.1 2.7 4.8.3 1.7.3 3.3 0 5.2 1.3-1 2.6-2.7 3.2-4.6.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.75 2.79 2.72 4.08 4.45 5.82L200 115z"/>
|
|
||||||
<path id="seaWaves" d="m 28.83,94.9 c -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.44,-3.6 3.6,-3.6 0.7,0 1.36,0.17 1.93,0.48 -0.33,-2.03 -2.19,-3.56 -4.45,-3.56 -4.24,0 -6.91,3.13 -8.5,5.13 V 115 h 200 v -14.89 c -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.44,-3.6 3.6,-3.6 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -6.6,3.09 -8.19,5.09 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 z"/>
|
|
||||||
<path id="dragonTeeth" d="M 9.4,85 C 6.5,88.1 4.1,92.9 3,98.8 1.9,104.6 2.3,110.4 3.8,115 2.4,113.5 0,106.6 0,109.3 v 5.7 h 200 v -5.7 c -1.1,-2.4 -2,-5.1 -2.6,-8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -1.4,-1.5 -2.8,-3.9 -3.8,-6.1 -1.1,-2.4 -2.3,-6.1 -2.6,-7.7 -0.2,-5.9 0.2,-11.7 1.7,-16.3 -3,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1,-5.8 -0.7,-11.6 0.9,-16.2 -3,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.9,-16.2 -3,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 C 63,95.4 63.4,89.6 64.9,85 c -2.9,3.1 -5.3,7.9 -6.3,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1,5.8 -0.6,11.6 0.9,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1,5.8 -0.7,11.6 0.9,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.9,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 C 18.6,95.4 19,89.6 20.5,85 17.6,88.1 15.2,92.9 14.1,98.8 13,104.6 13.4,110.4 14.9,115 12,111.9 9.6,107.1 8.6,101.2 7.5,95.4 7.9,89.6 9.4,85 Z"/>
|
|
||||||
<path id="firTrees" d="m 3.9,90 -4,7 2,-0.5 L 0,100 v 15 h 200 v -15 l -1.9,-3.5 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4.1,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4.1,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 z" />
|
|
||||||
<path id="flechy" d="m 0,100 h 85 l 15,-15 15,15 h 85 v 15 H 0 Z" />
|
|
||||||
<path id="barby" d="m 0,100 h 85 l 15,15 15,-15 h 85 v 15 H 0 Z" />
|
|
||||||
<path id="enclavy" d="M 0,100 H 85 V 85 h 30 v 15 h 85 v 15 H 0 Z" />
|
|
||||||
<path id="escartely" d="m 0,100 h 85 v 15 h 30 v -15 h 85 v 15 H 0 Z" />
|
|
||||||
<path id="arched" d="m 100,95 c 40,-0.2 100,20 100,20 H 0 c 0,0 60,-19.8 100,-20 z" />
|
|
||||||
<path id="archedReversed" d="m 0,85 c 0,0 60,20.2 100,20 40,-0.2 100,-20 100,-20 v 30 H 0 Z" />
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<g id="divisions">
|
|
||||||
<!-- Lined Divisions -->
|
|
||||||
<template id="perFess">
|
|
||||||
<path dpath="{line}" />
|
|
||||||
<rect x="0" y="115" width="200" height="85" />
|
|
||||||
</template>
|
|
||||||
<template id="perPale">
|
|
||||||
<path dpath="{line}" transform="rotate(-90)" transform-origin="center" />
|
|
||||||
<rect x="115" y="0" width="85" height="200" />
|
|
||||||
</template>
|
|
||||||
<template id="perBend">
|
|
||||||
<path dpath="{line}" transform="rotate(45) scale(1.1)" transform-origin="center" />
|
|
||||||
<rect x="0" y="115" width="200" height="85" transform="rotate(45) scale(1.1)" transform-origin="center" />
|
|
||||||
</template>
|
|
||||||
<template id="perBendSinister">
|
|
||||||
<path dpath="{line}" transform="rotate(-45) scale(1.1)" transform-origin="center" />
|
|
||||||
<rect x="0" y="115" width="200" height="85" transform="rotate(-45) scale(1.1)" transform-origin="center" />
|
|
||||||
</template>
|
|
||||||
<template id="perChevron">
|
|
||||||
<path dpath="{line}" transform="translate(-70.7,70.7) rotate(-45) scale(-1,1)" transform-origin="center" />
|
|
||||||
<polygon points="20,200 100,120 180,200" />
|
|
||||||
<path dpath="{line}" transform="translate(70.7,70.7) rotate(45)" transform-origin="center" />
|
|
||||||
</template>
|
|
||||||
<template id="perChevronReversed">
|
|
||||||
<path dpath="{line}" transform="translate(-70.7,-70.7) rotate(225) scale(1,1)" transform-origin="center" />
|
|
||||||
<polygon points="21,0 100,79 179,0" />
|
|
||||||
<path dpath="{line}" transform="translate(70.7,-70.7) rotate(-225) scale(-1,1)" transform-origin="center" />
|
|
||||||
</template>
|
|
||||||
<template id="perCross">
|
|
||||||
<rect x="100" y="0" width="100" height="92.5" />
|
|
||||||
<rect x="0" y="107.5" width="100" height="92.5" />
|
|
||||||
<path dpath="{line}" transform="translate(0,50) scale(.5001,.5001)" />
|
|
||||||
<path dpath="{line}" transform="translate(50,0) scale(-.5001,-.5001)" transform-origin="center" />
|
|
||||||
</template>
|
|
||||||
<template id="perPile">
|
|
||||||
<path dpath="{line}" transform="translate(-35,15) rotate(66.8) scale(-1,1)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="translate(35,15) rotate(-66.8)" transform-origin="center" />
|
|
||||||
<polygon points="0,0 86,200 114,200 200,0 200,200 0,200" />
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<!-- Straight line Divisions -->
|
|
||||||
<template id="perSaltire"><polygon points="0,0 0,200 200,0 200,200" /></template>
|
|
||||||
<template id="gyronny"><polygon points="0,0 200,200 200,100 0,100" /><polygon points="200,0 0,200 100,200 100,0" /></template>
|
|
||||||
<template id="chevronny"><path d="M0,80 100,-15 200,80 200,120 100,25 0,120z M0,160 100,65 200,160 200,200 100,105 0,200z M0,240 100,145 200,240 0,240z" /></template>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<g id="ordinaries">
|
|
||||||
<!-- Lined Ordinaries -->
|
|
||||||
<template id="fess">
|
|
||||||
<path dpath="{line}" transform="translate(0,-25)" />
|
|
||||||
<path dpath="{line}" transform="translate(0,25) rotate(180.00001)" transform-origin="center" />
|
|
||||||
<rect x="0" y="88" width="200" height="24" stroke="none" />
|
|
||||||
</template>
|
|
||||||
<template id="pale">
|
|
||||||
<path dpath="{line}" transform="rotate(-90) translate(0,-25)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(90) translate(0,-25)" transform-origin="center" />
|
|
||||||
<rect x="88" y="0" width="24" height="200" stroke="none" />
|
|
||||||
</template>
|
|
||||||
<template id="bend">
|
|
||||||
<path dpath="{line}" transform="rotate(45) translate(0,-25) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(225) translate(0,-25) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<rect x="0" y="88" width="200" height="24" transform="rotate(45) scale(1.1,1)" transform-origin="center" stroke="none" />
|
|
||||||
</template>
|
|
||||||
<template id="bendSinister">
|
|
||||||
<path dpath="{line}" transform="rotate(-45) translate(0,-25) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(-225) translate(0,-25) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<rect x="0" y="88" width="200" height="24" transform="rotate(-45) scale(1.1,1)" transform-origin="center" stroke="none" />
|
|
||||||
</template>
|
|
||||||
<template id="chief">
|
|
||||||
<path dpath="{line}" transform="translate(0,-25) rotate(180.00001)" transform-origin="center" />
|
|
||||||
<rect x="0" y="0" width="200" height="62" stroke="none" />
|
|
||||||
</template>
|
|
||||||
<template id="bar">
|
|
||||||
<path dpath="{line}" transform="translate(0,-12.5)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="translate(0,12.5) rotate(180.00001)" transform-origin="center" />
|
|
||||||
<rect x="0" y="94" width="200" height="12" stroke="none" />
|
|
||||||
</template>
|
|
||||||
<template id="gemelle">
|
|
||||||
<path dpath="{line}" transform="translate(0,-22.5)" />
|
|
||||||
<path dpath="{line}" transform="translate(0,22.5) rotate(180.00001)" transform-origin="center" />
|
|
||||||
</template>
|
|
||||||
<template id="fessCotissed">
|
|
||||||
<path dpath="{line}" transform="translate(0,-35) scale(1,.5)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="translate(0,35) rotate(180.0001) scale(1,.5)" transform-origin="center" />
|
|
||||||
<rect x="0" y="80" width="200" height="40" />
|
|
||||||
</template>
|
|
||||||
<template id="fessDoubleCotissed">
|
|
||||||
<rect x="0" y="85" width="200" height="30" />
|
|
||||||
<rect x="0" y="72.5" width="200" height="7.5" />
|
|
||||||
<rect x="0" y="120" width="200" height="7.5" />
|
|
||||||
<path dpath="{line}" transform="translate(0,-40) scale(1,.5)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="translate(0,40) rotate(180.0001) scale(1,.5)" transform-origin="center" />
|
|
||||||
</template>
|
|
||||||
<template id="bendlet">
|
|
||||||
<path dpath="{line}" transform="rotate(45) translate(0,-16) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(225) translate(0,-16) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<rect x="0" y="94" width="200" height="12" transform="rotate(45) scale(1.1,1)" transform-origin="center" stroke="none" />
|
|
||||||
</template>
|
|
||||||
<template id="bendletSinister">
|
|
||||||
<path dpath="{line}" transform="rotate(-45) translate(0,-16) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(-225) translate(0,-16) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<rect x="0" y="94" width="200" height="12" transform="rotate(-45) scale(1.1,1)" transform-origin="center" stroke="none" />
|
|
||||||
</template>
|
|
||||||
<template id="terrace">
|
|
||||||
<path dpath="{line}" transform="translate(0,50)" />
|
|
||||||
<rect x="0" y="164" width="200" height="36" stroke="none" />
|
|
||||||
</template>
|
|
||||||
<template id="cross">
|
|
||||||
<path dpath="{line}" transform="translate(0,-14.5)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(180) translate(0,-14.5)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(-90) translate(0,-14.5)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(-270) translate(0,-14.5)" transform-origin="center" />
|
|
||||||
</template>
|
|
||||||
<template id="crossParted">
|
|
||||||
<path dpath="{line}" transform="translate(0,-20)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(180) translate(0,-20)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(-90) translate(0,-20)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(-270) translate(0,-20)" transform-origin="center" />
|
|
||||||
</template>
|
|
||||||
<template id="saltire">
|
|
||||||
<path dpath="{line}" transform="rotate(45) translate(0,-14.5) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(225) translate(0,-14.5) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(-45) translate(0,-14.5) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(-225) translate(0,-14.5) scale(1.1,1)" transform-origin="center" />
|
|
||||||
</template>
|
|
||||||
<template id="saltireParted">
|
|
||||||
<path dpath="{line}" transform="rotate(45) translate(0,-20) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(225) translate(0,-20) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(-45) translate(0,-20) scale(1.1,1)" transform-origin="center" />
|
|
||||||
<path dpath="{line}" transform="rotate(-225) translate(0,-20) scale(1.1,1)" transform-origin="center" />
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<!-- Solid Ordinaries -->
|
|
||||||
<template id="mount"><path d="m0,250 a100,100,0,0,1,200,0" /></template>
|
|
||||||
<template id="point"><path d="M0,200 Q80,180 100,135 Q120,180 200,200" /></template>
|
|
||||||
<template id="flaunches"><path d="M0,0 q120,100 0,200 M200,0 q-120,100 0,200" /></template>
|
|
||||||
<template id="gore"><path d="M20,0 Q30,75 100,100 Q80,150 100,200 L0,200 L0,0 Z" /></template>
|
|
||||||
<template id="pall"><polygon points="0,0 30,0 100,70 170,0 200,0 200,30 122,109 122,200 78,200 78,109 0,30" /></template>
|
|
||||||
<template id="pallReversed"><polygon points="0,200 0,170 78,91 78,0 122,0 122,91 200,170 200,200 170,200 100,130 30,200" /></template>
|
|
||||||
<template id="chevron"><polygon points="0,125 100,60 200,125 200,165 100,100 0,165" /></template>
|
|
||||||
<template id="chevronReversed"><polygon points="0,75 100,140 200,75 200,35 100,100 0,35" /></template>
|
|
||||||
<template id="gyron"><polygon points="0,0 100,100 0,100" /></template>
|
|
||||||
<template id="quarter"><rect x="0" y="0" width="50%" height="50%" /></template>
|
|
||||||
<template id="canton"><rect x="0" y="0" width="37.5%" height="37.5%" /></template>
|
|
||||||
<template id="pile"><polygon points="70,0 100,175 130,0" /></template>
|
|
||||||
<template id="pileInBend"><polygon points="200,200 200,144 25,25 145,200" /></template>
|
|
||||||
<template id="pileInBendSinister"><polygon points="0,200 0,144 175,25 55,200" /></template>
|
|
||||||
<template id="piles"><polygon points="46,0 75,175 103,0" /><polygon points="95,0 125,175 154,0" /></template>
|
|
||||||
<template id="pilesInPoint"><path d="M15,0 100,200 60,0Z M80,0 100,200 120,0Z M140,0 100,200 185,0Z" /></template>
|
|
||||||
<template id="label"><path d="m 46,54.8 6.6,-15.6 95.1,0 5.9,15.5 -16.8,0.1 4.5,-11.8 L 104,43 l 4.3,11.9 -16.8,0 4.3,-11.8 -37.2,0 4.5,11.8 -16.9,0 z" /></template>
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<g id="charges">
|
|
||||||
<!-- Conventional -->
|
|
||||||
<g id="lozenge"><polygon points="100,60 135,100 100,140 65,100" /></g>
|
|
||||||
<g id="fusil"><polygon points="100,55 130,100 100,145 70,100" /></g>
|
|
||||||
<g id="mascle"><path d="M100,55 l30,45 l-30,45 l-30,-45z M100,70.75 l-19.5,29.25 l19.5,29.25 l19.5,-29.25z" /></g>
|
|
||||||
<g id="rustre"><path d="M100,55 l30,45 l-30,45 l-30,-45z M100,100 m-12,0 a12,12 0 1,0 24,0 a12,12 0 1,0 -24,0" /></g>
|
|
||||||
<g id="lozengeFaceted">
|
|
||||||
<polygon points="100,55 130,100 100,145 70,100"></polygon>
|
|
||||||
<polygon points="100,99 130,99 100,55" fill="#000" opacity=".2"></polygon>
|
|
||||||
<polygon points="99,100 70,100 99,145" fill="#000" opacity=".2"></polygon>
|
|
||||||
<polygon points="100,100 130,100 100,145" fill="#000" opacity=".3"></polygon>
|
|
||||||
</g>
|
|
||||||
<g id="lozengePloye"><path d="M100,60 Q105,95 140,100 Q105,105 100,140 Q95,105 60,100 Q95,95 100,60" stroke-width=".5" /></g>
|
|
||||||
<g id="roundel"><circle cx="100" cy="100" r="30"></circle></g>
|
|
||||||
<g id="roundel2"><circle cx="100" cy="100" r="30"></circle><path d="M124,95 a23,23 0,0,1,-25,30" stroke-width=".5" fill="none" /></g>
|
|
||||||
<g id="annulet"><path d="M100,100 m-30,0 a30,30 0 1,0 60,0 a30,30 0 1,0 -60,0 M100,100 m-20,0 a20,20 0 1,1 40,0 a20,20 0 1,1 -40,0" /></g>
|
|
||||||
<g id="mullet"><polygon points="100,60,108.98,87.64,138.04,87.64,114.53,104.72,123.51,132.36,100,115.28,76.49,132.36,85.47,104.72,61.96,87.64,91.02,87.64"></polygon></g>
|
|
||||||
<g id="mulletPierced"><path d="M100,60 L108.98,87.64 L138.04,87.64 L114.53,104.72 L123.51,132.36 L100,115.28 L76.49,132.36 L85.47,104.72 L61.96,87.64 L91.02,87.64Z M100,100 m-8,0 a8,8 0 1,0 16,0 a8,8 0 1,0 -16,0" /></g>
|
|
||||||
<g id="mulletFaceted">
|
|
||||||
<path d="M100,60 L108.98,87.64 L138.04,87.64 L114.53,104.72 L123.51,132.36 L100,115.28 L76.49,132.36 L85.47,104.72 L61.96,87.64 L91.02,87.64Z" />
|
|
||||||
<path d="M100,100 L100,60 L108.98,87.64 L100,100 L138.04,87.64 L114.53,104.72 L100,100 L123.51,132.36 L100,115.28 L100,100 L76.49,132.36 L85.47,104.72 L100,100 L61.96,87.64 L91.02,87.64Z" fill="#000" stroke-width=".2" fill-opacity=".2" />
|
|
||||||
</g>
|
|
||||||
<g id="mullet4"><polygon points="100,60,109.9,90.1,140,100,109.9,109.9,100,140,90.1,109.9,60,100,90.1,90.1"></polygon></g>
|
|
||||||
<g id="mullet6"><polygon points="100,60,107.64,86.77,134.64,80,115.28,100,134.64,120,107.64,113.23,100,140,92.36,113.23,65.36,120,84.72,100,65.36,80,92.36,86.77"></polygon></g>
|
|
||||||
<g id="mullet6Pierced"><path d="M100,60 L107.64,86.77 L134.64,80 L115.28,100 L134.64,120 L107.64,113.23 L100,140 L92.36,113.23 L65.36,120 L84.72,100 L65.36,80 L92.36,86.77Z M100,100 m-8,0 a8,8 0 1,0 16,0 a8,8 0 1,0 -16,0" /></g>
|
|
||||||
<g id="mullet6Faceted">
|
|
||||||
<path d="M100,60 L107.64,86.77 L133.64,80 L115.28,100 L134.64,120 L107.64,113.23 L100,140 L92.36,113.23 L65.36,120 L84.72,100 L65.36,80 L92.36,86.77Z" />
|
|
||||||
<path d="M100,100 L134,80 L115.28,100 L100,100 L134.64,120 L107.64,113.23 L100,100 L100,140 L92.36,113.23 L100,100 L65.36,120 L84.72,100 L100,100 L65.36,80 L92.36,86.77 L100,100 L100,60 L107.64,86.77Z" fill="#000" stroke-width=".2" fill-opacity=".2" />
|
|
||||||
</g>
|
|
||||||
<g id="mullet7"><polygon points="100,60,106.63,86.23,131.27,75.06,114.9,96.6,139,108.9,111.95,109.53,117.36,136.04,100,115.28,82.64,136.04,88.05,109.53,61,108.9,85.1,96.6,68.73,75.06,93.37,86.23"></polygon></g>
|
|
||||||
<g id="mullet8"><polygon points="100,60,105.85,85.88,128.28,71.72,114.12,94.15,140,100,114.12,105.85,128.28,128.28,105.85,114.12,100,140,94.15,114.12,71.72,128.28,85.88,105.85,60,100,85.88,94.15,71.72,71.72,94.15,85.88"></polygon></g>
|
|
||||||
<g id="mullet10"><polygon points="100,60,104.72,85.47,123.51,67.64,112.36,91.02,138.04,87.64,115.28,100,138.04,112.36,112.36,108.98,123.51,132.36,104.72,114.53,100,140,95.28,114.53,76.49,132.36,87.64,108.98,61.96,112.36,84.72,100,61.96,87.64,87.64,91.02,76.49,67.64,95.28,85.47"></polygon></g>
|
|
||||||
<g id="billet"><polygon points="80,65 120,65 120,135 80,135"></polygon></g>
|
|
||||||
<g id="delf"><polygon points="75,75 125,75 125,125 75,125"></polygon></g>
|
|
||||||
<g id="triangle"><polygon points="100,60 135,130 65,130"></polygon></g>
|
|
||||||
<g id="trianglePierced"><path d="M100,60 L135,130 L65,130Z M100,80 L80,120 L120,120Z" /></g>
|
|
||||||
<g id="goutte"><path d="m 100,134 c 17,-1 16,-19 10,-25 -1.9,-1.8 -4.6,-5.3 -3.9,-8.1 C 108,94 102,90 102,87 c -1,-7 3,-7 3,-13 -0.1,-6.2 -3.3,-8.7 -6,-12 1.2,3 2,6 1,9 -1.5,5.9 -6.2,6.9 -8,11 -2,5 3,11 3,15 -0.6,9.1 -9,13 -9,23 0.3,11.3 9,14 14,14 z" /></g>
|
|
||||||
<g id="heart"><path d="m 100,84 c -0.7,-1.1 -1.4,-2.2 -2.4,-3.2 -6.3,-6.8 -16.6,-6.8 -23,0 -6.3,6.8 -5.4,17.8 1,24.6 6.3,6.8 17.7,12.4 24.2,27 7.3,-14.4 18.2,-20.2 24.5,-27 6.3,-6.8 7.3,-17.8 1,-24.6 -6.3,-6.8 -16.6,-6.8 -23,0 C 101.4,81.8 100.7,82.9 100,84 Z" stroke-width=".5" /></g>
|
|
||||||
<g id="pique"><path d="m 100,70 c -5.7,10.3 -25.2,19.8 -25.2,32.8 0,6.2 5.6,11.1 12.6,11.1 4.4,0 8.4,-2 10.6,-5.1 -0.9,8.9 -3.5,18.8 -12.6,20.7 H 100 114.6 c -9.2,-1.9 -11.7,-11.8 -12.6,-20.7 2.2,3.1 6.2,5.1 10.6,5.1 7,0 12.6,-5 12.6,-11.1 C 125.2,89.8 105.7,80.3 100,70 Z" stroke-width=".5" /></g>
|
|
||||||
<g id="trefle"><path d="m 100,70 c -7.8,0 -14.1,6.4 -14.1,14.3 0,5.6 3.2,10.5 7.9,12.8 1.4,0.7 -0.1,2.5 -1.2,1.3 -2.6,-3 -6.4,-4.8 -10.6,-4.8 -7.8,0 -14.1,6.4 -14.1,14.3 0,7.9 6.3,14.3 14.1,14.3 7.7,0 14.1,-6.3 14.1,-14.1 0,-1.4 2.1,-1.5 2.1,0.3 0,2.9 -2.8,18.5 -4.3,21.5 3.955628,-0.85651 8.16171,-1.15253 12,0 -1.5,-3 -4.3,-18.6 -4.3,-21.5 0,-1.9 2.1,-1.7 2.1,-0.3 0.1,7.8 6.4,14.1 14.1,14.1 7.8,0 14.1,-6.4 14.1,-14.3 0,-7.9 -6.3,-14.3 -14.1,-14.3 -4.2,0 -8,1.9 -10.6,4.8 -1,1.2 -2.6,-0.6 -1.2,-1.3 4.7,-2.3 7.9,-7.2 7.9,-12.8 C 114.1,76.4 107.8,70 100,70 Z" stroke-width=".5" /></g>
|
|
||||||
<g id="сarreau"><path d="M 100,59.8 C 94.4,75.1 86.2,88.6 75,100 86.2,111.4 94.4,124.9 100,140.2 105.6,124.9 113.8,111.4 125,100 113.8,88.6 105.6,75.1 100,59.8 Z" stroke-width=".5" /></g>
|
|
||||||
<g id="sun"><path d="m 84.7,63 c -1,3.9 0.1,7.1 2,10.1 1.5,2.3 2.4,4.8 2.4,7.5 -0.7,0.4 -1.3,0.8 -1.9,1.2 L 71.8,71.7 82.2,86.9 c -0.2,0.3 -0.4,0.5 -0.5,0.8 -2.9,-1.3 -5.7,-1.6 -8.3,-1.1 -3.7,0.7 -6.9,-0.1 -10.2,-2 2.1,3.5 5.1,5 8.6,5.7 2.7,0.6 5.1,1.7 7,3.6 -0.2,0.7 -0.4,1.5 -0.5,2.2 l -18.1,3.7 18.1,3.5 c 0,0.3 0.1,0.6 0.2,0.9 -3,1.1 -5.2,2.9 -6.6,5.1 -2.1,3.1 -4.9,4.8 -8.6,5.8 3.9,1 7.1,-0.1 10.1,-2 2.3,-1.5 4.8,-2.4 7.5,-2.4 0.4,0.7 0.8,1.3 1.2,1.9 L 71.8,128.1 87.1,117.7 c 0.3,0.2 0.5,0.4 0.8,0.5 -1.3,2.9 -1.6,5.7 -1.1,8.3 0.7,3.7 -0.1,6.8 -2,10.1 3.5,-2.1 5,-5.1 5.7,-8.6 0.6,-2.7 1.7,-5.1 3.6,-7 0.7,0.2 1.5,0.4 2.2,0.5 l 3.7,18.1 3.5,-18.1 c 0.3,0 0.6,-0.1 0.9,-0.2 1.1,3 2.9,5.2 5.1,6.6 3.1,2.1 4.8,4.9 5.8,8.6 1,-3.9 -0.1,-7.1 -2,-10.1 -1.5,-2.3 -2.4,-4.8 -2.4,-7.5 0.7,-0.4 1.3,-0.8 1.9,-1.2 l 15.4,10.2 -10.4,-15.3 c 0.2,-0.3 0.4,-0.5 0.5,-0.8 2.9,1.3 5.7,1.6 8.3,1.1 3.7,-0.7 6.8,0.1 10.1,2 -2.1,-3.5 -5.1,-4.9 -8.6,-5.7 -2.7,-0.6 -5.1,-1.7 -7,-3.6 0.2,-0.7 0.4,-1.5 0.5,-2.2 l 18.1,-3.7 -18.1,-3.5 c 0,-0.3 -0.1,-0.6 -0.2,-0.9 3,-1.1 5.2,-2.9 6.6,-5.1 2.1,-3.1 4.9,-4.8 8.6,-5.7 -3.9,-1 -7.1,0.1 -10.1,2 -2.3,1.5 -4.8,2.4 -7.5,2.4 -0.4,-0.7 -0.8,-1.3 -1.2,-1.9 l 10.2,-15.4 -15.3,10.3 c -0.3,-0.2 -0.5,-0.4 -0.8,-0.5 1.3,-2.9 1.6,-5.7 1.1,-8.3 -0.7,-3.7 0.1,-6.9 2,-10.2 -3.5,2.1 -4.9,5.1 -5.7,8.6 -0.6,2.7 -1.7,5.2 -3.7,7 -0.7,-0.2 -1.5,-0.4 -2.2,-0.5 L 100,60 96.5,78.1 c -0.3,0 -0.6,0.1 -0.9,0.2 -1.1,-3 -2.9,-5.2 -5.1,-6.6 -3.1,-2.1 -4.8,-4.9 -5.7,-8.6 z" stroke-width=".5"/></g>
|
|
||||||
|
|
||||||
<!-- Crosses -->
|
|
||||||
<g id="crossHummetty" stroke-width=".5"><path d="m 90,60 h 20 v 30 h 30 v 20 h -30 v 30 H 90 V 110 H 60 V 90 h 30 z" /></g>
|
|
||||||
<g id="crossVoided" stroke-width=".5"><path d="M 90 60 L 90 90 L 60 90 L 60 110 L 90 110 L 90 140 L 110 140 L 110 110 L 140 110 L 140 90 L 110 90 L 110 60 L 90 60 z M 95 65 L 105 65 L 105 95 L 135 95 L 135 105 L 105 105 L 105 135 L 95 135 L 95 105 L 65 105 L 65 95 L 95 95 L 95 65 z " /></g>
|
|
||||||
<g id="crossPattee" stroke-width=".5"><path d="M 77 60 A 52 52 0 0 1 96 96 A 52 52 0 0 1 60 77 L 60 123 A 52 52 0 0 1 96 104 A 52 52 0 0 1 77 140 L 123 140 A 52 52 0 0 1 104 104 A 52 52 0 0 1 140 123 L 140 77 A 52 52 0 0 1 104 96 A 52 52 0 0 1 123 60 L 77 60 z" /></g>
|
|
||||||
<g id="crossPotent" stroke-width=".5"><path d="M 83,60 V 70 H 95 V 95 H 70 V 83 H 60 v 34 h 10 v -12 h 25 v 25 H 83 v 10 h 34 v -10 h -12 v -25 h 25 v 12 h 10 V 83 H 130 V 95 H 105 V 70 h 12 V 60 Z" /></g>
|
|
||||||
<g id="crosslet" stroke-width=".5"><path d="m 95,60 h 10 v 10 h 12 v 10 h -12 v 15 h 15 V 83 h 10 v 12 h 10 v 10 h -10 v 12 h -10 v -12 h -15 v 15 h 12 v 10 h -12 v 10 H 95 V 130 H 83 V 120 H 95 V 105 H 80 v 12 H 70 V 105 H 60 V 95 H 70 V 83 H 80 V 95 H 95 V 80 H 83 V 70 h 12 z" /></g>
|
|
||||||
<g id="crossClechy" stroke-width=".5"><path d="m 96.9,103.1 c -0.3,8.7 -3.5,17 -8.7,22.3 5.2,2.3 9.5,7.7 11.8,14.5 2.3,-6.9 6.6,-12.2 11.8,-14.5 -5.2,-5.4 -8.4,-13.6 -8.7,-22.3 8.7,0.3 17,3.5 22.3,8.7 2.3,-5.2 7.7,-9.5 14.5,-11.8 -6.9,-2.3 -12.2,-6.7 -14.5,-11.8 -5.4,5.2 -13.6,8.4 -22.3,8.7 0.3,-8.7 3.5,-17 8.7,-22.3 -5.2,-2.4 -9.5,-7.7 -11.8,-14.6 -2.3,6.9 -6.7,12.2 -11.8,14.5 5.1,5.4 8.4,13.7 8.7,22.4 -8.7,-0.3 -17,-3.6 -22.4,-8.7 -2.3,5.1 -7.6,9.5 -14.5,11.8 6.9,2.3 12.2,6.6 14.5,11.8 7.2,-5.3 13.9,-8.5 22.4,-8.7 z" /></g>
|
|
||||||
<g id="crossBottony" stroke-width=".5"><path d="M 78.7,95.8 A 5.5,5.5 0 1 0 69,95.4 a 5.5,5.5 0 1 0 0,9.3 5.5,5.5 0 1 0 9.7,-0.4 h 17.1 v 17.2 a 5.5,5.5 0 1 0 -0.4,9.7 5.5,5.5 0 1 0 9.3,0 5.5,5.5 0 1 0 -0.4,-9.7 v -17.2 h 17.1 a 5.5,5.5 0 1 0 9.7,0.4 5.5,5.5 0 1 0 0,-9.3 5.5,5.5 0 1 0 -9.7,0.4 h -17.1 V 78.7 A 5.5,5.5 0 1 0 104.7,69 a 5.5,5.5 0 1 0 -9.3,0 5.5,5.5 0 1 0 0.4,9.7 v 17.2 z" /></g>
|
|
||||||
<g id="crossFleury" stroke-width=".5"><path d="m 95.2,125.9 a 2.6,2.6 0 0 1 -2.6,2.6 2.6,2.6 0 0 1 -2.6,-2.6 4.8,4.8 0 0 0 -1.7,3.7 4.8,4.8 0 0 0 4.8,4.8 4.8,4.8 0 0 0 3,-1.1 7.8,7.8 0 0 0 3.9,6.8 7.8,7.8 0 0 0 3.9,-6.8 4.8,4.8 0 0 0 3,1.1 4.8,4.8 0 0 0 4.8,-4.8 4.8,4.8 0 0 0 -1.7,-3.7 2.6,2.6 0 0 1 -2.6,2.6 2.6,2.6 0 0 1 -2.6,-2.6 v -21.1 h 21.1 a 2.6,2.6 0 0 1 2.6,2.6 2.6,2.6 0 0 1 -2.6,2.6 4.8,4.8 0 0 0 3.7,1.7 4.8,4.8 0 0 0 4.8,-4.8 4.8,4.8 0 0 0 -1.1,-3 7.8,7.8 0 0 0 6.8,-3.9 7.8,7.8 0 0 0 -6.8,-3.9 4.8,4.8 0 0 0 1.1,-3 4.8,4.8 0 0 0 -4.8,-4.8 4.8,4.8 0 0 0 -3.7,1.7 2.6,2.6 0 0 1 2.6,2.6 2.6,2.6 0 0 1 -2.6,2.6 h -21.1 V 74.1 a 2.6,2.6 0 0 1 2.6,-2.6 2.6,2.6 0 0 1 2.6,2.6 4.8,4.8 0 0 0 1.7,-3.7 4.8,4.8 0 0 0 -4.8,-4.8 4.8,4.8 0 0 0 -3,1.1 A 7.8,7.8 0 0 0 100,60 a 7.8,7.8 0 0 0 -3.9,6.8 4.8,4.8 0 0 0 -3,-1.1 4.8,4.8 0 0 0 -4.8,4.8 4.8,4.8 0 0 0 1.7,3.7 2.6,2.6 0 0 1 2.6,-2.6 2.6,2.6 0 0 1 2.6,2.6 V 95.2 H 74.1 a 2.6,2.6 0 0 1 -2.6,-2.6 2.6,2.6 0 0 1 2.6,-2.6 4.8,4.8 0 0 0 -3.7,-1.7 4.8,4.8 0 0 0 -4.8,4.8 4.8,4.8 0 0 0 1.1,3 A 7.8,7.8 0 0 0 60,100 a 7.8,7.8 0 0 0 6.8,3.9 4.8,4.8 0 0 0 -1.1,3 4.8,4.8 0 0 0 4.8,4.8 4.8,4.8 0 0 0 3.7,-1.7 2.6,2.6 0 0 1 -2.6,-2.6 2.6,2.6 0 0 1 2.6,-2.6 h 21.1 z"/></g>
|
|
||||||
<g id="crossPatonce" stroke-width=".5"><path d="m 100,60.1 a 8.8,8.8 0 0 0 -4.4,7.6 5.1,5.1 0 0 0 -8.8,0 64.8,64.7 0 0 1 8.5,27.7 64.8,64.7 0 0 1 -27.8,-8.5 5.1,5.1 0 0 0 0,8.8 A 8.8,8.8 0 0 0 60,100.1 a 8.8,8.8 0 0 0 7.6,4.4 5.1,5.1 0 0 0 0,8.8 64.8,64.7 0 0 1 27.8,-8.5 64.8,64.7 0 0 1 -8.5,27.7 5.1,5.1 0 0 0 8.8,0 8.8,8.8 0 0 0 4.4,7.6 8.8,8.8 0 0 0 4.4,-7.6 5.1,5.1 0 0 0 8.8,0 64.8,64.7 0 0 1 -8.5,-27.7 64.8,64.7 0 0 1 27.8,8.5 5.1,5.1 0 0 0 0,-8.8 8.8,8.8 0 0 0 7.6,-4.4 8.8,8.8 0 0 0 -7.6,-4.4 5.1,5.1 0 0 0 0,-8.8 64.8,64.7 0 0 1 -27.8,8.5 64.8,64.7 0 0 1 8.5,-27.7 5.1,5.1 0 0 0 -8.8,0 8.8,8.8 0 0 0 -4.4,-7.6 z" /></g>
|
|
||||||
<g id="crossPommy" stroke-width=".5"><path d="M 95.8,104.2 H 76 a 8.5,8.5 0 1 1 0,-8.5 H 95.8 V 75.9 a 8.5,8.5 0 1 1 8.5,0 V 95.7 H 124 a 8.5,8.5 0 1 1 0,8.5 H 104.2 V 124 a 8.5,8.5 0 1 1 -8.5,0 z" /></g>
|
|
||||||
<g id="crossGamma" stroke-width=".5"><path d="m 95,60 h 22 v 10 h -12 v 25 h 35 v 22 h -10 v -12 h -25 v 35 H 83 V 130 H 95 V 105 H 60 V 83 h 10 v 12 h 25 z" /></g>
|
|
||||||
<g id="crossArrowed" stroke-width=".5"><path d="M 100 60 L 84 76 L 92 76 L 92 92 L 76 92 L 76 84 L 60 100 L 76 116 L 76 108 L 92 108 L 92 124 L 84 124 L 100 140 L 116 124 L 108 124 L 108 108 L 124 108 L 124 116 L 140 100 L 124 84 L 124 92 L 108 92 L 108 76 L 116 76 L 100 60 z " /></g>
|
|
||||||
<g id="crossFitchy" stroke-width=".5"><path d="M 90,90 V 70 l 10,-10 10,10 v 20 h 20 l 10,10 -10,10 h -20 v 20 L 100,140 90,130 V 110 H 70 L 60,100 70,90 Z" /></g>
|
|
||||||
<g id="crossCercelee" stroke-width=".5"><path d="m 133,100.05 c 3.59,-0.26 6.43,-4.77 6.43,-10.24 0,-5.65 -3.02,-10.24 -6.73,-10.24 h -5.73 c 2.36,0 4.28,3.24 4.28,7.26 0,4.03 -1.92,7.26 -4.28,7.26 h -20.94 V 73.14 c 0,-2.36 3.28,-4.29 7.26,-4.29 3.98,0 7.26,1.93 7.26,4.29 v -5.73 c 0,-3.72 -4.59,-6.74 -10.23,-6.74 -5.47,0 -9.97,2.84 -10.23,6.43 -0.26,-3.59 -4.77,-6.43 -10.23,-6.43 -5.64,0 -10.23,3.02 -10.23,6.74 v 5.73 c 0,-2.36 3.24,-4.29 7.26,-4.29 4.02,0 7.26,1.93 7.26,4.29 V 94.1 H 73.19 c -2.36,0 -4.28,-3.28 -4.28,-7.26 0,-3.98 1.92,-7.26 4.28,-7.26 h -5.73 c -3.72,0 -6.73,4.59 -6.73,10.24 0,5.47 2.84,9.98 6.43,10.24 -3.59,0.26 -6.43,4.77 -6.43,10.24 0,5.65 3.02,10.24 6.73,10.24 h 5.73 c -2.36,0 -4.28,-3.24 -4.28,-7.26 0,-4.03 1.92,-7.26 4.28,-7.26 h 20.94 v 20.96 c 0,2.36 -3.28,4.29 -7.26,4.29 -3.98,0 -7.26,-1.93 -7.26,-4.29 v 5.73 c 0,3.72 4.59,6.74 10.23,6.74 5.47,0 9.93,-2.84 10.23,-6.43 0.26,3.59 4.77,6.43 10.23,6.43 5.64,0 10.23,-3.02 10.23,-6.74 v -5.73 c 0,2.36 -3.24,4.29 -7.26,4.29 -4.02,0 -7.26,-1.93 -7.26,-4.29 v -20.96 h 20.94 c 2.36,0 4.28,3.28 4.28,7.26 0,3.98 -1.92,7.26 -4.28,7.26 h 5.73 c 3.72,0 6.73,-4.59 6.73,-10.24 0,-5.47 -2.84,-9.98 -6.43,-10.24 z"/></g>
|
|
||||||
<g id="crossMoline" stroke-width=".5"><path d="m 104.3,74.9 c 0,-6.4 2.7,-11.4 5.1,-14.8 -4.1,0 -7.2,2 -9.4,4.9 -2.2,-2.9 -5.3,-4.9 -9.4,-4.9 2.5,3.4 5.1,8.4 5.1,14.8 V 95.7 H 74.9 c -6.4,0 -11.3,-2.7 -14.8,-5.1 0,4.1 2,7.2 4.9,9.4 -2.9,2.2 -4.9,5.4 -4.9,9.4 3.4,-2.5 8.3,-5.1 14.8,-5.1 h 20.8 v 20.9 c 0,6.4 -2.7,11.4 -5.1,14.8 4.1,0 7.2,-2 9.4,-4.9 2.2,2.9 5.3,4.9 9.4,4.9 -2.5,-3.4 -5.1,-8.4 -5.1,-14.8 v -20.9 h 20.8 c 6.4,0 11.3,2.7 14.8,5.1 0,-4.1 -2,-7.2 -4.9,-9.4 2.9,-2.2 4.9,-5.4 4.9,-9.4 -3.4,2.5 -8.3,5.1 -14.8,5.1 h -20.8 z" /></g>
|
|
||||||
<g id="crossFourchy" stroke-width=".5"><path d="M 95,105 H 76 c -1,0 -3,0 -4,1 l -7,5 -3,-5 9,-6 -9,-6 3,-5 7,5 c 1,1 3,1 4,1 H 95 V 75 c 0,-1 0,-3 -1,-4 l -5,-8 5,-3 6,9 6,-9 5,4 -5,8 c -1,1 -1,3 -1,4 v 20 h 20 c 1,0 3,0 4,-1 l 7,-5 3,5 -9,6 9,6 -3,5 -7,-5 c -1,-1 -3,-1 -4,-1 h -20 v 18 c 0,1 0,3 1,4 l 5,8 -5,4 -6,-9 -6,9 -5,-4 5,-8 c 1,-1 1,-3 1,-4 z" /></g>
|
|
||||||
<g id="crossAvellane" stroke-width=".5"><path d="m 99.9,60 c -1.8,0 -2.4,3.2 -4.2,3.5 -2.6,0.5 -4.9,-3.2 -7.6,-2.4 -2.6,0.7 -5,3 -6.4,6.3 1.9,-2 4.3,-2.6 6.5,-1.6 2.2,0.9 4.1,3.3 5,6.4 0.3,1.2 0.1,2.5 -0.5,3.5 -0.8,1.8 -1.3,6 -1.3,8.1 0,6.6 2,9.8 7.6,10.2 -2.8,0.3 -4.7,2.1 -5,5 -0.3,-5.6 -3.6,-7.5 -10.3,-7.5 -2.1,0 -6.3,0.4 -8.1,1.3 -1,0.6 -2.3,0.8 -3.5,0.5 -3.1,-0.9 -5.5,-2.7 -6.4,-4.9 -0.9,-2.2 -0.3,-4.6 1.6,-6.5 -3.3,1.4 -5.6,3.7 -6.3,6.4 -0.7,2.6 2.9,4.9 2.4,7.5 -0.3,1.7 -3.2,2.3 -3.2,4.1 0,1.8 2.9,2.5 3.2,4.3 0.4,2.6 -3.1,4.9 -2.4,7.5 0.7,2.6 3,4.9 6.3,6.4 -1.9,-1.9 -2.5,-4.2 -1.7,-6.4 0.9,-2.2 3.2,-4 6.2,-5 1.2,-0.3 2.6,-0.2 3.6,0.4 1.8,0.9 6.1,1.3 8.2,1.3 6.6,0 10.1,-1.8 10.4,-7.4 0.2,2.9 2.1,4.7 5,5 -5.6,0.3 -7.7,3.4 -7.7,10.1 0,2.1 0.4,6.3 1.3,8.1 0.6,1 0.8,2.3 0.5,3.5 -0.9,3.1 -2.7,5.5 -5,6.4 -2.2,0.9 -4.6,0.3 -6.5,-1.6 1.4,3.3 3.7,5.6 6.4,6.3 2.6,0.7 5,-2.9 7.6,-2.4 1.8,0.3 2.5,3.3 4.2,3.3 1.8,0 2.4,-3 4.2,-3.3 2.6,-0.5 4.9,3.2 7.6,2.4 2.6,-0.7 5,-3 6.4,-6.3 -1.9,1.9 -4.2,2.6 -6.4,1.7 -2.2,-0.9 -4,-3.2 -5,-6.2 -0.3,-1.2 -0.2,-2.6 0.4,-3.6 0.9,-1.8 1.3,-6.1 1.3,-8.2 0,-6.6 -1.7,-9.8 -7.3,-10.2 2.8,-0.3 4.7,-2.1 5,-5 0.3,5.6 3.3,7.5 10,7.5 2.1,0 6.4,-0.5 8.2,-1.3 1,-0.6 2.4,-0.7 3.6,-0.4 3,0.9 5.3,2.7 6.2,5 0.9,2.2 0.3,4.6 -1.7,6.4 3.3,-1.4 5.6,-3.7 6.3,-6.4 0.7,-2.6 -2.9,-4.9 -2.4,-7.5 0.3,-1.8 3.4,-2.6 3.4,-4.4 0,-1.7 -3,-2.3 -3.4,-4 -0.5,-2.6 3.1,-4.9 2.4,-7.5 -0.7,-2.6 -3,-4.9 -6.3,-6.4 2,1.9 2.6,4.3 1.6,6.5 -0.9,2.2 -3.3,4.1 -6.4,4.9 -1.2,0.3 -2.5,0.1 -3.5,-0.5 -1.8,-0.8 -6,-1.3 -8.1,-1.3 -6.6,0 -9.6,1.8 -9.9,7.4 -0.2,-2.8 -2.1,-4.7 -5,-5 5.6,-0.3 7.2,-3.4 7.2,-10.1 0,-2.1 -0.5,-6.4 -1.3,-8.2 -0.5,-1 -0.7,-2.4 -0.4,-3.6 0.9,-3 2.7,-5.3 5,-6.2 2.2,-0.9 4.6,-0.3 6.4,1.7 -1.4,-3.3 -3.7,-5.6 -6.4,-6.3 -2.6,-0.7 -5,2.9 -7.6,2.4 -1.8,-0.4 -2.3,-3.5 -4.2,-3.5 z"/></g>
|
|
||||||
<g id="crossErminee" stroke-width=".5"><path d="m 100.1,60 c -1.6,2.1 -3.2,4.1 -4,6.7 -1.7,-2.2 -6.5,-3.4 -9.2,-3.2 5,4.7 9.5,9.2 13.2,30.9 3.7,-21.7 8.2,-26.2 13.2,-30.9 -2.8,-0.3 -7.5,1 -9.2,3.2 C 103.2,64.1 101.6,62.1 100.1,60 Z M 63.6,86.8 c -0.3,2.8 1,7.5 3.2,9.2 -2.5,0.8 -4.6,2.4 -6.7,4 2.1,1.6 4.1,3.2 6.7,4 -2.2,1.7 -3.4,6.5 -3.2,9.2 4.7,-5 9.2,-9.5 30.9,-13.2 -21.7,-3.7 -26.2,-8.2 -30.9,-13.2 z m 72.9,0 c -4.7,5 -9.2,9.5 -30.9,13.2 21.7,3.7 26.2,8.2 30.9,13.2 0.3,-2.8 -1,-7.5 -3.2,-9.2 2.5,-0.8 4.6,-2.4 6.7,-4 -2.1,-1.6 -4.1,-3.2 -6.7,-4 2.2,-1.7 3.4,-6.5 3.2,-9.2 z m -43.2,3.4 c -1.7,0 -3.1,1.4 -3.1,3.1 0,1.7 1.4,3.1 3.1,3.1 1.7,0 3.1,-1.4 3.1,-3.1 0,-1.7 -1.4,-3.1 -3.1,-3.1 z m 13.5,0 c -1.7,0 -3.1,1.4 -3.1,3.1 0,1.7 1.4,3.1 3.1,3.1 1.7,0 3.1,-1.4 3.1,-3.1 0,-1.7 -1.4,-3.1 -3.1,-3.1 z m -6.8,6.8 c -1.7,0 -3.1,1.4 -3.1,3.1 0,1.7 1.4,3.1 3.1,3.1 1.7,0 3.1,-1.4 3.1,-3.1 0,-1.7 -1.4,-3.1 -3.1,-3.1 z m -6.7,6.8 c -1.7,0 -3.1,1.4 -3.1,3.1 0,1.7 1.4,3.1 3.1,3.1 1.7,0 3.1,-1.4 3.1,-3.1 0,-1.7 -1.4,-3.1 -3.1,-3.1 z m 13.5,0 c -1.7,0 -3.1,1.4 -3.1,3.1 0,1.7 1.4,3.1 3.1,3.1 1.7,0 3.1,-1.4 3.1,-3.1 0,-1.7 -1.4,-3.1 -3.1,-3.1 z m -6.8,2 c -3.7,21.7 -8.2,26.2 -13.2,30.9 2.8,0.3 7.5,-1 9.2,-3.2 0.8,2.5 2.4,4.6 4,6.7 1.6,-2.1 3.2,-4.1 4,-6.7 1.7,2.2 6.5,3.4 9.2,3.2 -5,-4.7 -9.5,-9.2 -13.2,-30.9 z"/></g>
|
|
||||||
<g id="crossMaltese" stroke-width=".5"><path d="m 98,98 -15,-38 17,11 17,-11 -15,38 38,-15 -11,17 11,17 -38,-15 15,38 -17,-11 -17,11 15,-38 -38,15 11,-17 -11,-17 z" /></g>
|
|
||||||
<g id="crossCeltic" stroke-width=".5"><path d="M 96.7 60 L 96.7 73 C 84.4 74.5 74.5 84.2 73 96.7 L 60 96.7 L 60 103.3 L 73 103.3 C 74.5 115.8 84.4 125.5 96.7 127 L 96.7 140 L 103.3 140 L 103.3 127 C 115.7 125.4 125.4 115.7 126.9 103.3 L 140 103.3 L 140 96.7 L 126.9 96.7 C 125.4 84.3 115.7 74.6 103.3 73 L 103.3 60 L 96.7 60 z M 96.7 79.6 L 96.7 96.7 L 79.7 96.7 C 81.1 87.8 88 81 96.7 79.6 z M 103.3 79.7 C 112.1 81.1 118.9 87.9 120.3 96.7 L 103.3 96.7 L 103.3 79.7 z M 79.7 103.3 L 96.7 103.3 L 96.7 120.4 C 88 119 81.1 112.2 79.7 103.3 z M 103.3 103.3 L 120.3 103.3 C 118.9 112.1 112.1 118.9 103.3 120.3 L 103.3 103.3 z" /></g>
|
|
||||||
<g id="crossOccitan" stroke-width=".5"><path d="m 100,60 a 3,3 0 0 0 -3,3 3,3 0 0 0 1.8,2.7 l 0,0 c -1.9,2.4 -5.9,6.4 -12.7,7.4 h 0 a 3,3 0 0 0 0,-0.1 3,3 0 0 0 -3,-3 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 2.4,-1.2 l 0,0 c 2,2.3 7.3,9.2 8.8,19.3 C 84.2,92.6 77.3,87.3 75,85.3 l 0,0 a 3,3 0 0 0 1.2,-2.4 3,3 0 0 0 -3,-3 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 0.1,0 l 0,0 c -1.1,6.8 -5,10.9 -7.4,12.8 l 0,0 a 3,3 0 0 0 -2.7,-1.8 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 2.7,-1.8 l 0,0 c 2.4,1.9 6.3,5.9 7.4,12.8 v 0 a 3,3 0 0 0 -0.1,0 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -1.2,-2.4 l 0,0 c 2.3,-2 9.2,-7.3 19.2,-8.8 -1.4,10.1 -6.7,17 -8.8,19.3 l 0,0 a 3,3 0 0 0 -2.4,-1.2 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 0,-0.1 h 0 c 6.8,1.1 10.8,5 12.7,7.4 l 0,0 a 3,3 0 0 0 -1.8,2.7 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 A 3,3 0 0 0 101.1,134 l 0,0 c 1.9,-2.4 5.9,-6.4 12.7,-7.4 h 0 a 3,3 0 0 0 0,0.1 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 3,3 0 0 0 -2.4,1.2 l 0,0 c -2,-2.3 -7.3,-9.2 -8.8,-19.3 10,1.5 16.9,6.8 19.2,8.8 l 0,0 a 3,3 0 0 0 -1.2,2.4 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 3,3 0 0 0 -0.1,0 v 0 c 1.1,-6.8 5,-10.9 7.4,-12.8 l 0,0 a 3,3 0 0 0 2.7,1.8 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 A 3,3 0 0 0 134,98.7 l 0,0 c -2.4,-1.9 -6.3,-5.9 -7.4,-12.8 l 0,0 a 3,3 0 0 0 0.1,0 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 3,3 0 0 0 -3,3 3,3 0 0 0 1.2,2.4 l 0,0 c -2.3,2 -9.2,7.3 -19.2,8.8 1.4,-10.1 6.7,-17 8.8,-19.3 l 0,0 a 3,3 0 0 0 2.4,1.2 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 3,3 0 0 0 -3,3 3,3 0 0 0 0,0.1 h 0 c -6.8,-1.1 -10.8,-5 -12.7,-7.4 l 0,0 A 3,3 0 0 0 102.9,63 3,3 0 0 0 100,60 a 3,3 0 0 0 0,0 z m 0,10 c 4.2,4.6 9,5.7 9,5.7 -5.6,6.7 -6.9,17.2 -7.2,22.4 5.2,-0.3 15.6,-1.6 22.3,-7.2 0,0 1.1,4.7 5.6,9 -4.6,4.3 -5.6,9 -5.6,9 -6.7,-5.7 -17.1,-6.9 -22.3,-7.2 0.3,5.2 1.6,15.7 7.2,22.4 0,0 -4.7,1.1 -9,5.7 -4.2,-4.6 -9,-5.7 -9,-5.7 5.6,-6.7 6.9,-17.2 7.2,-22.4 -5.2,0.3 -15.6,1.6 -22.3,7.2 0,0 -1.1,-4.7 -5.6,-9 4.6,-4.3 5.6,-9 5.6,-9 6.7,5.7 17.1,6.9 22.3,7.2 -0.3,-5.2 -1.6,-15.7 -7.2,-22.4 0,0 4.7,-1.1 9,-5.7 z"/></g>
|
|
||||||
<g id="crossSaltire" stroke-width=".5"><path d="m 71.83,65.17 -6.66,6.66 28.17,28.17 -28.17,28.17 6.66,6.66 28.17,-28.17 28.17,28.17 6.66,-6.66 L 106.66,100 134.83,71.83 128.17,65.17 100,93.34 Z" /></g>
|
|
||||||
<g id="crossTau" stroke-width=".5"><path d="M 83.1,140 C 96.3,116.9 92.9,81.8 92.9,81.8 80.9,80.1 60,90.3 60,90.3 60,90.3 67.1,77.6 67.1,60 83.1,70.1 116.9,70.1 132.9,60 132.9,77.6 140,90.3 140,90.3 c 0,0 -20.9,-10.2 -32.9,-8.5 0,0 -3.4,35.1 9.9,58.2 -11.4,-5.3 -24,-4.8 -33.9,0 z" /></g>
|
|
||||||
|
|
||||||
<!-- Loaded charges -->
|
|
||||||
</g>
|
|
||||||
|
|
||||||
<g id="coas">
|
|
||||||
<!-- coas svg -->
|
|
||||||
</g>
|
|
||||||
</defs>
|
</defs>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -191,20 +191,17 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
const generate = function(parent, kinship, dominion) {
|
const generate = function(parent, kinship, dominion) {
|
||||||
|
if (parent === "custom") parent = null;
|
||||||
let usedPattern = null, usedTinctures = [];
|
let usedPattern = null, usedTinctures = [];
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
// seafaring
|
// seafaring
|
||||||
// stringify coa on save and load
|
|
||||||
// generate on new item creation
|
|
||||||
// old versions auto migration: coa generation for cultures and states etc.
|
// old versions auto migration: coa generation for cultures and states etc.
|
||||||
// emblems layer for old maps
|
// emblems layer for old maps
|
||||||
// define emblems layer style for all styles
|
// define emblems layer style for all styles
|
||||||
// style settings for emblems layer
|
// style settings for emblems layer
|
||||||
// fix map download svg/png
|
|
||||||
// test in FF
|
// test in FF
|
||||||
// layout preset
|
// layout preset
|
||||||
// burg editor - add emblem
|
|
||||||
// other editors
|
// other editors
|
||||||
|
|
||||||
const t1 = P(kinship) ? parent.t1 : getTincture("field");
|
const t1 = P(kinship) ? parent.t1 : getTincture("field");
|
||||||
|
|
|
||||||
887
modules/coa-renderer-old.js
Normal file
887
modules/coa-renderer-old.js
Normal file
|
|
@ -0,0 +1,887 @@
|
||||||
|
(function (global, factory) {
|
||||||
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
||||||
|
typeof define === 'function' && define.amd ? define(factory) :
|
||||||
|
(global.COArenderer = factory());
|
||||||
|
}(this, (function () {'use strict';
|
||||||
|
const colors = {
|
||||||
|
argent: "#fafafa",
|
||||||
|
or: "#ffe066",
|
||||||
|
gules: "#d7374a",
|
||||||
|
sable: "#333333",
|
||||||
|
azure: "#377cd7",
|
||||||
|
vert: "#26c061",
|
||||||
|
purpure: "#522d5b",
|
||||||
|
murrey: "#85185b",
|
||||||
|
sanguine: "#b63a3a",
|
||||||
|
tenné: "#cc7f19"
|
||||||
|
}
|
||||||
|
|
||||||
|
const shieldPositions = {
|
||||||
|
// shield-specific position: [x, y] (relative to center)
|
||||||
|
heater: {
|
||||||
|
a: [-43.75, -50], b: [0, -50], c: [43.75, -50],
|
||||||
|
d: [-43.75, 0], e: [0, 0], f: [43.75, 0],
|
||||||
|
g: [-32.25, 37.5], h: [0, 50], i: [32.25, 37.5],
|
||||||
|
y: [-50, -50], z: [0, 62.5],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-30, 30], n: [0, 42.5], o: [30, 30],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-66.2, -66.6], B: [-22, -66.6], C: [22, -66.6], D: [66.2, -66.6],
|
||||||
|
K: [-66.2, -20], E: [66.2, -20],
|
||||||
|
J: [-55.5, 26], F: [55.5, 26],
|
||||||
|
I: [-33, 62], G: [33, 62],
|
||||||
|
H: [0, 89.5]
|
||||||
|
},
|
||||||
|
spanish: {
|
||||||
|
a: [-43.75, -50], b: [0, -50], c: [43.75, -50],
|
||||||
|
d: [-43.75, 0], e: [0, 0], f: [43.75, 0],
|
||||||
|
g: [-43.75, 50], h: [0, 50], i: [43.75, 50],
|
||||||
|
y: [-50, -50], z: [0, 50],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-37.5, 37.5], n: [0, 37.5], o: [37.5, 37.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-66.2, -66.6], B: [-22, -66.6], C: [22, -66.6], D: [66.2, -66.6],
|
||||||
|
K: [-66.4, -20], E: [66.4, -20],
|
||||||
|
J: [-66.4, 26], F: [66.4, 26],
|
||||||
|
I: [-49, 70], G: [49, 70],
|
||||||
|
H: [0, 92]
|
||||||
|
},
|
||||||
|
french: {
|
||||||
|
a: [-43.75, -50], b: [0, -50], c: [43.75, -50],
|
||||||
|
d: [-43.75, 0], e: [0, 0], f: [43.75, 0],
|
||||||
|
g: [-43.75, 50], h: [0, 50], i: [43.75, 50],
|
||||||
|
y: [-50, -50], z: [0, 65],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-37.5, 37.5], n: [0, 37.5], o: [37.5, 37.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-66.2, -66.6], B: [-22, -66.6], C: [22, -66.6], D: [66.2, -66.6],
|
||||||
|
K: [-66.4, -20], E: [66.4, -20],
|
||||||
|
J: [-66.4, 26], F: [66.4, 26],
|
||||||
|
I: [-65.4, 70], G: [65.4, 70],
|
||||||
|
H: [0, 89]
|
||||||
|
},
|
||||||
|
horsehead: {
|
||||||
|
a: [-43.75, -47.5], b: [0, -50], c: [43.75, -47.5],
|
||||||
|
d: [-35, 0], e: [0, 0], f: [35, 0],
|
||||||
|
h: [0, 50],
|
||||||
|
y: [-50, -50], z: [0, 55],
|
||||||
|
j: [-35, -35], k: [0, -40], l: [35, -35],
|
||||||
|
m: [-30, 30], n: [0, 40], o: [30, 30],
|
||||||
|
p: [-27.5, 0], q: [27.5, 0],
|
||||||
|
A: [-71, -52], B: [-24, -73], C: [24, -73], D: [71, -52],
|
||||||
|
K: [-62, -16], E: [62, -16],
|
||||||
|
J: [-39, 20], F: [39, 20],
|
||||||
|
I: [-33.5, 60], G: [33.5, 60],
|
||||||
|
H: [0, 91.5]
|
||||||
|
},
|
||||||
|
horsehead2: {
|
||||||
|
a: [-37.5, -47.5], b: [0, -50], c: [37.5, -47.5],
|
||||||
|
d: [-35, 0], e: [0, 0], f: [35, 0],
|
||||||
|
g: [-35, -47.5], h: [0, 50], i: [35, -47.5],
|
||||||
|
y: [-50, -50], z: [0, 55],
|
||||||
|
j: [-30, -30], k: [0, -40], l: [30, -30],
|
||||||
|
m: [-30, 30], n: [0, 40], o: [30, 30],
|
||||||
|
p: [-27.5, 0], q: [27.5, 0],
|
||||||
|
A: [-49, -39], B: [-22, -70], C: [22, -70], D: [49, -39],
|
||||||
|
K: [-51, -2], E: [51, -2],
|
||||||
|
J: [-38.5, 31], F: [38.5, 31],
|
||||||
|
I: [-35, 67], G: [35, 67],
|
||||||
|
H: [0, 85]
|
||||||
|
},
|
||||||
|
polish: {
|
||||||
|
a: [-35, -50], b: [0, -50], c: [35, -50],
|
||||||
|
d: [-40, 0], e: [0, 0], f: [40, 0],
|
||||||
|
g: [-37.5, 50], h: [0, 50], i: [37.5, 50],
|
||||||
|
y: [-50, -50], z: [0, 65],
|
||||||
|
j: [-27.5, -27.5], k: [0, -45], l: [27.5, -27.5],
|
||||||
|
m: [-27.5, 27.5], n: [0, 45], o: [27.5, 27.5],
|
||||||
|
p: [-32.5, 0], q: [32.5, 0],
|
||||||
|
A: [-48, -52], B: [-23, -80], C: [23, -80], D: [48, -52],
|
||||||
|
K: [-47, -10], E: [47, -10],
|
||||||
|
J: [-62, 32], F: [62, 32],
|
||||||
|
I: [-37, 68], G: [37, 68],
|
||||||
|
H: [0, 86]
|
||||||
|
},
|
||||||
|
hessen: {
|
||||||
|
a: [-43.75, -50], b: [0, -50], c: [43.75, -50],
|
||||||
|
d: [-43.75, 0], e: [0, 0], f: [43.75, 0],
|
||||||
|
g: [-43.75, 50], h: [0, 50], i: [43.75, 50],
|
||||||
|
y: [-50, -50], z: [0, 52.5],
|
||||||
|
j: [-40, -40], k: [0, -40], l: [40, -40],
|
||||||
|
m: [-40, 40], n: [0, 40], o: [40, 40],
|
||||||
|
p: [-40, 0], q: [40, 0],
|
||||||
|
A: [-69, -64], B: [-22, -76], C: [22, -76], D: [69, -64],
|
||||||
|
K: [-66.4, -20], E: [66.4, -20],
|
||||||
|
J: [-62, 26], F: [62, 26],
|
||||||
|
I: [-46, 70], G: [46, 70],
|
||||||
|
H: [0, 91.5]
|
||||||
|
},
|
||||||
|
swiss: {
|
||||||
|
a: [-43.75, -50], b: [0, -50], c: [43.75, -50],
|
||||||
|
d: [-43.75, 0], e: [0, 0], f: [43.75, 0],
|
||||||
|
g: [-32, 37.5], h: [0, 50], i: [32, 37.5],
|
||||||
|
y: [-50, -50], z: [0, 62.5],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-32, 32.5], n: [0, 42.5], o: [32, 32.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-66.2, -66.6], B: [-22, -66], C: [22, -66], D: [66.2, -66.6],
|
||||||
|
K: [-63, -20], E: [63, -20],
|
||||||
|
J: [-50, 26], F: [50, 26],
|
||||||
|
I: [-29, 62], G: [29, 62],
|
||||||
|
H: [0, 89.5]
|
||||||
|
},
|
||||||
|
boeotian: {
|
||||||
|
a: [-37.5, -47.5], b: [0, -47.5], c: [37.5, -47.5],
|
||||||
|
d: [-25, 0], e: [0, 0], f: [25, 0],
|
||||||
|
g: [-37.5, 47.5], h: [0, 47.5], i: [37.5, 47.5],
|
||||||
|
y: [-48, -48], z: [0, 60],
|
||||||
|
j: [-32.5, -37.5], k: [0, -45], l: [32.5, -37.5],
|
||||||
|
m: [-32.5, 37.5], n: [0, 45], o: [32.5, 37.5],
|
||||||
|
p: [-20, 0], q: [20, 0],
|
||||||
|
A: [-45, -55], B: [-20, -77], C: [20, -77], D: [45, -55],
|
||||||
|
K: [-59, -25], E: [59, -25],
|
||||||
|
J: [-58, 27], F: [58, 27],
|
||||||
|
I: [-39, 63], G: [39, 63],
|
||||||
|
H: [0, 81]
|
||||||
|
},
|
||||||
|
roman: {
|
||||||
|
a: [-40, -52.5], b: [0, -52.5], c: [40, -52.5],
|
||||||
|
d: [-40, 0], e: [0, 0], f: [40, 0],
|
||||||
|
g: [-40, 52.5], h: [0, 52.5], i: [40, 52.5],
|
||||||
|
y: [-42.5, -52.5], z: [0, 65],
|
||||||
|
j: [-30, -37.5], k: [0, -37.5], l: [30, -37.5],
|
||||||
|
m: [-30, 37.5], n: [0, 37.5], o: [30, 37.5],
|
||||||
|
p: [-30, 0], q: [30, 0],
|
||||||
|
A: [-51.5, -65], B: [-17, -75], C: [17, -75], D: [51.5, -65],
|
||||||
|
K: [-51.5, -21], E: [51.5, -21],
|
||||||
|
J: [-51.5, 21], F: [51.5, 21],
|
||||||
|
I: [-51.5, 65], G: [51.5, 65],
|
||||||
|
H: [-17, 75], L: [17, 75]
|
||||||
|
},
|
||||||
|
kite: {
|
||||||
|
b: [0, -65], e: [0, -15], h: [0, 35],
|
||||||
|
z: [0, 35], k: [0, -50], n: [0, 20],
|
||||||
|
p: [-20, -15], q: [20, -15],
|
||||||
|
A: [-38, -52], B: [-29, -78], C: [29, -78], D: [38, -52],
|
||||||
|
K: [-33, -20], E: [33, -20],
|
||||||
|
J: [-25, 11], F: [25, 11],
|
||||||
|
I: [-15, 42], G: [15, 42],
|
||||||
|
H: [0, 73], L: [0, -91]
|
||||||
|
},
|
||||||
|
oldFrench: {
|
||||||
|
a: [-43.75, -50], b: [0, -50], c: [43.75, -50],
|
||||||
|
d: [-43.75, 0], e: [0, 0], f: [43.75, 0],
|
||||||
|
g: [-37.5, 50], h: [0, 50], i: [37.5, 50],
|
||||||
|
y: [-50, -50], z: [0, 62.5],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-37.5, 37.5], n: [0, 45], o: [37.5, 37.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-66.2, -66.6], B: [-22, -66.6], C: [22, -66.6], D: [66.2, -66.6],
|
||||||
|
K: [-66.2, -20], E: [66.2, -20],
|
||||||
|
J: [-64, 26], F: [64, 26],
|
||||||
|
I: [-45, 62], G: [45, 62],
|
||||||
|
H: [0, 91],
|
||||||
|
},
|
||||||
|
renaissance: {
|
||||||
|
a: [-43.75, -50], b: [0, -50], c: [43.75, -50],
|
||||||
|
d: [-41.5, 0], e: [0, 0], f: [41.5, 0],
|
||||||
|
g: [-43.75, 50], h: [0, 50], i: [43.75, 50],
|
||||||
|
y: [-50, -50], z: [0, 62.5],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-37.5, 37.5], n: [0, 37.5], o: [37.5, 37.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-61, -55], B: [-23, -67], C: [23, -67], D: [61, -55],
|
||||||
|
K: [-55, -11], E: [55, -11],
|
||||||
|
J: [-65, 31], F: [65, 31],
|
||||||
|
I: [-45, 76], G: [45, 76],
|
||||||
|
H: [0, 87]
|
||||||
|
},
|
||||||
|
baroque: {
|
||||||
|
a: [-43.75, -45], b: [0, -45], c: [43.75, -45],
|
||||||
|
d: [-43.75, 0], e: [0, 0], f: [43.75, 0],
|
||||||
|
g: [-43.75, 50], h: [0, 50], i: [43.75, 50],
|
||||||
|
y: [-50, -50], z: [0, 60],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-37.5, 37.5], n: [0, 37.5], o: [37.5, 37.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-65, -54.5], B: [-22, -65], C: [22, -65], D: [65, -54.5],
|
||||||
|
K: [-58.5, -15], E: [58.5, -15],
|
||||||
|
J: [-65, 31], F: [66, 31],
|
||||||
|
I: [-35, 73], G: [35, 73],
|
||||||
|
H: [0, 89]
|
||||||
|
},
|
||||||
|
targe: {
|
||||||
|
a: [-43.75, -50], b: [0, -50], c: [43.75, -50],
|
||||||
|
d: [-43.75, 0], e: [0, 0], f: [43.75, 0],
|
||||||
|
g: [-43.75, 50], h: [0, 50], i: [43.75, 50],
|
||||||
|
y: [-50, -50], z: [0, 50],
|
||||||
|
j: [-40, -40], k: [0, -40], l: [40, -40],
|
||||||
|
m: [-40, 40], n: [0, 40], o: [40, 40],
|
||||||
|
p: [-32.5, 0], q: [32.5, 0],
|
||||||
|
A: [-66.2, -60], B: [-22, -77], C: [22, -86], D: [60, -66.6],
|
||||||
|
K: [-28, -20], E: [57, -20],
|
||||||
|
J: [-61, 26], F: [61, 26],
|
||||||
|
I: [-49, 63], G: [49, 59],
|
||||||
|
H: [0, 80]
|
||||||
|
},
|
||||||
|
targe2: {
|
||||||
|
a: [-43.75, -50], b: [0, -50], c: [43.75, -50],
|
||||||
|
d: [-40, 0], e: [0, 0], f: [40, 0],
|
||||||
|
g: [-43.75, 50], h: [0, 50], i: [43.75, 50],
|
||||||
|
y: [-50, -50], z: [0, 60],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-37.5, 37.5], n: [0, 37.5], o: [37.5, 37.5],
|
||||||
|
p: [-32.5, 0], q: [32.5, 0],
|
||||||
|
A: [-55, -59], B: [-15, -59], C: [24, -79], D: [51, -58],
|
||||||
|
K: [-40, -14], E: [51, -14],
|
||||||
|
J: [-64, 26], F: [62, 26],
|
||||||
|
I: [-46, 66], G: [48, 67],
|
||||||
|
H: [0, 83]
|
||||||
|
},
|
||||||
|
pavise: {
|
||||||
|
a: [-40, -52.5], b: [0, -52.5], c: [40, -52.5],
|
||||||
|
d: [-40, 0], e: [0, 0], f: [40, 0],
|
||||||
|
g: [-40, 52.5], h: [0, 52.5], i: [40, 52.5],
|
||||||
|
y: [-42.5, -52.5], z: [0, 60],
|
||||||
|
j: [-30, -35], k: [0, -37.5], l: [30, -35],
|
||||||
|
m: [-30, 35], n: [0, 37.5], o: [30, 35],
|
||||||
|
p: [-30, 0], q: [30, 0],
|
||||||
|
A: [-57, -55], B: [-22, -74], C: [22, -74], D: [57, -55],
|
||||||
|
K: [-54, -11], E: [54, -11],
|
||||||
|
J: [-50, 36], F: [50, 36],
|
||||||
|
I: [-46, 81], G: [46, 81],
|
||||||
|
H: [0, 81]
|
||||||
|
},
|
||||||
|
wedged: {
|
||||||
|
a: [-43.75, -50], b: [0, -50], c: [43.75, -50],
|
||||||
|
d: [-43.75, 0], e: [0, 0], f: [43.75, 0],
|
||||||
|
g: [-32.25, 37.5], h: [0, 50], i: [32.25, 37.5],
|
||||||
|
y: [-50, -50], z: [0, 62.5],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-32.5, 32.5], n: [0, 42.5], o: [32.5, 32.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-66, -53], B: [-22, -72.5], C: [22, -72.5], D: [66, -53],
|
||||||
|
K: [-62.6, -13], E: [62.6, -13],
|
||||||
|
J: [-50, 26], F: [50, 26],
|
||||||
|
I: [-27, 62], G: [27, 62],
|
||||||
|
H: [0, 87]
|
||||||
|
},
|
||||||
|
flag: {
|
||||||
|
a: [-60, -40], b: [0, -40], c: [60, -40],
|
||||||
|
d: [-60, 0], e: [0, 0], f: [60, 0],
|
||||||
|
g: [-60, 40], h: [0, 40], i: [60, 40],
|
||||||
|
y: [-60, -42.5], z: [0, 40],
|
||||||
|
j: [-45, -30], k: [0, -30], l: [45, -30],
|
||||||
|
m: [-45, 30], n: [0, 30], o: [45, 30],
|
||||||
|
p: [-45, 0], q: [45, 0],
|
||||||
|
A: [-81, -51], B: [-27, -51], C: [27, -51], D: [81, -51],
|
||||||
|
K: [-81, -17], E: [81, -17],
|
||||||
|
J: [-81, 17], F: [81, 17],
|
||||||
|
I: [-81, 51], G: [81, 51],
|
||||||
|
H: [-27, 51], L: [27, 51]
|
||||||
|
},
|
||||||
|
pennon: {
|
||||||
|
a: [-75, -40],
|
||||||
|
d: [-75, 0], e: [-25, 0], f: [25, 0],
|
||||||
|
g: [-75, 40],
|
||||||
|
y: [-70, -42.5],
|
||||||
|
j: [-60, -30],
|
||||||
|
m: [-60, 30],
|
||||||
|
p: [-60, 0], q: [5, 0],
|
||||||
|
A: [-81, -48], B: [-43, -36], C: [-4.5, -24], D: [33, -12],
|
||||||
|
E: [72, 0],
|
||||||
|
F: [33, 12], G: [-4.5, 24], H: [-43, 36], I: [-81, 48],
|
||||||
|
J: [-81, 17], K: [-81, -17]
|
||||||
|
},
|
||||||
|
guidon: {
|
||||||
|
a: [-60, -40], b: [0, -40], c: [60, -40],
|
||||||
|
d: [-60, 0], e: [0, 0],
|
||||||
|
g: [-60, 40], h: [0, 40], i: [60, 40],
|
||||||
|
y: [-60, -42.5], z: [0, 40],
|
||||||
|
j: [-45, -30], k: [0, -30], l: [45, -30],
|
||||||
|
m: [-45, 30], n: [0, 30], o: [45, 30],
|
||||||
|
p: [-45, 0],
|
||||||
|
A: [-81, -51], B: [-27, -51], C: [27, -51], D: [78, -51],
|
||||||
|
K: [-81, -17], E: [40.5, -17],
|
||||||
|
J: [-81, 17], F: [40.5, 17],
|
||||||
|
I: [-81, 51], G: [78, 51],
|
||||||
|
H: [-27, 51], L: [27, 51]
|
||||||
|
},
|
||||||
|
banner: {
|
||||||
|
a: [-50, -50], b: [0, -50], c: [50, -50],
|
||||||
|
d: [-50, 0], e: [0, 0], f: [50, 0],
|
||||||
|
g: [-50, 40], h: [0, 40], i: [50, 40],
|
||||||
|
y: [-50, -50], z: [0, 40],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-37.5, 27.5], n: [0, 27.5], o: [37.5, 27.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-66.5, -66.5], B: [-22, -66.5], C: [22, -66.5], D: [66.5, -66.5],
|
||||||
|
K: [-66.5, -20], E: [66.5, -20],
|
||||||
|
J: [-66.5, 26], F: [66.5, 26],
|
||||||
|
I: [-66.5, 66.5], G: [66.5, 66.5],
|
||||||
|
H: [-25, 75], L: [25, 75]
|
||||||
|
},
|
||||||
|
dovetail: {
|
||||||
|
a: [-49.75, -50], b: [0, -50], c: [49.75, -50],
|
||||||
|
d: [-49.75, 0], e: [0, 0], f: [49.75, 0],
|
||||||
|
g: [-49.75, 50], i: [49.75, 50],
|
||||||
|
y: [-50, -50], z: [0, 40],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-37.5, 37.5], n: [0, 32.5], o: [37.5, 37.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-66.5, -66.5], B: [-22, -66.5], C: [22, -66.5], D: [66.5, -66.5],
|
||||||
|
K: [-66.5, -16.5], E: [66.5, -16.5],
|
||||||
|
J: [-66.5, 34.5], F: [66.5, 34.5],
|
||||||
|
I: [-66.5, 84.5], G: [66.5, 84.5],
|
||||||
|
H: [-25, 64], L: [25, 64]
|
||||||
|
},
|
||||||
|
gonfalon: {
|
||||||
|
a: [-49.75, -50], b: [0, -50], c: [49.75, -50],
|
||||||
|
d: [-49.75, 0], e: [0, 0], f: [49.75, 0],
|
||||||
|
g: [-49.75, 50], h: [0, 50], i: [49.75, 50],
|
||||||
|
y: [-50, -50], z: [0, 50],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-37.5, 37.5], n: [0, 37.5], o: [37.5, 37.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-66.5, -66.5], B: [-22, -66.5], C: [22, -66.5], D: [66.5, -66.5],
|
||||||
|
K: [-66.5, -20], E: [66.5, -20],
|
||||||
|
J: [-66.5, 26], F: [66.5, 26],
|
||||||
|
I: [-40, 63], G: [40, 63],
|
||||||
|
H: [0, 88]
|
||||||
|
},
|
||||||
|
pennant: {
|
||||||
|
a: [-45, -50], b: [0, -50], c: [45, -50],
|
||||||
|
e: [0, 0], h: [0, 50],
|
||||||
|
y: [-50, -50], z: [0, 50],
|
||||||
|
j: [-32.5, -37.5], k: [0, -37.5], l: [32.5, -37.5],
|
||||||
|
n: [0, 37.5],
|
||||||
|
A: [-60, -76], B: [-22, -76], C: [22, -76], D: [60, -76],
|
||||||
|
K: [-46, -38], E: [46, -38],
|
||||||
|
J: [-31, 0], F: [31, 0],
|
||||||
|
I: [-16, 38], G: [16, 38],
|
||||||
|
H: [0, 76]
|
||||||
|
},
|
||||||
|
round: {
|
||||||
|
a: [-40, -40], b: [0, -40], c: [40, -40],
|
||||||
|
d: [-40, 0], e: [0, 0], f: [40, 0],
|
||||||
|
g: [-40, 40], h: [0, 40], i: [40, 40],
|
||||||
|
y: [-48, -48], z: [0, 57.5],
|
||||||
|
j: [-35.5, -35.5], k: [0, -37.5], l: [35.5, -35.5],
|
||||||
|
m: [-35.5, 35.5], n: [0, 37.5], o: [35.5, 35.5],
|
||||||
|
p: [-36.5, 0], q: [36.5, 0],
|
||||||
|
A: [-59, -48], B: [-23, -73], C: [23, -73], D: [59, -48],
|
||||||
|
K: [-76, -10], E: [76, -10],
|
||||||
|
J: [-70, 31], F: [70, 31],
|
||||||
|
I: [-42, 64], G: [42, 64],
|
||||||
|
H: [0, 77]
|
||||||
|
},
|
||||||
|
oval: {
|
||||||
|
a: [-37.5, -50], b: [0, -50], c: [37.5, -50],
|
||||||
|
d: [-43, 0], e: [0, 0], f: [43, 0],
|
||||||
|
g: [-37.5, 50], h: [0, 50], i: [37.5, 50],
|
||||||
|
y: [-48, -48], z: [0, 60],
|
||||||
|
j: [-35.5, -37.5], k: [0, -37.5], l: [35.5, -37.5],
|
||||||
|
m: [-35.5, 37.5], n: [0, 50], o: [35.5, 37.5],
|
||||||
|
p: [-36.5, 0], q: [36.5, 0],
|
||||||
|
A: [-48, -48], B: [-23, -78], C: [23, -78], D: [48, -48],
|
||||||
|
K: [-59, -10], E: [59, -10],
|
||||||
|
J: [-55, 31], F: [55, 31],
|
||||||
|
I: [-36, 68], G: [36, 68],
|
||||||
|
H: [0, 85]
|
||||||
|
},
|
||||||
|
vesicaPiscis: {
|
||||||
|
a: [-32, -37], b: [0, -50], c: [32, -37],
|
||||||
|
d: [-32, 0], e: [0, 0], f: [32, 0],
|
||||||
|
g: [-32, 37], h: [0, 50], i: [32, 37],
|
||||||
|
y: [-50, -50], z: [0, 62],
|
||||||
|
j: [-27.5, -27.5], k: [0, -37], l: [27.5, -27.5],
|
||||||
|
m: [-27.5, 27.5], n: [0, 42], o: [27.5, 27.5],
|
||||||
|
p: [-27.5, 0], q: [27.5, 0],
|
||||||
|
A: [-45, -32], B: [-29, -63], C: [29, -63], D: [45, -32],
|
||||||
|
K: [-50, 0], E: [50, 0],
|
||||||
|
J: [-45, 32], F: [45, 32],
|
||||||
|
I: [-29, 63], G: [29, 63],
|
||||||
|
H: [0, 89], L: [0, -89]
|
||||||
|
},
|
||||||
|
square: {
|
||||||
|
a: [-49.75, -50], b: [0, -50], c: [49.75, -50],
|
||||||
|
d: [-49.75, 0], e: [0, 0], f: [49.75, 0],
|
||||||
|
g: [-49.75, 50], h: [0, 50], i: [49.75, 50],
|
||||||
|
y: [-50, -50], z: [0, 50],
|
||||||
|
j: [-37.5, -37.5], k: [0, -37.5], l: [37.5, -37.5],
|
||||||
|
m: [-37.5, 37.5], n: [0, 37.5], o: [37.5, 37.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-66.5, -66.5], B: [-22, -66.5], C: [22, -66.5], D: [66.5, -66.5],
|
||||||
|
K: [-66.5, -20], E: [66.5, -20],
|
||||||
|
J: [-66.5, 26], F: [66.5, 26],
|
||||||
|
I: [-66.5, 66.5], G: [66.5, 66.5],
|
||||||
|
H: [-22, 66.5], L: [22, 66.5]
|
||||||
|
},
|
||||||
|
diamond: {
|
||||||
|
a: [-32, -37], b: [0, -50], c: [32, -37],
|
||||||
|
d: [-43, 0], e: [0, 0], f: [43, 0],
|
||||||
|
g: [-32, 37], h: [0, 50], i: [32, 37],
|
||||||
|
y: [-50, -50], z: [0, 62],
|
||||||
|
j: [-27.5, -27.5], k: [0, -37], l: [27.5, -27.5],
|
||||||
|
m: [-27.5, 27.5], n: [0, 42], o: [27.5, 27.5],
|
||||||
|
p: [-37, 0], q: [37, 0],
|
||||||
|
A: [-43, -28], B: [-22, -56], C: [22, -56], D: [43, -28],
|
||||||
|
K: [-63, 0], E: [63, 0],
|
||||||
|
J: [-42, 28], F: [42, 28],
|
||||||
|
I: [-22, 56], G: [22, 56],
|
||||||
|
H: [0, 83], L: [0, -82]
|
||||||
|
},
|
||||||
|
no: {
|
||||||
|
a: [-66.5, -66.5], b: [0, -66.5], c: [66.5, -66.5],
|
||||||
|
d: [-66.5, 0], e: [0, 0], f: [66.5, 0],
|
||||||
|
g: [-66.5, 66.5], h: [0, 66.5], i: [66.5, 66.5],
|
||||||
|
y: [-50, -50], z: [0, 75],
|
||||||
|
j: [-50, -50], k: [0, -50], l: [50, -50],
|
||||||
|
m: [-50, 50], n: [0, 50], o: [50, 50],
|
||||||
|
p: [-50, 0], q: [50, 0],
|
||||||
|
A: [-91.5, -91.5], B: [-30.5, -91.5], C: [30.5, -91.5], D: [91.5, -91.5],
|
||||||
|
K: [-91.5, -30.5], E: [91.5, -30.5],
|
||||||
|
J: [-91.5, 30.5], F: [91.5, 30.5],
|
||||||
|
I: [-91.5, 91.5], G: [91.5, 91.5],
|
||||||
|
H: [-30.5, 91.5], L: [30.5, 91.5]
|
||||||
|
},
|
||||||
|
fantasy1: {
|
||||||
|
a: [-45, -45], b: [0, -50], c: [45, -45],
|
||||||
|
d: [-40, 0], e: [0, 0], f: [40, 0],
|
||||||
|
g: [-36, 42.5], h: [0, 50], i: [36, 42.5],
|
||||||
|
y: [-50, -50], z: [0, 60],
|
||||||
|
j: [-37, -37], k: [0, -40], l: [37, -37],
|
||||||
|
m: [-32, 32], n: [0, 40], o: [32, 32],
|
||||||
|
p: [-28.5, 0], q: [28.5, 0],
|
||||||
|
A: [-66, -55], B: [-22, -67], C: [22, -67], D: [66, -55],
|
||||||
|
K: [-53, -20], E: [53, -20],
|
||||||
|
J: [-46, 26], F: [46, 26],
|
||||||
|
I: [-29, 62], G: [29, 62],
|
||||||
|
H: [0, 84]
|
||||||
|
},
|
||||||
|
fantasy2: {
|
||||||
|
a: [-45, -45], b: [0, -45], c: [45, -45],
|
||||||
|
d: [-35, 0], e: [0, 0], f: [35, 0],
|
||||||
|
g: [-36, 42.5], h: [0, 45], i: [36, 42.5],
|
||||||
|
y: [-50, -50], z: [0, 55],
|
||||||
|
j: [-32.5, -32.5], k: [0, -40], l: [32.5, -32.5],
|
||||||
|
m: [-30, 30], n: [0, 40], o: [30, 30],
|
||||||
|
p: [-27.5, 0], q: [27.5, 0],
|
||||||
|
A: [-58, -35], B: [-44, -67], C: [44, -67], D: [58, -35],
|
||||||
|
K: [-39, -5], E: [39, -5],
|
||||||
|
J: [-57, 26], F: [57, 26],
|
||||||
|
I: [-32, 58], G: [32, 58],
|
||||||
|
H: [0, 83], L: [0, -72]
|
||||||
|
},
|
||||||
|
fantasy3: {
|
||||||
|
a: [-40, -45], b: [0, -50], c: [40, -45],
|
||||||
|
d: [-35, 0], e: [0, 0], f: [35, 0],
|
||||||
|
g: [-36, 42.5], h: [0, 50], i: [36, 42.5],
|
||||||
|
y: [-50, -50], z: [0, 55],
|
||||||
|
j: [-32.5, -32.5], k: [0, -40], l: [32.5, -32.5],
|
||||||
|
m: [-30, 30], n: [0, 40], o: [30, 30],
|
||||||
|
p: [-27.5, 0], q: [27.5, 0],
|
||||||
|
A: [-56, -42], B: [-22, -72], C: [22, -72], D: [56, -42],
|
||||||
|
K: [-37, -11], E: [37, -11],
|
||||||
|
J: [-60, 20], F: [60, 20],
|
||||||
|
I: [-34, 56], G: [34, 56],
|
||||||
|
H: [0, 83]
|
||||||
|
},
|
||||||
|
fantasy4: {
|
||||||
|
a: [-50, -45], b: [0, -50], c: [50, -45],
|
||||||
|
d: [-45, 0], e: [0, 0], f: [45, 0],
|
||||||
|
g: [-40, 45], h: [0, 50], i: [40, 45],
|
||||||
|
y: [-50, -50], z: [0, 62.5],
|
||||||
|
j: [-37.5, -37.5], k: [0, -45], l: [37.5, -37.5],
|
||||||
|
m: [-37.5, 37.5], n: [0, 45], o: [37.5, 37.5],
|
||||||
|
p: [-35, 0], q: [35, 0],
|
||||||
|
A: [-75, -56], B: [-36, -61], C: [36, -61], D: [75, -56],
|
||||||
|
K: [-67, -12], E: [67, -12],
|
||||||
|
J: [-63, 32], F: [63, 32],
|
||||||
|
I: [-42, 75], G: [42, 75],
|
||||||
|
H: [0, 91.5], L: [0, -79]
|
||||||
|
},
|
||||||
|
fantasy5: {
|
||||||
|
a: [-45, -50], b: [0, -50], c: [45, -50],
|
||||||
|
d: [-40, 0], e: [0, 0], f: [40, 0],
|
||||||
|
g: [-30, 45], h: [0, 50], i: [30, 45],
|
||||||
|
y: [-50, -50], z: [0, 60],
|
||||||
|
j: [-37, -37], k: [0, -40], l: [37, -37],
|
||||||
|
m: [-32, 32], n: [0, 40], o: [32, 32],
|
||||||
|
p: [-28.5, 0], q: [28.5, 0],
|
||||||
|
A: [-61, -67], B: [-22, -76], C: [22, -76], D: [61, -67],
|
||||||
|
K: [-58, -25], E: [58, -25],
|
||||||
|
J: [-48, 20], F: [48, 20],
|
||||||
|
I: [-28.5, 60], G: [28.5, 60],
|
||||||
|
H: [0, 89]
|
||||||
|
},
|
||||||
|
noldor: {
|
||||||
|
b: [0, -65], e: [0, -15], h: [0, 35],
|
||||||
|
z: [0, 35], k: [0, -50], n: [0, 30],
|
||||||
|
p: [-20, -15], q: [20, -15],
|
||||||
|
A: [-34, -47], B: [-20, -68], C: [20, -68], D: [34, -47],
|
||||||
|
K: [-18, -20], E: [18, -20],
|
||||||
|
J: [-26, 11], F: [26, 11],
|
||||||
|
I: [-14, 43], G: [14, 43],
|
||||||
|
H: [0, 74], L: [0, -85]
|
||||||
|
},
|
||||||
|
gondor: {
|
||||||
|
a: [-32.5, -50], b: [0, -50], c: [32.5, -50],
|
||||||
|
d: [-32.5, 0], e: [0, 0], f: [32.5, 0],
|
||||||
|
g: [-32.5, 50], h: [0, 50], i: [32.5, 50],
|
||||||
|
y: [-42.5, -52.5], z: [0, 65],
|
||||||
|
j: [-25, -37.5], k: [0, -37.5], l: [25, -37.5],
|
||||||
|
m: [-25, 30], n: [0, 37.5], o: [25, 30],
|
||||||
|
p: [-25, 0], q: [25, 0],
|
||||||
|
A: [-42, -52], B: [-17, -75], C: [17, -75], D: [42, -52],
|
||||||
|
K: [-42, -15], E: [42, -15],
|
||||||
|
J: [-42, 22], F: [42, 22],
|
||||||
|
I: [-26, 60], G: [26, 60],
|
||||||
|
H: [0, 87]
|
||||||
|
},
|
||||||
|
easterling: {
|
||||||
|
a: [-40, -47.5], b: [0, -47.5], c: [40, -47.5],
|
||||||
|
d: [-40, 0], e: [0, 0], f: [40, 0],
|
||||||
|
g: [-40, 47.5], h: [0, 47.5], i: [40, 47.5],
|
||||||
|
y: [-42.5, -52.5], z: [0, 65],
|
||||||
|
j: [-30, -37.5], k: [0, -37.5], l: [30, -37.5],
|
||||||
|
m: [-30, 37.5], n: [0, 37.5], o: [30, 37.5],
|
||||||
|
p: [-30, 0], q: [30, 0],
|
||||||
|
A: [-52, -72], B: [0, -65], D: [52, -72],
|
||||||
|
K: [-52, -24], E: [52, -24],
|
||||||
|
J: [-52, 24], F: [52, 24],
|
||||||
|
I: [-52, 72], G: [52, 72],
|
||||||
|
H: [0, 65]
|
||||||
|
},
|
||||||
|
erebor: {
|
||||||
|
a: [-40, -40], b: [0, -55], c: [40, -40],
|
||||||
|
d: [-40, 0], e: [0, 0], f: [40, 0],
|
||||||
|
g: [-40, 40], h: [0, 55], i: [40, 40],
|
||||||
|
y: [-50, -50], z: [0, 50],
|
||||||
|
j: [-35, -35], k: [0, -45], l: [35, -35],
|
||||||
|
m: [-35, 35], n: [0, 45], o: [35, 35],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-47, -46], B: [-22, -81], C: [22, -81], D: [47, -46],
|
||||||
|
K: [-66.5, 0], E: [66.5, 0],
|
||||||
|
J: [-47, 46], F: [47, 46],
|
||||||
|
I: [-22, 81], G: [22, 81]
|
||||||
|
},
|
||||||
|
ironHills: {
|
||||||
|
a: [-43.75, -50], b: [0, -50], c: [43.75, -50],
|
||||||
|
d: [-43.25, 0], e: [0, 0], f: [43.25, 0],
|
||||||
|
g: [-42.5, 42.5], h: [0, 50], i: [42.5, 42.5],
|
||||||
|
y: [-50, -50], z: [0, 62.5],
|
||||||
|
j: [-32.5, -32.5], k: [0, -40], l: [32.5, -32.5],
|
||||||
|
m: [-32.5, 32.5], n: [0, 40], o: [32.5, 32.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-61, -67], B: [-22, -74], C: [22, -74], D: [61, -67],
|
||||||
|
K: [-59, -20], E: [59, -20],
|
||||||
|
J: [-57, 26], F: [57, 26],
|
||||||
|
I: [-33, 64], G: [33, 64],
|
||||||
|
H: [0, 88]
|
||||||
|
},
|
||||||
|
urukHai: {
|
||||||
|
a: [-40, -45], b: [0, -45], c: [40, -45],
|
||||||
|
d: [-36, 0], e: [0, 0], f: [36, 0],
|
||||||
|
g: [-32.25, 40], h: [0, 40], i: [32.25, 40],
|
||||||
|
y: [-50, -50], z: [0, 40],
|
||||||
|
j: [-32.5, -32.5], k: [0, -37.5], l: [32.5, -32.5],
|
||||||
|
m: [-27.5, 27.5], n: [0, 32.5], o: [27.5, 27.5],
|
||||||
|
p: [-37.5, 0], q: [37.5, 0],
|
||||||
|
A: [-31, -79], B: [-1, -90], C: [31, -74], D: [61, -57],
|
||||||
|
K: [-55, -19], E: [53, -19],
|
||||||
|
J: [-45, 19], F: [45, 19],
|
||||||
|
I: [-33, 57], G: [35, 57],
|
||||||
|
H: [0, 57], L: [-39, -50]
|
||||||
|
},
|
||||||
|
moriaOrc: {
|
||||||
|
a: [-37.5, -37.5], b: [0, -37.5], c: [37.5, -37.5],
|
||||||
|
d: [-37.5, 0], e: [0, 0], f: [37.5, 0],
|
||||||
|
g: [-37.5, 37.5], h: [0, 37.5], i: [37.5, 37.5],
|
||||||
|
y: [-50, -50], z: [0, 40],
|
||||||
|
j: [-30, -30], k: [0, -30], l: [30, -30],
|
||||||
|
m: [-30, 30], n: [0, 30], o: [30, 30],
|
||||||
|
p: [-30, 0], q: [30, 0],
|
||||||
|
A: [-48, -48], B: [-16, -50], C: [16, -46], D: [39, -61],
|
||||||
|
K: [-52, -19], E: [52, -26],
|
||||||
|
J: [-42, 9], F: [52, 9],
|
||||||
|
I: [-31, 40], G: [40, 43],
|
||||||
|
H: [4, 47]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const shieldSize = {
|
||||||
|
horsehead: .9, horsehead2: .9, polish: .85, swiss: .95,
|
||||||
|
boeotian: .75, roman: .95, kite: .65, targe2: .9, pavise: .9, wedged: .95,
|
||||||
|
flag: .7, pennon: .5, guidon: .65, banner: .8, dovetail: .8, pennant: .6,
|
||||||
|
oval: .95, vesicaPiscis: .8, diamond: .8, no: 1.2,
|
||||||
|
fantasy1: .8, fantasy2: .7, fantasy3: .7, fantasy5: .9,
|
||||||
|
noldor: .5, gondor: .75, easterling: .8, erebor: .9, urukHai: .8, moriaOrc: .7
|
||||||
|
}
|
||||||
|
|
||||||
|
const shieldBox = {
|
||||||
|
heater: "0 10 200 200",
|
||||||
|
spanish: "0 10 200 200",
|
||||||
|
french: "0 10 200 200",
|
||||||
|
|
||||||
|
horsehead: "0 10 200 200",
|
||||||
|
horsehead2: "0 10 200 200",
|
||||||
|
polish: "0 0 200 200",
|
||||||
|
hessen: "0 5 200 200",
|
||||||
|
swiss: "0 10 200 200",
|
||||||
|
|
||||||
|
boeotian: "0 0 200 200",
|
||||||
|
roman: "0 0 200 200",
|
||||||
|
kite: "0 0 200 200",
|
||||||
|
oldFrench: "0 10 200 200",
|
||||||
|
renaissance: "0 5 200 200",
|
||||||
|
baroque: "0 10 200 200",
|
||||||
|
|
||||||
|
targe: "0 0 200 200",
|
||||||
|
targe2: "0 0 200 200",
|
||||||
|
pavise: "0 0 200 200",
|
||||||
|
wedged: "0 10 200 200",
|
||||||
|
|
||||||
|
flag: "0 0 200 200",
|
||||||
|
pennon: "2.5 0 200 200",
|
||||||
|
guidon: "2.5 0 200 200",
|
||||||
|
banner: "0 10 200 200",
|
||||||
|
dovetail: "0 10 200 200",
|
||||||
|
gonfalon: "0 10 200 200",
|
||||||
|
pennant: "0 0 200 200",
|
||||||
|
|
||||||
|
round: "0 0 200 200",
|
||||||
|
oval: "0 0 200 200",
|
||||||
|
vesicaPiscis: "0 0 200 200",
|
||||||
|
square: "0 0 200 200",
|
||||||
|
diamond: "0 0 200 200",
|
||||||
|
no: "0 0 200 200",
|
||||||
|
|
||||||
|
fantasy1: "0 0 200 200",
|
||||||
|
fantasy2: "0 5 200 200",
|
||||||
|
fantasy3: "0 5 200 200",
|
||||||
|
fantasy4: "0 5 200 200",
|
||||||
|
fantasy5: "0 0 200 200",
|
||||||
|
|
||||||
|
noldor: "0 0 200 200",
|
||||||
|
gondor: "0 5 200 200",
|
||||||
|
easterling: "0 0 200 200",
|
||||||
|
erebor: "0 0 200 200",
|
||||||
|
ironHills: "0 5 200 200",
|
||||||
|
urukHai: "0 0 200 200",
|
||||||
|
moriaOrc: "0 0 200 200"
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw(id, coa) {
|
||||||
|
const {division, ordinaries = [], charges = []} = coa;
|
||||||
|
const ordinariesRegular = ordinaries.filter(o => !o.above);
|
||||||
|
const ordinariesAboveCharges = ordinaries.filter(o => o.above);
|
||||||
|
const shieldPath = document.getElementById(coa.shield).querySelector("path").getAttribute("d");
|
||||||
|
const tDiv = division ? division.t.includes("-") ? division.t.split("-")[1] : division.t : null;
|
||||||
|
const positions = shieldPositions[coa.shield];
|
||||||
|
const sizeModifier = shieldSize[coa.shield] || 1;
|
||||||
|
const viewBox = shieldBox[coa.shield] || "0 0 200 200";
|
||||||
|
|
||||||
|
let svg = `
|
||||||
|
<svg id="${id}" xmlns="http://www.w3.org/2000/svg" width=200 height=200 viewBox="${viewBox}">
|
||||||
|
<defs>
|
||||||
|
${division ? `<clipPath id="divisionClip_${id}">${getTemplate(division.division, division.line)}</clipPath>` : ''}
|
||||||
|
</defs>
|
||||||
|
<g clip-path="url(#${coa.shield})">
|
||||||
|
<rect x=0 y=0 width=200 height=200 fill="${clr(coa.t1)}"/>
|
||||||
|
${templateDivision()}
|
||||||
|
${templateAboveAll()}
|
||||||
|
</g>
|
||||||
|
<path d="${shieldPath}" fill="url(#backlight)" stroke="#333"/>
|
||||||
|
</svg>`;
|
||||||
|
|
||||||
|
// insert coa svg to defs
|
||||||
|
document.getElementById("coas").insertAdjacentHTML("beforeend", svg);
|
||||||
|
|
||||||
|
// fetch charges
|
||||||
|
if (charges.length) {
|
||||||
|
const defs = document.getElementById(id).querySelector("defs");
|
||||||
|
const uniqueCharges = [...new Set(charges.map(charge => charge.charge))];
|
||||||
|
uniqueCharges.forEach(charge => fetchCharge(charge, defs));
|
||||||
|
}
|
||||||
|
|
||||||
|
function templateDivision() {
|
||||||
|
if (!division) return "";
|
||||||
|
let svg = "";
|
||||||
|
|
||||||
|
// In field part
|
||||||
|
for (const ordinary of ordinariesRegular) {
|
||||||
|
if (ordinary.divided === "field") svg += templateOrdinary(ordinary, ordinary.t); else
|
||||||
|
if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, tDiv);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const charge of charges) {
|
||||||
|
if (charge.divided === "field") svg += templateCharge(charge, charge.t); else
|
||||||
|
if (charge.divided === "counter") svg += templateCharge(charge, tDiv);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const ordinary of ordinariesAboveCharges) {
|
||||||
|
if (ordinary.divided === "field") svg += templateOrdinary(ordinary, ordinary.t); else
|
||||||
|
if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, tDiv);
|
||||||
|
}
|
||||||
|
|
||||||
|
// In division part
|
||||||
|
svg += `
|
||||||
|
<g clip-path="url(#divisionClip_${id})">
|
||||||
|
<rect x=0 y=0 width=200 height=200 fill="${clr(division.t)}"/>
|
||||||
|
`;
|
||||||
|
|
||||||
|
for (const ordinary of ordinariesRegular) {
|
||||||
|
if (ordinary.divided === "division") svg += templateOrdinary(ordinary, ordinary.t); else
|
||||||
|
if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, coa.t1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const charge of charges) {
|
||||||
|
if (charge.divided === "division") svg += templateCharge(charge, charge.t); else
|
||||||
|
if (charge.divided === "counter") svg += templateCharge(charge, coa.t1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const ordinary of ordinariesAboveCharges) {
|
||||||
|
if (ordinary.divided === "division") svg += templateOrdinary(ordinary, ordinary.t); else
|
||||||
|
if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, coa.t1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return svg += `</g>`
|
||||||
|
}
|
||||||
|
|
||||||
|
function templateAboveAll() {
|
||||||
|
let svg = "";
|
||||||
|
|
||||||
|
ordinariesRegular.filter(o => !o.divided).forEach(ordinary => {
|
||||||
|
svg += templateOrdinary(ordinary, ordinary.t);
|
||||||
|
});
|
||||||
|
|
||||||
|
charges.filter(o => !o.divided || !division).forEach(charge => {
|
||||||
|
svg += templateCharge(charge, charge.t);
|
||||||
|
});
|
||||||
|
|
||||||
|
ordinariesAboveCharges.filter(o => !o.divided).forEach(ordinary => {
|
||||||
|
svg += templateOrdinary(ordinary, ordinary.t);
|
||||||
|
})
|
||||||
|
|
||||||
|
return svg;
|
||||||
|
}
|
||||||
|
|
||||||
|
function templateOrdinary(ordinary, tincture) {
|
||||||
|
const fill = clr(tincture);
|
||||||
|
let svg = `<g fill="${fill}" stroke="none">`;
|
||||||
|
if (ordinary.ordinary === "bordure") svg += `<path d="${shieldPath}" fill="none" stroke="${fill}" stroke-width="16.7%"/>`;
|
||||||
|
else if (ordinary.ordinary === "orle") svg += `<path d="${shieldPath}" fill="none" stroke="${fill}" stroke-width="5%" transform="scale(.85)" transform-origin="center">`;
|
||||||
|
else svg += getTemplate(ordinary.ordinary, ordinary.line);
|
||||||
|
return svg + `</g>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function templateCharge(charge, tincture) {
|
||||||
|
const fill = clr(tincture);
|
||||||
|
const chargePositions = [...new Set(charge.p)].filter(position => positions[position]);
|
||||||
|
|
||||||
|
let svg = "";
|
||||||
|
svg += `<g fill="${fill}" stroke="#000">`;
|
||||||
|
for (const p of chargePositions) {
|
||||||
|
const transform = getElTransform(charge, p);
|
||||||
|
svg += `<use href="#${charge.charge}_${id}" transform="${transform}" transform-origin="center"></use>`;
|
||||||
|
}
|
||||||
|
return svg + `</g>`;
|
||||||
|
|
||||||
|
function getElTransform(c, p) {
|
||||||
|
const [x, y] = positions[p];
|
||||||
|
const s = (c.size || 1) * sizeModifier;
|
||||||
|
const scale = c.sinister || c.reversed ? `${c.sinister ? "-" : ""}${s}, ${c.reversed ? "-" : ""}${s}` : s;
|
||||||
|
return `translate(${x} ${y}) scale(${scale})`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// get color or link to pattern
|
||||||
|
function clr(tincture) {
|
||||||
|
if (colors[tincture]) return colors[tincture];
|
||||||
|
const pattern = document.getElementById(tincture);
|
||||||
|
if (!pattern) renderPattern(tincture);
|
||||||
|
return "url(#"+tincture+")";
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderPattern(tincture) {
|
||||||
|
const [pattern, t1, t2, size] = tincture.split("-");
|
||||||
|
const semy = pattern.slice(0, 4) === "semy";
|
||||||
|
|
||||||
|
const template = document.getElementById(semy ? "semy" : pattern);
|
||||||
|
let html = template.innerHTML.replace(/{id}/, tincture);
|
||||||
|
|
||||||
|
const width = template.querySelector("pattern").getAttribute("width");
|
||||||
|
const height = template.querySelector("pattern").getAttribute("height");
|
||||||
|
|
||||||
|
if (t1) html = html.replace(/{c1}/g, clr(t1));
|
||||||
|
if (t2) html = html.replace(/{c2}/g, clr(t2));
|
||||||
|
|
||||||
|
document.getElementById("patterns").insertAdjacentHTML("beforeend", html);
|
||||||
|
|
||||||
|
if (semy) {
|
||||||
|
const charge = pattern.split("_of_")[1];
|
||||||
|
const el = document.getElementById(tincture);
|
||||||
|
|
||||||
|
fetch("https://azgaar.github.io/Armoria/charges/"+charge+".svg").then(res => {
|
||||||
|
if (res.ok) return res.text();
|
||||||
|
else throw new Error('Cannot fetch charge');
|
||||||
|
}).then(text => {
|
||||||
|
const html = document.createElement("html");
|
||||||
|
html.innerHTML = text;
|
||||||
|
el.innerHTML = el.innerHTML.replace(/<charge>/g, html.querySelector("g").outerHTML);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size) {
|
||||||
|
let mod = 1;
|
||||||
|
if (size === "small") mod = .5;
|
||||||
|
if (size === "smaller") mod = .25;
|
||||||
|
if (size === "smallest") mod = .125;
|
||||||
|
if (size === "big") mod = 2;
|
||||||
|
|
||||||
|
const el = document.getElementById(tincture);
|
||||||
|
el.setAttribute("width", width * mod);
|
||||||
|
el.setAttribute("height", height * mod);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTemplate(templateId, lineId) {
|
||||||
|
if (!lineId) return document.getElementById(templateId)?.innerHTML;
|
||||||
|
const template = document.getElementById(templateId);
|
||||||
|
const line = document.getElementById(lineId) ? document.getElementById(lineId) : document.getElementById("straight");
|
||||||
|
return template.innerHTML.replace(/{line}/g, line.getAttribute("d")).replace(/dpath/g, "d");
|
||||||
|
}
|
||||||
|
|
||||||
|
function fetchCharge(charge, defs) {
|
||||||
|
if (charge === "inescutcheon") {
|
||||||
|
const g = `<g id="inescutcheon_${id}"><path transform="scale(.33)" transform-origin="center" d="${shieldPath}"/></g>`;
|
||||||
|
defs.insertAdjacentHTML("beforeend", g);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch("https://azgaar.github.io/Armoria/charges/"+charge+".svg").then(res => {
|
||||||
|
if (res.ok) return res.text();
|
||||||
|
else throw new Error('Cannot fetch charge');
|
||||||
|
}).then(text => {
|
||||||
|
const el = document.createElement("html");
|
||||||
|
el.innerHTML = text;
|
||||||
|
const g = el.querySelector("g");
|
||||||
|
g.id = charge + "_" + id;
|
||||||
|
defs.insertAdjacentHTML("beforeend", g.outerHTML);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// async render coa if it does not exist
|
||||||
|
const trigger = function(id, coa) {
|
||||||
|
if (!coa) {
|
||||||
|
console.warn(`Emblem ${id} is undefined`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!document.getElementById(id)) draw(id, coa);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {trigger};
|
||||||
|
|
||||||
|
})));
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
typeof define === 'function' && define.amd ? define(factory) :
|
typeof define === 'function' && define.amd ? define(factory) :
|
||||||
(global.COArenderer = factory());
|
(global.COArenderer = factory());
|
||||||
}(this, (function () {'use strict';
|
}(this, (function () {'use strict';
|
||||||
|
|
||||||
const colors = {
|
const colors = {
|
||||||
argent: "#fafafa",
|
argent: "#fafafa",
|
||||||
or: "#ffe066",
|
or: "#ffe066",
|
||||||
|
|
@ -608,7 +609,7 @@
|
||||||
I: [-31, 40], G: [40, 43],
|
I: [-31, 40], G: [40, 43],
|
||||||
H: [4, 47]
|
H: [4, 47]
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
const shieldSize = {
|
const shieldSize = {
|
||||||
horsehead: .9, horsehead2: .9, polish: .85, swiss: .95,
|
horsehead: .9, horsehead2: .9, polish: .85, swiss: .95,
|
||||||
|
|
@ -672,100 +673,246 @@
|
||||||
moriaOrc: "0 0 200 200"
|
moriaOrc: "0 0 200 200"
|
||||||
}
|
}
|
||||||
|
|
||||||
function draw(id, coa) {
|
const shieldPaths = {
|
||||||
const {division, ordinaries = [], charges = []} = coa;
|
heater: "m25,25 h150 v50 a150,150,0,0,1,-75,125 a150,150,0,0,1,-75,-125 z",
|
||||||
const ordinariesRegular = ordinaries.filter(o => !o.above);
|
spanish: "m25,25 h150 v100 a75,75,0,0,1,-150,0 z",
|
||||||
const ordinariesAboveCharges = ordinaries.filter(o => o.above);
|
french: "m 25,25 h 150 v 139.15 c 0,41.745 -66,18.15 -75,36.3 -9,-18.15 -75,5.445 -75,-36.3 v 0 z",
|
||||||
const shieldPath = document.getElementById(coa.shield).querySelector("path").getAttribute("d");
|
horsehead: "m 20,40 c 0,60 40,80 40,100 0,10 -4,15 -0.35,30 C 65,185.7 81,200 100,200 c 19.1,0 35.3,-14.6 40.5,-30.4 C 144.2,155 140,150 140,140 140,120 180,100 180,40 142.72,40 150,15 100,15 55,15 55,40 20,40 Z",
|
||||||
const tDiv = division ? division.t.includes("-") ? division.t.split("-")[1] : division.t : null;
|
horsehead2: "M60 20c-5 20-10 35-35 55 25 35 35 65 30 100 20 0 35 10 45 26 10-16 30-26 45-26-5-35 5-65 30-100a87 87 0 01-35-55c-25 3-55 3-80 0z",
|
||||||
const positions = shieldPositions[coa.shield];
|
polish: "m 90.3,6.3 c -12.7,0 -20.7,10.9 -40.5,14 0,11.8 -4.9,23.5 -11.4,31.1 0,0 12.7,6 12.7,19.3 C 51.1,90.8 30,90.8 30,90.8 c 0,0 -3.6,7.4 -3.6,22.4 0,34.3 23.1,60.2 40.7,68.2 17.6,8 27.7,11.4 32.9,18.6 5.2,-7.3 15.3,-10.7 32.8,-18.6 17.6,-8 40.7,-33.9 40.7,-68.2 0,-15 -3.6,-22.4 -3.6,-22.4 0,0 -21.1,0 -21.1,-20.1 0,-13.3 12.7,-19.3 12.7,-19.3 C 155.1,43.7 150.2,32.1 150.2,20.3 130.4,17.2 122.5,6.3 109.7,6.3 102.5,6.3 100,10 100,10 c 0,0 -2.5,-3.7 -9.7,-3.7 z",
|
||||||
const sizeModifier = shieldSize[coa.shield] || 1;
|
hessen: "M170 20c4 5 8 13 15 20 0 0-10 0-10 15 0 100-15 140-75 145-65-5-75-45-75-145 0-15-10-15-10-15l15-20c0 15 10-5 70-5s70 20 70 5z",
|
||||||
const viewBox = shieldBox[coa.shield] || "0 0 200 200";
|
swiss: "m 25,20 c -0.1,0 25.2,8.5 37.6,8.5 C 75.1,28.5 99.1,20 100,20 c 0.6,0 24.9,8.5 37.3,8.5 C 149.8,28.5 174.4,20 175,20 l -0.3,22.6 C 173.2,160.3 100,200 100,200 100,200 26.5,160.9 25.2,42.6 Z",
|
||||||
|
boeotian: "M150 115c-5 0-10-5-10-15s5-15 10-15c10 0 7 10 15 10 10 0 0-30 0-30-10-25-30-55-65-55S45 40 35 65c0 0-10 30 0 30 8 0 5-10 15-10 5 0 10 5 10 15s-5 15-10 15c-10 0-7-10-15-10-10 0 0 30 0 30 10 25 30 55 65 55s55-30 65-55c0 0 10-30 0-30-8 0-5 10-15 10z",
|
||||||
const coaDefs = document.getElementById("coaDefs");
|
roman: "m 160,170 c -40,20 -80,20 -120,0 V 30 C 80,10 120,10 160,30 Z",
|
||||||
|
kite: "m 53.3,46.4 c 0,4.1 1,12.3 1,12.3 7.1,55.7 45.7,141.3 45.7,141.3 0,0 38.6,-85.6 45.7,-141.2 0,0 1,-8.1 1,-12.3 C 146.7,20.9 125.8,0.1 100,0.1 74.2,0.1 53.3,20.9 53.3,46.4 Z",
|
||||||
let svg = `
|
oldFrench: "m25,25 h150 v75 a100,100,0,0,1,-75,100 a100,100,0,0,1,-75,-100 z",
|
||||||
<svg id="${id}" xmlns="http://www.w3.org/2000/svg" width=200 height=200 viewBox="${viewBox}">
|
renaissance: "M 25,33.9 C 33.4,50.3 36.2,72.9 36.2,81.7 36.2,109.9 25,122.6 25,141 c 0,29.4 24.9,44.1 40.2,47.7 15.3,3.7 29.3,0 34.8,11.3 5.5,-11.3 19.6,-7.6 34.8,-11.3 C 150.1,185 175,170.3 175,141 c 0,-18.4 -11.2,-31.1 -11.2,-59.3 0,-8.8 2.8,-31.3 11.2,-47.7 L 155.7,14.4 C 138.2,21.8 119.3,25.7 100,25.7 c -19.3,0 -38.2,-3.9 -55.7,-11.3 z",
|
||||||
<defs>
|
baroque: "m 100,25 c 18,0 50,2 75,14 v 37 l -2.7,3.2 c -4.9,5.4 -6.6,9.6 -6.7,16.2 0,6.5 2,11.6 6.9,17.2 l 2.8,3.1 v 10.2 c 0,17.7 -2.2,27.7 -7.8,35.9 -5,7.3 -11.7,11.3 -32.3,19.4 -12.6,5 -20.2,8.8 -28.6,14.5 C 103.3,198 100,200 100,200 c 0,0 -2.8,-2.3 -6.4,-4.7 C 85.6,189.8 78,186 65,180.9 32.4,168.1 26.9,160.9 25.8,129.3 L 25,116 l 3.3,-3.3 c 4.8,-5.2 7,-10.7 7,-17.3 0,-6.8 -1.8,-11.1 -6.5,-16.1 L 25,76 V 39 C 50,27 82,25 100,25 Z",
|
||||||
${division ? `<clipPath id="divisionClip_${id}">${getTemplate(division.division, division.line)}</clipPath>` : ''}
|
targe: "m 20,35 c 15,0 115,-60 155,-10 -5,10 -15,15 -10,50 5,45 10,70 -10,90 C 125,195 75,195 50,175 25,150 30,130 35,85 50,95 65,85 65,70 65,50 50,45 40,50 30,55 27,65 30,70 23,73 20,70 14,70 11,60 20,45 20,35 Z",
|
||||||
</defs>
|
targe2: "m 84,32.2 c 6.2,-1 19.5,-31.4 94.1,-20.2 -30.57,33.64 -21.66,67.37 -11.2,95 20.2,69.5 -41.17549,84.7 -66.88,84.7 C 74.32,191.7071 8.38,168.95 32,105.9 36.88,92.88 31,89 31,82.6 35.15,82.262199 56.79,86.17 56.5,69.8 56.20,52.74 42.2,47.9 25.9,55.2 25.9,51.4 39.8,6.7 84,32.2 Z",
|
||||||
<g clip-path="url(#${coa.shield})">
|
pavise: "M95 7L39.9 37.3a10 10 0 00-5.1 9.5L46 180c.4 5.2 3.7 10 9 10h90c5.3 0 9.6-4.8 10-10l10.6-133.2a10 10 0 00-5-9.5L105 7c-4.2-2.3-6.2-2.3-10 0z",
|
||||||
<rect x=0 y=0 width=200 height=200 fill="${clr(coa.t1)}"/>
|
wedged: "m 51.2,19 h 96.4 c 3.1,12.7 10.7,20.9 26.5,20.8 C 175.7,94.5 165.3,144.3 100,200 43.5,154.2 22.8,102.8 25.1,39.7 37,38.9 47.1,34.7 51.2,19 Z",
|
||||||
${templateDivision()}
|
round: "m 185,100 a 85,85 0 0 1 -85,85 85,85 0 0 1 -85,-85 85,85 0 0 1 85,-85 85,85 0 0 1 85,85",
|
||||||
${templateAboveAll()}
|
oval: "m 32.3,99.5 a 67.7,93.7 0 1 1 0,1.3 z",
|
||||||
</g>
|
vesicaPiscis: "M 100,0 C 63.9,20.4 41,58.5 41,100 c 0,41.5 22.9,79.6 59,100 36.1,-20.4 59,-58.5 59,-100 C 159,58.5 136.1,20.4 100,0 Z",
|
||||||
<path d="${shieldPath}" fill="url(#backlight)" stroke="#333"/>
|
square: "M 25,25 H 175 V 175 H 25 Z",
|
||||||
</svg>
|
diamond: "M 25,100 100,200 175,100 100,0 Z",
|
||||||
`;
|
no: "m0,0 h200 v200 h-200 z",
|
||||||
|
flag: "M 10,40 h180 v120 h-180 Z",
|
||||||
// insert coa svg to coaDefs
|
pennon: "M 10,40 l190,60 -190,60 Z",
|
||||||
coaDefs.querySelector("#coas").insertAdjacentHTML("beforeend", svg);
|
guidon: "M 10,40 h190 l-65,60 65,60 h-190 Z",
|
||||||
|
banner: "m 25,25 v 170 l 25,-40 25,40 25,-40 25,40 25,-40 25,40 V 25 Z",
|
||||||
// fetch charges
|
dovetail: "m 25,25 v 175 l 75,-40 75,40 V 25 Z",
|
||||||
if (charges.length) {
|
gonfalon: "m 25,25 v 125 l 75,50 75,-50 V 25 Z",
|
||||||
const defs = document.getElementById(id).querySelector("defs");
|
pennant: "M 25,15 100,200 175,15 Z",
|
||||||
const uniqueCharges = [...new Set(charges.map(charge => charge.charge))];
|
fantasy1: "M 100,5 C 85,30 40,35 15,40 c 40,35 20,90 40,115 15,25 40,30 45,45 5,-15 30,-20 45,-45 20,-25 0,-80 40,-115 C 160,35 115,30 100,5 Z",
|
||||||
uniqueCharges.forEach(charge => fetchCharge(charge, defs));
|
fantasy2: "m 152,21 c 0,0 -27,14 -52,-4 C 75,35 48,21 48,21 50,45 30,55 30,75 60,75 60,115 32,120 c 3,40 53,50 68,80 15,-30 65,-40 68,-80 -28,-5 -28,-45 2,-45 C 170,55 150,45 152,21 Z",
|
||||||
|
fantasy3: "M 167,67 C 165,0 35,0 33,67 c 32,-7 27,53 -3,43 -5,45 60,65 70,90 10,-25 75,-47.51058 70,-90 -30,10 -35,-50 -3,-43 z",
|
||||||
|
fantasy4: "M100 9C55 48 27 27 13 39c23 50 3 119 49 150 14 9 28 11 38 11s27-4 38-11c55-39 24-108 49-150-14-12-45 7-87-30z",
|
||||||
|
fantasy5: "M 100,0 C 75,25 30,25 30,25 c 0,69 20,145 70,175 50,-30 71,-106 70,-175 0,0 -45,0 -70,-25 z",
|
||||||
|
noldor: "m 55,75 h 2 c 3,-25 38,-10 3,20 15,50 30,75 40,105 10,-30 25,-55 40,-105 -35,-30 0,-45 3,-20 h 2 C 150,30 110,20 100,0 90,20 50,30 55,75 Z",
|
||||||
|
gondor: "m 100,200 c 15,-15 38,-35 45,-60 h 5 V 30 h -5 C 133,10 67,10 55,30 h -5 v 110 h 5 c 7,25 30,45 45,60 z",
|
||||||
|
easterling: "M 160,185 C 120,170 80,170 40,185 V 15 c 40,15 80,15 120,0 z",
|
||||||
|
erebor: "M25 135 V60 l22-13 16-37 h75 l15 37 22 13 v75l-22 18-16 37 H63l-16-37z",
|
||||||
|
ironHills: "m 30,25 60,-10 10,10 10,-10 60,10 -5,125 -65,50 -65,-50 z",
|
||||||
|
urukHai: "M 30,60 C 40,60 60,50 60,20 l -5,-3 45,-17 75,40 -5,5 -35,155 -5,-35 H 70 v 35 z",
|
||||||
|
moriaOrc: "M45 35c5 3 7 10 13 9h19c4-2 7-4 9-9 6 1 9 9 16 11 7-2 14 0 21 0 6-3 6-10 10-15 2-5 1-10-2-15-2-4-5-14-4-16 3 6 7 11 12 14 7 3 3 12 7 16 3 6 4 12 9 18 2 4 6 8 5 14 0 6-1 12 3 18-3 6-2 13-1 20 1 6-2 12-1 18 0 6-3 13 0 18 8 4 0 8-5 7-4 3-9 3-13 9-5 5-5 13-8 19 0 6 0 15-7 16-1 6-7 6-10 12-1-6 0-6-2-9l2-19c2-4 5-12-3-12-4-5-11-5-15 1l-13-18c-3-4-2 9-3 12 2 2-4-6-7-5-8-2-8 7-11 11-2 4-5 10-8 9 3-10 3-16 1-23-1-4 2-9-4-11 0-6 1-13-2-19-4-2-9-6-13-7V91c4-7-5-13 0-19-3-7 2-11 2-18-1-6 1-12 3-17v-1z"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const lines = {
|
||||||
|
straight: "m 0,100 v15 h 200 v -15 z",
|
||||||
|
engrailed: "m 0,95 a 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 6.25,6.25 0 0 0 12.5,0 v 20 H 0 Z",
|
||||||
|
invecked: "M0,102.5 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 a6.25,6.25,0,0,1,12.5,0 v12.5 H0 z",
|
||||||
|
embattled: "M 0,105 H 2.5 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 15 V 95 h 15 v 10 h 2.5 v 10 H 0 Z",
|
||||||
|
wavy: "m 200,115 v -15 c -8.9,3.5 -16,3.1 -25,0 -8.9,-3.5 -16,-3.1 -25,0 -8.9,3.5 -16,3.2 -25,0 -8.9,-3.5 -16,-3.2 -25,0 -8.9,3.5 -16,3.1 -25,0 -8.9,-3.5 -16,-3.1 -25,0 -8.9,3.5 -16,3.2 -25,0 -8.9,-3.5 -16,-3.2 -25,0 v 15 z",
|
||||||
|
raguly: "m 200,95 h -3 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 h -10 l -5,10 h -10 l 5,-10 H 97 l -5,10 H 82 L 87,95 H 77 l -5,10 H 62 L 67,95 H 57 l -5,10 H 42 L 47,95 H 37 l -5,10 H 22 L 27,95 H 17 l -5,10 H 2 L 7,95 H 0 v 20 h 200 z",
|
||||||
|
dancetty: "m 0,105 10,-15 15,20 15,-20 15,20 15,-20 15,20 15,-20 15,20 15,-20 15,20 15,-20 15,20 15,-20 10,15 v 10 H 0 Z",
|
||||||
|
dentilly: "M 180,105 170,95 v 10 L 160,95 v 10 L 150,95 v 10 L 140,95 v 10 L 130,95 v 10 L 120,95 v 10 L 110,95 v 10 L 100,95 v 10 L 90,95 v 10 L 80,95 v 10 L 70,95 v 10 L 60,95 v 10 L 50,95 v 10 L 40,95 v 10 L 30,95 v 10 L 20,95 v 10 L 10,95 v 10 L 0,95 v 20 H 200 V 105 L 190,95 v 10 L 180,95 Z",
|
||||||
|
angled: "m 0,95 h 100 v 10 h 100 v 10 H 0 Z",
|
||||||
|
urdy: "m 200,90 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,6 -5,-6 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,6 -5,-6 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 l -5,-5 -5,5 v 10 l -5,5 -5,-5 V 95 L 0,90 v 25 h 200",
|
||||||
|
indented: "m 100,95 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 v 20 H 0 V 95 l 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 5,-10 5,10 z",
|
||||||
|
bevilled: "m 0,92.5 h 110 l -20,15 H 200 V 115 H 0 Z",
|
||||||
|
nowy: "m 0,95 h 80 c 0,0 0.1,20.1 20,20 19.9,-0.1 20,-20 20,-20 h 80 v 20 H 0 Z",
|
||||||
|
nowyReversed: "m 200,105 h -80 c 0,0 -0.1,-20.1 -20,-20 -19.9,0.1 -20,20 -20,20 H 0 v 10 h 200 z",
|
||||||
|
potenty: "m 3,95 v 5 h 5 v 5 H 0 v 10 h 200 l 0.5,-10 H 193 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 h -15 v -5 h 5 v -5 h -15 v 5 h 5 v 5 H 100.5 93 v -5 h 5 V 95 H 83 v 5 h 5 v 5 H 73 v -5 h 5 V 95 H 63 v 5 h 5 v 5 H 53 v -5 h 5 V 95 H 43 v 5 h 5 v 5 H 33 v -5 h 5 V 95 H 23 v 5 h 5 v 5 H 13 v -5 h 5 v -5 z",
|
||||||
|
potentyDexter: "m 200,105 h -2 v -10 0 0 h -10 v 5 h 5 v 5 H 183 V 95 h -10 v 5 h 5 v 5 H 168 V 95 h -10 v 5 h 5 v 5 H 153 V 95 h -10 v 5 h 5 v 5 H 138 V 95 h -10 v 5 h 5 v 5 H 123 V 95 h -10 v 5 h 5 v 5 h -10 v 0 0 -10 H 98 v 5 h 5 v 5 H 93 V 95 H 83 v 5 h 5 v 5 H 78 V 95 H 68 v 5 h 5 v 5 H 63 V 95 H 53 v 5 h 5 v 5 H 48 V 95 H 38 v 5 h 5 v 5 H 33 V 95 H 23 v 5 h 5 v 5 H 18 V 95 H 8 v 5 h 5 v 5 H 3 V 95 H 0 v 20 h 200 z",
|
||||||
|
potentySinister: "m 2.5,95 v 10 H 0 v 10 h 202.5 v -15 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 h -10 v 10 h -10 v -5 h 5 v -5 z",
|
||||||
|
embattledGhibellin: "M 200,200 V 100 l -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 -5,-5 v 10 l -5,-5 -5,5 V 95 l -5,5 v 15 h 200",
|
||||||
|
embattledNotched: "m 200,105 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 h -5 V 95 l -5,5 -5,-5 v 10 H 90 V 95 l -5,5 -5,-5 v 10 H 75 V 95 l -5,5 -5,-5 v 10 H 60 V 95 l -5,5 -5,-5 v 10 H 45 V 95 l -5,5 -5,-5 v 10 H 30 V 95 l -5,5 -5,-5 v 10 H 15 V 95 l -5,5 -5,-5 v 10 H 0 v 10 h 200",
|
||||||
|
embattledGrady: "m 0,95 v 20 H 200 V 95 h -2.5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 h -5 v 5 h -5 v 5 h -5 v -5 h -5 v -5 z",
|
||||||
|
dovetailed: "m 200,95 h -7 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 h -14 l 4,10 h -14 l 4,-10 H 93 l 4,10 H 83 L 87,95 H 73 l 4,10 H 63 L 67,95 H 53 l 4,10 H 43 L 47,95 H 33 l 4,10 H 23 L 27,95 H 13 l 4,10 H 3 L 7,95 H 0 v 20 h 200",
|
||||||
|
dovetailedIndented: "m 200,100 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 -7,-5 4,10 -7,-5 -7,5 4,-10 -7,5 v 15 h 200",
|
||||||
|
nebuly: "m 13.1,89.8 c -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.2,4.5 -7.3,4.5 -0.5,0 -2.2,-0.2 -2.2,-0.2 V 115 h 200 v -10.1 c -3.7,-0.2 -6.7,-2.2 -6.7,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.8,-1.9 1.8,-3.1 0,-2.5 -3.2,-4.5 -7.2,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.8,-1.9 1.8,-3.1 0,-2.5 -3.2,-4.5 -7.2,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 -1.5,4.1 -4.2,4.4 -8.8,4.5 -4.7,-0.1 -8.7,-1.5 -8.9,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 -4.1,0 -7.3,2 -7.3,4.5 0,1.2 0.7,2.3 1.8,3.1 1.2,0.7 1.9,1.8 1.9,3 0,2.5 -3.3,4.5 -7.3,4.5 -4,0 -7.3,-2 -7.3,-4.5 0,-1.2 0.7,-2.3 1.9,-3 1.2,-0.8 1.9,-1.9 1.9,-3.1 0,-2.5 -3.3,-4.5 -7.3,-4.5 z",
|
||||||
|
rayonne: "M0 115l-.1-6 .2.8c1.3-1 2.3-2.5 2.9-4.4.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4A9 9 0 015.5 90c-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 2.1 3.1 3.1 4.6 1 1.6 2.4 3.1 2.7 4.8.3 1.7.3 3.3 0 5.2 1.3-1 2.6-2.7 3.2-4.6.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.5 2 1.7 3.6 3.1 4.6a9 9 0 013.1 4.6c.5 2 .4 3.9-.3 5.4a9 9 0 003.1-4.6c.5-2 .4-3.9-.3-5.4-.7-1.5-.8-3.4-.3-5.4.5-2 1.7-3.6 3.1-4.6-.7 1.5-.8 3.4-.3 5.4.75 2.79 2.72 4.08 4.45 5.82L200 115z",
|
||||||
|
seaWaves: "m 28.83,94.9 c -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.44,-3.6 3.6,-3.6 0.7,0 1.36,0.17 1.93,0.48 -0.33,-2.03 -2.19,-3.56 -4.45,-3.56 -4.24,0 -6.91,3.13 -8.5,5.13 V 115 h 200 v -14.89 c -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.44,-3.6 3.6,-3.6 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -6.6,3.09 -8.19,5.09 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.2,-3.55 -4.46,-3.55 -4.25,0 -7.16,3.17 -8.75,5.18 -1.59,2.01 -4.5,5.18 -8.75,5.18 -2.16,0 -3.91,-1.63 -3.91,-3.64 0,-2.01 1.75,-3.64 3.91,-3.64 0.7,0 1.36,0.17 1.93,0.48 -0.34,-2.01 -2.21,-3.55 -4.46,-3.55 z",
|
||||||
|
dragonTeeth: "M 9.4,85 C 6.5,88.1 4.1,92.9 3,98.8 1.9,104.6 2.3,110.4 3.8,115 2.4,113.5 0,106.6 0,109.3 v 5.7 h 200 v -5.7 c -1.1,-2.4 -2,-5.1 -2.6,-8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.9 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.9 -0.7,11.6 0.8,16.2 -1.4,-1.5 -2.8,-3.9 -3.8,-6.1 -1.1,-2.4 -2.3,-6.1 -2.6,-7.7 -0.2,-5.9 0.2,-11.7 1.7,-16.3 -3,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1,-5.8 -0.7,-11.6 0.9,-16.2 -3,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.9,-16.2 -3,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -2.9,-3.1 -5.3,-7.9 -6.4,-13.8 C 63,95.4 63.4,89.6 64.9,85 c -2.9,3.1 -5.3,7.9 -6.3,13.8 -1.1,5.8 -0.7,11.6 0.8,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1,5.8 -0.6,11.6 0.9,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1,5.8 -0.7,11.6 0.9,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 -1.1,-5.8 -0.7,-11.6 0.8,-16.2 -2.9,3.1 -5.3,7.9 -6.4,13.8 -1.1,5.8 -0.7,11.6 0.9,16.2 -3,-3.1 -5.3,-7.9 -6.4,-13.8 C 18.6,95.4 19,89.6 20.5,85 17.6,88.1 15.2,92.9 14.1,98.8 13,104.6 13.4,110.4 14.9,115 12,111.9 9.6,107.1 8.6,101.2 7.5,95.4 7.9,89.6 9.4,85 Z",
|
||||||
|
firTrees: "m 3.9,90 -4,7 2,-0.5 L 0,100 v 15 h 200 v -15 l -1.9,-3.5 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4.1,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4.1,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 -4,-7 -4,7 2,-0.5 -4,7 2,-0.5 -4,7 -4,-7 2,0.5 -4,-7 2,0.5 z",
|
||||||
|
flechy: "m 0,100 h 85 l 15,-15 15,15 h 85 v 15 H 0 Z",
|
||||||
|
barby: "m 0,100 h 85 l 15,15 15,-15 h 85 v 15 H 0 Z",
|
||||||
|
enclavy: "M 0,100 H 85 V 85 h 30 v 15 h 85 v 15 H 0 Z",
|
||||||
|
escartely: "m 0,100 h 85 v 15 h 30 v -15 h 85 v 15 H 0 Z",
|
||||||
|
arched: "m 100,95 c 40,-0.2 100,20 100,20 H 0 c 0,0 60,-19.8 100,-20 z",
|
||||||
|
archedReversed: "m 0,85 c 0,0 60,20.2 100,20 40,-0.2 100,-20 100,-20 v 30 H 0 Z"
|
||||||
|
}
|
||||||
|
|
||||||
|
const templates = {
|
||||||
|
// divisions
|
||||||
|
perFess: line => `<path d="${line}"/><rect x="0" y="115" width="200" height="85"/>`,
|
||||||
|
perPale: line => `<path d="${line}" transform="rotate(-90)" transform-origin="center"/><rect x="115" y="0" width="85" height="200"/>`,
|
||||||
|
perBend: line => `<path d="${line}" transform="rotate(45) scale(1.1)" transform-origin="center"/><rect x="0" y="115" width="200" height="85" transform="rotate(45) scale(1.1)" transform-origin="center"/>`,
|
||||||
|
perBendSinister: line => `<path d="${line}" transform="rotate(-45) scale(1.1)" transform-origin="center"/><rect x="0" y="115" width="200" height="85" transform="rotate(-45) scale(1.1)" transform-origin="center"/>`,
|
||||||
|
perChevron: line => `<path d="${line}" transform="translate(-70.7,70.7) rotate(-45) scale(-1,1)" transform-origin="center"/><polygon points="20,200 100,120 180,200"/><path d="${line}" transform="translate(70.7,70.7) rotate(45)" transform-origin="center"/>`,
|
||||||
|
perChevronReversed: line => `<path d="${line}" transform="translate(-70.7,-70.7) rotate(225) scale(1,1)" transform-origin="center"/><polygon points="21,0 100,79 179,0"/><path d="${line}" transform="translate(70.7,-70.7) rotate(-225) scale(-1,1)" transform-origin="center"/>`,
|
||||||
|
perCross: line => `<rect x="100" y="0" width="100" height="92.5"/><rect x="0" y="107.5" width="100" height="92.5"/><path d="${line}" transform="translate(0,50) scale(.5001,.5001)"/><path d="${line}" transform="translate(50,0) scale(-.5001,-.5001)" transform-origin="center"/>`,
|
||||||
|
perPile: line => `<path d="${line}" transform="translate(-35,15) rotate(66.8) scale(-1,1)" transform-origin="center"/><path d="${line}" transform="translate(35,15) rotate(-66.8)" transform-origin="center"/><polygon points="0,0 86,200 114,200 200,0 200,200 0,200"/>`,
|
||||||
|
perSaltire: () => `<polygon points="0,0 0,200 200,0 200,200"/>`,
|
||||||
|
gyronny: () => `<polygon points="0,0 200,200 200,100 0,100"/><polygon points="200,0 0,200 100,200 100,0"/>`,
|
||||||
|
chevronny: () => `<path d="M0,80 100,-15 200,80 200,120 100,25 0,120z M0,160 100,65 200,160 200,200 100,105 0,200z M0,240 100,145 200,240 0,240z"/>`,
|
||||||
|
// oprinaries
|
||||||
|
fess: line => `<path d="${line}" transform="translate(0,-25)"/><path d="${line}" transform="translate(0,25) rotate(180.00001)" transform-origin="center"/><rect x="0" y="88" width="200" height="24" stroke="none"/>`,
|
||||||
|
pale: line => `<path d="${line}" transform="rotate(-90) translate(0,-25)" transform-origin="center"/><path d="${line}" transform="rotate(90) translate(0,-25)" transform-origin="center"/><rect x="88" y="0" width="24" height="200" stroke="none"/>`,
|
||||||
|
bend: line => `<path d="${line}" transform="rotate(45) translate(0,-25) scale(1.1,1)" transform-origin="center"/><path d="${line}" transform="rotate(225) translate(0,-25) scale(1.1,1)" transform-origin="center"/><rect x="0" y="88" width="200" height="24" transform="rotate(45) scale(1.1,1)" transform-origin="center" stroke="none"/>`,
|
||||||
|
bendSinister: line => `<path d="${line}" transform="rotate(-45) translate(0,-25) scale(1.1,1)" transform-origin="center"/><path d="${line}" transform="rotate(-225) translate(0,-25) scale(1.1,1)" transform-origin="center"/><rect x="0" y="88" width="200" height="24" transform="rotate(-45) scale(1.1,1)" transform-origin="center" stroke="none"/>`,
|
||||||
|
chief: line => `<path d="${line}" transform="translate(0,-25) rotate(180.00001)" transform-origin="center"/><rect x="0" y="0" width="200" height="62" stroke="none"/>`,
|
||||||
|
bar: line => `<path d="${line}" transform="translate(0,-12.5)" transform-origin="center"/><path d="${line}" transform="translate(0,12.5) rotate(180.00001)" transform-origin="center"/><rect x="0" y="94" width="200" height="12" stroke="none"/>`,
|
||||||
|
gemelle: line => `<path d="${line}" transform="translate(0,-22.5)"/><path d="${line}" transform="translate(0,22.5) rotate(180.00001)" transform-origin="center"/>`,
|
||||||
|
fessCotissed: line => `<path d="${line}" transform="translate(0,-35) scale(1,.5)" transform-origin="center"/><path d="${line}" transform="translate(0,35) rotate(180.0001) scale(1,.5)" transform-origin="center"/><rect x="0" y="80" width="200" height="40"/>`,
|
||||||
|
fessDoubleCotissed: line => `<rect x="0" y="85" width="200" height="30"/><rect x="0" y="72.5" width="200" height="7.5"/><rect x="0" y="120" width="200" height="7.5"/><path d="${line}" transform="translate(0,-40) scale(1,.5)" transform-origin="center"/><path d="${line}" transform="translate(0,40) rotate(180.0001) scale(1,.5)" transform-origin="center"/>`,
|
||||||
|
bendlet: line => `<path d="${line}" transform="rotate(45) translate(0,-16) scale(1.1,1)" transform-origin="center"/><path d="${line}" transform="rotate(225) translate(0,-16) scale(1.1,1)" transform-origin="center"/><rect x="0" y="94" width="200" height="12" transform="rotate(45) scale(1.1,1)" transform-origin="center" stroke="none"/>`,
|
||||||
|
bendletSinister: line => `<path d="${line}" transform="rotate(-45) translate(0,-16) scale(1.1,1)" transform-origin="center"/><path d="${line}" transform="rotate(-225) translate(0,-16) scale(1.1,1)" transform-origin="center"/><rect x="0" y="94" width="200" height="12" transform="rotate(-45) scale(1.1,1)" transform-origin="center" stroke="none"/>`,
|
||||||
|
terrace: line => `<path d="${line}" transform="translate(0,50)"/><rect x="0" y="164" width="200" height="36" stroke="none"/>`,
|
||||||
|
cross: line => `<path d="${line}" transform="translate(0,-14.5)" transform-origin="center"/><path d="${line}" transform="rotate(180) translate(0,-14.5)" transform-origin="center"/><path d="${line}" transform="rotate(-90) translate(0,-14.5)" transform-origin="center"/><path d="${line}" transform="rotate(-270) translate(0,-14.5)" transform-origin="center"/>`,
|
||||||
|
crossParted: line => `<path d="${line}" transform="translate(0,-20)" transform-origin="center"/><path d="${line}" transform="rotate(180) translate(0,-20)" transform-origin="center"/><path d="${line}" transform="rotate(-90) translate(0,-20)" transform-origin="center"/><path d="${line}" transform="rotate(-270) translate(0,-20)" transform-origin="center"/>`,
|
||||||
|
saltire: line => `<path d="${line}" transform="rotate(45) translate(0,-14.5) scale(1.1,1)" transform-origin="center"/><path d="${line}" transform="rotate(225) translate(0,-14.5) scale(1.1,1)" transform-origin="center"/><path d="${line}" transform="rotate(-45) translate(0,-14.5) scale(1.1,1)" transform-origin="center"/><path d="${line}" transform="rotate(-225) translate(0,-14.5) scale(1.1,1)" transform-origin="center"/>`,
|
||||||
|
saltireParted: line => `<path d="${line}" transform="rotate(45) translate(0,-20) scale(1.1,1)" transform-origin="center"/><path d="${line}" transform="rotate(225) translate(0,-20) scale(1.1,1)" transform-origin="center"/><path d="${line}" transform="rotate(-45) translate(0,-20) scale(1.1,1)" transform-origin="center"/><path d="${line}" transform="rotate(-225) translate(0,-20) scale(1.1,1)" transform-origin="center"/>`,
|
||||||
|
mount: () => `<path d="m0,250 a100,100,0,0,1,200,0"/>`,
|
||||||
|
point: () => `<path d="M0,200 Q80,180 100,135 Q120,180 200,200"/>`,
|
||||||
|
flaunches: () => `<path d="M0,0 q120,100 0,200 M200,0 q-120,100 0,200"/>`,
|
||||||
|
gore: () => `<path d="M20,0 Q30,75 100,100 Q80,150 100,200 L0,200 L0,0 Z"/>`,
|
||||||
|
pall: () => `<polygon points="0,0 30,0 100,70 170,0 200,0 200,30 122,109 122,200 78,200 78,109 0,30"/>`,
|
||||||
|
pallReversed: () => `<polygon points="0,200 0,170 78,91 78,0 122,0 122,91 200,170 200,200 170,200 100,130 30,200"/>`,
|
||||||
|
chevron: () => `<polygon points="0,125 100,60 200,125 200,165 100,100 0,165"/>`,
|
||||||
|
chevronReversed: () => `<polygon points="0,75 100,140 200,75 200,35 100,100 0,35"/>`,
|
||||||
|
gyron: () => `<polygon points="0,0 100,100 0,100"/>`,
|
||||||
|
quarter: () => `<rect x="0" y="0" width="50%" height="50%"/>`,
|
||||||
|
canton: () => `<rect x="0" y="0" width="37.5%" height="37.5%"/>`,
|
||||||
|
pile: () => `<polygon points="70,0 100,175 130,0"/>`,
|
||||||
|
pileInBend: () => `<polygon points="200,200 200,144 25,25 145,200"/>`,
|
||||||
|
pileInBendSinister: () => `<polygon points="0,200 0,144 175,25 55,200"/>`,
|
||||||
|
piles: () => `<polygon points="46,0 75,175 103,0"/><polygon points="95,0 125,175 154,0"/>`,
|
||||||
|
pilesInPoint: () => `<path d="M15,0 100,200 60,0Z M80,0 100,200 120,0Z M140,0 100,200 185,0Z"/>`,
|
||||||
|
label: () => `<path d="m 46,54.8 6.6,-15.6 95.1,0 5.9,15.5 -16.8,0.1 4.5,-11.8 L 104,43 l 4.3,11.9 -16.8,0 4.3,-11.8 -37.2,0 4.5,11.8 -16.9,0 z"/>`
|
||||||
|
}
|
||||||
|
|
||||||
|
const patterns = {
|
||||||
|
semy: (p, c1, c2, size, chargeId) => `<pattern id="${p}" width="${size * .134}" height="${size * .1787}" viewBox="0 0 150 200" stroke="#000"><rect x="0" y="0" width="150" height="200" fill="${c1}" stroke="none"/><g fill="${c2}"><g transform="translate(-60,-50)"><use href="#${chargeId}"/></g><g transform="translate(10,50)"><use href="#${chargeId}"/></g></g></pattern>`,
|
||||||
|
vair: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .125}" height="${size * .25}" viewBox="0 0 25 50" stroke="#000" stroke-width=".2"><rect x="0" y="0" width="25" height="25" fill="${c2}" stroke="none"/><path d="m12.5,0 l6.25,6.25 v12.5 l6.25,6.25 h-25 l6.25,-6.25 v-12.5 z" fill="${c1}"/><rect x="0" y="25" width="25" height="25" fill="${c1}" stroke-width="1" stroke="none"/><path d="m25,25 l-6.25,6.25 v12.5 l-6.25,6.25 l-6.25,-6.25 v-12.5 l-6.25,-6.25 z" fill="${c2}"/></pattern>`,
|
||||||
|
vairInPale: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .125}" height="${size * .125}" viewBox="0 0 25 25"><rect x="0" y="0" width="25" height="25" fill="${c2}"/><path d="m12.5,0 l6.25,6.25 v12.5 l6.25,6.25 h-25 l6.25,-6.25 v-12.5 z" fill="${c1}" stroke="#000" stroke-width=".2"/></pattern>`,
|
||||||
|
vairEnPointe: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .125}" height="${size * .25}" viewBox="0 0 25 50"><rect x="0" y="0" width="25" height="25" fill="${c2}"/><path d="m12.5,0 l6.25,6.25 v12.5 l6.25,6.25 h-25 l6.25,-6.25 v-12.5 z" fill="${c1}"/><rect x="0" y="25" width="25" height="25" fill="${c1}" stroke-width="1" stroke="${c1}"/><path d="m12.5,25 l6.25,6.25 v12.5 l6.25,6.25 h-25 l6.25,-6.25 v-12.5 z" fill="${c2}"/></pattern>`,
|
||||||
|
ermine: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .125}" height="${size * .125}" viewBox="0 0 25 25" fill="${c2}"><rect x="0" y="0" width="25" height="25" fill="${c1}"/><path d="m19.1,14.8 c-0.7,2.9 -2.1,5 -3.5,6.5 0.6,-0.1 1.3,-0.6 2,-0.9 -0.4,0.8 -0.8,1.4 -1.2,2.1 0.2,-0.1 1,-0.8 2,-1.8 0.2,1.4 0.4,2.9 0.7,3.9 0.3,-0.9 0.5,-2.5 0.7,-3.9 0.6,0.6 1.2,1.3 2.1,1.8 l -1.2,-2.2 c 0.6,0.3 1.3,0.8 1.9,1 -1.5,-1.6 -2.8,-3.6 -3.5,-6.5z"/><path d="m16.1,14.9 c-0.1,-0.2 -1,0.4 -1.5,-0.8 1.2,1.1 2.5,-1.2 3.5,0.4 0.3,0.7 -1.1,1.8 -2,0.4z"/><path d="m21.9,14.9 c.1,-.2 1,0.4 1.5,-0.8 -1.2,1.1 -2.5,-1.2 -3.5,0.4 -0.3,0.7 1.1,1.8 2,0.4z"/><path d="m19.4,12.4 c-0.2,-0.1 0.7,-0.7 -0.6,-1.4 1.1,1.2 -2,1.7 -0.3,2.9 0.7,0.4 2.4,-0.5 0.9,-1.5z"/><path d="M5.8,4.6 C5.1,7.5 3.7,9.5 2.3,11 2.9,10.9 3.6,10.5 4.2,10.1 3.8,10.9 3.4,11.5 3,12.2 3.3,12.1 4,11.4 5.1,10.4 c 0.2,1.4 0.4,2.9 0.7,3.9 0.3,-0.9 0.5,-2.5 0.7,-3.9 0.6,0.6 1.2,1.3 2.1,1.8 L 7.3,10 c 0.6,0.3 1.3,0.8 1.9,1 C7.7,9.5 6.4,7.5 5.8,4.6Z"/><path d="M2.9,4.7 C2.8,4.6 1.9,5.1 1.3,4 2.6,5.1 3.8,2.8 4.9,4.3 5.2,5 3.8,6.1 2.9,4.7Z"/><path d="M8.6,4.7 C8.7,4.5 9.6,5.1 10.1,3.9 8.9,5.1 7.6,2.7 6.6,4.3 6.3,5 7.7,6.1 8.6,4.7Z"/><path d="M6.1,2.2 C 5.9,2.1 6.8,1.5 5.5,0.8 6.6,2.1 3.5,2.6 5.2,3.7 5.9,4.1 7.6,3.3 6.1,2.2Z"/></pattern>`,
|
||||||
|
chequy: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .25}" height="${size * .25}" viewBox="0 0 50 50" fill="${c2}"><rect x="0" y="0" width="50" height="50"/><rect x="0" y="0" width="25" height="25" fill="${c1}"/><rect x="25" y="25" width="25" height="25" fill="${c1}"/></pattern>`,
|
||||||
|
lozengy: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .125}" height="${size * .125}" viewBox="0 0 50 50"><rect x="0" y="0" width="50" height="50" fill="${c1}"/><polygon points="25,0 50,25 25,50 0,25" fill="${c2}"/></pattern>`,
|
||||||
|
fusily: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .125}" height="${size * .25}" viewBox="0 0 50 100"><rect x="0" y="0" width="50" height="100" fill="${c1}"/><polygon points="25,0 50,50 25,100 0,50" fill="${c2}"/></pattern>`,
|
||||||
|
pally: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .5}" height="${size * .125}" viewBox="0 0 100 25"><rect x="0" y="0" width="100" height="25" fill="${c1}"/><rect x="25" y="0" width="25" height="25" fill="${c2}"/><rect x="75" y="0" width="25" height="25" fill="${c2}"/></pattern>`,
|
||||||
|
barry: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .125}" height="${size * .5}" viewBox="0 0 25 100"><rect x="0" y="0" width="25" height="100" fill="${c2}"/><rect x="0" y="25" width="25" height="25" fill="${c1}"/><rect x="0" y="75" width="25" height="25" fill="${c1}"/></pattern>`,
|
||||||
|
gemelles: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .125}" height="${size * .5}" viewBox="0 0 25 100"><rect x="0" y="0" width="25" height="100" fill="${c2}"/><rect x="0" y="35" width="25" height="10" fill="${c1}"/><rect x="0" y="55" width="25" height="10" fill="${c1}"/></pattern>`,
|
||||||
|
bendy: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .36}" height="${size * .36}" viewBox="0 0 50 50" patternTransform="rotate(45)"><rect x="0" y="0" width="50" height="50" fill="${c2}"/><line x1="0" y1="37.5" x2="50" y2="37.5" stroke="${c1}" stroke-width="25"/></pattern>`,
|
||||||
|
bendySinister: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .36}" height="${size * .36}" viewBox="0 0 50 50" patternTransform="rotate(-45)"><rect x="0" y="0" width="50" height="50" fill="${c2}"/><line x1="0" y1="37.5" x2="50" y2="37.5" stroke="${c1}" stroke-width="25"/></pattern>`,
|
||||||
|
palyBendy: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .125}" height="${size * .25}" viewBox="0 0 50 100" patternTransform="translate(22,44) rotate(-26.5)"><rect x="0" y="0" width="50" height="100" fill="${c1}"/><polygon points="25,0 50,50 25,100 0,50" fill="${c2}"/></pattern>`,
|
||||||
|
pappellony: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .125}" height="${size * .125}" viewBox="0 0 100 100"><rect x="0" y="0" width="100" height="100" fill="${c1}"/><circle cx="0" cy="51" r="45" stroke="${c2}" fill="${c1}" stroke-width="10"/><circle cx="100" cy="51" r="45" stroke="${c2}" fill="${c1}" stroke-width="10"/><circle cx="50" cy="1" r="45" stroke="${c2}" fill="${c1}" stroke-width="10"/></pattern>`,
|
||||||
|
masoned: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .125}" height="${size * .125}" viewBox="0 0 100 100" fill="none"><rect x="0" y="0" width="100" height="100" fill="${c1}"/><rect x="0" y="0" width="100" height="50" stroke="${c2}" stroke-width="4"/><line x1="50" y1="50" x2="50" y2="100" stroke="${c2}" stroke-width="5"/></pattern>`,
|
||||||
|
fretty: (p, c1, c2, size) => `<pattern id="${p}" width="${size * .28}" height="${size * .28}" viewBox="0 0 200 200" patternTransform="translate(-19,21) rotate(45)" stroke="#000" stroke-width="2"><rect x="0" y="0" width="200" height="200" stroke="none" fill="${c1}"/><rect x="0" y="35" width="200" height="30" stroke="none" fill="${c2}"/><rect x="0" y="135" width="200" height="30" stroke="none" fill="${c2}"/><rect x="35" y="0" width="30" height="200" stroke="none" fill="${c2}"/><rect x="135" y="0" width="30" height="200" stroke="none" fill="${c2}"/><line x1="0" y1="35" x2="35" y2="35"/><line x1="0" y1="65" x2="35" y2="65"/><line x1="35" y1="165" x2="35" y2="200"/><line x1="65" y1="165" x2="65" y2="200"/><line x1="135" y1="0" x2="135" y2="35"/><line x1="165" y1="0" x2="165" y2="35"/><line x1="135" y1="65" x2="135" y2="200"/><line x1="165" y1="65" x2="165" y2="200"/><line x1="35" y1="0" x2="35" y2="135"/><line x1="65" y1="0" x2="65" y2="135"/><line x1="65" y1="35" x2="200" y2="35"/><line x1="65" y1="65" x2="200" y2="65"/><line x1="0" y1="135" x2="135" y2="135"/><line x1="0" y1="165" x2="135" y2="165"/><line x1="165" y1="135" x2="200" y2="135"/><line x1="165" y1="165" x2="200" y2="165"/></pattern>`
|
||||||
|
}
|
||||||
|
|
||||||
|
const draw = async function(id, coa) {
|
||||||
|
const {shield, division, ordinaries = [], charges = []} = coa;
|
||||||
|
|
||||||
|
const ordinariesRegular = ordinaries.filter(o => !o.above);
|
||||||
|
const ordinariesAboveCharges = ordinaries.filter(o => o.above);
|
||||||
|
const shieldPath = shieldPaths[shield];
|
||||||
|
const tDiv = division ? (division.t.includes("-") ? division.t.split("-")[1] : division.t) : null;
|
||||||
|
const positions = shieldPositions[shield];
|
||||||
|
const sizeModifier = shieldSize[shield] || 1;
|
||||||
|
const viewBox = shieldBox[shield] || "0 0 200 200";
|
||||||
|
|
||||||
|
const shieldClip = `<clipPath id="${shield}_${id}"><path d="${shieldPath}"/></clipPath>`;
|
||||||
|
const divisionClip = division ? `<clipPath id="divisionClip_${id}">${getTemplate(division.division, division.line)}</clipPath>` : "";
|
||||||
|
const loadedCharges = await getCharges(coa, id, shieldPath);
|
||||||
|
const loadedPatterns = getPatterns(coa, id);
|
||||||
|
const blacklight = `<radialGradient id="backlight_${id}" cx="100%" cy="100%" r="150%">
|
||||||
|
<stop stop-color="#fff" stop-opacity=".3" offset="0"/>
|
||||||
|
<stop stop-color="#fff" stop-opacity=".15" offset=".25"/>
|
||||||
|
<stop stop-color="#000" stop-opacity="0" offset="1"/>
|
||||||
|
</radialGradient>`;
|
||||||
|
const field = `<rect x="0" y="0" width="200" height="200" fill="${clr(coa.t1)}"/>`;
|
||||||
|
const divisionGroup = division ? templateDivision() : "";
|
||||||
|
const overlay = `<path d="${shieldPath}" fill="url(#backlight_${id})" stroke="#333"/>`;
|
||||||
|
|
||||||
|
const svg= `<svg id="${id}" xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="${viewBox}">
|
||||||
|
<defs>${shieldClip}${divisionClip}${loadedCharges}${loadedPatterns}${blacklight}</defs>
|
||||||
|
<g clip-path="url(#${shield}_${id})">${field}${divisionGroup}${templateAboveAll()}</g>
|
||||||
|
${overlay}</svg>`;
|
||||||
|
|
||||||
|
// insert coa svg to defs
|
||||||
|
document.getElementById("coas").insertAdjacentHTML("beforeend", svg);
|
||||||
|
|
||||||
function templateDivision() {
|
function templateDivision() {
|
||||||
if (!division) return "";
|
|
||||||
let svg = "";
|
let svg = "";
|
||||||
|
|
||||||
// In field part
|
// In field part
|
||||||
for (const ordinary of ordinariesRegular) {
|
for (const ordinary of ordinariesRegular) {
|
||||||
if (ordinary.divided === "field") svg += templateOrdinary(ordinary, ordinary.t); else
|
if (ordinary.divided === "field") svg += templateOrdinary(ordinary, ordinary.t);
|
||||||
if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, tDiv);
|
else if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, tDiv);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const charge of charges) {
|
for (const charge of charges) {
|
||||||
if (charge.divided === "field") svg += templateCharge(charge, charge.t); else
|
if (charge.divided === "field") svg += templateCharge(charge, charge.t);
|
||||||
if (charge.divided === "counter") svg += templateCharge(charge, tDiv);
|
else if (charge.divided === "counter") svg += templateCharge(charge, tDiv);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const ordinary of ordinariesAboveCharges) {
|
for (const ordinary of ordinariesAboveCharges) {
|
||||||
if (ordinary.divided === "field") svg += templateOrdinary(ordinary, ordinary.t); else
|
if (ordinary.divided === "field") svg += templateOrdinary(ordinary, ordinary.t);
|
||||||
if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, tDiv);
|
else if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, tDiv);
|
||||||
}
|
}
|
||||||
|
|
||||||
// In division part
|
// In division part
|
||||||
svg += `
|
svg += `<g clip-path="url(#divisionClip_${id})"><rect x="0" y="0" width="200" height="200" fill="${clr(division.t)}"/>`;
|
||||||
<g clip-path="url(#divisionClip_${id})">
|
|
||||||
<rect x=0 y=0 width=200 height=200 fill="${clr(division.t)}"/>
|
|
||||||
`;
|
|
||||||
|
|
||||||
for (const ordinary of ordinariesRegular) {
|
for (const ordinary of ordinariesRegular) {
|
||||||
if (ordinary.divided === "division") svg += templateOrdinary(ordinary, ordinary.t); else
|
if (ordinary.divided === "division") svg += templateOrdinary(ordinary, ordinary.t);
|
||||||
if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, coa.t1);
|
else if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, coa.t1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const charge of charges) {
|
for (const charge of charges) {
|
||||||
if (charge.divided === "division") svg += templateCharge(charge, charge.t); else
|
if (charge.divided === "division") svg += templateCharge(charge, charge.t);
|
||||||
if (charge.divided === "counter") svg += templateCharge(charge, coa.t1);
|
else if (charge.divided === "counter") svg += templateCharge(charge, coa.t1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const ordinary of ordinariesAboveCharges) {
|
for (const ordinary of ordinariesAboveCharges) {
|
||||||
if (ordinary.divided === "division") svg += templateOrdinary(ordinary, ordinary.t); else
|
if (ordinary.divided === "division") svg += templateOrdinary(ordinary, ordinary.t);
|
||||||
if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, coa.t1);
|
else if (ordinary.divided === "counter") svg += templateOrdinary(ordinary, coa.t1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return svg += `</g>`
|
return (svg += `</g>`);
|
||||||
}
|
}
|
||||||
|
|
||||||
function templateAboveAll() {
|
function templateAboveAll() {
|
||||||
let svg = "";
|
let svg = "";
|
||||||
|
|
||||||
ordinariesRegular.filter(o => !o.divided).forEach(ordinary => {
|
ordinariesRegular.filter(o => !o.divided)
|
||||||
|
.forEach(ordinary => {
|
||||||
svg += templateOrdinary(ordinary, ordinary.t);
|
svg += templateOrdinary(ordinary, ordinary.t);
|
||||||
});
|
});
|
||||||
|
|
||||||
charges.filter(o => !o.divided || !division).forEach(charge => {
|
charges.filter(o => !o.divided || !division)
|
||||||
|
.forEach(charge => {
|
||||||
svg += templateCharge(charge, charge.t);
|
svg += templateCharge(charge, charge.t);
|
||||||
});
|
});
|
||||||
|
|
||||||
ordinariesAboveCharges.filter(o => !o.divided).forEach(ordinary => {
|
ordinariesAboveCharges.filter(o => !o.divided)
|
||||||
|
.forEach(ordinary => {
|
||||||
svg += templateOrdinary(ordinary, ordinary.t);
|
svg += templateOrdinary(ordinary, ordinary.t);
|
||||||
})
|
});
|
||||||
|
|
||||||
return svg;
|
return svg;
|
||||||
}
|
}
|
||||||
|
|
@ -787,97 +934,105 @@
|
||||||
svg += `<g fill="${fill}" stroke="#000">`;
|
svg += `<g fill="${fill}" stroke="#000">`;
|
||||||
for (const p of chargePositions) {
|
for (const p of chargePositions) {
|
||||||
const transform = getElTransform(charge, p);
|
const transform = getElTransform(charge, p);
|
||||||
svg += `<use href="#${charge.charge}_${id}" transform="${transform}" transform-origin="center"></use>`;
|
svg += `<use href="#${charge.charge}_${id}" transform="${transform}"></use>`;
|
||||||
}
|
}
|
||||||
return svg + `</g>`;
|
return svg + `</g>`;
|
||||||
|
|
||||||
function getElTransform(c, p) {
|
function getElTransform(c, p) {
|
||||||
const [x, y] = positions[p];
|
|
||||||
const s = (c.size || 1) * sizeModifier;
|
const s = (c.size || 1) * sizeModifier;
|
||||||
const scale = c.sinister || c.reversed ? `${c.sinister ? "-" : ""}${s}, ${c.reversed ? "-" : ""}${s}` : s;
|
const sx = c.sinister ? -s : s;
|
||||||
|
const sy = c.reversed ? -s : s;
|
||||||
|
let [x, y] = positions[p];
|
||||||
|
x = x - 100 * (sx - 1);
|
||||||
|
y = y - 100 * (sy - 1);
|
||||||
|
const scale = c.sinister || c.reversed ? `${sx} ${sy}` : s;
|
||||||
return `translate(${x} ${y}) scale(${scale})`;
|
return `translate(${x} ${y}) scale(${scale})`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getCharges(coa, id, shieldPath) {
|
||||||
|
let charges = coa.charges ? coa.charges.map(charge => charge.charge) : []; // add charges
|
||||||
|
if (semy(coa.t1)) charges.push(semy(coa.t1)); // add field semy charge
|
||||||
|
if (semy(coa.division?.t)) charges.push(semy(coa.division.t)); // add division semy charge
|
||||||
|
|
||||||
|
const uniqueCharges = [...new Set(charges)];
|
||||||
|
const fetchedCharges = await Promise.all(
|
||||||
|
uniqueCharges.map(async charge => {
|
||||||
|
if (charge === "inescutcheon") return `<g id="inescutcheon_${id}"><path transform="translate(66 66) scale(.34)" d="${shieldPath}"/></g>`;
|
||||||
|
const fetched = await fetchCharge(charge, id);
|
||||||
|
return fetched;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
return fetchedCharges.join("");
|
||||||
|
}
|
||||||
|
|
||||||
|
async function fetchCharge(charge, id) {
|
||||||
|
const fetched = fetch("https://azgaar.github.io/Armoria/charges/" + charge + ".svg")
|
||||||
|
.then(res => {
|
||||||
|
if (res.ok) return res.text();
|
||||||
|
else throw new Error("Cannot fetch charge");
|
||||||
|
})
|
||||||
|
.then(text => {
|
||||||
|
const html = document.createElement("html");
|
||||||
|
html.innerHTML = text;
|
||||||
|
const g = html.querySelector("g");
|
||||||
|
g.setAttribute("id", charge + "_" + id);
|
||||||
|
return g.outerHTML;
|
||||||
|
});
|
||||||
|
return fetched;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPatterns(coa, id) {
|
||||||
|
const isPattern = string => string.includes("-");
|
||||||
|
let patternsToAdd = [];
|
||||||
|
if (coa.t1.includes("-")) patternsToAdd.push(coa.t1); // add field pattern
|
||||||
|
if (coa.division && isPattern(coa.division.t)) patternsToAdd.push(coa.division.t); // add division pattern
|
||||||
|
if (coa.ordinaries) coa.ordinaries.filter(ordinary => isPattern(ordinary.t)).forEach(ordinary => patternsToAdd.push(ordinary.t)); // add ordinaries pattern
|
||||||
|
if (coa.charges) coa.charges.filter(charge => isPattern(charge.t)).forEach(charge => patternsToAdd.push(charge.t)); // add charges pattern
|
||||||
|
if (!patternsToAdd.length) return "";
|
||||||
|
|
||||||
|
return [...new Set(patternsToAdd)].map(patternString => {
|
||||||
|
const [pattern, t1, t2, size] = patternString.split("-");
|
||||||
|
const charge = semy(patternString);
|
||||||
|
if (charge) return patterns.semy(patternString, clr(t1), clr(t2), getSizeMod(size), charge + "_" + id);
|
||||||
|
return patterns[pattern](patternString, clr(t1), clr(t2), getSizeMod(size), charge);
|
||||||
|
}).join("");
|
||||||
|
}
|
||||||
|
|
||||||
|
function getSizeMod(size) {
|
||||||
|
if (size === "small") return .5;
|
||||||
|
if (size === "smaller") return .25;
|
||||||
|
if (size === "smallest") return .125;
|
||||||
|
if (size === "big") return 2;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTemplate(templateId, lineId) {
|
||||||
|
if (!lineId) return templates[templateId]();
|
||||||
|
const line = lines[lineId] || lines.straight;
|
||||||
|
return templates[templateId](line);
|
||||||
|
}
|
||||||
|
|
||||||
// get color or link to pattern
|
// get color or link to pattern
|
||||||
function clr(tincture) {
|
function clr(tincture) {
|
||||||
if (colors[tincture]) return colors[tincture];
|
if (colors[tincture]) return colors[tincture];
|
||||||
const pattern = document.getElementById(tincture);
|
return `url(#${tincture})`;
|
||||||
if (!pattern) renderPattern(tincture);
|
|
||||||
return "url(#"+tincture+")";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderPattern(tincture) {
|
// get charge is string starts with "semy"
|
||||||
const [pattern, t1, t2, size] = tincture.split("-");
|
function semy(string) {
|
||||||
const semy = pattern.slice(0, 4) === "semy";
|
const isSemy = /^semy/.test(string);
|
||||||
|
if (!isSemy) return false;
|
||||||
const template = document.getElementById(semy ? "semy" : pattern);
|
return string.match(/semy_of_(.*?)-/)[1];
|
||||||
let html = template.innerHTML.replace(/{id}/, tincture);
|
|
||||||
|
|
||||||
const width = template.querySelector("pattern").getAttribute("width");
|
|
||||||
const height = template.querySelector("pattern").getAttribute("height");
|
|
||||||
|
|
||||||
if (t1) html = html.replace(/{c1}/g, clr(t1));
|
|
||||||
if (t2) html = html.replace(/{c2}/g, clr(t2));
|
|
||||||
|
|
||||||
document.getElementById("patterns").insertAdjacentHTML("beforeend", html);
|
|
||||||
|
|
||||||
if (semy) {
|
|
||||||
const charge = pattern.split("_of_")[1];
|
|
||||||
const el = document.getElementById(tincture);
|
|
||||||
|
|
||||||
fetch("https://azgaar.github.io/Armoria/charges/"+charge+".svg").then(res => {
|
|
||||||
if (res.ok) return res.text();
|
|
||||||
else throw new Error('Cannot fetch charge');
|
|
||||||
}).then(text => {
|
|
||||||
const html = document.createElement("html");
|
|
||||||
html.innerHTML = text;
|
|
||||||
el.innerHTML = el.innerHTML.replace(/<charge>/g, html.querySelector("g").outerHTML);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (size) {
|
// render coa if does not exist
|
||||||
let mod = 1;
|
const trigger = function(id, coa) {
|
||||||
if (size === "small") mod = .5;
|
if (coa === "custom") {
|
||||||
if (size === "smaller") mod = .25;
|
console.warn("Cannot render custom emblem", coa);
|
||||||
if (size === "smallest") mod = .125;
|
|
||||||
if (size === "big") mod = 2;
|
|
||||||
|
|
||||||
const el = document.getElementById(tincture);
|
|
||||||
el.setAttribute("width", width * mod);
|
|
||||||
el.setAttribute("height", height * mod);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getTemplate(templateId, lineId) {
|
|
||||||
if (!lineId) return document.getElementById(templateId)?.innerHTML;
|
|
||||||
const template = document.getElementById(templateId);
|
|
||||||
const line = document.getElementById(lineId) ? document.getElementById(lineId) : document.getElementById("straight");
|
|
||||||
return template.innerHTML.replace(/{line}/g, line.getAttribute("d")).replace(/dpath/g, "d");
|
|
||||||
}
|
|
||||||
|
|
||||||
function fetchCharge(charge, defs) {
|
|
||||||
if (charge === "inescutcheon") {
|
|
||||||
const g = `<g id="inescutcheon_${id}"><path transform="scale(.33)" transform-origin="center" d="${shieldPath}"/></g>`;
|
|
||||||
defs.insertAdjacentHTML("beforeend", g);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fetch("https://azgaar.github.io/Armoria/charges/"+charge+".svg").then(res => {
|
|
||||||
if (res.ok) return res.text();
|
|
||||||
else throw new Error('Cannot fetch charge');
|
|
||||||
}).then(text => {
|
|
||||||
const el = document.createElement("html");
|
|
||||||
el.innerHTML = text;
|
|
||||||
const g = el.querySelector("g");
|
|
||||||
g.id = charge + "_" + id;
|
|
||||||
defs.insertAdjacentHTML("beforeend", g.outerHTML);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// async render coa if it does not exist
|
|
||||||
const trigger = function(id, coa) {
|
|
||||||
if (!coa) {
|
if (!coa) {
|
||||||
console.warn(`Emblem ${id} is undefined`);
|
console.warn(`Emblem ${id} is undefined`);
|
||||||
return;
|
return;
|
||||||
|
|
@ -885,6 +1040,18 @@
|
||||||
if (!document.getElementById(id)) draw(id, coa);
|
if (!document.getElementById(id)) draw(id, coa);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {trigger};
|
const add = function(type, i, coa, x, y) {
|
||||||
|
const id = type + "COA" + i;
|
||||||
|
const g = document.getElementById(type+"Emblems");
|
||||||
|
|
||||||
|
if (emblems.selectAll("use").size()) {
|
||||||
|
const size = +g.getAttribute("font-size") || 50;
|
||||||
|
const use = `<use data-i="${i}" x="${x - size/2}" y="${y - size/2}" width="1em" height="1em" href="#${id}"/>`;
|
||||||
|
g.insertAdjacentHTML("beforeend", use);
|
||||||
|
}
|
||||||
|
if (layerIsOn("toggleEmblems")) trigger(id, coa);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {trigger, add};
|
||||||
|
|
||||||
})));
|
})));
|
||||||
|
|
@ -171,7 +171,6 @@
|
||||||
const td = (cell, goal) => {const d = Math.abs(temp[cells.g[cell]] - goal); return d ? d+1 : 1;} // temperature difference fee
|
const td = (cell, goal) => {const d = Math.abs(temp[cells.g[cell]] - goal); return d ? d+1 : 1;} // temperature difference fee
|
||||||
const bd = (cell, biomes, fee = 4) => biomes.includes(cells.biome[cell]) ? 1 : fee; // biome difference fee
|
const bd = (cell, biomes, fee = 4) => biomes.includes(cells.biome[cell]) ? 1 : fee; // biome difference fee
|
||||||
const sf = (cell, fee = 4) => cells.haven[cell] && pack.features[cells.f[cells.haven[cell]]].type !== "lake" ? 1 : fee; // not on sea coast fee
|
const sf = (cell, fee = 4) => cells.haven[cell] && pack.features[cells.f[cells.haven[cell]]].type !== "lake" ? 1 : fee; // not on sea coast fee
|
||||||
// https://en.wikipedia.org/wiki/List_of_cities_by_average_temperature
|
|
||||||
|
|
||||||
if (culturesSet.value === "european") {
|
if (culturesSet.value === "european") {
|
||||||
return [
|
return [
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,17 @@ async function getMapURL(type, subtype) {
|
||||||
if (customization && type === "mesh") updateMeshCells(clone);
|
if (customization && type === "mesh") updateMeshCells(clone);
|
||||||
inlineStyle(clone);
|
inlineStyle(clone);
|
||||||
|
|
||||||
|
// add displayed emblems
|
||||||
|
if (layerIsOn("toggleEmblems")) {
|
||||||
|
const defsEmblems = cloneEl.getElementById("defs-emblems");
|
||||||
|
clone.selectAll("#emblems use").each(function() {
|
||||||
|
const href = this.getAttribute("href");
|
||||||
|
if (!href) return;
|
||||||
|
const emblem = document.getElementById(href.slice(1)).cloneNode(true); // clone emblem
|
||||||
|
defsEmblems.append(emblem);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const fontStyle = await GFontToDataURI(getFontsToLoad()); // load non-standard fonts
|
const fontStyle = await GFontToDataURI(getFontsToLoad()); // load non-standard fonts
|
||||||
if (fontStyle) clone.select("defs").append("style").text(fontStyle.join('\n')); // add font to style
|
if (fontStyle) clone.select("defs").append("style").text(fontStyle.join('\n')); // add font to style
|
||||||
|
|
||||||
|
|
@ -115,7 +126,7 @@ function removeUnusedElements(clone) {
|
||||||
for (let empty = 1; empty;) {
|
for (let empty = 1; empty;) {
|
||||||
empty = 0;
|
empty = 0;
|
||||||
clone.selectAll("g").each(function() {
|
clone.selectAll("g").each(function() {
|
||||||
if (!this.hasChildNodes() || this.style.display === "none") {empty++; this.remove();}
|
if (!this.hasChildNodes() || this.style.display === "none" || this.classList.contains("hidden")) {empty++; this.remove();}
|
||||||
if (this.hasAttribute("display") && this.style.display === "inline") this.removeAttribute("display");
|
if (this.hasAttribute("display") && this.style.display === "inline") this.removeAttribute("display");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -246,7 +257,8 @@ function getMapData() {
|
||||||
const biomes = [biomesData.color, biomesData.habitability, biomesData.name].join("|");
|
const biomes = [biomesData.color, biomesData.habitability, biomesData.name].join("|");
|
||||||
const notesData = JSON.stringify(notes);
|
const notesData = JSON.stringify(notes);
|
||||||
|
|
||||||
const cloneEl = document.getElementById("map").cloneNode(true); // clone svg
|
// clone svg
|
||||||
|
const cloneEl = document.getElementById("map").cloneNode(true);
|
||||||
|
|
||||||
// set transform values to default
|
// set transform values to default
|
||||||
cloneEl.setAttribute("width", graphWidth);
|
cloneEl.setAttribute("width", graphWidth);
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,11 @@ function editBurg(id) {
|
||||||
function updateBurgValues() {
|
function updateBurgValues() {
|
||||||
const id = +elSelected.attr("data-id");
|
const id = +elSelected.attr("data-id");
|
||||||
const b = pack.burgs[id];
|
const b = pack.burgs[id];
|
||||||
|
const province = pack.cells.province[b.cell];
|
||||||
|
const provinceName = province ? pack.provinces[province].fullName + ", " : "";
|
||||||
|
const stateName = pack.states[b.state].fullName || pack.states[b.state].name;
|
||||||
|
document.getElementById("burgProvinceAndState").innerHTML = provinceName + stateName;
|
||||||
|
|
||||||
document.getElementById("burgName").value = b.name;
|
document.getElementById("burgName").value = b.name;
|
||||||
document.getElementById("burgPopulation").value = rn(b.population * populationRate.value * urbanization.value);
|
document.getElementById("burgPopulation").value = rn(b.population * populationRate.value * urbanization.value);
|
||||||
document.getElementById("burgEditAnchorStyle").style.display = +b.port ? "inline-block" : "none";
|
document.getElementById("burgEditAnchorStyle").style.display = +b.port ? "inline-block" : "none";
|
||||||
|
|
@ -62,6 +67,11 @@ function editBurg(id) {
|
||||||
const cultures = pack.cultures.filter(c => !c.removed);
|
const cultures = pack.cultures.filter(c => !c.removed);
|
||||||
cultures.forEach(c => cultureSelect.options.add(new Option(c.name, c.i, false, c.i === b.culture)));
|
cultures.forEach(c => cultureSelect.options.add(new Option(c.name, c.i, false, c.i === b.culture)));
|
||||||
|
|
||||||
|
const temperature = grid.cells.temp[pack.cells.g[b.cell]];
|
||||||
|
document.getElementById("burgTemperature").innerHTML = convertTemperature(temperature);
|
||||||
|
document.getElementById("burgTemperatureLikeIn").innerHTML = getTemperatureLikeness(temperature);
|
||||||
|
document.getElementById("burgElevation").innerHTML = getHeight(pack.cells.h[b.cell]);
|
||||||
|
|
||||||
// toggle features
|
// toggle features
|
||||||
if (b.capital) document.getElementById("burgCapital").classList.remove("inactive");
|
if (b.capital) document.getElementById("burgCapital").classList.remove("inactive");
|
||||||
else document.getElementById("burgCapital").classList.add("inactive");
|
else document.getElementById("burgCapital").classList.add("inactive");
|
||||||
|
|
@ -93,6 +103,18 @@ function editBurg(id) {
|
||||||
document.getElementById("burgEmblem").setAttribute("href", "#" + coaID);
|
document.getElementById("burgEmblem").setAttribute("href", "#" + coaID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// in °C, array from -1 °C; source: https://en.wikipedia.org/wiki/List_of_cities_by_average_temperature
|
||||||
|
function getTemperatureLikeness(temperature) {
|
||||||
|
if (temperature < -5) return "Yakutsk";
|
||||||
|
const cities = [
|
||||||
|
"Snag (Yukon)", "Yellowknife (Canada)", "Okhotsk (Russia)", "Fairbanks (Alaska)", "Nuuk (Greenland)", "Murmansk", // -5 - 0
|
||||||
|
"Arkhangelsk", "Anchorage", "Tromsø", "Reykjavik", "Riga", "Stockholm", "Halifax", "Prague", "Copenhagen9", "London", // 1 - 10
|
||||||
|
"Antwerp", "Paris", "Milan", "Batumi", "Rome", "Dubrovnik", "Lisbon", "Barcelona", "Marrakesh", "Alexandria", // 11 - 20
|
||||||
|
"Tegucigalpa", "Guangzhou", "Rio de Janeiro", "Dakar", "Miami", "Jakarta", "Mogadishu", "Bangkok", "Aden", "Khartoum"]; // 21 - 30
|
||||||
|
if (temperature > 30) return "Mecca";
|
||||||
|
return cities[temperature+5] || null;
|
||||||
|
}
|
||||||
|
|
||||||
function dragBurgLabel() {
|
function dragBurgLabel() {
|
||||||
const tr = parseTransform(this.getAttribute("transform"));
|
const tr = parseTransform(this.getAttribute("transform"));
|
||||||
const dx = +tr[0] - d3.event.x, dy = +tr[1] - d3.event.y;
|
const dx = +tr[0] - d3.event.x, dy = +tr[1] - d3.event.y;
|
||||||
|
|
@ -313,7 +335,8 @@ function editBurg(id) {
|
||||||
if (!seed && burg.MFCGlink) {openURL(burg.MFCGlink); return;}
|
if (!seed && burg.MFCGlink) {openURL(burg.MFCGlink); return;}
|
||||||
const cells = pack.cells;
|
const cells = pack.cells;
|
||||||
const name = elSelected.text();
|
const name = elSelected.text();
|
||||||
const size = Math.max(Math.min(rn(burg.population), 65), 6);
|
const size = Math.max(Math.min(rn(burg.population), 100), 6); // to be removed once change on MFDC is done
|
||||||
|
const population = rn(burg.population * populationRate.value * urbanization.value);
|
||||||
|
|
||||||
const s = burg.MFCG || defSeed;
|
const s = burg.MFCG || defSeed;
|
||||||
const cell = burg.cell;
|
const cell = burg.cell;
|
||||||
|
|
@ -338,7 +361,7 @@ function editBurg(id) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const site = "http://fantasycities.watabou.ru/?random=0&continuous=0";
|
const site = "http://fantasycities.watabou.ru/?random=0&continuous=0";
|
||||||
const url = `${site}&name=${name}&size=${size}&seed=${s}&hub=${hub}&river=${river}&coast=${coast}&citadel=${citadel}&plaza=${plaza}&temple=${temple}&walls=${walls}&shantytown=${shanty}${sea}`;
|
const url = `${site}&name=${name}&population=${population}&size=${size}&seed=${s}&hub=${hub}&river=${river}&coast=${coast}&citadel=${citadel}&plaza=${plaza}&temple=${temple}&walls=${walls}&shantytown=${shanty}${sea}`;
|
||||||
openURL(url);
|
openURL(url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -125,7 +125,12 @@ function addBurg(point) {
|
||||||
const temple = pack.states[state].form === "Theocracy";
|
const temple = pack.states[state].form === "Theocracy";
|
||||||
const population = Math.max((cells.s[cell] + cells.road[cell]) / 3 + i / 1000 + cell % 100 / 1000, .1);
|
const population = Math.max((cells.s[cell] + cells.road[cell]) / 3 + i / 1000 + cell % 100 / 1000, .1);
|
||||||
|
|
||||||
pack.burgs.push({name, cell, x, y, state, i, culture, feature, capital: 0, port: 0, temple, population});
|
// generate emblem
|
||||||
|
const coa = COA.generate(pack.states[state].coa, .25);
|
||||||
|
coa.shield = COA.getShield(culture, state);
|
||||||
|
COArenderer.add("burg", i, coa, x, y);
|
||||||
|
|
||||||
|
pack.burgs.push({name, cell, x, y, state, i, culture, feature, capital: 0, port: 0, temple, population, coa});
|
||||||
cells.burg[cell] = i;
|
cells.burg[cell] = i;
|
||||||
|
|
||||||
const townSize = burgIcons.select("#towns").attr("size") || 0.5;
|
const townSize = burgIcons.select("#towns").attr("size") || 0.5;
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ function editEmblem(type, id, el) {
|
||||||
const emblemStates = document.getElementById("emblemStates");
|
const emblemStates = document.getElementById("emblemStates");
|
||||||
const emblemProvinces = document.getElementById("emblemProvinces");
|
const emblemProvinces = document.getElementById("emblemProvinces");
|
||||||
const emblemBurgs = document.getElementById("emblemBurgs");
|
const emblemBurgs = document.getElementById("emblemBurgs");
|
||||||
|
const emblemShapeSelector = document.getElementById("emblemShapeSelector");
|
||||||
|
|
||||||
updateElementSelectors(type, id, el);
|
updateElementSelectors(type, id, el);
|
||||||
|
|
||||||
|
|
@ -21,9 +22,14 @@ function editEmblem(type, id, el) {
|
||||||
emblemStates.oninput = selectState;
|
emblemStates.oninput = selectState;
|
||||||
emblemProvinces.oninput = selectProvince;
|
emblemProvinces.oninput = selectProvince;
|
||||||
emblemBurgs.oninput = selectBurg;
|
emblemBurgs.oninput = selectBurg;
|
||||||
document.getElementById("emblemShapeSelector").oninput = changeShape;
|
emblemShapeSelector.oninput = changeShape;
|
||||||
document.getElementById("emblemsRegenerate").onclick = regenerate;
|
document.getElementById("emblemsRegenerate").onclick = regenerate;
|
||||||
document.getElementById("emblemsArmoria").onclick = openInArmoria;
|
document.getElementById("emblemsArmoria").onclick = openInArmoria;
|
||||||
|
document.getElementById("emblemsUpload").onclick = toggleUpload;
|
||||||
|
document.getElementById("emblemsUploadImage").onclick = () => emblemImageToLoad.click();
|
||||||
|
document.getElementById("emblemsUploadSVG").onclick = () => emblemSVGToLoad.click();
|
||||||
|
document.getElementById("emblemImageToLoad").onchange = () => upload("image");
|
||||||
|
document.getElementById("emblemSVGToLoad").onchange = () => upload("svg");
|
||||||
document.getElementById("emblemsDownload").onclick = toggleDownload;
|
document.getElementById("emblemsDownload").onclick = toggleDownload;
|
||||||
document.getElementById("emblemsDownloadSVG").onclick = () => download("svg");
|
document.getElementById("emblemsDownloadSVG").onclick = () => download("svg");
|
||||||
document.getElementById("emblemsDownloadPNG").onclick = () => download("png");
|
document.getElementById("emblemsDownloadPNG").onclick = () => download("png");
|
||||||
|
|
@ -88,10 +94,15 @@ function editEmblem(type, id, el) {
|
||||||
function updateEmblemData(type, id, el) {
|
function updateEmblemData(type, id, el) {
|
||||||
if (!el.coa) return;
|
if (!el.coa) return;
|
||||||
document.getElementById("emblemImage").setAttribute("href", "#" + id);
|
document.getElementById("emblemImage").setAttribute("href", "#" + id);
|
||||||
document.getElementById("emblemShapeSelector").value = el.coa.shield;
|
|
||||||
let name = el.fullName || el.name;
|
let name = el.fullName || el.name;
|
||||||
if (type === "burg") name = "Burg of " + name;
|
if (type === "burg") name = "Burg of " + name;
|
||||||
document.getElementById("emblemArmiger").innerText = name;
|
document.getElementById("emblemArmiger").innerText = name;
|
||||||
|
|
||||||
|
if (el.coa === "custom") emblemShapeSelector.disabled = true;
|
||||||
|
else {
|
||||||
|
emblemShapeSelector.disabled = false;
|
||||||
|
emblemShapeSelector.value = el.coa.shield;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function selectState() {
|
function selectState() {
|
||||||
|
|
@ -149,27 +160,75 @@ function editEmblem(type, id, el) {
|
||||||
|
|
||||||
function regenerate() {
|
function regenerate() {
|
||||||
let parent = null;
|
let parent = null;
|
||||||
if (type === "province") parent = pack.states[el.state].coa;
|
if (type === "province") parent = pack.states[el.state];
|
||||||
else if (type === "burg") {
|
else if (type === "burg") {
|
||||||
const province = pack.cells.province[el.cell];
|
const province = pack.cells.province[el.cell];
|
||||||
parent = province ? pack.provinces[province].coa : pack.states[el.state].coa;
|
parent = province ? pack.provinces[province] : pack.states[el.state];
|
||||||
}
|
}
|
||||||
|
|
||||||
const shield = el.coa.shield;
|
const shield = el.coa.shield || COA.getShield(el.culture || parent?.culture || 0, el.state);
|
||||||
el.coa = COA.generate(parent);
|
el.coa = COA.generate(parent ? parent.coa : null);
|
||||||
el.coa.shield = shield;
|
el.coa.shield = shield;
|
||||||
|
emblemShapeSelector.disabled = false;
|
||||||
|
emblemShapeSelector.value = el.coa.shield;
|
||||||
|
|
||||||
document.getElementById(id).remove();
|
const coaEl = document.getElementById(id);
|
||||||
|
if (coaEl) coaEl.remove();
|
||||||
COArenderer.trigger(id, el.coa);
|
COArenderer.trigger(id, el.coa);
|
||||||
}
|
}
|
||||||
|
|
||||||
function openInArmoria() {
|
function openInArmoria() {
|
||||||
const json = JSON.stringify(el.coa).replaceAll("#", "%23");
|
const coa = el.coa && el.coa !== "custom" ? el.coa : {t1: "sable"};
|
||||||
|
const json = JSON.stringify(coa).replaceAll("#", "%23");
|
||||||
const url = `http://azgaar.github.io/Armoria/?coa=${json}`;
|
const url = `http://azgaar.github.io/Armoria/?coa=${json}`;
|
||||||
openURL(url);
|
openURL(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function toggleUpload() {
|
||||||
|
document.getElementById("emblemDownloadControl").classList.add("hidden");
|
||||||
|
const buttons = document.getElementById("emblemUploadControl");
|
||||||
|
buttons.classList.toggle("hidden");
|
||||||
|
}
|
||||||
|
|
||||||
|
function upload(type) {
|
||||||
|
const input = type === "image" ? document.getElementById("emblemImageToLoad") : document.getElementById("emblemSVGToLoad");
|
||||||
|
const file = input.files[0];
|
||||||
|
input.value = "";
|
||||||
|
|
||||||
|
if (file.size > 500000) {
|
||||||
|
tip(`File is too big, please optimize file size up to 500kB and re-upload. Recommended size is 200x200 px and up to 100kB`, true, "error", 5000);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const reader = new FileReader();
|
||||||
|
|
||||||
|
reader.onload = function(readerEvent) {
|
||||||
|
const result = readerEvent.target.result;
|
||||||
|
const defs = document.getElementById("defs-emblems");
|
||||||
|
|
||||||
|
if (type === "image") {
|
||||||
|
const svg = `<svg id="${id}" xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200"><image x="0" y="0" width="200" height="200" href="${result}"/></svg>`;
|
||||||
|
defs.insertAdjacentHTML("beforeend", svg);
|
||||||
|
} else {
|
||||||
|
defs.insertAdjacentHTML("beforeend", result);
|
||||||
|
const newEmblem = defs.lastChild; // new coa
|
||||||
|
newEmblem.id = id;
|
||||||
|
newEmblem.setAttribute("width", 200);
|
||||||
|
newEmblem.setAttribute("height", 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
const coa = document.getElementById(id);
|
||||||
|
if (coa) coa.remove(); // remove old emblem
|
||||||
|
|
||||||
|
el.coa = "custom";
|
||||||
|
emblemShapeSelector.disabled = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (type === "image") reader.readAsDataURL(file); else reader.readAsText(file);
|
||||||
|
}
|
||||||
|
|
||||||
function toggleDownload() {
|
function toggleDownload() {
|
||||||
|
document.getElementById("emblemUploadControl").classList.add("hidden");
|
||||||
const buttons = document.getElementById("emblemDownloadControl");
|
const buttons = document.getElementById("emblemDownloadControl");
|
||||||
buttons.classList.toggle("hidden");
|
buttons.classList.toggle("hidden");
|
||||||
}
|
}
|
||||||
|
|
@ -225,16 +284,9 @@ function editEmblem(type, id, el) {
|
||||||
const clone = svg.cloneNode(true); // clone svg
|
const clone = svg.cloneNode(true); // clone svg
|
||||||
const d = clone.getElementsByTagName("defs")[0];
|
const d = clone.getElementsByTagName("defs")[0];
|
||||||
|
|
||||||
clone.removeAttribute("id");
|
|
||||||
clone.setAttribute("width", size);
|
clone.setAttribute("width", size);
|
||||||
clone.setAttribute("height", size);
|
clone.setAttribute("height", size);
|
||||||
|
|
||||||
d.insertAdjacentHTML("beforeend", document.getElementById(coa.shield).outerHTML); // copy shield to defs
|
|
||||||
clone.querySelectorAll("[fill^=url]").forEach(el => {
|
|
||||||
const id = el.getAttribute("fill").match(/\#([^)]+)\)/)[1];
|
|
||||||
d.insertAdjacentHTML("beforeend", document.getElementById(id).outerHTML);
|
|
||||||
});
|
|
||||||
|
|
||||||
return (new XMLSerializer()).serializeToString(clone);
|
return (new XMLSerializer()).serializeToString(clone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -239,6 +239,11 @@ function editProvinces() {
|
||||||
const name = provinces[p].name;
|
const name = provinces[p].name;
|
||||||
const color = getRandomColor();
|
const color = getRandomColor();
|
||||||
|
|
||||||
|
const coa = provinces[p].coa;
|
||||||
|
const coaEl = document.getElementById("provinceCOA"+p);
|
||||||
|
if (coaEl) coaEl.id = "stateCOA"+newState;
|
||||||
|
emblems.select(`#provinceEmblems > use[data-i='${p}']`).remove();
|
||||||
|
|
||||||
// update cells
|
// update cells
|
||||||
cells.i.filter(i => cells.province[i] === p).forEach(i => {
|
cells.i.filter(i => cells.province[i] === p).forEach(i => {
|
||||||
cells.province[i] = 0;
|
cells.province[i] = 0;
|
||||||
|
|
@ -264,7 +269,7 @@ function editProvinces() {
|
||||||
states[0].diplomacy.push([`Independance declaration`, `${name} declared its independance from ${states[oldState].name}`]);
|
states[0].diplomacy.push([`Independance declaration`, `${name} declared its independance from ${states[oldState].name}`]);
|
||||||
|
|
||||||
// create new state
|
// create new state
|
||||||
states.push({i:newState, name, diplomacy, provinces:[], color, expansionism:.5, capital:burg, type:"Generic", center, culture, military:[], alert:1});
|
states.push({i:newState, name, diplomacy, provinces:[], color, expansionism:.5, capital:burg, type:"Generic", center, culture, military:[], alert:1, coa});
|
||||||
BurgsAndStates.collectStatistics();
|
BurgsAndStates.collectStatistics();
|
||||||
BurgsAndStates.defineStateForms([newState]);
|
BurgsAndStates.defineStateForms([newState]);
|
||||||
|
|
||||||
|
|
@ -276,7 +281,10 @@ function editProvinces() {
|
||||||
// remove old province
|
// remove old province
|
||||||
unfog("focusProvince"+p);
|
unfog("focusProvince"+p);
|
||||||
if (states[oldState].provinces.includes(p)) states[oldState].provinces.splice(states[oldState].provinces.indexOf(p), 1);
|
if (states[oldState].provinces.includes(p)) states[oldState].provinces.splice(states[oldState].provinces.indexOf(p), 1);
|
||||||
provinces[p].removed = true;
|
provinces[p] = {i:p, removed: true};
|
||||||
|
|
||||||
|
// draw emblem
|
||||||
|
COArenderer.add("state", newState, coa, pack.states[newState].pole[0], pack.states[newState].pole[1]);
|
||||||
|
|
||||||
closeDialogs();
|
closeDialogs();
|
||||||
editStates();
|
editStates();
|
||||||
|
|
@ -767,7 +775,15 @@ function editProvinces() {
|
||||||
const fullName = name + " " + formName;
|
const fullName = name + " " + formName;
|
||||||
const stateColor = pack.states[state].color, rndColor = getRandomColor();
|
const stateColor = pack.states[state].color, rndColor = getRandomColor();
|
||||||
const color = stateColor[0] === "#" ? d3.color(d3.interpolate(stateColor, rndColor)(.2)).hex() : rndColor;
|
const color = stateColor[0] === "#" ? d3.color(d3.interpolate(stateColor, rndColor)(.2)).hex() : rndColor;
|
||||||
provinces.push({i:province, state, center, burg, name, formName, fullName, color});
|
|
||||||
|
// generate emblem
|
||||||
|
const kinship = burg ? .8 : .4;
|
||||||
|
const parent = burg ? pack.burgs[burg].coa : pack.states[state].coa;
|
||||||
|
const coa = COA.generate(parent, kinship);
|
||||||
|
coa.shield = COA.getShield(c, state);
|
||||||
|
COArenderer.add("province", province, coa, point[0], point[1]);
|
||||||
|
|
||||||
|
provinces.push({i:province, state, center, burg, name, formName, fullName, color, coa});
|
||||||
|
|
||||||
cells.province[center] = province;
|
cells.province[center] = province;
|
||||||
cells.c[center].forEach(c => {
|
cells.c[center].forEach(c => {
|
||||||
|
|
|
||||||
|
|
@ -842,6 +842,10 @@ function editStates() {
|
||||||
const name = Names.getState(basename, culture);
|
const name = Names.getState(basename, culture);
|
||||||
const color = getRandomColor();
|
const color = getRandomColor();
|
||||||
|
|
||||||
|
// generate emblem
|
||||||
|
const coa = COA.generate(burgs[burg].coa, .4);
|
||||||
|
coa.shield = COA.getShield(culture, null);
|
||||||
|
|
||||||
// update diplomacy and reverse relations
|
// update diplomacy and reverse relations
|
||||||
const diplomacy = states.map(s => {
|
const diplomacy = states.map(s => {
|
||||||
if (!s.i) return "x";
|
if (!s.i) return "x";
|
||||||
|
|
@ -869,7 +873,9 @@ function editStates() {
|
||||||
const affectedProvinces = [cells.province[center]];
|
const affectedProvinces = [cells.province[center]];
|
||||||
cells.state[center] = newState;
|
cells.state[center] = newState;
|
||||||
cells.province[center] = 0;
|
cells.province[center] = 0;
|
||||||
cells.c[center].forEach(c => {
|
|
||||||
|
const cellsToCheck = [...new Set(cells.c[center].map(c => cells.c[c].map(c => cells.c[c])).flat(2))];
|
||||||
|
cellsToCheck.forEach(c => {
|
||||||
if (cells.h[c] < 20) return;
|
if (cells.h[c] < 20) return;
|
||||||
if (cells.burg[c]) return;
|
if (cells.burg[c]) return;
|
||||||
affectedStates.push(cells.state[c]);
|
affectedStates.push(cells.state[c]);
|
||||||
|
|
@ -877,7 +883,8 @@ function editStates() {
|
||||||
cells.state[c] = newState;
|
cells.state[c] = newState;
|
||||||
cells.province[c] = 0;
|
cells.province[c] = 0;
|
||||||
});
|
});
|
||||||
states.push({i:newState, name, diplomacy, provinces:[], color, expansionism:.5, capital:burg, type:"Generic", center, culture, military:[], alert:1});
|
|
||||||
|
states.push({i:newState, name, diplomacy, provinces:[], color, expansionism:.5, capital:burg, type:"Generic", center, culture, military:[], alert:1, coa});
|
||||||
BurgsAndStates.collectStatistics();
|
BurgsAndStates.collectStatistics();
|
||||||
BurgsAndStates.defineStateForms([newState]);
|
BurgsAndStates.defineStateForms([newState]);
|
||||||
adjustProvinces([...new Set(affectedProvinces)]);
|
adjustProvinces([...new Set(affectedProvinces)]);
|
||||||
|
|
@ -886,6 +893,7 @@ function editStates() {
|
||||||
if (!layerIsOn("toggleStates")) toggleStates(); else drawStates();
|
if (!layerIsOn("toggleStates")) toggleStates(); else drawStates();
|
||||||
if (!layerIsOn("toggleBorders")) toggleBorders(); else drawBorders();
|
if (!layerIsOn("toggleBorders")) toggleBorders(); else drawBorders();
|
||||||
BurgsAndStates.drawStateLabels([...new Set(affectedStates)]);
|
BurgsAndStates.drawStateLabels([...new Set(affectedStates)]);
|
||||||
|
COArenderer.add("state", newState, coa, states[newState].pole[0], states[newState].pole[1]);
|
||||||
statesEditorAddLines();
|
statesEditorAddLines();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue