Created
March 28, 2021 14:17
-
-
Save karlwilcox/c9767057dc4ede1d4c3e310ba33d022a to your computer and use it in GitHub Desktop.
Generate Variant edge types for drawshield (assumes directory called 'edges' in current dir)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$subArg = ''; | |
function subFunc( $match ) { | |
global $subArg; | |
if ( $match[0]{2} == '}' ) { | |
return $subArg; | |
} else { | |
$val = floatVal(substr($match[0],3)); | |
switch ( $match[0]{2} ) { | |
case '*': return sprintf("%.3f", ($subArg * $val)); | |
case '/': return sprintf("%.3f", ($subArg / $val)); | |
} | |
} | |
return $match; // should not happen | |
} | |
function makeEdges() { | |
global $subArg; | |
$lineSpecs = array ( | |
'angled' => '0:100:i:o:h50v-{S}h50:O1', | |
'angled-upper' => '0:100:o:i:h50v{S}h50:O1', | |
'arched' => '1:{D}:i:i:c {D/2},-{S*2} {D/2},-{S*2} {D},0:R1', | |
'battled-ghibelline' => '*:{S*4}:i:i:h{S} v-{S*2} c0,0 {S},{S*0.37} {S},{S*0.9} 0,-{S*0.58} {S},-{S*0.90} {S},-{S*0.9} v{S*2} h{S}:U1', | |
'embattled-arrondi' => '*:{S*4}:i:i:h{S} v-{S} c0,-{S} {S*2},-{S} {S*2},0 v{S} h{S}:U1', | |
'cupolaed' => '*:{S*4}:i:i:h{S} v-{S} h{S/2} c0,-{S/2} {S},-{S/2} {S},0 h{S/2} v{S} h{S}:U1', | |
'gabled' => '*:{S*4}:i:i:h{S} v-{S} h{S/2} l{S/2},-{S/2} l{S/2},{S/2} h{S/2} v{S} h{S}:U1', | |
'battled-mine-dumps' => '*:{S*4}:i:i:h{S*3} l{S/2},{S} h{S*3} l{S/2},-{S}:O1', | |
'battled-counter' => '*:{S*4}:i:i:h{S}v-{S}h{S*2}v{S}h{S}:R1', | |
'battled-brettesse' => '*:{S*4}:i:i:h{S}v-{S}h{S*2}v{S}h{S}', | |
'battled-embattled' => '*:{S*4}:i:i:l{S*0.34},0 0,-{S/3} {S*0.66},0 0,-{S/3} {S*0.67},0 0,-{S/3} {S*0.66},0 0,{S/3} {S*0.67},0 0,{S/3} {S*0.66},0 0,{S/3} {S*.34},0:U1', | |
'bevilled' => '0:{S}:i:o:h{S}l-{S},-{S}h{S}:O1', | |
'bevilled-upper' => '0:{S}:o:i:h{S}l-{S},{S}h{S}:O1', | |
'thorny' => '*:{S*2}:-:-:c 0,-{S*1.08} -{S*0.32},-{S*1.08} -{S*0.32},-{S*1.08} h {S*1.5} c 0,0 {S*0.32},0 {S*0.32},{S*1.08} 0,{S*1.08} -{S*0.32},{S*1.08} -{S*0.32},{S*1.08} h {S*1.5} c 0,0 {S*0.32},0 {S*0.32},-{S*1.08} ', | |
'indented-pommetty' => '*:{S*1.8}:-:-:l | |
{S*0.5},-{S*1.80} | |
c | |
-{S*0.10},0 | |
-{S*0.20},-{S*0.10} | |
-{S*0.20},-{S*0.20} | |
0,-{S*0.10} | |
{S*0.10},-{S*0.20} | |
{S*0.20},-{S*0.20} | |
{S*0.10},0 | |
{S*0.20},{S*0.10} | |
{S*0.20},{S*0.20} | |
0,{S*0.10} | |
-{S*0.10},{S*0.20} | |
-{S*0.20},{S*0.20} | |
l | |
{S*0.80},{S*3.60} | |
c | |
-{S*0.10},0 | |
-{S*0.20},{S*0.10} | |
-{S*0.20},{S*0.20} | |
0,{S*0.10} | |
{S*0.10},{S*0.20} | |
{S*0.20},{S*0.20} | |
{S*0.10},0 | |
{S*0.20},-{S*0.10} | |
{S*0.20},-{S*0.20} | |
0,-{S*0.10} | |
-{S*0.10},-{S*0.20} | |
-{S*0.20},-{S*0.20} | |
l | |
{S*0.5},-{S*1.80}', | |
'trefle' => '*:{S*2.16}:-:-:c | |
{S*0.1974684},{S*0.0549} | |
{S*0.3983884},{S*0.1098} | |
{S*0.4820684},-{S*0.2125} | |
l | |
-{S*0.04647},-{S*0.0232} | |
c | |
-{S*0.05227},{S*0.0967} | |
-{S*0.15391},{S*0.1626} | |
-{S*0.2708},{S*0.1626} | |
-{S*0.170061},0 | |
-{S*0.308},-{S*0.1392} | |
-{S*0.308},-{S*0.3107} | |
0,-{S*0.1717} | |
{S*0.137939},-{S*0.3108} | |
{S*0.308},-{S*0.3108} | |
{S*0.05318},0 | |
{S*0.10309},{S*0.0136} | |
{S*0.14684},{S*0.0374} | |
l | |
{S*0.03085},-{S*0.021} | |
c | |
-{S*0.05572},-{S*0.0563} | |
-{S*0.0902},-{S*0.134} | |
-{S*0.0902},-{S*0.2198} | |
0,-{S*0.1716} | |
{S*0.13776},-{S*0.3106} | |
{S*0.30782},-{S*0.3106} | |
{S*0.17025},0 | |
{S*0.30801},{S*0.139} | |
{S*0.30801},{S*0.3106} | |
0,{S*0.0913} | |
-{S*0.03884},{S*0.1731} | |
-{S*0.10091},{S*0.2299} | |
l | |
{S*0.03158},{S*0.0109} | |
c | |
{S*0.04374},-{S*0.0238} | |
{S*0.0824},-{S*0.0374} | |
{S*0.13556},-{S*0.0374} | |
{S*0.17006},0 | |
{S*0.30796},{S*0.1391} | |
{S*0.30796},{S*0.3108} | |
0,{S*0.1715} | |
-{S*0.1379},{S*0.3107} | |
-{S*0.30796},{S*0.3107} | |
-{S*0.10634},0 | |
-20,-{S*0.0545} | |
-{S*0.25535},-{S*0.137} | |
l | |
-{S*0.03866},{S*0.0183} | |
c | |
{S*0.18259},{S*0.5837} | |
{S*0.70417},-{S*0.1997} | |
{S*0.86427},{S*0.3955} | |
l | |
-{S*0.0448},{S*0.0062} | |
c | |
-{S*0.0558},-{S*0.0563} | |
-{S*0.1327},-{S*0.091} | |
-{S*0.2178},-{S*0.091} | |
-{S*0.1701},0 | |
-{S*0.30796},{S*0.1391} | |
-{S*0.30796},{S*0.3108} | |
0,{S*0.1715} | |
{S*0.13786},{S*0.3105} | |
{S*0.30796},{S*0.3105} | |
{S*0.0531},0 | |
{S*0.1031},-{S*0.0134} | |
{S*0.1468},-{S*0.0374} | |
l | |
{S*0.0044},{S*0.0018} | |
c | |
-{S*0.0685},{S*0.057} | |
-{S*0.1122},{S*0.1432} | |
-{S*0.1122},{S*0.2398} | |
0,{S*0.1715} | |
{S*0.1379},{S*0.3107} | |
{S*0.308},{S*0.3107} | |
{S*0.1701},0 | |
{S*0.3081},-{S*0.1392} | |
{S*0.3081},-{S*0.3107} | |
0,-{S*0.0966} | |
-{S*0.0436},-{S*0.1828} | |
-{S*0.1123},-{S*0.2398} | |
l | |
{S*0.0132},-{S*0.0085} | |
c | |
{S*0.0464},{S*0.0285} | |
{S*0.1011},{S*0.0448} | |
{S*0.1595},{S*0.0448} | |
{S*0.1701},0 | |
{S*0.308},-{S*0.139} | |
{S*0.308},-{S*0.3105} | |
0,-{S*0.1717} | |
-{S*0.1379},-{S*0.3108} | |
-{S*0.308},-{S*0.3108} | |
-{S*0.0849},0 | |
-{S*0.1619},{S*0.0347} | |
-{S*0.2177},{S*0.091} | |
l | |
-{S*0.0443},{S*0.0027} | |
c | |
{S*0.0697},-{S*0.3222} | |
{S*0.270},-{S*0.2673} | |
{S*0.4738},-{S*0.2125}', | |
'fir-tree-topped' => '*:{S*3}:-:-:l | |
{S*0.397022},-{S*0.6288} | |
-{S*0.69447},{S*0.2902} | |
{S*1.14526},-{S*1.6169} | |
{S*1.20623},{S*1.6169} | |
-{S*0.5931},-{S*0.2902} | |
{S*0.8217},{S*1.2574} | |
-{S*0.727},-{S*0.2902} | |
{S*0.9499},{S*1.2574} | |
{S*0.8892},-{S*1.2574} | |
-{S*0.621},{S*0.2902} | |
{S*0.4286},-{S*0.6286}', | |
'liljakoro' => '*:{S*2}:-:-:c | |
-{S*0.000524},-{S*0.1511} | |
{S*0.0893876},-{S*0.2784} | |
{S*0.2493766},-{S*0.2768} | |
{S*0.016},{S*0.002} | |
{S*0.16161},{S*0.1682} | |
{S*0.31457},{S*0.112} | |
-{S*0.03798},-{S*0.4685} | |
-{S*0.43945},-{S*0.4418} | |
-{S*0.615358},-{S*0.2477} | |
-{S*0.054997},-{S*0.2281} | |
{S*0.109767},-{S*0.391} | |
{S*0.312168},-{S*0.3922} | |
{S*0.20242},-{S*0.002} | |
{S*0.24169},{S*0.1825} | |
{S*0.32832},{S*0.1631} | |
-{S*0.2617},-{S*0.5081} | |
-{S*0.22113},-{S*0.945} | |
{S*0.16809},-{S*1.3099} | |
{S*0.38919},{S*0.3649} | |
{S*0.43039},{S*0.8018} | |
{S*0.16858},{S*1.3099} | |
{S*0.08661},{S*0.0194} | |
{S*0.12591},-{S*0.1644} | |
{S*0.32841},-{S*0.1631} | |
{S*0.2023},{S*0.0019} | |
{S*0.3671},{S*0.1641} | |
{S*0.3121},{S*0.3922} | |
-{S*0.1758},-{S*0.1941} | |
-{S*0.57738},-{S*0.2208} | |
-{S*0.61535},{S*0.2477} | |
{S*0.15295},{S*0.0562} | |
{S*0.15465},-{S*0.1105} | |
{S*0.31455},-{S*0.112} | |
{S*0.016},-{S*0.0019} | |
{S*0.2499},{S*0.1257} | |
{S*0.2494},{S*0.2768} | |
-{S*0.0012},{S*0.1433} | |
-{S*0.1263},{S*0.2581} | |
-{S*0.2935},{S*0.2538} | |
-{S*0.1672},-{S*0.0046} | |
-{S*0.1217},-{S*0.1679} | |
-{S*0.26624},-{S*0.1439} | |
-{S*0.08877},{S*0.3546} | |
{S*0.26674},{S*0.5856} | |
{S*0.57344},{S*0.3659} | |
-{S*0.1887},{S*0.4147} | |
-{S*0.1255},{S*0.984} | |
{S*0.2213},{S*1.1611} | |
{S*0.3468},-{S*0.1771} | |
{S*0.4173},-{S*0.7464} | |
{S*0.2285},-{S*1.1611} | |
{S*0.3068},{S*0.2197} | |
{S*0.6623},-{S*0.0113} | |
{S*0.5735},-{S*0.3659} | |
-{S*0.1446},-{S*0.024} | |
-{S*0.099},{S*0.1393} | |
-{S*0.2664},{S*0.1439} | |
-{S*0.167},{S*0.0043} | |
-{S*0.2928},-{S*0.1105} | |
-{S*0.2934},-{S*0.2538}', | |
'vallikoro' => '*:{S*2}:-:-:l-{S/4},-{S/4} {S*0.75},-{S} {S*0.75},{S} -{S/2},{S/2} {S*0.75},{S} {S*0.75},-{S} -{S/4},-{S/4}:O1', | |
'hakulikoro' => '*:{S*1.5}:-:-:l-{S/8},-{S/2} {S/2},-{S/2} {S/2},{S/2} -{S/4},{S} {S/2},{S/2} {S/2},-{S/2} -{S/8},-{S/2}:O1', | |
'ristikoro' => '*:{S*2}:-:-:v-{S/2}h{S/2}v-{S/2}h{S/2}v{S/2}h{S/2}v{S/2}h-{S/2}v{S/2}h{S/2}v{S/2}h{S/2}v-{S/2}h{S/2}v-{S/2}h-{S/2}:O1', | |
'dancetty' => '*:{S*4}:i:i:l{S*2},-{S*2} {S*2},{S*2}:R1', | |
'dancetty-floretty' => '*:160:-:-:l32.7,-52.1 c 0,0 -11.4,-7.2 -30,14.3 -3.371,-32.4 21.5,-30.1 32.2,-22.2 10.7,7.8 -29.84,-18 5.4,-43 35.3,25 -5.2,50.8 5.5,43 10.7,-7.9 35.6,-10.2 32.2,22.2 -18.6,-21.5 -30,-14.3 -30,-14.3 21.6,34.8 43.1,69.6 65,104.2 0,0 -12,7.2 -30.3,-14.3 -3.4,32.4 21.3,30.1 32.3,22.2 11,-7.8 -29.9,18 5,43 36,-25 -5,-50.8 6,-43 11,7.9 35,10.2 32,-22.2 -19,21.5 -30,14.3 -30,14.3 l32,-52.1', | |
'double-arched' => '2:{D/2}:i:i:q {D/4},-{S*2} {D/2},0:R1', | |
// 'dovetailed' => '*:{S*2}:i:i:l{S*0.95},0 -{S*0.9},-{S} {S*1.9},0 -{S*0.9},{S} {S*0.95},0', | |
'dovetailed' => '*:{S*4}:i:i:l{S*1.9},0 -{S*1.8},-{S*2} {S*3.8},0 -{S*1.8},{S*2} {S*1.9},0', | |
'embattled' => '*:{S*4}:i:i:h{S}v-{S}h{S*2}v{S}h{S}:U1', | |
// 'engrailed' => '*:{S*2}:o:o:a{S*2},{S*5},0,0,0 {S*2},0', | |
'engrailed' => '*:{S*4}:o:o:a{S*4},{S*10},0,0,0 {S*4},0', | |
'escartelly' => '0:{S*2}:i:i:v-{S}h{S*2}v{S}:R1', | |
// 'indented' => '*:{S*2}:-:-:l{S/2},-{S/2} {S},{S} {S/2},-{S/2}', | |
'indented' => '*:{S*4}:-:-:l{S},-{S} {S*2},{S*2} {S},-{S}', | |
// 'invected' => '*:{S*2}:i:i:a{S*2},{S*5},0,0,1,{S*2},0', | |
'invected' => '*:{S*4}:i:i:a{S*4},{S*10},0,0,1,{S*4},0', | |
'nebuly' => '*:{S*3.5}:-:-:a{S*0.95},{S/2},0,1,0,{S*0.95},0a{S*0.95},{S/2},0,1,1,{S*0.95},0a{S*0.95},{S/2},0,1,0,{S*0.95},0a{S*0.95},{S/2},0,1,1,{S*0.95},0', | |
'none' => '0:{D}:-:-:h{D}', // dummy values, not actually used | |
'nowy' => '0:{S*3}:i:i:q{S*1.5},-{S*2} {S*3},0:R1', | |
// 'potenty' => '*:{S*2}:-:-:h-{S/2}v-{S/2}h{S*1.5}v{S/2}h-{S/2}v{S/2}h{S*1.5}v-{S/2}', | |
'potenty' => '*:{S*4}:-:-:h-{S}v-{S}h{S*3}v{S}h-{S}v{S}h{S*3}v-{S}', | |
// 'raguly' => '*:{S*2}:i:i:l{S*0.5},0 -{S*0.2},-{S} {S},0 {S*0.2},{S} {S*0.5},0', | |
'raguly' => '*:{S*4}:i:i:l{S},0 -{S*0.4},-{S*2} {S*2},0 {S*0.4},{S*2} {S},0', | |
// 'rayonny' => '*:{S}:o:o:a{S/4},{S*0.4}-30,0,0,{S/4},{S/2}a{S/4},{S*0.4}-30,0,1,{S/4},{S/2}a{S/4},{S*0.4},30,0,0,{S/4},-{S/2}a{S/4},{S*0.4},30,0,1,{S/4},-{S/2}', | |
'rayonny' => '*:{S*2}:o:o:a{S/2},{S*0.8}-30,0,0,{S/2},{S}a{S/2},{S*0.8}-30,0,1,{S/2},{S}a{S/2},{S*0.8},30,0,0,{S/2},-{S}a{S/2},{S*0.8},30,0,1,{S/2},-{S}', | |
'urdy' => '*:{S*2}:-:-:v{S/2}l{S/2},{S/2} l{S/2},-{S/2}v-{S}l{S/2},-{S/2} l{S/2},{S/2}v{S/2}', | |
'wavy' => '*:{S*3}:-:-:q{S*0.75},-{S} {S*1.5},0 q{S*0.75},{S} {S*1.5},0', | |
'twigged' => '*:{S*1.5}:-:-: | |
l-{S/4},-{S/4} | |
c-{S/8},-{S/8} {S/8},-{S*0.375} {S/4},-{S/4} | |
l{S*0.198},{S*0.198} | |
l0,-{S*0.544} | |
c0,-{S*0.177} {S*0.354},-{S*0.177} {S*0.354},0 | |
l0,{S*0.544} | |
l{S*0.198},-{S*0.198} | |
c{S/8},-{S/8} {S*0.375},{S*0.177} {S/4},{S/4} | |
l-{S/2},{S/2} | |
c-{S/8},{S/8} {S/8},{S*0.375} {S/4},{S/4} | |
l{S*0.198},-{S*0.198} | |
l0,{S*0.544} | |
c0,{S*0.177} {S*0.354},{S*0.177} {S*0.354},0 | |
l0,-{S*0.544} | |
l{S*0.198},{S*0.198} | |
c{S/8},{S/8} {S*0.375},-{S/8} {S/4},-{S/4} | |
l-{S/4},-{S/4} | |
', | |
'erable' => '*:{S*2.1}:-:-:l{S*0.90},0 | |
0,{S*-0.30} | |
{S*-0.4},{S*0.10} | |
{S*0.10},{S*-0.2} | |
{S*-0.25},{S*-0.30} | |
{S*0.10},{S*-0.10} | |
{S*-0.2},{S*-0.30} | |
{S*0.30},{S*-0.10} | |
{S*0.30},{S*0.10} | |
{S*-0.2},{S*-0.4} | |
{S*0.2},{S*0.10} | |
{S*0.30},{S*-0.30} | |
{S*0.30},{S*0.30} | |
{S*0.2},{S*-0.10} | |
{S*-0.2},{S*0.4} | |
{S*0.30},{S*-0.10} | |
{S*0.30},{S*0.10} | |
{S*-0.2},{S*0.30} | |
{S*0.10},{S*0.10} | |
{S*-0.25},{S*0.30} | |
{S*0.10},{S*0.2} | |
{S*-0.4},{S*-0.10} | |
0,{S*0.30} | |
{S*0.90},0 | |
0,{S*0.30} | |
{S*-0.4},{S*-0.10} | |
{S*0.10},{S*0.2} | |
{S*-0.25},{S*0.30} | |
{S*0.10},{S*0.10} | |
{S*-0.2},{S*0.30} | |
{S*0.30},{S*0.10} | |
{S*0.30},{S*-0.10} | |
{S*-0.2},{S*0.4} | |
{S*0.2},{S*-0.10} | |
{S*0.30},{S*0.30} | |
{S*0.30},{S*-0.30} | |
{S*0.2},{S*0.10} | |
{S*-0.2},{S*-0.4} | |
{S*0.30},{S*0.10} | |
{S*0.30},{S*-0.10} | |
{S*-0.2},{S*-0.30} | |
{S*0.10},{S*-0.10} | |
{S*-0.25},{S*-0.30} | |
{S*0.10},{S*-0.2} | |
{S*-0.4},{S*0.10} | |
0,{S*-0.30}', | |
// {S*0.90},0', | |
'meander' => '*:{S*2}:-:-: | |
h{S*1.75}v-{S*1.5}h-{S*1.25} | |
v{S}h{S*0.75}v-{S*0.5} | |
h-{S*0.25}v{S*0.25}h-{S*0.25} | |
v-{S*0.5}h{S*0.75}v{S} | |
h-{S*1.25}v-{S*1.5}h{S*1.75} | |
v{S*1.75}' | |
// 'meander' => '*:{S}:-:-: | |
// h{S*0.875}v-{S*0.75}h-{S*0.625} | |
// v{S*0.5}h{S*0.375}v-{S*0.25} | |
// h-{S*0.125}v{S*0.125}h-{S*0.125} | |
// v-{S*0.25}h{S*0.375}v{S*0.5} | |
// h-{S*0.625}v-{S*0.75}h{S*0.875} | |
// v{S*0.875}' | |
); | |
$xmlHead = <<<END1 | |
<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
<svg | |
xmlns:dc="http://purl.org/dc/elements/1.1/" | |
xmlns:cc="http://creativecommons.org/ns#" | |
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |
xmlns:svg="http://www.w3.org/2000/svg" | |
viewBox="0 0 1000 1200" | |
width="1000" | |
height="1200" | |
preserveAspectRatio="xMidYMid meet" | |
version="1.1"> | |
END1; | |
foreach($lineSpecs as $name => $lineSpec) { | |
$output = $xmlHead; | |
$subArg = 60; | |
$lineSpec = preg_replace_callback('/{S.*?}/', 'subFunc', $lineSpec); | |
list($repeat,$length,$defaultStart,$defaultEnd,$spec,$options) = explode(':',$lineSpec . ': ' ); // options are optional(!) | |
$output .= "<path stroke-width=\"1\" fill=\"none\" stroke=\"black\" d=\"M0,0 "; | |
$subArg = 200; | |
$path = preg_replace_callback('/{D.*?}/', 'subFunc', $spec); | |
$output .= $path . "\" />\n</svg>\n"; | |
file_put_contents('edges/' . $name . ".svg", $output); | |
} | |
} | |
makeEdges(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment