alchi-flyer.html 163 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>alchi flyer</title>
  6. <!--
  7. nur wer sucht, kann finden.
  8. nur wer die wahrheit* sucht, kann sie auch finden.
  9. *(das richtige ziel)
  10. 13/24 rache, kritik: früher / später
  11. print settings:
  12. use mozilla firefox
  13. code is optimized for firefox
  14. chrome shows some bugs (page 2 moved up)
  15. and uses other font (increase font_size)
  16. scale to full page, not printable area
  17. duplex on long side
  18. some printers have slow duplex,
  19. so manual duplex is faster for large batches
  20. printer:
  21. im using a Canon Pixma G5050
  22. bottle ink printer
  23. with a 250 sheet paper capacity
  24. costing about 0.1 euro-cent per page
  25. needing 30 seconds per color page
  26. and 10 seconds per blackwhite page
  27. = one reason to keep the second page blackwhite
  28. print quality is only 600dpi
  29. but we can optimize our document (pixel hinting)
  30. for better print results
  31. con manual duplex: about 2% print errors (blank pages)
  32. auto duplex: 70 seconds per double-page print
  33. print larger:
  34. 1. print to PDF file alchi-flyer.pdf
  35. 2. run: pdfposter -mA4 -pA3 alchi-flyer.pdf alchi-flyer.poster.pdf
  36. this will scale pages from A4 to A3 = factor 1.4 larger
  37. 3. print the *.poster.pdf file with the option "shrink to printable area"
  38. skip empty pages 1 and 4, print: 2,3,5,6
  39. change text:
  40. change 'const font_size = ....;'
  41. to change font size, to fill pages
  42. TODO
  43. * use printer unit "points"
  44. and pixel-hinting / dot-hinting
  45. for better print results.
  46. optimize for 600dpi printers.
  47. translate html to svg coordinates 1:1.
  48. avoid scaling factors, or round scaled coordinates.
  49. TODO bundle font file for consistent results
  50. -->
  51. <meta name="author"
  52. content="Milan Hauth <milahu@gmail.com>">
  53. <link rel="schema.dcterms" href="http://purl.org/dc/terms/">
  54. <meta name="dcterms.rights"
  55. content="License is Creative Commons Zero">
  56. <link rel="copyright"
  57. href="https://creativecommons.org/publicdomain/zero/1.0/deed.de">
  58. <!--
  59. printing from firefox is blurry
  60. use "print to PDF"
  61. and print from a PDF viewer (not firefox)
  62. - fixed?
  63. -->
  64. <script>
  65. const VERSION = "2020-09-01-de";
  66. const DOCNAME = `alchi-flyer-${VERSION}`;
  67. document.title = DOCNAME;
  68. // din a4 = 210 x 297 mm2
  69. const page_x = 210; // mm
  70. //const page_y = 297; // mm
  71. const page_y = 296.5; // mm
  72. // bigger values add empty page
  73. // TODO report bug to firefox?
  74. // 297mm != 296.6666666mm
  75. // rounding error from inch conversion?
  76. // firefox print dialog: A4 = 8.27 inch x 11.69 inch
  77. // also in firefox:
  78. // "print page 1" prints one empty page
  79. //const page_margin = 5; // mm
  80. const page_margin = {
  81. top: 5,
  82. right: 5,
  83. bottom: 5,
  84. left: 5,
  85. }; // mm
  86. const content_x = page_x - page_margin.left - page_margin.right;
  87. const content_y = page_y - page_margin.top - page_margin.bottom;
  88. const map_margin = 3;
  89. const map_w = 10;
  90. const map_a = map_w / 8;
  91. const map_x_html = content_x/4;
  92. const map_y_html = map_x_html;
  93. const map_x_svg = 4*map_w + 3*map_margin + 4*map_a;
  94. const map_y_svg = map_x_svg;
  95. const scale_svg_html = map_x_svg / map_x_html;
  96. const table_margin = 4;
  97. const bgpat_w = content_x / 5 / 4;
  98. // TODO scale with content
  99. //const font_size = 2.365;
  100. const font_size = 2.53;
  101. const font_size_page2 = font_size;
  102. const font_size_map = 4;
  103. const footer_y = font_size * 1.25;
  104. // helper function
  105. Array.range = function(from, to=undefined) {
  106. if (to) {
  107. const len = to - from;
  108. if (len > 0) {
  109. // from <= val <= to
  110. return Array.from(Array(1+len)).map((_, idx) => from+idx);
  111. } else {
  112. // from >= val >= to
  113. return Array.from(Array(1-len)).map((_, idx) => from-idx);
  114. }
  115. } else {
  116. if (from > 0) {
  117. // 0 <= val <= "from"
  118. return Array.from(Array(1+from)).map((_, idx) => idx);
  119. } else {
  120. // 0 >= val >= "from"
  121. return Array.from(Array(1-from)).map((_, idx) => -idx);
  122. }
  123. }
  124. }
  125. // intake: `${energy}kCal` or `${mass}Gr`
  126. function macros_mass_ratio(type, intake, round_to=1) {
  127. // kiloCalories
  128. //const energy_intake = 2000; // daily intake
  129. //const energy_intake = 400; // one meal
  130. const energy_ratio = {
  131. // numbers in percent
  132. "endo": {c: 25, p: 35, f: 40}, // = air
  133. "meso": {c: 40, p: 30, f: 30}, // = fire + earth
  134. "ecto": {c: 55, p: 25, f: 20}, // = water
  135. };
  136. // energy density. D = E / M. M = E / D
  137. const cal_per_gram = {
  138. c: 4, p: 4, f: 9,
  139. };
  140. const density_cpf = ["c", "p", "f"].map(key => (
  141. energy_ratio[type][key]/100/cal_per_gram[key]
  142. ));
  143. function _round(f, round_to=1){
  144. return Math.round(f/round_to)*round_to;
  145. }
  146. const m1 = intake.match(/^([0-9]+)kCal$/);
  147. if (m1) {
  148. const energy_intake = parseInt(m1[1]);
  149. return density_cpf.map(val => _round(val*energy_intake, round_to)).join("+");
  150. }
  151. const m2 = intake.match(/^([0-9]+)Gr$/);
  152. if (m2) {
  153. const mass_intake = parseInt(m2[1]);
  154. const density_total = density_cpf.reduce((acc, val) => (acc + val), 0);
  155. return density_cpf.map(val => _round(val/density_total*100, round_to)).join("+");
  156. }
  157. }
  158. function macros_energy_ratio(mc, mp, mf, show_relative=true) {
  159. //const energy_intake = 2000; // kiloCalories
  160. const mass = { c: mc, p: mp, f: mf };
  161. // energy density. D = E / M. M = E / D
  162. const cal_per_gram = {
  163. c: 4, p: 4, f: 9,
  164. };
  165. const energy_cpf = ["c", "p", "f"].map(key => (
  166. mass[key]*cal_per_gram[key]
  167. ));
  168. if (show_relative) {
  169. // normalize to 100 grams total
  170. const energy_total = energy_cpf.reduce((acc, val) => (acc + val), 0);
  171. return energy_cpf.map(val => Math.round(val/energy_total*100)).join("+");
  172. }
  173. else {
  174. return energy_cpf.map(val => Math.round(val)).join("+");
  175. }
  176. }
  177. /* files are now inlined in html
  178. let file = {
  179. four_bodies: 'four elements - bodies 2020-07-30 color5.svg',
  180. three_hands: 'test-hands-long-or-broad.de.svg',
  181. };
  182. */
  183. let text = {
  184. page_footer: `
  185. <span>[ <a href="https://web.archive.org/web/*/https://github.com/milahu/alchi">web.archive.org/web/*/</a> ]&nbsp; <a href="https://github.com/milahu/alchi">github.com/milahu/alchi</a></span>
  186. <span><a href="https://creativecommons.org/publicdomain/zero/1.0/deed.de">Lizenz: CC-Zero-1.0</a></span>
  187. <span>${DOCNAME}.html</span>
  188. `,
  189. header_page1: `
  190. Hey! <b>Wir suchen Freunde</b>,
  191. und das ist unser Plan:
  192. `,
  193. header_page2: `
  194. Hey! <b>Wir suchen Freunde</b>,
  195. und das ist Seite 2:
  196. `,
  197. para_four_bodies: `
  198. Die perfekte <b>Großfamilie</b>
  199. braucht genau <b>16 Menschen</b>.
  200. Wer ist wer?
  201. Die <b>Vier Körper</b> ABCD
  202. können wir leicht sehen,
  203. denn <nw>Geschlecht (Mann oder Frau?)</nw>
  204. und <nw>Alter (Elter oder Kind?)</nw>
  205. sind offensichtlich
  206. (überschwellig, laute Stimmen, Grobstruktur).
  207. Vier Körper =
  208. `,
  209. para_four_elements: `
  210. Schwerer zu sehen
  211. (unterschwellig, leise Stimmen,
  212. Feinstruktur, Geister)
  213. sind die <b>Vier Elemente</b> 1234.
  214. Die Vier Elemente unterscheiden sich in Sensorik und Motorik.
  215. Sensorik prägt unsere Passivität
  216. (Weltsicht, Eindruck, Nehmen),
  217. Motorik prägt unsere Aktivität
  218. (Bewegung, Ausdruck, Geben).
  219. (Vergleich:
  220. sensorische und motorische Nervenfasern)
  221. Vier Elemente =
  222. `,
  223. problem_misunderstandings: `
  224. Ein großes Problem dieser Welt ist:
  225. <nw>Falsche Kommunikation</nw> und <b>Missverständnisse</b>
  226. zwischen verschiedenen Menschentypen.
  227. Wir umgeben uns gerne nur mit Freunden
  228. aber mit unseren Feinden können wir nichts anfangen,
  229. ausser sie auf Distanz halten,
  230. und heimlich bekämpfen.
  231. Unser Modell zeigt:
  232. Wie können wir unsere Freunde nutzen,
  233. um mit unseren Feinden zu reden?
  234. Dafür arbeiten unsere <b>Freunde als Übersetzer</b>.
  235. Eine direkte Kommunikation mit Feinden ist verboten,
  236. denn das bringt immer nur Missverständnisse
  237. (Mit Fremden soll man nicht Reden,
  238. dont talk to stranger),
  239. denn Freundschaft und Feindschaft
  240. haben meistens <b>Persönliche Gründe</b>
  241. und Sachliche Gründe sind oft nur Vorwand.
  242. `,
  243. /* moved to natural order
  244. mutual_completion: `
  245. In der perfekten Welt
  246. darf jedes Element seine Stärke leben
  247. und kann seine <b>Schwächen delegieren</b>
  248. an seine Freunde.
  249. `,
  250. */
  251. mix_types: `
  252. <nw><b>Mischtypen</b> - Woher kommen Mischtypen?</nw>
  253. Jedes Element kann drei Modalitäten spielen.
  254. Jede Modalität ist auch ein Element.
  255. Beispiel: Feuer spielt Wasser = 1x4.
  256. Das Element das <b>nicht</b> gespielt werden kann,
  257. ist das Gegen-Element = typische Schwäche.
  258. (Deswegen nur drei Modalitäten, und nicht vier.)
  259. Gegen-Elemente sind: Feuer-Erde und Luft-Wasser
  260. (siehe Kompass oder
  261. <nw>Spannkreuz &xmark;</nw> auf der Karte).
  262. Beispiel: Wasser kann nie Luft spielen.
  263. Manchmal ist es einfacher zu fragen:
  264. <b>Welches Element kann ich nie spielen?</b>
  265. Oder, welche zwei Eigenschaften (Sensorik + Motorik)
  266. kann ich nie gleichzeitig spielen?
  267. Wenn ein Element sich selbst spielt,
  268. dann spielt es die "bewegliche" Modalität
  269. (Schütze, Jungfrau, Zwillinge, Fische).
  270. Bsp. Luft spielt Luft
  271. = 3x3 = bewegliche Luft = Zwillinge.
  272. (Sternzeichen? Ja, aber
  273. <b>Kalender-Astrologie ist falsch</b>.
  274. Geburtstag sagt nichts über Element oder Modalität,
  275. sondern <b>Elemente sind
  276. <nw>zufällig verteilt</nw></b>,
  277. <nw>nicht erblich</nw>,
  278. <nw>nicht berechenbar</nw>).
  279. Die zwei äusseren Modalitäten,
  280. kindische Modalität (x13) und
  281. erwachsene Modalität (x24),
  282. entsprechen der Bindung
  283. an bestimmte Mitmenschen
  284. (Bindung als Ursache <b>oder</b> Wirkung
  285. = Partner haben oder Partner suchen).
  286. Bei den zwei <b>äusseren Modalitäten</b>
  287. (kindisch oder erwachsen)
  288. wird eine Eigenschaft gestärkt,
  289. <!-- (Sensorik oder Motorik), -->
  290. und die andere Eigenschaft wird geschwächt.
  291. Beispiel:
  292. <nw>2x4 = Erde spielt Wasser</nw>
  293. = weiblich-erwachsen
  294. spielt männlich-erwachsen
  295. = Inneres Geschlecht wird geschwächt
  296. und Inneres Alter wird gestärkt.
  297. Die geschwächte Eigenschaft
  298. ist ausgeglichen
  299. (mittel-alt oder "bi-sexuell"),
  300. die gestärkte Eigenschaft ist extrem
  301. (<nw>extrem männlich</nw>, <nw>extrem weiblich</nw>,
  302. <nw>extrem kindisch</nw>, <nw>extrem erwachsen</nw>).
  303. Wechselbare Modalität heisst auch:
  304. Die zwei äusseren Modalitäten
  305. werden gleich oft/stark gespielt,
  306. also sind im Gleichgewicht.
  307. <nw>Wann spiele ich <b>welche Modalität?</b></nw>
  308. Das sehen wir auf der Karte der 16 Typen.
  309. `,
  310. mix_types_sample: `
  311. Beispiel: Als "Ich" nehmen wir
  312. <nw>den Punkt A1 (Feuer Sohn).</nw>
  313. Als Bindungs-Partner nehmen wir
  314. <nw>den Punkt C3 (Luft Tochter).</nw>
  315. Dann gehen wir <b>ein Schritt weiter</b> zu A4
  316. - das ist die Modalität von A1,
  317. also:
  318. <nw>Feuer (1) spielt Wasser (4) = 1x4</nw>
  319. = festes Feuer = Löwe,
  320. genauer:
  321. <nw>Feuer <b>sucht Luft</b> spielt Wasser = 134.</nw>
  322. Für den Partner C3 gilt:
  323. <nw>Luft (sucht Feuer) spielt Erde = 312.</nw>
  324. Insgesamt sehen wir eine Dialog-Bindung
  325. <nw>2 1&lt;&gt;3 4 = 1&lt;&gt;3</nw>.
  326. Bleiben wir bei "Ich gleich A1".
  327. Jetzt nehmen wir C2 (Erde Tochter) als Bindungs-Partner.
  328. Wir gehen wieder "ein Schritt weiter"
  329. und landen wieder bei A4
  330. (die Karte wird einfach wiederholt:
  331. oben raus und unten wieder rein).
  332. Hier gilt also:
  333. <nw>Feuer <b>sucht Erde</b> spielt Wasser = 124</nw>
  334. Und:
  335. <nw>Erde sucht Feuer spielt Luft = 213.</nw>
  336. Insgesamt sehen wir eine Monolog-Bindung
  337. <nw>4 2&gt;&gt;1 3 = 2&gt;&gt;1</nw>.
  338. Also für jede Modalität gibt es
  339. immer zwei Bindungs-Partner.
  340. <!--
  341. Die kindischen Modalitäten (x13) heissen "kardinal"
  342. (Widder, Steinbock, Waage, Krebs) (Pfeil raus),
  343. die erwachsenen Modalitäten (x24) heissten "fest"
  344. (Löwe, Stier, Wassermann, Skorpion) (Pfeil rein).
  345. -->
  346. `,
  347. two_modalities: `
  348. Kindische Modalität
  349. = Ich spielt ein <nw>kindisches Element (x13)</nw>
  350. = <nw><b>Stärke</b> aber Dummheit</nw>
  351. = <nw>Sehen und Reden.</nw>
  352. Erwachsene Modalität
  353. = Ich spielt ein <nw>erwachsenes Element (x24)</nw>
  354. = <nw><b>Schlauheit</b> aber Schwäche</nw>
  355. = <nw>Hören und Zeigen.</nw>
  356. Modalität ist die <b>bevorzugte</b> Stress-Reaktion,
  357. die "im Zweifel" (neutraler Stress)
  358. häufiger gewählt wird.
  359. Oder der bevorzugte Bindungs-Partner,
  360. der häufiger gewählt wird
  361. (aus Gewohnheit/Einseitigkeit).
  362. Bei rein theoretischen Persönlichkeits-Tests
  363. (blind für Körpertyp)
  364. oder Umfragen zur politischen Gesinnung
  365. antwortet die Modalität, nicht das Element.
  366. Modalität prägt <b>Selbstbild</b>.
  367. `,
  368. monolog_bond: `
  369. Stärke und Schlauheit
  370. in einer <b>Monolog</b>-Beziehung (Gleichstrom):
  371. <nw>Redner &gt;&gt; Hörer</nw>
  372. (Pfeile siehe Karte,
  373. Beispiel <nw>3 4&lt;&lt;1 2 = 4&lt;&lt;1</nw>).
  374. <b>Redner</b> ist stark aber dumm
  375. (spielt seine kindische Modalität),
  376. <b>Hörer</b> ist schlau aber schwach
  377. (spielt seine erwachsene Modalität).
  378. Redner ist Seher und Redner, Lehrer,
  379. Erzähler, Antworter, Wortführer,
  380. hat Misstrauen und Einfluss.
  381. Hörer ist Hörer und Zeiger,
  382. Schüler, Versteher,
  383. Nenner, Frager,
  384. hat Vertrauen und Ohnmacht.
  385. Redner und Hörer führen ein <b>Interview</b>:
  386. Redner sendet lange Sätze,
  387. Hörer sendet kurze Stichworte.
  388. Die Glaubensfrage (Was glaube ich?)
  389. ist immer eine persönliche Frage,
  390. also <b>Wem glaube ich?</b>,
  391. also Auf wen höre ich?,
  392. also Wer sind meine Redner?,
  393. also Bei wem spiele ich
  394. meine erwachsene Modalität (Hörer)
  395. und kann verstehen?
  396. <!--
  397. (und der Andere spielt
  398. seine kindische Modalität.)
  399. -->
  400. Und umgekehrt:
  401. <b>Wer glaubt mir?</b>,
  402. also Wer hört auf mich?,
  403. also Wer sind meine Hörer?,
  404. also Bei wem spiele ich
  405. meine Kindische Modalität (Redner)
  406. und werde verstanden?
  407. <!--
  408. also Wer spielt bei mir
  409. seine erwachsene Modalität?
  410. (und Ich spiele
  411. meine kindische Modalität.)
  412. Antworten liefert die Karte:
  413. -->
  414. <!--
  415. Antworten/Erzählungen fließen von Redner nach Hörer,
  416. Fragen/Emotionen fließen von Hörer nach Redner.
  417. Antworten/Erzählungen sind emotionslos, wertneutral.
  418. Fragen/Emotionen sind grundlos, unerklärbar.
  419. Redner sendet Rationen und fängt Emotionen.
  420. Hörer fängt Rationen und sendet Emotionen.
  421. TODO better.
  422. von Redner nach Hörer fließen Rationale Informationen [komplex],
  423. von Hörer nach Redner fließen Emotionale Informationen [einfach].
  424. Hörer ist taub für die Emotionen von Redner,
  425. Redner ist taub für die Rationen von Hörer.
  426. Naturordnung
  427. Persönliche Gründe
  428. Lehrer und Schüler
  429. Sender und Fänger
  430. Einfluss und Verstand
  431. Unglaube und Glaube
  432. -->
  433. `,
  434. four_truths: `
  435. Die Vier Elemente
  436. bringen <b>Vier Wahrheiten</b>,
  437. und nur wenn Redner und Hörer
  438. naturrichtig verbunden sind,
  439. kann jede Wahrheit gehört werden,
  440. und nur so kann jedes Element
  441. auch andere Wahrheiten nutzen.
  442. `,
  443. anti_nature: `
  444. Eine häufige Ursache für Gewalt und Schmerz
  445. ist Kommunikation <b>gegen die Natur</b>ordnung,
  446. also Falsche Stärke oder Falsche Schlauheit.
  447. Falsche Erwartung heisst:
  448. (Von Natur aus) etwas nicht haben können,
  449. aber <b>trotz</b>dem haben wollen
  450. (Gewalt, Zwang, Rebellion, Der mühsame Weg).
  451. Beispiel:
  452. Von Natur aus können zwei Partner
  453. nur eine Monolog-Beziehung führen,
  454. weil ihre Modalitäten das so vorgeben.
  455. Wenn die Zwei trotzdem Dialog führen wollen,
  456. dann ist das immer ein Falscher Dialog,
  457. und bringt immer nur Missverständnisse,
  458. weil die Beziehung dafür "nicht gemacht" ist.
  459. `,
  460. false_talking: `
  461. <b>Falsche Redner</b>:
  462. Hörer und Redner sind in einer Monolog-Beziehung:
  463. <nw>Redner &gt;&gt; Hörer</nw>.
  464. Redner spielt seine kindische Modalität,
  465. Hörer spielt seine erwachsene Modalität.
  466. Hörer will zurück Reden
  467. (Rollentausch ohne Partnertausch),
  468. aber Hörer spielt automatisch den Hörer
  469. in der Nähe von Redner.
  470. Auf direktem Weg
  471. kann Hörer nicht Reden,
  472. also muss Hörer psychische Gewalt anwenden
  473. (lauter schreien),
  474. um eine falsche Rede zu senden.
  475. Hörer wird versuchen,
  476. die natürliche Taubheit von Redner zu brechen.
  477. Redner scheint taub, ungehorsam,
  478. ungläubig, unbelehrbar,
  479. undankbares Kind, Problemschüler.
  480. Im Extremfall begeht Hörer den falschen Schluss:
  481. "Der Redner lernt nichts von mir,
  482. also lernt er von keinem."
  483. `,
  484. false_hearing: `
  485. <b>Falsche Hörer</b>:
  486. Redner will hören und verstehen,
  487. was Hörer sagt und meint
  488. (Rollentausch ohne Partnertausch).
  489. Aber Redner wird automatisch zum Redner
  490. in der Nähe von Hörer.
  491. Redner ist taub für die Antworten von Hörer,
  492. und versteht nur Fragen von Hörer.
  493. Um <b>trotz</b>dem Antworten zu finden,
  494. wird Redner die Fragen selbst beantworten,
  495. aber diese Falschen Antworten
  496. sind nicht die Antworten von Hörer.
  497. Redner wird versuchen,
  498. natürliche Missverständnisse zu brechen.
  499. Hörer scheint wie ein Stummer,
  500. Geheimnisvoller, Dummkopf, Verrückter, Unreifer,
  501. der nur tausend Fragen stellt,
  502. aber keine Antworten gibt.
  503. Im Extremfall begeht Redner den falschen Schluss:
  504. "Ich kann den nicht verstehen,
  505. also keiner kann den verstehen."
  506. `,
  507. right_feedback: `
  508. (Natur-)Richtiges Reden und Hören:
  509. Wenn wir mit Monolog-Partnern
  510. einen Dialog führen wollen
  511. (Zurück-Reden oder Zurück-Hören),
  512. brauchen wir <b>gemeinsame Freunde</b>
  513. zum Bilden von <nw>Flusskreis &square;</nw>
  514. oder <nw>Spannkreuz &xmark;</nw>.
  515. Der <b>Rückweg</b> geht dann nicht direkt zum Partner,
  516. sondern über den <b>Umweg</b>
  517. der zwei Anderen in der Vierer-Gruppe
  518. (siehe Partnertausch im Flusskreis).
  519. `,
  520. dialog_bonds: `
  521. In einer <b>Dialog</b>-Beziehung (Wechselstrom)
  522. haben beide die gleiche Sensorik,
  523. also <nw>2 1&lt;&gt;3 4 = 1&lt;&gt;3</nw>
  524. (Beide spielen Hörer)
  525. oder <nw>1 2&gt;&lt;4 3 = 2&gt;&lt;4</nw>
  526. (Beide spielen Redner).
  527. <!-- TODO expand? -->
  528. `,
  529. diagonal_bonds: `
  530. Zum <b>gleichen Element</b>
  531. haben wir genau eine Bindung,
  532. nämlich die Diagonal-Bindung im Flusskreis.
  533. Diese Bindung funktioniert nur dann,
  534. wenn Beide die gleiche Modalität spielen
  535. (Beispiel: D4x2 und C4x2)
  536. und gleichzeitig ihre Modalität wechseln
  537. (zu D4x1 und C4x1).
  538. Dieser Modalitäts-Wechsel
  539. passiert auch beim
  540. <b>Partnertausch</b> im Flusskreis,
  541. dabei ist der Diagonal-Partner ein Gegenspieler (Halbfreund),
  542. mit dem man sich zwei Partner teilt,
  543. und immer wieder gleichzeitig
  544. die Partner wechselt,
  545. so dass immer <b>zwei Paare</b> da sind.
  546. `,
  547. club16: `
  548. <nw><b>Club 16</b>: Wir treffen uns <b>jeden Tag</b> um 16 Uhr</nw>
  549. an den Hausnummern <nw>"K Mal 16"</nw>
  550. in den Straßen unserer Nachbarschaft.
  551. <nw>Also Hausnummern ${Array.range(8).map(v=>v*16).join(", ")}, ...</nw>
  552. <!-- 0, 16, 32, 48, 64, 80, 96, 112, 128 -->
  553. Das ist unser Minimal-Konsens
  554. als Grundlage für Selbstorganisation.
  555. An deinem Treffpunkt kommt keiner?
  556. Dann probier auch mal andere Treffpunkte,
  557. in anderen Straßen deiner Nachbarschaft.
  558. Wir fragen:
  559. <nw>1. Was ist dein Element?</nw>
  560. <nw>2. Wie alt bist du?</nw>
  561. <nw>3. Wen kennst du hier?</nw>
  562. <nw>4. Wer passt zusammen?</nw>
  563. Wir gehen <nw>von Haus zu Haus</nw>,
  564. <nw>von Tür zu Tür</nw>
  565. und wir sagen <nw>"Hey! Wir suchen Freunde."</nw>
  566. (Der Rest ergibt sich dann irgendwie ....)
  567. <!-- all treffpunkts are beautiful. dezentral!
  568. Größere Treffpunkte sind Hausnummern
  569. K*32, K*64, K*128, etc.
  570. Der größte Treffpunkt ist immer
  571. Hausnummer Null (am Anfang der Straße).
  572. -->
  573. <nw><b>Kuppeln</b>: Wer passt zusammen?</nw>
  574. Wenn nach unserer Karte
  575. zwei Menschen gut zusammen passen,
  576. dann bringen wir die zwei zusammen.
  577. Versammlungen:
  578. Mit unseren Freunden
  579. machen wir jeden Tag zwei Versammlungen,
  580. umzu unser <b>Privatleben organisieren</b>.
  581. Eine <b>Morgenversammlung</b>,
  582. wo die Nacht nachbereitet wird,
  583. und wo der Tag vorbereitet wird.
  584. Und eine <b>Abendversammlung</b>,
  585. wo der Tag nachbereitet wird,
  586. und wo die Nacht vorbereitet wird.
  587. Nachbereiten heisst:
  588. Was war gut?
  589. Was war schlecht?
  590. Vorbereiten heisst:
  591. Bilden von Paaren und Gruppen,
  592. für den Tag oder für die Nacht.
  593. Langfristig können wir damit organisieren
  594. eine <b>Abstimmung mit den Füßen</b>,
  595. also Partnertausch, Kindertausch,
  596. Wohnungstausch, ....
  597. so dass jeder seine Freunde in der Nähe hat
  598. (<nw>Nahbindung statt Fernbeziehung,</nw>
  599. <nw>Bewegung statt Gefangenschaft</nw>).
  600. <!--
  601. Wer sein Element nach aussen tragen will,
  602. der trägt
  603. seine Gegenfarbe (als Armband oder Kleid)
  604. oder seine Nebenfarben
  605. als zweiteiliges Kleid (oben-unten).
  606. -->
  607. `,
  608. gender_vs_modality: `
  609. Geschlecht vom Partner:
  610. Erwachsene Elemente
  611. bei Homo-Partnern
  612. spielen <b>Schüler</b>/Hörer (24sg24).
  613. Erwachsene Elemente
  614. bei Hetero-Partnern
  615. spielen <b>Lehrer</b>/Redner (24dg13).
  616. Kindische Elemente
  617. bei Homo-Partnern
  618. spielen Lehrer/Redner (13sg13).
  619. Kindische Elemente
  620. bei Hetero-Partnern
  621. spielen Schüler/Hörer (13dg24).
  622. "Homo" = gleiches Geschlecht
  623. = same gender = sg.
  624. "Hetero" = anderes Geschlecht
  625. = diff(erent) gender = dg.
  626. Also:
  627. Erwachsene Elemente (24)
  628. brauchen Lehrer/Redner vom gleichen Geschlecht.
  629. Kindische Elemente (13)
  630. brauchen Lehrer/Redner vom anderen Geschlecht.
  631. `,
  632. /*
  633. props_are_positive: `
  634. Eigenschaften der vier Elemente
  635. sind immer Stärken, Talente (positiv).
  636. Für Extraverts ist Introversion eine Schwäche.
  637. Für Neurotiker ist Psychotik eine Schwäche.
  638. Und umgekehrt.
  639. `,
  640. */
  641. nature_vs_art: `
  642. Natur oder Kunst?
  643. <!--Naturordnung und Kunstordnung.-->
  644. Die eine Hälfte aller Menschen
  645. glaubt an Naturordnung,
  646. die andere Hälfte
  647. glaubt an Kunstordnung.
  648. <b>Beide</b> haben subjektiv Recht, wie so oft.
  649. Die entscheidende Frage ist:
  650. Welche Modalität ist besser?
  651. Die wechselbare Modalität
  652. oder eine äussere Modalität?
  653. `,
  654. natural_order: `
  655. <b>Naturordnung</b> heisst:
  656. Jeder Mensch wird geboren
  657. mit einem der vier Elemente (eine Mitte),
  658. das Element/Talent bleibt lebenslang gleich.
  659. Vorbestimmung, Schicksal.
  660. Jeder soll seine wechselbare Modalität spielen.
  661. Tu was DU willst,
  662. Sei du selbst, nicht künstlich,
  663. Vier Farben System.
  664. In der Naturordnung
  665. darf jedes Element seine Stärke leben
  666. und kann seine <b>Schwächen delegieren</b>
  667. an seine Freunde
  668. (natürliche Arbeitsteilung).
  669. Das einseitige Spielen von äusseren Modalitäten
  670. ist eine Schieflage, die korrigiert werden soll.
  671. Schieflage <b>korrigieren</b>:
  672. Dazu bildet man Flusskreise und/oder Spannkreuze,
  673. in denen die Anderen eine passende Schieflage haben,
  674. so dass immer zwei Paare entstehen,
  675. die dann vorsichtig
  676. den <b>Partnertausch</b> üben können.
  677. Der bevorzugte/alte Partner gibt Sicherheit,
  678. so kann man den anderen/neuen Partner
  679. langsam kennen lernen
  680. (Regel und Ausnahme),
  681. und seine schwache äussere Modalität trainieren.
  682. Alle Mitglieder der Gruppe
  683. verlassen ihre Schieflage gleichzeitig,
  684. so dass die Gruppe im Gleichgewicht bleibt.
  685. <!-- wiederholung
  686. Element ist angeboren und lebenslang.
  687. Talent ist vorbestimmt und konstant.
  688. -->
  689. `,
  690. made_order: `
  691. <b>Kunstordnung</b> heisst:
  692. Alle Menschen sind gleich geboren
  693. (wechselbare Modalität)
  694. und werden durch Erziehung (Kunst, Kultur)
  695. entweder "gut" (erwachsene Modalität)
  696. oder "böse" (kindische Modalität, Peter Pan).
  697. Modalität ist gelernt und änderbar.
  698. Talent kann man lernen.
  699. "Man muss nur wollen, dann geht alles."
  700. (Konstruktivismus, Drei Farben System).
  701. `,
  702. mutable_modality: `
  703. <!-- nein, nur subjektiv gültig für 12
  704. Die wechselbare Modalität gilt als besonders gesund,
  705. sie ist die Mitte zwischen den zwei anderen Modalitäten (kardinal und fest).
  706. -->
  707. Die <b>wechselbare</b> Modalität (mittelalt)
  708. ist die Mitte
  709. zwischen den äusseren Modalitäten,
  710. zwischen kindisch und erwachsen.
  711. Wechselbare Modalität heisst:
  712. Das Element spielt im Durchschnitt
  713. beide äusseren Modalitäten gleich stark/oft
  714. (steter Wechsel, ausgewogenes Hin und Her).
  715. Wechselbare Modalität heisst auch:
  716. Das Element spielt sich selbst,
  717. zB "Luft spielt Luft" = 3x3,
  718. `,
  719. in_case_of_doubt: `
  720. <b>Zweifel</b>:
  721. Nur eine Theorie/Vision/Tagtraum?
  722. Wenn die Karte falsch ist:
  723. <nw>Die 16 Menschen-Typen</nw> sind real
  724. <nw>(4 Körper x 4 Elemente)</nw>,
  725. und wenn man sie alle an einem Ort versammelt,
  726. dann werden sie
  727. die richtige Ordnung von selbst finden
  728. (Selbstorganisation).
  729. Andere Weltbilder sind auch "nur Theorie"
  730. und nur weil andere Experimente schon länger laufen,
  731. sind sie nicht automatisch besser.
  732. Mehr Wettbewerb bitte!
  733. Und, Probieren geht über Studieren:
  734. Eine Theorie kann man nur vergleichen,
  735. wenn man sie vorher ausprobiert hat.
  736. Wer eine gute Theorie angreifen will
  737. der wird vom Thema ablenken
  738. und mit Falschen Gründen argumentieren
  739. (Formalkritik).
  740. Forschung:
  741. Was ist noch <b>unklar</b>?
  742. Als Modalität nehmen wir
  743. die Dreifach-Sensorik,
  744. aber was ist mit der Dreifach-Motorik?
  745. Genauer:
  746. Als Redefluss nehmen wir
  747. die Richtung der kindischen Modalität,
  748. also den <nw>Sensorik-Fluss (&gt;sense&gt;)</nw>.
  749. Aber welche Rolle spielt
  750. der <nw>Motorik-Fluss (&gt;move&gt;)</nw>
  751. in Richtung der weiblichen Modalität?
  752. (Beispiel <nw>4 3&gt;move&gt;1 2</nw>)
  753. `,
  754. education_mothers: `
  755. Ein Problem von <b>Erziehung</b>
  756. ist die Über-Presenz von Frauen.
  757. Dadurch werden Kinder in eine Modalität gedrängt:
  758. Kindische Söhne (A13) und
  759. erwachsene Töchter (C24)
  760. spielen ihre erwachsene Modalität (x24)
  761. (werden "brav").
  762. Erwachsene Söhne (A24) und
  763. kindische Töchter (C13)
  764. spielen ihre kindische Modalität (x13)
  765. (werden "böse").
  766. Auch daher die populäre Verwechslung
  767. "Männer sind kindisch (also stark aber dumm)".
  768. Nein,
  769. Geschlecht (AD-BC) und Inneres Alter (13-24)
  770. sind verschiedene Eigenschaften.
  771. Ein anderer Grund für die Verwechslung
  772. "Männer sind kindisch"
  773. sind die äusseren Modalitäten von Altruisten (34):
  774. Entweder ein Altruist spielt Feuer (34x1),
  775. dann fühlt er sich männlich und kindisch.
  776. Oder ein Altruist spielt Erde (34x2),
  777. dann fühlt er sich weiblich und erwachsen.
  778. Bewusstsein und <b>Selbstbild</b>
  779. sind Ausdruck von Modalität,
  780. nicht von Element.
  781. <!-- warum nur 34? 12 machen das auch! = same element bonds
  782. Kunstordnung:
  783. Altruisten (34) neigen zur Einigung
  784. unter einer gemeinsamen Modalität.
  785. Beispiel:
  786. Altruisten (34) einigen sich auf
  787. "erwachsene Modalität ist gut (34x2),
  788. und kindische Modalität ist böse."
  789. Also:
  790. "Mutter gut, Sohn böse".
  791. (Feministen, Mutter-Göttin, Erde-Ideal).
  792. Oder:
  793. Altruisten (34) einigen sich auf
  794. "kindische Modalität ist gut (34x1),
  795. und erwachsene Modalität ist böse."
  796. Also:
  797. "Sohn gut, Mutter böse".
  798. (Satanisten, Sohn-Gott, Feuer-Ideal).
  799. Diese zwei Kollektive (34x2 und 34x1)
  800. führen einen endlosen Krieg darum,
  801. welches Ideal besser ist (Erde oder Feuer).
  802. -->
  803. `,
  804. school_no_choice: `
  805. Ein Problem von <b>Schule</b> ist:
  806. Lehrer sind Vorgesetzte und können nicht gewählt werden.
  807. Idealer Weise können Schüler und Lehrer
  808. sich gegenseitig wählen (Personenkult, Beidseitigkeit).
  809. `,
  810. works_everywhere: `
  811. Das Schöne ist:
  812. Naturordnung funktioniert <b>immer</b> und überall,
  813. das heisst,
  814. alle Lebensbereiche können so reformiert werden,
  815. dass alle Menschen
  816. ihre natürlichen Bindungen haben.
  817. Ein Nachteil dieser Allgemeingültigkeit ist:
  818. Keiner fühlt sich verantwortlich,
  819. und keiner will den ersten Schritt machen ....
  820. `,
  821. four_crosses: `
  822. Die <b>Vier Spannkreuze</b>
  823. (<nw>Kreuze &xmark;</nw> auf der Karte)
  824. unterscheiden sich in den Zwei Kongruenzen:
  825. <nw>1. Geschlechts-Kongruenz</nw>
  826. = <nw>Äußeres Geschlecht</nw>
  827. mal <nw>Inneres Geschlecht</nw>.
  828. <nw>2. Alters-Kongruenz</nw>
  829. = <nw>Äußeres Alter</nw>
  830. mal <nw>Inneres Alter</nw>.
  831. Positive Produkte heissten "Kongruenz",
  832. negative Produkte heissen "Opposition".
  833. Beispiel:
  834. (positive) Geschlechts-Kongruenz
  835. = Männer sind männlich
  836. und Frauen sind weiblich
  837. = M1 F2 F3 M4
  838. = "PatriArchat" (Ark = unten spitz = 14).
  839. Geschlechts-Opposition
  840. = Frauen sind männlich
  841. und Männer sind weiblich
  842. = F1 M2 M3 F4
  843. = "MatriArchat" (Frauen sind Strategen = 14).
  844. `,
  845. four_dots: `
  846. In einem <b>Viereck</b> (ABCD) gilt:
  847. Mutter und Vater sind <b>gleich alt</b>.
  848. Tochter und Sohn sind gleich alt.
  849. Gleichalte Kinder kommen von verschiedenen Müttern,
  850. sind also nicht blutverwandt.
  851. (Element ist <nw>nicht erblich</nw>,
  852. der Schluss von blutverwandt
  853. auf geistverwandt ist falsch.)
  854. Aber für gute Kommunikation
  855. sind sie <b>geistverwandt</b>,
  856. also nebeneinander auf der Karte,
  857. in einem gemeinsamen
  858. <nw>Flusskreis &square;</nw> oder
  859. <nw>Spannkreuz &xmark;</nw>.
  860. `,
  861. post_script: `
  862. Und sonst?
  863. Wir brauchen ein besseres Flugblatt
  864. (<tt>github.com/milahu/alchi</tt>),
  865. ein Video mit unserem Plan,
  866. mehr Übersetzungen,
  867. vielleicht ein Buch,
  868. und ganz viele Leute,
  869. die unser Projekt mögen und teilen
  870. (im Internet teilen,
  871. Flyer drucken und verteilen).
  872. <!--
  873. Weil: Wir suchen Freunde.
  874. -->
  875. `,
  876. post_script_2: `
  877. Ein mal gelesen und alles verstanden?
  878. Glaub ich dir nicht : P
  879. Ich hab selber viele Jahre gesucht
  880. um diese Antworten zu finden ....
  881. Gönn dir ne Pause,
  882. und lies den Zettel nochmal.
  883. <nw>Zurück zu: Wir suchen Freunde!</nw>
  884. `,
  885. // TODO remove?
  886. body1: `A : Sohn : jung + männlich`,
  887. body2: `B : Mutter : alt + weiblich`,
  888. body3: `C : Tochter : jung + weiblich`,
  889. body4: `D : Vater : alt + männlich`,
  890. // TODO remove?
  891. element1: `1 : Feuer : extravertiert + psychotisch`,
  892. element2: `2 : Erde : introvertiert + neurotisch`,
  893. element3: `3 : Luft : extravertiert + neurotisch`,
  894. element4: `4 : Wasser : introvertiert + psychotisch`,
  895. // pallas
  896. me: 'Ich',
  897. you: 'Du',
  898. he: 'Er',
  899. she: 'Sie',
  900. dress_opposite_color: `
  901. Kleid in <b>Gegenfarbe</b>:
  902. Frauen <nw>tragen Lila und suchen Männer</nw>,
  903. Männer <nw>tragen Lime und suchen Frauen</nw>
  904. (vom gleichen Alter).
  905. Kinder <nw>tragen Türkis und suchen Eltern</nw>,
  906. Eltern <nw>tragen Orange und suchen Kinder</nw>
  907. (vom gleichen Geschlecht).
  908. `,
  909. translation_bigfive: `
  910. Übersetzung zu The <b>Big Five</b>:
  911. kindisch (13) = High Openness,
  912. weiblich (23) = High Neuroticism,
  913. altruistisch (34) = High Agreeableness,
  914. kindische Modalität (x13) = High Extraversion,
  915. männliche Modalität (x14) = High Conscientiousness.
  916. `,
  917. translation_mbti: `
  918. Übersetzung zu <b>MBTI</b>:
  919. weiblich (23) = "Extraversion",
  920. kindisch (13) = iNtuition,
  921. männliche Modalität (x14) = Thinking (Denken),
  922. kindische Modalität (x13) = Perceiving (Wahrnehmen).
  923. `,
  924. project_intro: `
  925. <!-- TODO expand? -->
  926. Wer schreibt hier?
  927. <nw>"Wir suchen Freunde"</nw>
  928. ist ein Projekt von Element Feuer
  929. (<nw>liberaler Stratege</nw>,
  930. <nw>Hauptberuf Sohn</nw>),
  931. zur Befreiung vom Problem der Missverständnisse,
  932. zur Befreiung aus Schwäche und Dummheit.
  933. Eine Antwort auf das Gebet "Erlöse uns von dem Bösen".
  934. Eine Antwort auf die Frage:
  935. <b><nw>Wer muss mit wem reden,</nw>
  936. <nw>damit jeder gehört wird?</nw></b>
  937. Eine komplexe Lösung für komplexe Probleme.
  938. <nw>Wir versprechen:
  939. <b>Stärke und Schlauheit für alle!</b></nw>
  940. <!--
  941. Und: Bilanz in allen vier Dimensionen
  942. (Geschlecht, Motorik, Sensorik, Alter).
  943. -->
  944. `,
  945. bodies: `
  946. <!-- Körper -->
  947. <nw>A. Sohn</nw>
  948. <nw>B. Mutter</nw>
  949. <nw>C. Tochter</nw>
  950. <nw>D. Vater</nw>
  951. <nw>Alter + Geschlecht</nw>
  952. <nw>Kind + Mann</nw>
  953. <nw>Elter + Frau</nw>
  954. <nw>Kind + Frau</nw>
  955. <nw>Elter + Mann</nw>
  956. `,
  957. gender2_age3: `
  958. <b>Geschlecht ist zweifach</b>:
  959. Mann oder Frau.
  960. ("Anderes Geschlecht" ist eindeutig.)
  961. Auch das Innere Geschlecht ist zweifach:
  962. männlich oder weiblich.
  963. <b>Alter ist dreifach</b>:
  964. Kinder oder Gleichalte oder Eltern.
  965. ("Anderes Alter" ist zweideutig: jünger oder älter.)
  966. Auch das Innere Alter ist dreifach,
  967. weil <b>Inneres Alter gleich Modalität</b>:
  968. kindisch oder mittelalt oder erwachsen.
  969. Weil es viele verschiedene Alter gibt,
  970. unterscheiden wir in <b>Meine Bilanz</b>
  971. nur nach Geschlecht und Element
  972. (2 x 4 = <b>Acht Typen</b>, Noahs Familie).
  973. Zum Verkuppeln ist das <b>Alter</b> aber schon wichtig,
  974. das zeigt die Karte der sechzehn Typen.
  975. 2 von 6 Freunden sind gleich-alt,
  976. 4 von 6 Freunden sind verschieden-alt (jünger und älter).
  977. Die verschieden-alten Freunde
  978. brauchen wir in beiden Altern, also jünger <b>und</b> älter.
  979. Idealer Weise braucht jeder Mensch also <b>10 Freunde</b>:
  980. 4 Eltern + 2 Gleichalte + 4 Kinder.
  981. Keiner will der Jüngste oder der Älteste sein.
  982. Kinder haben Kuscheltiere
  983. als Ersatz für jüngere Freunde.
  984. Eltern haben Götter
  985. als Ersatz für ältere Freunde
  986. (Ahnen, Vorfahren, Älteste).
  987. Der Alters-Unterschied zu verschieden-alten Freunden
  988. sollten mehrere Jahre sein.
  989. Jede Alters-Stufe braucht 8 Typen (4 Elemente mal 2 Geschlechter),
  990. also geben drei Alter gleich 24 Typen (4 E x 2 G x 3 Alter).
  991. Drei Alter = Großeltern, Eltern, Kinder = "Oberschicht, Mittelschicht, Unterschicht".
  992. Dann sind für die <b>Mittelschicht</b> alle Beziehungen erfüllt.
  993. `,
  994. elements: `
  995. <!-- Element -->
  996. 1. Feuer
  997. 2. Erde
  998. 3. Luft
  999. 4. Wasser
  1000. Eigenfarbe<!-- (wird nie nach Aussen getragen TODO ??)-->
  1001. Rot
  1002. Grün
  1003. Gelb
  1004. Blau
  1005. Gehirn, Instinkt, Geist, Innenleben, "Hauptberuf"
  1006. Sohn
  1007. Mutter
  1008. Tochter
  1009. Vater
  1010. Plato, David Keirsey
  1011. Künstler-Handwerker<!-- iconic -->
  1012. Händler<!-- pistic -->
  1013. Idealist-Ethiker<!-- noetic -->
  1014. Techniker<!-- dianoetic -->
  1015. Gegenfarbe<!-- TODO ?? (einfarbiges Sommerkleid/Unterkleid) -->
  1016. Grün
  1017. Rot
  1018. Blau
  1019. Gelb
  1020. Carl Jung
  1021. Intuition
  1022. Sensation
  1023. Fühlen
  1024. Denken
  1025. William Sheldon
  1026. Meso-
  1027. Meso-
  1028. Endo-
  1029. Ecto-<div class="suffix">Morph</div>
  1030. Anton LaVey
  1031. Satan<!-- Arian -->
  1032. Belial<!-- Bella -->
  1033. Lucifer<!-- Lucas? -->
  1034. Leviathan
  1035. Symbol
  1036. ♥ Herz
  1037. ♠ Pik, Spaten
  1038. ♣ Blatt
  1039. ♦ Karo, Raute
  1040. Körperform
  1041. Apfel
  1042. Birne
  1043. Sanduhr
  1044. Spargel
  1045. "Rasse" oben-unten
  1046. Weiss-Schwarz
  1047. Schwarz-Weiss
  1048. Weiss
  1049. Schwarz
  1050. South Park
  1051. Kenny
  1052. Stan
  1053. Eric
  1054. Kyle
  1055. Körper oben-unten
  1056. Breit-Lang
  1057. Lang-Breit
  1058. Breit-Breit
  1059. Lang-Lang
  1060. <!-- Körper oben-unten -->
  1061. weich-hart
  1062. hart-weich
  1063. weich-weich
  1064. hart-hart
  1065. Sport
  1066. Boxer
  1067. Läufer
  1068. Ringer
  1069. Hochspringer
  1070. Harry Potter
  1071. Gryffindor
  1072. Hufflepuff
  1073. Ravenclaw
  1074. Slytherin
  1075. Simpsons
  1076. Marge
  1077. Homer
  1078. Bart
  1079. Lisa
  1080. Nebenfarben (zweifarbiges Sommerkleid/Unterkleid, figur-betonend) oben-unten
  1081. Gelb-Blau
  1082. Blau-Gelb
  1083. Rot-Grün
  1084. Grün-Rot
  1085. Inneres Alter + Inneres Geschlecht (Sensorik + Motorik)
  1086. kindisch + männlich
  1087. erwachsen + weiblich
  1088. kindisch + weiblich
  1089. erwachsen + männlich
  1090. MakroNährstoff-Bedarf in Gramm Carbs+Protein+Fett pro Tag (2000 kCal)
  1091. ${macros_mass_ratio("meso", "2000kCal", 5)}
  1092. ${macros_mass_ratio("meso", "2000kCal", 5)}
  1093. ${macros_mass_ratio("endo", "2000kCal", 5)}
  1094. ${macros_mass_ratio("ecto", "2000kCal", 5)}
  1095. Milton Rokeach
  1096. Kommunist
  1097. Nationalist
  1098. Sozialist
  1099. Faschist
  1100. <a href="https://flowgenomeproject.com/">FlowGenomeProject.com</a>
  1101. Hard Charger
  1102. Flow Goer
  1103. Crowd Pleaser
  1104. Deep Thinker
  1105. <!--
  1106. Fettverteilung oben-unten
  1107. Fett-Mager
  1108. Mager-Fett
  1109. Fett
  1110. Mager
  1111. Körperteil
  1112. Zunge
  1113. Nase
  1114. Mund?
  1115. Augen?
  1116. Körperform
  1117. Karotte
  1118. Glocke
  1119. Acht
  1120. Strich
  1121. Stress-Hormon
  1122. Adrenalin
  1123. Endorphin
  1124. Cortisol
  1125. Serotonin
  1126. Typischer Mangel
  1127. Tyrosin
  1128. D-PhenylAlanin
  1129. GABA
  1130. Tryptophan
  1131. Makros pro 100 Gramm
  1132. ${macros_mass_ratio("meso", "100Gr")}
  1133. ${macros_mass_ratio("meso", "100Gr")}
  1134. ${macros_mass_ratio("endo", "100Gr")}
  1135. ${macros_mass_ratio("ecto", "100Gr")}
  1136. Zahl
  1137. 1
  1138. 2
  1139. 3
  1140. 4
  1141. Talent?
  1142. Schlau
  1143. Schwach
  1144. Stark
  1145. Dumm
  1146. Flagge von
  1147. Nord-Holland
  1148. Berber
  1149. Ghana
  1150. Dagestan
  1151. Arbeit
  1152. Mörder (geiler Bock, Züchter)
  1153. Schöpfer (Bauer, Gärtner)
  1154. Räuber (Jäger, Unter-Nehmer)
  1155. Schenker (Diplomat?)
  1156. Hans Eysenck<!- - Sensorik (Inneres Alter) + Motorik (Inneres Geschlecht)- ->
  1157. extravertiert + psychotisch
  1158. introvertiert + neurotisch
  1159. extravertiert + neurotisch
  1160. introvertiert + psychotisch
  1161. Körperteil
  1162. Brust
  1163. Arsch
  1164. Kopf
  1165. Hals
  1166. Tobias Beck
  1167. 1 Hai, Egoist
  1168. 2 Wal, Helfer, Arbeiter
  1169. 3 Delphin, Optimist
  1170. 4 Eule, Hinterfragen, Analysieren
  1171. Makronährstoff-Bedarf in Gramm Carbs+Protein+Fett pro Portion (400 kCal)
  1172. ${macros_mass_ratio("meso", "400kCal")}
  1173. ${macros_mass_ratio("meso", "400kCal")}
  1174. ${macros_mass_ratio("endo", "400kCal")}
  1175. ${macros_mass_ratio("ecto", "400kCal")}
  1176. -->
  1177. `,
  1178. sense: `
  1179. Inneres Alter
  1180. Kindisch
  1181. Erwachsen
  1182. Zahlen
  1183. 13
  1184. 24
  1185. <!-- -->
  1186. Leichtsinn
  1187. Starrsinn
  1188. <!-- -->
  1189. neugierig
  1190. altmodisch
  1191. Hans Eysenck
  1192. Extravertiert
  1193. Introvertiert
  1194. <!-- Hans Eysenck -->
  1195. E
  1196. I
  1197. <!-- -->
  1198. Stolz
  1199. Scham
  1200. Lösungen
  1201. improvisieren
  1202. wiederholen
  1203. Gewissen
  1204. schlecht
  1205. gut
  1206. Schätzt
  1207. Gefühl
  1208. Erfahrung
  1209. <!-- -->
  1210. Probleme bekämpfen
  1211. Gutes vermehren
  1212. Fokus
  1213. verteilt
  1214. konzentriert
  1215. Neues verstehen, Lernen
  1216. schnell
  1217. langsam
  1218. Arbeit
  1219. Universalist
  1220. Spezialist
  1221. <!-- -->
  1222. Katzen-
  1223. Hunde-<div class="suffix">Menschen</div>
  1224. Nase
  1225. fein
  1226. grob
  1227. Brust
  1228. groß
  1229. klein
  1230. <!-- -->
  1231. Vorfreude<!-- bevor man etwas probiert, glücklich durch warten, idealistisch -->
  1232. Nachfreude<!-- nach erledigter Pflicht, glücklich durch machen, materialistisch -->
  1233. <!-- kinderspiel -->
  1234. Wahrheit
  1235. Pflicht
  1236. Big Five - Offenheit für Erfahrung
  1237. Offen
  1238. Geschlossen
  1239. Arbeit
  1240. kreativ
  1241. Routine
  1242. Bewegung
  1243. in Freiheit
  1244. auf Kommando
  1245. <!-- arbeit -->
  1246. Fleisch-Jäger
  1247. Blumen-Sammler
  1248. <!-- tag nach rhythmus -->
  1249. Frühaufsteher
  1250. Langschläfer
  1251. <!-- -->
  1252. Morgen-
  1253. Abend-<div class="suffix">Mensch</div>
  1254. Eigenfarbe
  1255. Orange
  1256. Türkis
  1257. <!-- -->
  1258. Rot-Gelb
  1259. Grün-Blau
  1260. <!-- -->
  1261. freche Wahrsager
  1262. höfliche Lügner
  1263. <!-- -->
  1264. Sucher
  1265. Verstecker
  1266. Bei Problemen<!-- Abweichung -->
  1267. sensibel
  1268. leidensfähig<!-- ignorant -->
  1269. Probleme
  1270. angreifen
  1271. verdrängen
  1272. Gegen Probleme
  1273. aggressiv
  1274. defensiv
  1275. Gift
  1276. spucken
  1277. schlucken
  1278. <!--
  1279. -
  1280. konfrontieren
  1281. meiden
  1282. -->
  1283. <!-- -->
  1284. Nachsicht
  1285. Vorsicht
  1286. <!--
  1287. Für neue Erfahrung
  1288. offen
  1289. geschlossen
  1290. -->
  1291. <!-- -->
  1292. naiv
  1293. erfahren
  1294. <!-- alter -->
  1295. spätkindisch
  1296. frühreif
  1297. <!-- -->
  1298. Sensor
  1299. Speicher
  1300. Gut
  1301. Fühlen
  1302. Wissen
  1303. Gut
  1304. Zukunft
  1305. Vergangenheit
  1306. Böse
  1307. vorsätzlich
  1308. fahrlässig
  1309. <!-- Böse -->
  1310. bewusst
  1311. unbewusst
  1312. <!-- -->
  1313. Probierer
  1314. Studierer
  1315. <!--
  1316. -
  1317. Praktiker
  1318. Theoretiker
  1319. -->
  1320. <!-- -->
  1321. Neugier
  1322. Geduld
  1323. <!-- -->
  1324. Anspruchsvoll<!-- Kritisch -->
  1325. Bescheiden
  1326. Gesund
  1327. Körper
  1328. Geist (Ruf, Ansehen)
  1329. Politischer Kompass
  1330. liberal
  1331. konservativ
  1332. <!--
  1333. fahrlässig, nebenbei
  1334. kreativ
  1335. destruktiv
  1336. Schmerz
  1337. Täter
  1338. Opfer
  1339. -->
  1340. Zivilisation
  1341. Kriminelle
  1342. Zivilisten
  1343. Prinzip
  1344. Lust
  1345. Angst
  1346. <!-- -->
  1347. Streitlust
  1348. Harmoniesucht
  1349. Humor
  1350. warm
  1351. kalt
  1352. Ausschnitt
  1353. Rundhals
  1354. V-Neck
  1355. Kopfhaare
  1356. fein
  1357. kräftig
  1358. <!-- Kopfhaare -->
  1359. kurz
  1360. lang
  1361. <!--
  1362. Reden
  1363. Sender
  1364. Fänger
  1365. Kommmunikation
  1366. Redner
  1367. Hörer
  1368. Kommmunikation
  1369. Erzähler
  1370. Dichter
  1371. Kommmunikation
  1372. lange Sätze
  1373. kurze Sätze
  1374. Kommmunikation
  1375. Redner
  1376. Schreiber (Zeiger)
  1377. Arbeit
  1378. Kinderpfleger
  1379. Altenpfleger
  1380. Gefühl
  1381. Optimist
  1382. Pessimist
  1383. Entspannt
  1384. manisch
  1385. depressiv
  1386. Volk
  1387. Goyim
  1388. Juden
  1389. -->
  1390. `,
  1391. move: `
  1392. Inneres Geschlecht
  1393. Männlich
  1394. Weiblich
  1395. Zahlen
  1396. 14
  1397. 23
  1398. Motorik
  1399. Fein
  1400. Grob
  1401. Hans Eysenck
  1402. Psychotisch
  1403. Neurotisch
  1404. <!-- Hans Eysenck -->
  1405. P
  1406. N
  1407. Psychostress-Toleranz
  1408. Hoch
  1409. Niedrig
  1410. <!-- -->
  1411. Stratege
  1412. Politiker
  1413. <!-- -->
  1414. häuslich ("dominant")
  1415. öffentlich
  1416. <!-- -->
  1417. Innendienst
  1418. Aussendienst
  1419. <!-- -->
  1420. Hausarbeiter
  1421. Feldarbeiter
  1422. Eigenfarbe
  1423. Lila
  1424. Lime
  1425. <!-- eigenfarbe am körper -->
  1426. Eichel
  1427. Schleim
  1428. <!-- -->
  1429. Rot-Blau
  1430. Grün-Gelb
  1431. <!-- -->
  1432. Einzelgänger
  1433. Geselle
  1434. <!-- -->
  1435. der Meister
  1436. die Gesellschaft
  1437. <!-- -->
  1438. der Untergrund
  1439. die Oberfläche
  1440. <!-- -->
  1441. der Hintergrund
  1442. die Öffentlichkeit
  1443. <!-- -->
  1444. der Haushalt
  1445. die Aussenwelt
  1446. Alleine
  1447. Kämpfer
  1448. Kläger
  1449. <!-- -->
  1450. Minderheit
  1451. Mehrheit
  1452. Arsch
  1453. klein
  1454. groß
  1455. Finger-Nagelbett<!-- TODO größe oder länge? -->
  1456. Groß<!-- Lang -->
  1457. Klein<!-- Kurz -->
  1458. Beinhaare
  1459. kräftig
  1460. fein
  1461. Politischer Kompass
  1462. autoritär
  1463. demokratisch
  1464. <!-- -->
  1465. Tagträumer
  1466. Nachtträumer
  1467. <!--
  1468. Big Five - Neurotizismus
  1469. Niedrig
  1470. Hoch
  1471. -->
  1472. Arbeit
  1473. geistig
  1474. körperlich
  1475. `,
  1476. // sensexmove aka flowsquare, class, diagonal, angle, half
  1477. sensexmove: `
  1478. Big Five - Verträglichkeit (Agreeableness)
  1479. Niedrig
  1480. Hoch
  1481. Elemente
  1482. Feuer+Erde
  1483. Luft+Wasser
  1484. Zahlen
  1485. 12
  1486. 34
  1487. Innen
  1488. Sohn+Mutter
  1489. Tochter+Vater
  1490. <!-- -->
  1491. Klassiker
  1492. Romantiker
  1493. Spencer Stuart CAF
  1494. Results Culture
  1495. Caring Culture
  1496. <!--
  1497. Leadership (see Big Five Agreeableness)
  1498. Transformational (Soft Power)
  1499. Transactional
  1500. -->
  1501. Kultur
  1502. Primitiv
  1503. Hoch
  1504. <!-- -->
  1505. Egoisten
  1506. Altruisten
  1507. Arbeits-Sektor
  1508. Primär
  1509. Dienstleistung
  1510. <!-- Politisch (N) -->
  1511. Politisch Konservativ (2)
  1512. Politisch Liberal (3)
  1513. <!-- Strategisch (P) -->
  1514. Strategisch Liberal (1)
  1515. Strategisch Konservativ (4)
  1516. <!-- -->
  1517. antisozial
  1518. sozial
  1519. Kultur
  1520. Sesshafte
  1521. Nomaden
  1522. Humor
  1523. Trocken
  1524. Feucht
  1525. <!-- -->
  1526. Narziss (1. grandios + 2. vulnerabel)
  1527. Echo
  1528. <!-- -->
  1529. Individualisten
  1530. Kollektivisten
  1531. <!-- gilt eher für motorik: männlich/weiblich
  1532. Stark
  1533. alleine
  1534. in Gruppen
  1535. -->
  1536. <!-- ? -->
  1537. Soziologen
  1538. Psychologen
  1539. <!-- soz / psych -->
  1540. Die Gesellschaft ist schuld
  1541. Ein Sündenbock ist schuld
  1542. <!-- -->
  1543. Wettbewerb
  1544. Kooperation
  1545. <!-- -->
  1546. LeistungsPrinzip (gut gemacht)
  1547. GesinnungsEthik (gut gemeint)
  1548. <!-- -->
  1549. Individualsport
  1550. Teamsport
  1551. Motorik mal Sensorik: männliche Elemente sind
  1552. kindisch (1)
  1553. erwachsen (4)
  1554. <!-- Motorik mal Sensorik -->weibliche Elemente sind
  1555. erwachsen (2)
  1556. kindisch (3)
  1557. <!-- -->
  1558. Einzelkämpfer
  1559. Mitarbeiter
  1560. <!-- -->
  1561. Realisten
  1562. Idealisten
  1563. Matrix (Strategie)
  1564. Rote Pille (bittere Wahrheit)
  1565. Blaue Pille (schöne Lüge)
  1566. <!-- -->
  1567. Einzelgänger
  1568. Mitläufer
  1569. Behauptungen<!-- Thesen -->
  1570. prüfbar
  1571. endlos
  1572. Wissenschaft
  1573. Hart
  1574. Weich
  1575. <!-- -->
  1576. Natur-
  1577. Geistes-<div class="suffix">Wissenschaft</div>
  1578. William Sheldon
  1579. MesoMorph
  1580. ExtraMorph (Endo+Ecto)
  1581. <!-- -->
  1582. Protestanten (irdisches Glück)
  1583. Katholiken (Lohn nach dem Tod)
  1584. <!--
  1585. Psychotiker sind
  1586. extravertiert (1)
  1587. introvertiert (4)
  1588. Neurotiker sind
  1589. introvertiert (2)
  1590. extravertiert (3)
  1591. -->
  1592. `,
  1593. modalities: `
  1594. Modalität
  1595. Kardinal
  1596. Wechselbar
  1597. Fest
  1598. Inneres Alter
  1599. jung
  1600. mittel
  1601. alt
  1602. Hans Eysenck
  1603. extravertiert
  1604. ambivertiert
  1605. introvertiert
  1606. Sigmund Freud
  1607. Es
  1608. Ich
  1609. Über-Ich
  1610. <!-- Sigmund Freud -->
  1611. Trieb
  1612. Vermittler
  1613. Moral
  1614. Islam Nafs
  1615. al-'ammārah
  1616. al-lawwāmah
  1617. al-mutma'innah
  1618. <!-- Islam Nafs -->
  1619. Trieb
  1620. Zweifel
  1621. Ruhe
  1622. Christen-Trinität
  1623. Körper
  1624. Seele
  1625. Geist
  1626. `,
  1627. bal: {
  1628. title: `
  1629. Meine Bilanz: Wen kenne ich? (Beispiel)<br/>
  1630. Händler: Milan Hauth, Jägerstr. 10, Trostberg
  1631. `,
  1632. f1: ["Lena 3", "Caro 30"],
  1633. f2: ["Laura 30", "Ramo 40"],
  1634. f3: ["Ameli 5", "Vroni 12"],
  1635. f4: ["Conny 30"],
  1636. m1: ["Mila 30", "Chris 30"],
  1637. m2: ["Franz 30"],
  1638. m3: ["Fabi 12", "Tom 30"],
  1639. m4: ["Markus 30"],
  1640. },
  1641. caption: {
  1642. double_pallas: `Schlüssel der 10 Freunde
  1643. <br/> 4 Eltern (BD) <br/> 2 Gleichalte (FM) <br/> 4 Kinder (AC)`,
  1644. eight_double_pallas: `Acht Schlüssel`,
  1645. map_6x6: 'Große Karte der 16 Schlüssel',
  1646. exchange: 'Partnertausch im Flusskreis',
  1647. pallas: 'Schlüssel der <br/> 6 Freunde <br/> (Pallas Symbol)',
  1648. compass: 'Kompass: 4 Elemente <br /> mal 3 Modalitäten',
  1649. map: 'Karte der 16 Typen',
  1650. four_bodies: `
  1651. <span style="margin-left:1.0em">Feuer</span>
  1652. <span style="margin-left:2.1em">Erde</span>
  1653. <span style="margin-left:2.5em">Luft</span>
  1654. <span style="margin-left:1.9em">Wasser</span>
  1655. `,
  1656. three_hands: 'Finger Test zeigt Sheldon-Typ',
  1657. sense: "Sensorik",
  1658. move: "Motorik",
  1659. modality: "Dreifache Sensorik",
  1660. flowsquare: `
  1661. <nw><b>Flusskreis</b> = Quadrat &square; auf der Karte</nw>
  1662. `,
  1663. },
  1664. };
  1665. /* old stuff
  1666. // format body* and element*
  1667. text = Object.keys(text).reduce((acc, key) => {
  1668. //const t = text[key];
  1669. //if (!(key.startsWith("body") || key.startsWith("element"))) {
  1670. if (!key.match(/(body[ABCD]|element[1234])/)) {
  1671. acc[key] = text[key];
  1672. return acc;
  1673. }
  1674. const [a, b, cd] = text[key].split(" : ");
  1675. const [c, d] = cd.split(" + ");
  1676. //acc[key] = `<div>${a}</div><div>${b}</div><div>${c}<br/>${d}</div>`;
  1677. acc[key] = `<div>${a}</div><div>${b}</div><div>${c} + ${d}</div>`;
  1678. return acc;
  1679. }, {});
  1680. */
  1681. // helper function
  1682. Array.prototype.contains = function(needle) {
  1683. return this.indexOf(needle) !== -1
  1684. };
  1685. const color = {
  1686. "map": {
  1687. 1: "#a80000", // dark red
  1688. 2: "#58ff58", // light green
  1689. 3: "#ffff58", // light yellow
  1690. 4: "#0000a8", // dark blue
  1691. },
  1692. "light": {
  1693. 1: "#ffc0c0", // light red
  1694. 2: "#c0ffc0", // light green
  1695. 3: "#ffff80", // light yellow
  1696. 4: "#c0c0ff", // light blue
  1697. 13: "#ffdfc0", // light orange
  1698. 24: "#c0ffff", // light turc
  1699. 14: "#ffc0ff", // light purple
  1700. 23: "#dfffc0", // light lime
  1701. },
  1702. "dark": {
  1703. 1: "#800000", // dark red
  1704. 2: "#008000", // dark green
  1705. 3: "#808000", // dark yellow
  1706. 4: "#000080", // dark blue
  1707. },
  1708. "medium": {
  1709. 1: "#ff0000", // red
  1710. 2: "#00ff00", // green
  1711. 3: "#ffff00", // yellow
  1712. 4: "#0000ff", // blue
  1713. // deviations from "exact" values come from print color matching
  1714. // printer = canon G5000
  1715. //13: "#ff8000", // orange 30deg
  1716. 13: "#ff9100", // orange 34deg
  1717. //24: "#00ffff", // turc 180deg
  1718. 24: "#00ffee", // turc 176deg
  1719. //14: "#ff00ff", // purple 300deg
  1720. 14: "#ea00ff", // purple 295deg
  1721. //23: "#80ff00", // lime 90deg
  1722. 23: "#aaff00", // lime 80deg
  1723. },
  1724. };
  1725. color.map = color.medium;
  1726. color.map.A = color.map[1];
  1727. color.map.B = color.map[2];
  1728. color.map.C = color.map[3];
  1729. color.map.D = color.map[4];
  1730. // old
  1731. const opposite = {
  1732. 1: 2,
  1733. 2: 1,
  1734. 3: 4,
  1735. 4: 3,
  1736. "A": "B",
  1737. "B": "A",
  1738. "C": "D",
  1739. "D": "C",
  1740. };
  1741. // escape hex color for svg inline data url
  1742. function sesc(s) {
  1743. return s.replace("#", "%23");
  1744. }
  1745. function cssVarsOfColorMap(mapname){
  1746. const mapval = color[mapname];
  1747. return Object.keys(mapval).reduce((acc, key) => {
  1748. return acc + "--" + mapname + key + ": " + mapval[key] + ";\n";
  1749. }, "");
  1750. }
  1751. // dashed border
  1752. const dash_length = 6;
  1753. document.write(`
  1754. <style type="text/css">
  1755. /* set css variables */
  1756. :root {
  1757. ${cssVarsOfColorMap("light")}
  1758. ${cssVarsOfColorMap("dark")}
  1759. ${cssVarsOfColorMap("medium")}
  1760. }
  1761. /* debug on screen, hide for print */
  1762. @media screen {
  1763. div.page {
  1764. outline: solid 1px black;
  1765. }
  1766. }
  1767. /* print settings */
  1768. @page {
  1769. size: A4 portrait;
  1770. margin: 0;
  1771. }
  1772. /*
  1773. hidden margins are a pain .... !
  1774. child-margins affect margins of parent ??
  1775. blame margin-collapsing
  1776. solve with - overflow: auto
  1777. https://stackoverflow.com/questions/1762539/margin-on-child-element-moves-parent-element
  1778. */
  1779. * {
  1780. margin: 0;
  1781. padding: 0;
  1782. }
  1783. /*
  1784. always hide script source
  1785. <script style="display: none">
  1786. https://stackoverflow.com/questions/21440225
  1787. the-javascript-code-is-visible-on-the-browser
  1788. */
  1789. script {
  1790. display: none !important;
  1791. }
  1792. body {
  1793. font-family: sans-serif;
  1794. font-size: ${font_size}mm;
  1795. /* TODO use points? like 10pt
  1796. for better print quality? */
  1797. line-height: 125%; /* default 121% in firefox */
  1798. }
  1799. div.page1 {
  1800. }
  1801. div.page2 {
  1802. font-size: ${font_size_page2}mm;
  1803. }
  1804. div.page {
  1805. page-break-after: always; /* TODO remove? */
  1806. width: ${page_x}mm;
  1807. height: ${page_y}mm;
  1808. /*outline: solid 1px blue;*/
  1809. overflow: auto; /* disable css margin collapsing */
  1810. }
  1811. div.content {
  1812. /*outline: solid 1pt black; /* outline vs border: outline does not add height/width */
  1813. width: ${content_x}mm;
  1814. height: ${content_y}mm;
  1815. /*
  1816. position: relative;
  1817. left: ${page_margin.left}mm;
  1818. top: ${page_margin.top}mm;
  1819. */
  1820. margin-left: ${page_margin.left}mm;
  1821. margin-top: ${page_margin.top}mm;
  1822. display: flex;
  1823. flex-direction: column; /* content / footer */
  1824. justify-content: space-between;
  1825. }
  1826. div.inner_content {
  1827. height: ${content_y - footer_y}mm;
  1828. overflow: hidden; /* auto = scroll on demand */
  1829. }
  1830. html {
  1831. background: white;
  1832. }
  1833. p#h1 {
  1834. margin-bottom: .5em;
  1835. }
  1836. /* TODO why start at N=2 ? */
  1837. /*
  1838. .table-four > div:nth-child(2) { background: var(--light1) }
  1839. .table-four > div:nth-child(3) { background: var(--light2) }
  1840. .table-four > div:nth-child(4) { background: var(--light3) }
  1841. .table-four > div:nth-child(5) { background: var(--light4) }
  1842. */
  1843. .table-four > div {
  1844. /*border: solid 1pt black;*/
  1845. }
  1846. .table-four > div:nth-child(1) { box-shadow: inset 0 0 0 1pt var(--medium1) }
  1847. .table-four > div:nth-child(2) { box-shadow: inset 0 0 0 1pt var(--medium2) }
  1848. .table-four > div:nth-child(3) { box-shadow: inset 0 0 0 1pt var(--medium3) }
  1849. .table-four > div:nth-child(4) { box-shadow: inset 0 0 0 1pt var(--medium4) }
  1850. div#map-and-tables {
  1851. /* border: solid 1pt red; /* DEBUG */
  1852. margin-bottom: .5em;
  1853. /*
  1854. height: ${content_x/3}mm;
  1855. */
  1856. width: ${content_x}mm;
  1857. display: flex;
  1858. /*
  1859. flex-direction: row;
  1860. flex-wrap: nowrap;
  1861. align-items: baseline;
  1862. */
  1863. align-items: flex-start;
  1864. /*
  1865. align-items: center;
  1866. justify-content: center;
  1867. */
  1868. }
  1869. div#table-bodies,
  1870. div#table-elements {
  1871. width: ${content_x/8*3 - 2*table_margin}mm;
  1872. line-height: 120%;
  1873. overflow: hidden;
  1874. margin: 0 ${table_margin}mm;
  1875. /* border: solid 1pt green; /* DEBUG */
  1876. }
  1877. /*
  1878. div#table-bodies {
  1879. margin-right: ${table_margin}mm;
  1880. }
  1881. div#table-elements {
  1882. margin-left: ${table_margin}mm;
  1883. }
  1884. */
  1885. svg.map {
  1886. /* border: solid 1pt blue; /* DEBUG */
  1887. }
  1888. div.table-four > div {
  1889. display: flex;
  1890. align-items: center;
  1891. justify-content: center;
  1892. }
  1893. div#table-bodies > div {
  1894. flex-direction: row-reverse; /* right to left */
  1895. text-align: right;
  1896. padding-right: 4mm;
  1897. }
  1898. div#table-elements > div {
  1899. padding-left: 4mm;
  1900. flex-direction: row; /* left to right */
  1901. }
  1902. div.table-four > div {
  1903. /*
  1904. height: ${content_x/16}mm;
  1905. TODO:
  1906. height: ${map_w / scale_svg_html}mm;
  1907. margin: ${2*map_a / scale_svg_html}mm 0;
  1908. */
  1909. /* TODO better .... */
  1910. height: 9.4mm;
  1911. margin: 2.65mm 0;
  1912. }
  1913. .table-four {
  1914. margin-top: -0.5mm !important;
  1915. }
  1916. div.table-four > div > div {
  1917. display: inline-block;
  1918. vertical-align: middle;
  1919. }
  1920. #table-bodies > * > *:nth-child(1) { width: 7% }
  1921. #table-bodies > * > *:nth-child(2) { width: 23% }
  1922. #table-bodies > * > *:nth-child(3) { width: 70% }
  1923. #table-elements > * > *:nth-child(1) { width: 7% }
  1924. #table-elements > * > *:nth-child(2) { width: 23% }
  1925. #table-elements > * > *:nth-child(3) { width: 70% }
  1926. #table-elements-two {
  1927. display: flex;
  1928. flex-direction: column;
  1929. width: ${content_x}mm;
  1930. align-items: stretch;
  1931. }
  1932. #table-elements-two > * {
  1933. display: flex;
  1934. }
  1935. #table-elements-two > * > * {
  1936. display: block;
  1937. width: 20%;
  1938. padding: 0 1mm;
  1939. border-bottom: solid 1pt black;
  1940. /* TODO smaller border in firefox print */
  1941. }
  1942. #table-elements-two > *:first-child > * {
  1943. border-top: solid 1pt black;
  1944. }
  1945. #table-elements-two > * > *:nth-child(2) { border-color: var(--medium1) }
  1946. #table-elements-two > * > *:nth-child(3) { border-color: var(--medium2) }
  1947. #table-elements-two > * > *:nth-child(4) { border-color: var(--medium3) }
  1948. #table-elements-two > * > *:nth-child(5) { border-color: var(--medium4) }
  1949. #table-properties {
  1950. display: flex;
  1951. flex-direction: column;
  1952. width: ${content_x}mm;
  1953. align-items: stretch;
  1954. }
  1955. #table-properties > * {
  1956. display: flex;
  1957. }
  1958. #table-properties > * > * {
  1959. display: block;
  1960. width: 20%;
  1961. padding: 0 1mm;
  1962. }
  1963. /*
  1964. con: mix colors are hard to read
  1965. #table-properties > * > *:nth-child(2) { background: var(--light13) }
  1966. #table-properties > * > *:nth-child(3) { background: var(--light24) }
  1967. #table-properties > * > *:nth-child(4) { background: var(--light14) }
  1968. #table-properties > * > *:nth-child(5) { background: var(--light23) }
  1969. */
  1970. #table-properties > * > * {
  1971. border-bottom: solid 1pt black;
  1972. }
  1973. #table-properties > *:first-child > * {
  1974. border-top: solid 1pt black;
  1975. }
  1976. #table-properties > * > *:nth-child(2) { border-color: var(--medium13) }
  1977. #table-properties > * > *:nth-child(3) { border-color: var(--medium24) }
  1978. #table-properties > * > *:nth-child(4) { border-color: var(--medium14) }
  1979. #table-properties > * > *:nth-child(5) { border-color: var(--medium23) }
  1980. /*
  1981. .two-column {
  1982. column-count: 2;
  1983. column-gap: 4mm;
  1984. column-rule: solid 1pt black;
  1985. }
  1986. .three-column {
  1987. column-count: 3;
  1988. column-gap: 4mm;
  1989. }
  1990. */
  1991. .table-inline {
  1992. /*
  1993. column-count: 2;
  1994. column-gap: 4mm;
  1995. column-rule: solid 1pt black;
  1996. */
  1997. }
  1998. .table-inline > div {
  1999. white-space: nowrap;
  2000. }
  2001. #table-inline-elements,
  2002. #table-inline-elements > *,
  2003. #table-inline-elements > * > * {
  2004. display: inline;
  2005. }
  2006. #table-inline-elements > * > * {
  2007. text-decoration: underline;
  2008. text-decoration-color: transparent;
  2009. text-decoration-thickness: 1pt;
  2010. }
  2011. #table-inline-elements > * > *:nth-child(2) { text-decoration-color: var(--medium1) }
  2012. #table-inline-elements > * > *:nth-child(3) { text-decoration-color: var(--medium2) }
  2013. #table-inline-elements > * > *:nth-child(4) { text-decoration-color: var(--medium3) }
  2014. #table-inline-elements > * > *:nth-child(5) { text-decoration-color: var(--medium4) }
  2015. #table-inline-bodies,
  2016. #table-inline-bodies > *,
  2017. #table-inline-bodies > * > * {
  2018. display: inline;
  2019. }
  2020. #table-inline-bodies > * > * {
  2021. text-decoration: underline;
  2022. text-decoration-color: transparent;
  2023. text-decoration-thickness: 1pt;
  2024. }
  2025. #table-inline-bodies > * > *:nth-child(2) { text-decoration-color: var(--medium1) }
  2026. #table-inline-bodies > * > *:nth-child(3) { text-decoration-color: var(--medium2) }
  2027. #table-inline-bodies > * > *:nth-child(4) { text-decoration-color: var(--medium3) }
  2028. #table-inline-bodies > * > *:nth-child(5) { text-decoration-color: var(--medium4) }
  2029. #table-inline-properties {
  2030. }
  2031. #table-inline-properties > * {
  2032. display: inline;
  2033. }
  2034. #table-inline-properties > * > * {
  2035. display: inline;
  2036. }
  2037. #table-inline-properties > * > * {
  2038. text-decoration: underline;
  2039. text-decoration-color: transparent;
  2040. text-decoration-thickness: 1pt;
  2041. }
  2042. #table-inline-properties > * > *:nth-child(2) { text-decoration-color: var(--medium13) }
  2043. #table-inline-properties > * > *:nth-child(3) { text-decoration-color: var(--medium24) }
  2044. #table-inline-properties > * > *:nth-child(4) { text-decoration-color: var(--medium14) }
  2045. #table-inline-properties > * > *:nth-child(5) { text-decoration-color: var(--medium23) }
  2046. #table-inline-sense,
  2047. #table-inline-sense > *,
  2048. #table-inline-sense > * > * {
  2049. display: inline;
  2050. }
  2051. #table-inline-sense > * > * {
  2052. text-decoration: underline;
  2053. text-decoration-color: transparent;
  2054. text-decoration-thickness: 1pt;
  2055. }
  2056. #table-inline-sense > * > *:nth-child(2) { text-decoration-color: var(--medium13) }
  2057. #table-inline-sense > * > *:nth-child(3) { text-decoration-color: var(--medium24) }
  2058. #table-inline-move,
  2059. #table-inline-move > *,
  2060. #table-inline-move > * > * {
  2061. display: inline;
  2062. }
  2063. #table-inline-move > * > * {
  2064. text-decoration: underline;
  2065. text-decoration-color: transparent;
  2066. text-decoration-thickness: 1pt;
  2067. }
  2068. #table-inline-move > * > *:nth-child(2) { text-decoration-color: var(--medium14) }
  2069. #table-inline-move > * > *:nth-child(3) { text-decoration-color: var(--medium23) }
  2070. #table-inline-sensexmove,
  2071. #table-inline-sensexmove > *,
  2072. #table-inline-sensexmove > * > * {
  2073. display: inline;
  2074. }
  2075. #table-inline-sensexmove > * > * {
  2076. text-decoration: underline;
  2077. text-decoration-color: transparent;
  2078. text-decoration-thickness: 1pt;
  2079. }
  2080. /*
  2081. realism = red pill = republican party
  2082. idealism = blue pill = democratic party
  2083. */
  2084. /* color variant N - eigencolor of neurotic */
  2085. /*
  2086. #table-inline-sensexmove > * > *:nth-child(2) { text-decoration-color: var(--medium2) }
  2087. #table-inline-sensexmove > * > *:nth-child(3) { text-decoration-color: var(--medium3) }
  2088. */
  2089. /* color variant P - eigencolor of psychotic */
  2090. #table-inline-sensexmove > * > *:nth-child(2) { text-decoration-color: var(--medium1) }
  2091. #table-inline-sensexmove > * > *:nth-child(3) { text-decoration-color: var(--medium4) }
  2092. #table-inline-modalities,
  2093. #table-inline-modalities > *,
  2094. #table-inline-modalities > * > * {
  2095. display: inline;
  2096. }
  2097. #table-inline-modalities > * > * {
  2098. text-decoration: underline;
  2099. text-decoration-color: transparent;
  2100. text-decoration-thickness: 1pt;
  2101. }
  2102. /*
  2103. three primary colors?
  2104. - red green blue ("additive")
  2105. - cyan magenta yellow = blue-green blue-red yellow
  2106. - red yellow blue ("subtractive")
  2107. */
  2108. /* variant: sense colors + neutral color black */
  2109. #table-inline-modalities > * > *:nth-child(2) { text-decoration-color: var(--medium13) }
  2110. #table-inline-modalities > * > *:nth-child(3) { text-decoration-color: black }
  2111. #table-inline-modalities > * > *:nth-child(4) { text-decoration-color: var(--medium24) }
  2112. .para-margin-bottom {
  2113. margin-bottom: .5em;
  2114. display: inline;
  2115. margin-right: 2em;
  2116. }
  2117. .para-page-footer {
  2118. width: ${content_x}mm;
  2119. font-family: monospace;
  2120. display: flex;
  2121. justify-content: space-between;
  2122. }
  2123. p, .para {
  2124. display: inline;
  2125. margin-right: 2em;
  2126. }
  2127. svg {
  2128. float: right;
  2129. clear: right; /* stack vertical */
  2130. }
  2131. svg.map {
  2132. /*
  2133. margin: 1em;
  2134. */
  2135. }
  2136. span.a1,
  2137. span.b2,
  2138. span.c3,
  2139. span.d4 {
  2140. text-decoration: underline;
  2141. text-decoration-color: transparent;
  2142. text-decoration-thickness: 1pt;
  2143. }
  2144. span.a1 { text-decoration-color: var(--medium1) }
  2145. span.b2 { text-decoration-color: var(--medium2) }
  2146. span.c3 { text-decoration-color: var(--medium3) }
  2147. span.d4 { text-decoration-color: var(--medium4) }
  2148. .balance {
  2149. display: inline-flex;
  2150. /*
  2151. float: right;
  2152. margin: 1em 0 1em 1em;
  2153. */
  2154. flex-direction: column;
  2155. width: 23em; /* TODO */
  2156. }
  2157. .balance > .title {
  2158. margin-bottom: .5em;
  2159. }
  2160. .balance > .f, .balance > .m {
  2161. display: flex;
  2162. flex-direction: row;
  2163. }
  2164. .balance > .f {
  2165. padding-bottom: .25em;
  2166. border-bottom: solid 1px black;
  2167. /* TODO smaller border in firefox print */
  2168. }
  2169. .balance > .m {
  2170. padding-top: .25em;
  2171. }
  2172. .balance > div > div {
  2173. display: flex;
  2174. flex-basis: 25%;
  2175. }
  2176. .balance > .f > div {
  2177. flex-direction: column-reverse;
  2178. }
  2179. .balance > .m > div {
  2180. flex-direction: column;
  2181. }
  2182. .balance > div > div > div {
  2183. text-align: center;
  2184. }
  2185. .balance > .f > div > .h2 {
  2186. margin-top: .25em;
  2187. }
  2188. .balance > .m > div > .h2 {
  2189. margin-bottom: .25em;
  2190. }
  2191. /* workaround. print borders are too thick */
  2192. @media print {
  2193. * {
  2194. /* no effect in firefox, but working in chrome */
  2195. border-width: 0.5pt !important;
  2196. }
  2197. }
  2198. .caption-container.four_bodies > div:nth-child(2) {
  2199. display: flex;
  2200. justify-content: center;
  2201. }
  2202. .caption-container {
  2203. display: inline-flex;
  2204. flex-direction: column;
  2205. width: auto;
  2206. margin: 0.5em 0;
  2207. }
  2208. .caption-container > div {
  2209. display: inline-block;
  2210. text-align: center;
  2211. }
  2212. /*
  2213. https://stackoverflow.com/a/19735997/10440128
  2214. for vertical-stacked floats, use style="float: right; clear: right"
  2215. */
  2216. .float-right {
  2217. float: right;
  2218. clear: right; /* stack vertical */
  2219. margin-left: 1em;
  2220. }
  2221. .float-left {
  2222. float: left;
  2223. clear: left; /* stack vertical */
  2224. margin-right: 1em;
  2225. }
  2226. #div_four_bodies > svg {
  2227. width: 175px;
  2228. height: auto;
  2229. }
  2230. #div_three_hands > svg {
  2231. width: 160px;
  2232. height: auto;
  2233. }
  2234. a {
  2235. text-decoration: none;
  2236. color: black;
  2237. }
  2238. /* not working, solve in javascript
  2239. .suffix {
  2240. text-decoration: none !important;
  2241. }
  2242. */
  2243. /* square sign */
  2244. .square-sign {
  2245. position:relative;
  2246. top:-0.5px;
  2247. }
  2248. /* cross sign */
  2249. .xmark-sign {
  2250. font-size: 125%;
  2251. position:relative;
  2252. top:0.5px;
  2253. }
  2254. .nowrap-element, b {
  2255. white-space: nowrap;
  2256. }
  2257. .double-pallas-small-container > svg {
  2258. border-bottom: solid 1px black;
  2259. /* TODO smaller border in firefox print */
  2260. }
  2261. .double-pallas-small-container > svg:last-child {
  2262. border-bottom: none;
  2263. }
  2264. </style>
  2265. `)
  2266. /* css dashed border with two colors */
  2267. /*
  2268. #table-properties > * > *:nth-child(2) {
  2269. /* red + yellow * /
  2270. border-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" x="0px" y="0px" width="30px" height="30px"><g stroke-width="4" fill="none"><rect stroke="${sesc(color.medium[1])}" x="0" y="0" width="24" height="24" /><path stroke="${sesc(color.medium[3])}" stroke-dasharray="${dash_length}" d="M 0 0 H 24 M 24 2 V 24 M 20 24 H 0 M 0 18 V 2" /></g></svg>') 1 repeat;
  2271. }
  2272. #table-properties > * > *:nth-child(3) {
  2273. /* green + blue * /
  2274. border-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" x="0px" y="0px" width="30px" height="30px"><g stroke-width="4" fill="none"><rect stroke="${sesc(color.medium[2])}" x="0" y="0" width="24" height="24" /><path stroke="${sesc(color.medium[4])}" stroke-dasharray="${dash_length}" d="M 0 0 H 24 M 24 2 V 24 M 20 24 H 0 M 0 18 V 2" /></g></svg>') 1 repeat;
  2275. }
  2276. #table-properties > * > *:nth-child(4) {
  2277. /* red + blue * /
  2278. border-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" x="0px" y="0px" width="30px" height="30px"><g stroke-width="4" fill="none"><rect stroke="${sesc(color.medium[1])}" x="0" y="0" width="24" height="24" /><path stroke="${sesc(color.medium[4])}" stroke-dasharray="${dash_length}" d="M 0 0 H 24 M 24 2 V 24 M 20 24 H 0 M 0 18 V 2" /></g></svg>') 1 repeat;
  2279. }
  2280. #table-properties > * > *:nth-child(5) {
  2281. /* green + yellow * /
  2282. border-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" x="0px" y="0px" width="30px" height="30px"><g stroke-width="4" fill="none"><rect stroke="${sesc(color.medium[2])}" x="0" y="0" width="24" height="24" /><path stroke="${sesc(color.medium[3])}" stroke-dasharray="${dash_length}" d="M 0 0 H 24 M 24 2 V 24 M 20 24 H 0 M 0 18 V 2" /></g></svg>') 1 repeat;
  2283. }
  2284. */
  2285. /* css background images
  2286. #table-properties > * > *:nth-child(2) {
  2287. background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${bgpat_w} ${bgpat_w}" x="0" y="0" width="${bgpat_w}mm" height="${bgpat_w}mm"><rect fill="${sesc(color.light[1])}" x="0" y="0" width="${bgpat_w}" height="100" /><rect fill="${sesc(color.light[3])}" x="${bgpat_w/2}" y="0" width="${bgpat_w/2}" height="100" /></svg>');
  2288. }
  2289. #table-properties > * > *:nth-child(3) {
  2290. background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${bgpat_w} ${bgpat_w}" x="0" y="0" width="${bgpat_w}mm" height="${bgpat_w}mm"><rect fill="${sesc(color.light[2])}" x="0" y="0" width="${bgpat_w}" height="100" /><rect fill="${sesc(color.light[4])}" x="${bgpat_w/2}" y="0" width="${bgpat_w/2}" height="100" /></svg>');
  2291. }
  2292. #table-properties > * > *:nth-child(4) {
  2293. background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${bgpat_w} ${bgpat_w}" x="0" y="0" width="${bgpat_w}mm" height="${bgpat_w}mm"><rect fill="${sesc(color.light[1])}" x="0" y="0" width="${bgpat_w}" height="100" /><rect fill="${sesc(color.light[4])}" x="${bgpat_w/2}" y="0" width="${bgpat_w/2}" height="100" /></svg>');
  2294. }
  2295. #table-properties > * > *:nth-child(5) {
  2296. background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${bgpat_w} ${bgpat_w}" x="0" y="0" width="${bgpat_w}mm" height="${bgpat_w}mm"><rect fill="${sesc(color.light[2])}" x="0" y="0" width="${bgpat_w}" height="100" /><rect fill="${sesc(color.light[3])}" x="${bgpat_w/2}" y="0" width="${bgpat_w/2}" height="100" /></svg>');
  2297. }
  2298. */
  2299. </script>
  2300. <style type="text/css">
  2301. </style>
  2302. <script>
  2303. function write_para(id, _class="para-margin-bottom") {
  2304. if (_class) {
  2305. document.write(`<div id="${id}" class="${_class}">${text[id]}</div>`)
  2306. }
  2307. else {
  2308. document.write(`<div id="${id}">${text[id]}</div>`)
  2309. }
  2310. }
  2311. function write_caption(id) {
  2312. document.write(text.caption[id]);
  2313. }
  2314. // alchi.js
  2315. // age sense move gender, origin 11
  2316. // signs: 0 = same, 1 = diff
  2317. // these factors are XOR-ed with the origin asmg
  2318. const ac_bits_asmg_11 = [
  2319. 0b1001, 0b0111, 0b1011, 0b0101,
  2320. 0b1110, 0b0000, 0b1100, 0b0010,
  2321. 0b1101, 0b0011, 0b1111, 0b0001,
  2322. 0b1010, 0b0100, 0b1000, 0b0110,
  2323. ];
  2324. // XOR factors for "key of 10 friends" aka "double pallas"
  2325. // five bits! XOR only last three bits!
  2326. //
  2327. // typeList index vs position in double-pallas
  2328. //
  2329. // 0 1 2 3 // parents
  2330. // 4 5 6 // same age
  2331. // 7 8 9 A // kids
  2332. const ac_bits_aasmg_double_pallas = [
  2333. 0b01001, 0b01110, 0b01100, 0b01111, // D3 B4 B2 D4
  2334. 0b10111, 0b10000, 0b10011, // M4 F3 M1
  2335. 0b00001, 0b00110, 0b00100, 0b00111, // A3 C4 C2 A4
  2336. ];
  2337. /*
  2338. // young age: aa = 00
  2339. const C3 = 0b0000, A3 = 0b0001, C1 = 0b0010, A1 = 0b0011;
  2340. const C2 = 0b0100, A2 = 0b0101, C4 = 0b0110, A4 = 0b0111;
  2341. // old age: aa = 01
  2342. const B3 = 0b1000, D3 = 0b1001, B1 = 0b1010, D1 = 0b1011;
  2343. const B2 = 0b1100, D2 = 0b1101, B4 = 0b1110, D4 = 0b1111;
  2344. // no age: aa = 10 (five bits)
  2345. const F3 = 0b10000, M3 = 0b10001, F1 = 0b10010, M1 = 0b10011;
  2346. const F2 = 0b10100, M2 = 0b10101, F4 = 0b10110, M4 = 0b10111;
  2347. */
  2348. const get_bit = function (num, idx) {
  2349. return (num & (1 << idx)) >> idx;
  2350. }
  2351. const decode_bitstring = function (asmg) {
  2352. return parseInt(asmg, 2);
  2353. }
  2354. const ac_xor = function(factor, list) {
  2355. return list.map(function (n) {
  2356. return factor ^ n
  2357. })
  2358. }
  2359. // letters of the four dimensions
  2360. const letter_asmg = [
  2361. ['S', 'L'], // age = Short or Long
  2362. ['E', 'I'], // sense = Extra or Intro
  2363. ['N', 'P'], // move = Neuro or Psycho
  2364. ['F', 'M'], // gen = Female or Male
  2365. ]
  2366. // element = sense + move
  2367. const element = [
  2368. [
  2369. '3', // _00_ = EN = 3
  2370. '1', // _01_ = EP = 1
  2371. ], [
  2372. '2', // _10_ = IN = 2
  2373. '4', // _11_ = IP = 4
  2374. ],
  2375. ]
  2376. // body = age + gender
  2377. const element_outside = [
  2378. [
  2379. 'C', // 0__0 = SF = C
  2380. 'A', // 0__1 = SM = A
  2381. ], [
  2382. 'B', // 1__0 = LF = B
  2383. 'D', // 1__1 = LM = D
  2384. ],
  2385. ]
  2386. const idxFromDim = {
  2387. 'A': 0,
  2388. 'S': 1,
  2389. 'M': 2,
  2390. 'G': 3,
  2391. 'a': 0,
  2392. 's': 1,
  2393. 'm': 2,
  2394. 'g': 3,}
  2395. function getDimBit (asmg, dim) {
  2396. //global idxFromDim
  2397. return asmg[idxFromDim[dim]]
  2398. }
  2399. const letterFromASMG = function (dim, asmg) { //TODO change to (asmg, dim)
  2400. // ASMG
  2401. const i = idxFromDim[dim]
  2402. //document.write('dim '+dim+' idx '+i)
  2403. if (i !== undefined) {
  2404. return letter_asmg[i][asmg[i]]
  2405. }
  2406. // element
  2407. if (dim == 'E' || dim == 'e') {
  2408. return element[asmg[1]][asmg[2]]
  2409. }
  2410. // outside element = Body = material = family role
  2411. if (dim == 'B' || dim == 'b') {
  2412. return element_outside[asmg[0]][asmg[3]]
  2413. }
  2414. }
  2415. /*
  2416. if(Array.prototype.contains) {
  2417. console.warn("Overriding existing Array.prototype.contains. Possible causes: New API defines the method, there's a framework conflict or you've got double inclusions in your code.");
  2418. }
  2419. */
  2420. Array.prototype.contains = function(needle) {
  2421. return this.indexOf(needle) !== -1
  2422. };
  2423. // modulo function, also for negative numbers
  2424. Number.prototype.mod = function(n) {
  2425. return ((this%n)+n)%n
  2426. }
  2427. // body + element = asmg
  2428. // young age: aa = 00
  2429. const C3 = 0b0000;
  2430. const A3 = 0b0001;
  2431. const C1 = 0b0010;
  2432. const A1 = 0b0011;
  2433. const C2 = 0b0100;
  2434. const A2 = 0b0101;
  2435. const C4 = 0b0110;
  2436. const A4 = 0b0111;
  2437. // old age: aa = 01
  2438. const B3 = 0b1000;
  2439. const D3 = 0b1001;
  2440. const B1 = 0b1010;
  2441. const D1 = 0b1011;
  2442. const B2 = 0b1100;
  2443. const D2 = 0b1101;
  2444. const B4 = 0b1110;
  2445. const D4 = 0b1111;
  2446. // no age: aa = 10
  2447. const F3 = 0b10000;
  2448. const M3 = 0b10001;
  2449. const F1 = 0b10010;
  2450. const M1 = 0b10011;
  2451. const F2 = 0b10100;
  2452. const M2 = 0b10101;
  2453. const F4 = 0b10110;
  2454. const M4 = 0b10111;
  2455. function write_map(map_origin = A1) {
  2456. const w = map_w;
  2457. const h = w;
  2458. const margin = 3;
  2459. const wh = w/2;
  2460. //const a = 1.25;
  2461. const a = map_a;
  2462. //const map_margin = a;
  2463. //const sw = 2*w;
  2464. //const sh = 2*h;
  2465. const sw = w + 2*a;
  2466. const sh = h + 2*a;
  2467. const d_gap = 0.1;
  2468. const wh2 = wh + d_gap; // fill gap between rect-s
  2469. //const page_x = 210; // mm
  2470. //const page_y = 297; // mm
  2471. const stroke_width = 0.4;
  2472. const puzzle_path = {
  2473. "IL": `
  2474. M ${sw/2+d_gap} ${(sh-h)/2-a}
  2475. h ${-d_gap}
  2476. l ${-a} ${a}
  2477. h ${-(w/2-a)}
  2478. v ${h/2-a}
  2479. l ${a} ${a}
  2480. l ${-a} ${a}
  2481. v ${h/2-a}
  2482. h ${w/2-a}
  2483. l ${a} ${a}
  2484. h ${d_gap}
  2485. `,
  2486. "EL": `
  2487. M ${sw/2+d_gap} ${(sh-h)/2+a}
  2488. h ${-d_gap}
  2489. l ${-a} ${-a}
  2490. h ${-(w/2-a)}
  2491. v ${h/2-a}
  2492. l ${-a} ${a}
  2493. l ${a} ${a}
  2494. v ${h/2-a}
  2495. h ${w/2-a}
  2496. l ${a} ${-a}
  2497. h ${d_gap}
  2498. `,
  2499. "IR": `
  2500. M ${sw/2} ${(sh-h)/2-a}
  2501. l ${a} ${a}
  2502. h ${w/2-a}
  2503. v ${h/2-a}
  2504. l ${-a} ${a}
  2505. l ${a} ${a}
  2506. v ${h/2-a}
  2507. h ${-(w/2-a)}
  2508. l ${-a} ${a}
  2509. `,
  2510. "ER": `
  2511. M ${sw/2} ${(sh-h)/2+a}
  2512. l ${a} ${-a}
  2513. h ${+(w/2-a)}
  2514. v ${h/2-a}
  2515. l ${a} ${a}
  2516. l ${-a} ${a}
  2517. v ${h/2-a}
  2518. h ${-(w/2-a)}
  2519. l ${-a} ${-a}
  2520. `,
  2521. };
  2522. document.write(`<svg
  2523. class="map"
  2524. xmlns="http://www.w3.org/2000/svg"
  2525. xmlns:xlink="http://www.w3.org/1999/xlink"
  2526. x="0" y="0" width="${map_x_html*0.7}mm" height="${map_y_html*0.7}mm"
  2527. viewBox="0 0 ${map_x_svg} ${map_y_svg}"
  2528. >
  2529. `);
  2530. // svg user unit: 1 = 1mm
  2531. // style
  2532. document.write(`<g
  2533. font-size="${font_size}"
  2534. font-family="sans-serif"
  2535. dominant-baseline="hanging"
  2536. stroke-width="${stroke_width}"
  2537. >
  2538. `);
  2539. const w_alcimap = (2*a+4*w+3*margin);
  2540. // alcimap
  2541. if (1) {
  2542. document.write(`<g
  2543. transform="translate(${map_a}, ${map_a})"
  2544. dominant-baseline="mathematical" text-anchor="middle"
  2545. font-size="${font_size_map}"
  2546. >
  2547. `);
  2548. // flowsquares
  2549. const a_square = 2;
  2550. const a_cross = 2.4;
  2551. [[0,0], [0,1], [1,0], [1,1]].forEach(([x,y]) => (
  2552. document.write(`<rect
  2553. x="${-a_square/2+(1+2*x)*sw+(1+5*x)*stroke_width/2}"
  2554. y="${-a_square/2+(1+2*y)*sh+(1+5*y)*stroke_width/2}"
  2555. width="${a_square}" height="${a_square}"
  2556. stroke="black" fill="none" />`)
  2557. ));
  2558. // tenscross
  2559. /*
  2560. document.write(`<rect
  2561. x="${-a_square/2+2*sw+4*stroke_width/2}"
  2562. y="${-a_square/2+2*sh+4*stroke_width/2}"
  2563. width="${a_square}" height="${a_square}"
  2564. stroke="black" fill="none" />`);
  2565. */
  2566. document.write(`<line
  2567. x1="${-a_cross/2+2*sw+4*stroke_width/2}"
  2568. y1="${-a_cross/2+2*sh+4*stroke_width/2}"
  2569. x2="${+a_cross/2+2*sw+4*stroke_width/2}"
  2570. y2="${+a_cross/2+2*sh+4*stroke_width/2}"
  2571. stroke="black" fill="none" />`);
  2572. document.write(`<line
  2573. x2="${-a_cross/2+2*sw+4*stroke_width/2}"
  2574. y1="${-a_cross/2+2*sh+4*stroke_width/2}"
  2575. x1="${+a_cross/2+2*sw+4*stroke_width/2}"
  2576. y2="${+a_cross/2+2*sh+4*stroke_width/2}"
  2577. stroke="black" fill="none" />`);
  2578. // tenscross parts
  2579. document.write(`
  2580. <!-- half crosses -->
  2581. <path d="
  2582. M
  2583. ${2*sw+4*stroke_width/2-a_cross/2}
  2584. ${0*sh-1*stroke_width/2+a_cross/2}
  2585. l
  2586. ${a_cross/2}
  2587. ${-a_cross/2}
  2588. l
  2589. ${a_cross/2}
  2590. ${a_cross/2}
  2591. "
  2592. stroke="black" fill="none"
  2593. />
  2594. <path d="
  2595. M
  2596. ${2*sw+4*stroke_width/2-a_cross/2}
  2597. ${4*sh+9*stroke_width/2-a_cross/2}
  2598. l
  2599. ${a_cross/2}
  2600. ${a_cross/2}
  2601. l
  2602. ${a_cross/2}
  2603. ${-a_cross/2}
  2604. "
  2605. stroke="black" fill="none"
  2606. />
  2607. <path d="
  2608. M
  2609. ${4*sw+9*stroke_width/2-a_cross/2}
  2610. ${2*sh+4*stroke_width/2-a_cross/2}
  2611. l
  2612. ${a_cross/2}
  2613. ${a_cross/2}
  2614. l
  2615. ${-a_cross/2}
  2616. ${a_cross/2}
  2617. "
  2618. stroke="black" fill="none"
  2619. />
  2620. <path d="
  2621. M
  2622. ${0*sw-1*stroke_width/2+a_cross/2}
  2623. ${2*sh+4*stroke_width/2-a_cross/2}
  2624. l
  2625. ${-a_cross/2}
  2626. ${a_cross/2}
  2627. l
  2628. ${a_cross/2}
  2629. ${a_cross/2}
  2630. "
  2631. stroke="black" fill="none"
  2632. />
  2633. <!-- quarter crosses -->
  2634. <path d="
  2635. M
  2636. ${0*sw-1*stroke_width/2+a_cross/2}
  2637. ${0*sh-1*stroke_width/2+a_cross/2}
  2638. l
  2639. ${-a_cross/2}
  2640. ${-a_cross/2}
  2641. "
  2642. stroke="black" fill="none"
  2643. />
  2644. <path d="
  2645. M
  2646. ${4*sw+9*stroke_width/2-a_cross/2}
  2647. ${0*sh-1*stroke_width/2+a_cross/2}
  2648. l
  2649. ${a_cross/2}
  2650. ${-a_cross/2}
  2651. "
  2652. stroke="black" fill="none"
  2653. />
  2654. <path d="
  2655. M
  2656. ${4*sw+9*stroke_width/2-a_cross/2}
  2657. ${4*sh+9*stroke_width/2-a_cross/2}
  2658. l
  2659. ${a_cross/2}
  2660. ${a_cross/2}
  2661. "
  2662. stroke="black" fill="none"
  2663. />
  2664. <path d="
  2665. M
  2666. ${0*sw-1*stroke_width/2+a_cross/2}
  2667. ${4*sh+9*stroke_width/2-a_cross/2}
  2668. l
  2669. ${-a_cross/2}
  2670. ${a_cross/2}
  2671. "
  2672. stroke="black" fill="none"
  2673. />
  2674. `);
  2675. // puzzle pieces
  2676. // origin = A1 = 0b0011
  2677. //ac_xor(0b0011, ac_bits_asmg_11).forEach((num, idx) => {
  2678. ac_xor(map_origin, ac_bits_asmg_11).forEach((num, idx) => {
  2679. const asmg = num.toString(2).padStart(4, 0).split('');
  2680. const e = letterFromASMG('E', asmg); // element
  2681. const b = letterFromASMG('B', asmg); // body
  2682. const e_sense = (e % 2 == 0) ? "I" : "E";
  2683. const cb = color.map[b];
  2684. const ce = color.map[e];
  2685. //const cbt = color.map[opposite[b]];
  2686. //const cet = color.map[opposite[e]];
  2687. /*
  2688. const cbt = (b == "A" || b == "D") ? "white" : "black";
  2689. const cet = (e == 1 || e == 4) ? "white" : "black";
  2690. */
  2691. const cbt = "black";
  2692. const cet = "black";
  2693. const x = idx % 4;
  2694. const xp = x * (w + margin);
  2695. const xb = xp + a;
  2696. const xe = xp + a + wh;
  2697. const yp = ((idx / 4)|0) * (h + margin);
  2698. const y = yp + a;
  2699. const xbt = xb + 0.5*(wh+a);
  2700. const xet = xe + 0.5*(wh-a);
  2701. const yt = y + 0.5*h;
  2702. document.write(`<!-- ${b}${e} -->`)
  2703. /*
  2704. document.write(`<path transform="translate(${xp}, ${yp})" fill="${cb}" stroke="${cbt}" d="${puzzle_path[e_sense+"L"]}" />`)
  2705. document.write(`<path transform="translate(${xp}, ${yp})" fill="${ce}" stroke="${cet}" d="${puzzle_path[e_sense+"R"]}" />`)
  2706. */
  2707. document.write(`<path transform="translate(${xp}, ${yp})" stroke="${cb}" fill="none" d="${puzzle_path[e_sense+"L"]}" />`)
  2708. document.write(`<path transform="translate(${xp}, ${yp})" stroke="${ce}" fill="none" d="${puzzle_path[e_sense+"R"]}" />`)
  2709. document.write(`<text x="${xbt}" y="${yt}" fill="${cbt}" width="${wh}" height="${h}">${b}</text>`)
  2710. document.write(`<text x="${xet}" y="${yt}" fill="${cet}" width="${wh}" height="${h}">${e}</text>`)
  2711. });
  2712. document.write(`</g>`);
  2713. }
  2714. //document.write(`</g>`); // header
  2715. //document.write(`</g>`); // content
  2716. document.write(`</g>`); // style
  2717. document.write(`</svg>`);
  2718. }
  2719. // 6x6 map shows all pallas keys
  2720. function write_map_6x6(map_origin = A1) {
  2721. // lazy version, we just hide unwanted areas
  2722. // by changing the svg viewBox
  2723. // and using transform-translate-groups
  2724. const w = map_w;
  2725. const h = w;
  2726. const margin = 3;
  2727. const wh = w/2;
  2728. //const a = 1.25;
  2729. const a = map_a;
  2730. //const map_margin = a;
  2731. //const sw = 2*w;
  2732. //const sh = 2*h;
  2733. const sw = w + 2*a;
  2734. const sh = h + 2*a;
  2735. const d_gap = 0.1;
  2736. const wh2 = wh + d_gap; // fill gap between rect-s
  2737. //const page_x = 210; // mm
  2738. //const page_y = 297; // mm
  2739. const stroke_width = 0.4;
  2740. // shadow var
  2741. const font_size_map = 5; // orig is 4
  2742. document.write(`<svg
  2743. class="map map-6x6"
  2744. xmlns="http://www.w3.org/2000/svg"
  2745. xmlns:xlink="http://www.w3.org/1999/xlink"
  2746. x="0" y="0" width="${map_x_html*0.8}mm" height="${map_y_html*0.8}mm"
  2747. viewBox="${map_x_svg*0.5} ${map_x_svg*0.5} ${map_x_svg*1.5} ${map_y_svg*1.5}"
  2748. >
  2749. `);
  2750. // style + move
  2751. document.write(`<g
  2752. font-size="${font_size}"
  2753. font-family="sans-serif"
  2754. dominant-baseline="hanging"
  2755. stroke-width="${stroke_width}"
  2756. transform="translate(${-sw}, ${-sh})"
  2757. >
  2758. `);
  2759. const w_alcimap = (2*a+4*w+3*margin);
  2760. // alcimap
  2761. document.write(`<g
  2762. transform="translate(${map_a}, ${map_a})"
  2763. dominant-baseline="mathematical" text-anchor="middle"
  2764. font-size="${font_size_map}"
  2765. >
  2766. `);
  2767. // flowsquares
  2768. //const a_square = 2;
  2769. //const a_cross = 2.4;
  2770. const a_square = 3;
  2771. const a_cross = 3.6;
  2772. Array.range(2, 3).forEach(x => {
  2773. Array.range(2, 3).forEach(y => {
  2774. document.write(`<rect
  2775. x="${-a_square/2+(1+2*x)*sw+(1+5*x)*stroke_width/2}"
  2776. y="${-a_square/2+(1+2*y)*sh+(1+5*y)*stroke_width/2}"
  2777. width="${a_square}" height="${a_square}"
  2778. stroke="black" fill="none" />`
  2779. );
  2780. });
  2781. });
  2782. // tenscross
  2783. // todo make formulas simpler, use svg group with translate?
  2784. Array.range(1, 3).forEach(x => {
  2785. Array.range(1, 3).forEach(y => {
  2786. document.write(`<line
  2787. x1="${-a_cross/2+2*sw+4*stroke_width/2+(2*x)*sw+(5*x)*stroke_width/2}"
  2788. y1="${-a_cross/2+2*sh+4*stroke_width/2+(2*y)*sh+(5*y)*stroke_width/2}"
  2789. x2="${+a_cross/2+2*sw+4*stroke_width/2+(2*x)*sw+(5*x)*stroke_width/2}"
  2790. y2="${+a_cross/2+2*sh+4*stroke_width/2+(2*y)*sh+(5*y)*stroke_width/2}"
  2791. stroke="black" fill="none" />`);
  2792. document.write(`<line
  2793. x2="${-a_cross/2+2*sw+4*stroke_width/2+(2*x)*sw+(5*x)*stroke_width/2}"
  2794. y1="${-a_cross/2+2*sh+4*stroke_width/2+(2*y)*sh+(5*y)*stroke_width/2}"
  2795. x1="${+a_cross/2+2*sw+4*stroke_width/2+(2*x)*sw+(5*x)*stroke_width/2}"
  2796. y2="${+a_cross/2+2*sh+4*stroke_width/2+(2*y)*sh+(5*y)*stroke_width/2}"
  2797. stroke="black" fill="none" />`);
  2798. });
  2799. });
  2800. const mapSize = 4*(w + margin); // TODO
  2801. // repeat map 3x3 times
  2802. Array.from(Array(3).keys()).forEach(xRepeat => {
  2803. Array.from(Array(3).keys()).forEach(yRepeat => {
  2804. document.write(`<g transform="translate(${mapSize*xRepeat},${mapSize*yRepeat})">`)
  2805. // puzzle pieces + names
  2806. ac_xor(map_origin, ac_bits_asmg_11).forEach((num, idx) => {
  2807. const asmg = num.toString(2).padStart(4, 0).split('');
  2808. const e = letterFromASMG('E', asmg); // element
  2809. const b = letterFromASMG('B', asmg); // body
  2810. const e_sense = (e % 2 == 0) ? "I" : "E";
  2811. const cb = color.map[b];
  2812. const ce = color.map[e];
  2813. //const cbt = color.map[opposite[b]];
  2814. //const cet = color.map[opposite[e]];
  2815. /*
  2816. const cbt = (b == "A" || b == "D") ? "white" : "black";
  2817. const cet = (e == 1 || e == 4) ? "white" : "black";
  2818. */
  2819. const cbt = "black";
  2820. const cet = "black";
  2821. const x = idx % 4;
  2822. const xp = x * (w + margin);
  2823. const xb = xp + a;
  2824. const xe = xp + a + wh;
  2825. const yp = ((idx / 4)|0) * (h + margin);
  2826. const y = yp + a;
  2827. const xbt = xb + 0.5*(wh+a);
  2828. const xet = xe + 0.5*(wh-a);
  2829. const yt = y + 0.5*h;
  2830. document.write(`<!-- ${b}${e} -->`)
  2831. document.write(`<text x="${xbt}" y="${yt}" fill="${cbt}" width="${wh}" height="${h}">${b}</text>`)
  2832. document.write(`<text x="${xet}" y="${yt}" fill="${cet}" width="${wh}" height="${h}">${e}</text>`)
  2833. });
  2834. document.write(`</g>`);
  2835. });
  2836. });
  2837. document.write(`</g>`); // style + move
  2838. //document.write(`</g>`); // header
  2839. //document.write(`</g>`); // content
  2840. document.write(`</g>`); // style
  2841. document.write(`</svg>`);
  2842. }
  2843. function write_compass(){
  2844. const stroke_width = 1;
  2845. const stroke_width_circles = 2 * stroke_width;
  2846. // outer circle
  2847. const r1 = 80;
  2848. // inner circle (parent nodes)
  2849. const r2 = r1 * (
  2850. Math.cos(2*Math.PI/12) - Math.sin(2*Math.PI/12)
  2851. );
  2852. // r2 so that angles are 45 degrees
  2853. const r3 = 17;
  2854. const r4 = 40.5; // x - r3
  2855. const cx = 100;
  2856. const cy = 100;
  2857. document.write(`<svg
  2858. id="compass"
  2859. xmlns="http://www.w3.org/2000/svg"
  2860. xmlns:xlink="http://www.w3.org/1999/xlink"
  2861. x="0" y="0" width="${map_x_html*0.7}mm" height="${map_y_html*0.7}mm"
  2862. viewBox="0 0 200 200"
  2863. >
  2864. `);
  2865. // style
  2866. document.write(`
  2867. <g
  2868. font-size="${font_size*6}"
  2869. font-family="sans-serif"
  2870. text-anchor="middle"
  2871. dominant-baseline="mathematical"
  2872. stroke-width="${stroke_width}"
  2873. >
  2874. `);
  2875. /*
  2876. <line x1="${cx}" y1="${cy}" x2="${cx + r1}" y2="${cy}" stroke="yellow" />
  2877. <line x1="${cx}" y1="${cy}" x2="${cx - r1}" y2="${cy}" stroke="blue" />
  2878. <line x1="${cx}" y1="${cy}" x2="${cx}" y2="${cy + r1}" stroke="red" />
  2879. <line x1="${cx}" y1="${cy}" x2="${cx}" y2="${cy - r1}" stroke="green" />
  2880. */
  2881. document.write(`
  2882. <!--
  2883. <circle cx="100" cy="100" r="80" fill="white" stroke="black" />
  2884. -->
  2885. <line x1="${cx - r1}" y1="${cy}" x2="${cx + r1}" y2="${cy}" stroke="black" />
  2886. <line x1="${cx}" y1="${cy - r1}" x2="${cx}" y2="${cy + r1}" stroke="black" />
  2887. `);
  2888. // 12 "zodiac" signs
  2889. /*
  2890. idx:
  2891. 0
  2892. 11 1
  2893. 10 2
  2894. 9 3
  2895. 8 4
  2896. 7 5
  2897. 6
  2898. label:
  2899. 22
  2900. 24 23
  2901. 42 32
  2902. 44 33
  2903. 41 31
  2904. 14 13
  2905. 11
  2906. */
  2907. //const label = ["22", "23", "32", "33", "31", "13", "11", "14", "41", "44", "42", "24"];
  2908. const label = [
  2909. "2x2", "2x3",
  2910. "3x2", "3x3", "3x1",
  2911. "1x3", "1x1", "1x4",
  2912. "4x1", "4x4", "4x2",
  2913. "2x4",
  2914. ];
  2915. const color = ["green", "yellow", "red", "blue"];
  2916. const colidx2 = [
  2917. null, 1, 0,
  2918. null, 2, 1,
  2919. null, 3, 2,
  2920. null, 0, 3,
  2921. ];
  2922. // TODO use group-transform-translate to center to (cx, cy)
  2923. document.write(`<g fill="white" stroke="black">`)
  2924. Array.from(Array(12)).map((v,i)=>i).forEach(idx => {
  2925. // idx = 0, 1, 2, ... 10, 11
  2926. // child node, outer circle
  2927. const a = 2*Math.PI*idx/12; // angle
  2928. let x = cx + r1 * Math.sin(a);
  2929. let y = cy - r1 * Math.cos(a);
  2930. // parent node, inner circle
  2931. const pidx = Math.round((idx) / 3)*3;
  2932. const pa = 2*Math.PI*pidx/12;
  2933. const px = cx + r2 * Math.sin(pa);
  2934. const py = cy - r2 * Math.cos(pa);
  2935. const piby4 = Math.PI/4;
  2936. const daList = [0,piby4,piby4,0,3*piby4,3*piby4,0,5*piby4,5*piby4,0,7*piby4,7*piby4];
  2937. if (idx == pidx) {
  2938. document.write(`<line x1="${x}" y1="${y}" x2="${px}" y2="${py}" />`);
  2939. } else {
  2940. const da = daList[idx];
  2941. const dx = r4 * Math.sin(da);
  2942. const dy = -r4 * Math.cos(da);
  2943. document.write(`<path d="M ${px} ${py} l ${dx} ${dy}" />`);
  2944. }
  2945. const tf_rotate = [0, 135, -45, 0, 225, 45, 0, -45, 135, 0, 45, 225];
  2946. document.write(`<g transform="rotate(${tf_rotate[idx]}, ${x}, ${y})">`);
  2947. if (idx == pidx) {
  2948. // 11, 22, 33, 44
  2949. document.write(`<circle cx="${x}" cy="${y}" r="${r3}" stroke="${color[(pidx/3).mod(4)]}" stroke-width="${stroke_width_circles}" />`);
  2950. }
  2951. else {
  2952. // 23, 32, 31, 13, ...
  2953. // two half circles
  2954. const col2 = color[colidx2[idx]];
  2955. document.write(`<circle cx="${x}" cy="${y}" r="${r3}" stroke="none" fill="none" />`);
  2956. //console.log(`idx ${idx} (pidx/3).mod(4) = ${(pidx/3).mod(4)}`)
  2957. document.write(`<path d="M ${x + r3} ${y} a ${r3} ${r3} 0 0 1 ${-2*r3} 0" stroke="${color[(pidx/3).mod(4)]}" fill="none" stroke-width="${stroke_width_circles}" />`);
  2958. document.write(`<path d="M ${x + r3} ${y} a ${r3} ${r3} 0 0 0 ${-2*r3} 0" stroke="${col2}" fill="none" stroke-width="${stroke_width_circles}" />`);
  2959. }
  2960. document.write('</g>');
  2961. document.write(`<text x="${x}" y="${y}" stroke="none" fill="black">${label[idx]}</text>`)
  2962. })
  2963. // four corners I P E N
  2964. const a_square = 26;
  2965. ([
  2966. [+1, +1, 'E', 1, 1],
  2967. [-1, -1, 'I', 0, 0],
  2968. [+1, -1, 'N', 1, 0],
  2969. [-1, +1, 'P', 0, 1],
  2970. ]).forEach(([ix, iy, label, ix2, iy2]) => {
  2971. /*
  2972. let x = cx + ix*(r1+r3) - ix2*a_square;
  2973. let y = cy + iy*(r1+r3) - iy2*a_square;
  2974. let tx = x + a_square/2;
  2975. let ty = y + a_square/2;
  2976. */
  2977. let tx = cx + ix*r1;
  2978. let ty = cy + iy*r1;
  2979. let x = tx - a_square/2;
  2980. let y = ty - a_square/2;
  2981. document.write(`<rect x="${x}" y="${y}"
  2982. width="${a_square}" height="${a_square}"
  2983. stroke="black" fill="none"
  2984. />`);
  2985. document.write(`<text
  2986. x="${tx}" y="${ty}"
  2987. fill="black" stroke="none"
  2988. >${label}</text>`);
  2989. });
  2990. document.write(`</g>`)
  2991. document.write(`<g fill="white" stroke="black">`)
  2992. Array.from(Array(4)).map((v,i)=>3*i).forEach(idx => {
  2993. const a = 2*Math.PI/12*idx;
  2994. const x = 100 + r2 * Math.sin(a);
  2995. const y = 100 - r2 * Math.cos(a);
  2996. document.write(`<circle cx="${x}" cy="${y}" r="15" stroke="${color[idx/3]}" stroke-width="${stroke_width_circles}" />`)
  2997. document.write(`<text x="${x}" y="${y}" stroke="none" fill="black">${label[idx][0]}</text>`)
  2998. })
  2999. document.write(`</g>`)
  3000. document.write('</g>');
  3001. document.write('</svg>');
  3002. }
  3003. function write_pallas(){
  3004. const stroke_width = 1;
  3005. const g = 50; // grid size
  3006. const g2 = g*0.5;
  3007. const cx = 100;
  3008. const cy = 100;
  3009. document.write(`<svg
  3010. id="pallas"
  3011. xmlns="http://www.w3.org/2000/svg"
  3012. xmlns:xlink="http://www.w3.org/1999/xlink"
  3013. x="0" y="0" width="${map_x_html*0.4}mm" height="${map_y_html*0.4}mm"
  3014. viewBox="35 35 130 130"
  3015. >
  3016. `);
  3017. // style
  3018. document.write(`
  3019. <g
  3020. font-size="${font_size*6}"
  3021. font-family="sans-serif"
  3022. text-anchor="middle"
  3023. dominant-baseline="mathematical"
  3024. stroke-width="${stroke_width}"
  3025. >
  3026. `);
  3027. document.write(`<text fill="black" x="${cx}" y="${cy}">${text.me}</text>`);
  3028. document.write(`<text fill="black" x="${cx + g}" y="${cy + g}">${text.you}</text>`);
  3029. document.write(`<text fill="black" x="${cx - g}" y="${cy - g}">${text.you}</text>`);
  3030. document.write(`<text fill="black" x="${cx}" y="${cy + g}">${text.he}</text>`);
  3031. document.write(`<text fill="black" x="${cx}" y="${cy - g}">${text.he}</text>`);
  3032. document.write(`<text fill="black" x="${cx + g}" y="${cy}">${text.she}</text>`);
  3033. document.write(`<text fill="black" x="${cx - g}" y="${cy}">${text.she}</text>`);
  3034. // same class square, flusskreis, flowsquare
  3035. document.write(`<rect x="${cx + (g - g2)/2}" y="${cy + g/2 - g2/2}" width="${g2}" height="${g2}" fill="none" stroke="black" />`);
  3036. // spannkreuz, tenscross
  3037. document.write(`<line x1="${cx - (g - g2)/2}" y1="${cy - (g - g2)/2}" x2="${cx - (g - g2)/2 - g2}" y2="${cy - (g - g2)/2 - g2}" stroke="black" />`);
  3038. document.write(`<line x1="${cx - (g - g2)/2}" y1="${cy - (g - g2)/2 - g2}" x2="${cx - (g - g2)/2 - g2}" y2="${cy - (g - g2)/2}" stroke="black" />`);
  3039. document.write('</g>');
  3040. document.write('</svg>');
  3041. }
  3042. /*
  3043. typeList index vs position in double-pallas
  3044. 0 1 2 3 // parents
  3045. 4 5 6 // same age
  3046. 7 8 9 A // kids
  3047. */
  3048. // TODO move
  3049. function getBits(number, numBits = 4) {
  3050. return number.toString(2).slice(-numBits).padStart(numBits, 0).split('').map(x => x|0);
  3051. }
  3052. function write_double_pallas(pallas_origin = M1){
  3053. typeList = ac_bits_aasmg_double_pallas.map(n => {
  3054. // XOR (multiply) only last three bits, OR (add) two other bits
  3055. return ((pallas_origin & 0b111) ^ (n & 0b111)) | (n & 0b11000);
  3056. });
  3057. // NOTE age-less types need 5 bits
  3058. // TODO also encode three modalities?
  3059. const stroke_width = 1;
  3060. const g = 66.6; // grid size
  3061. const g2 = g*0.666;
  3062. const cx = 100;
  3063. const cy = 100;
  3064. document.write(`<svg
  3065. class="double-pallas"
  3066. xmlns="http://www.w3.org/2000/svg"
  3067. xmlns:xlink="http://www.w3.org/1999/xlink"
  3068. x="0" y="0" width="${map_x_html*0.5*4/3}mm" height="${map_y_html*0.5}mm"
  3069. viewBox="10 10 180 180"
  3070. >
  3071. `);
  3072. // style
  3073. document.write(`
  3074. <g
  3075. font-size="${font_size*7}"
  3076. font-family="sans-serif"
  3077. text-anchor="middle"
  3078. dominant-baseline="mathematical"
  3079. stroke-width="${stroke_width}"
  3080. >
  3081. `);
  3082. //const g = letterFromASMG('g', asmgBits); // gender
  3083. //const aasmgBits = getBits(asmgNum, 5);
  3084. //const noAge = aasmgBits[0];
  3085. // typeList index vs position in double-pallas
  3086. //
  3087. // 0 1 2 3 // parents
  3088. // 4 5 6 // same age
  3089. // 7 8 9 A // kids
  3090. // TODO shorter, use one loop
  3091. // use lookup-tables for text positions?
  3092. // parents = idx 0, 1, 2, 3
  3093. typeList.slice(0, 4).forEach((asmgNum, posIdx) => {
  3094. const asmgBits = getBits(asmgNum, 4);
  3095. const b = letterFromASMG('B', asmgBits); // body
  3096. const e = letterFromASMG('E', asmgBits); // element
  3097. //const pos = 2/3*(posIdx - 3/2);
  3098. //const pos = 7/8*(posIdx - 3/2);
  3099. const posMap = [-4/3, -1/3, +1/3, +4/3];
  3100. const pos = posMap[posIdx];
  3101. document.write(`<text fill="black" x="${cx + g*pos}" y="${cy - g}">${b+e}</text>`);
  3102. });
  3103. // same age = idx 4, 5, 6
  3104. typeList.slice(4, 7).forEach((asmgNum, posIdx) => {
  3105. const asmgBits = getBits(asmgNum, 4);
  3106. const gender = letterFromASMG('g', asmgBits); // gender
  3107. // var `g` already taken for "grid constant"
  3108. const e = letterFromASMG('E', asmgBits); // element
  3109. //const pos = 2/3*(posIdx - 3/2);
  3110. //const pos = posIdx - 1;
  3111. const pos = 4/3*(posIdx - 1);
  3112. document.write(`<text fill="black" x="${cx + g*pos}" y="${cy}">${gender+e}</text>`);
  3113. });
  3114. // kids = idx 7, 8, 9, 10
  3115. typeList.slice(7, 11).forEach((asmgNum, posIdx) => {
  3116. const asmgBits = getBits(asmgNum, 4);
  3117. const b = letterFromASMG('B', asmgBits); // body
  3118. const e = letterFromASMG('E', asmgBits); // element
  3119. //const pos = 2/3*(posIdx - 3/2);
  3120. const posMap = [-4/3, -1/3, +1/3, +4/3];
  3121. const pos = posMap[posIdx];
  3122. document.write(`<text fill="black" x="${cx + g*pos}" y="${cy + g}">${b+e}</text>`);
  3123. });
  3124. /*
  3125. document.write(`<text x="${cx}" y="${cy}">${text.me}</text>`);
  3126. document.write(`<text x="${cx + g}" y="${cy + g}">${text.you}</text>`);
  3127. document.write(`<text x="${cx - g}" y="${cy - g}">${text.you}</text>`);
  3128. document.write(`<text x="${cx}" y="${cy + g}">${text.he}</text>`);
  3129. document.write(`<text x="${cx}" y="${cy - g}">${text.he}</text>`);
  3130. document.write(`<text x="${cx + g}" y="${cy}">${text.she}</text>`);
  3131. document.write(`<text x="${cx - g}" y="${cy}">${text.she}</text>`);
  3132. */
  3133. //const oddness = g/6;
  3134. const oddness = 0;
  3135. // same class square, flusskreis, flowsquare
  3136. // top left:
  3137. document.write(`<rect
  3138. x="${(cx-g2/2) - g*5/6}"
  3139. y="${(cy-g2/2) - g*1/2}"
  3140. width="${g2}" height="${g2}" fill="none" stroke="black" />`);
  3141. // bottom left:
  3142. document.write(`<rect
  3143. x="${(cx-g2/2) - g*5/6}"
  3144. y="${(cy-g2/2) + g*1/2}"
  3145. width="${g2}" height="${g2}" fill="none" stroke="black" />`);
  3146. /*
  3147. // top left (odd):
  3148. document.write(`<path d="
  3149. M ${(cx-g2/2) - g*5/6} ${(cy-g2/2) - g*1/2}
  3150. h ${ g2}
  3151. l ${oddness} ${ g2}
  3152. h ${-g2-oddness}
  3153. z
  3154. " fill="none" stroke="black" />`);
  3155. // bottom left (odd):
  3156. document.write(`<path d="
  3157. M ${(cx-g2/2) - g*5/6} ${(cy-g2/2) + g*1/2}
  3158. h ${ g2+oddness}
  3159. l ${-oddness} ${ g2}
  3160. h ${-g2}
  3161. z
  3162. " fill="none" stroke="black" />`);
  3163. */
  3164. // spannkreuz, tenscross
  3165. // top right:
  3166. document.write(`<line stroke="black"
  3167. x1="${cx+g2/2 + g*5/6}" x2="${cx+g2/2 + g*5/6 - g2}"
  3168. y1="${cy+g2/2 - g*1/2}" y2="${cy+g2/2 - g*1/2 - g2}" />`);
  3169. document.write(`<line stroke="black"
  3170. x1="${cx+g2/2 + g*5/6}" x2="${cx+g2/2 + g*5/6 - g2 - (oddness /* odd cross */)}"
  3171. y2="${cy+g2/2 - g*1/2}" y1="${cy+g2/2 - g*1/2 - g2}" />`);
  3172. // bottom right:
  3173. document.write(`<line stroke="black"
  3174. x1="${cx+g2/2 + g*5/6}" x2="${cx+g2/2 + g*5/6 - g2 - (oddness /* odd cross */)}"
  3175. y1="${cy+g2/2 + g*1/2}" y2="${cy+g2/2 + g*1/2 - g2}" />`);
  3176. document.write(`<line stroke="black"
  3177. x1="${cx+g2/2 + g*5/6}" x2="${cx+g2/2 + g*5/6 - g2}"
  3178. y2="${cy+g2/2 + g*1/2}" y1="${cy+g2/2 + g*1/2 - g2}" />`);
  3179. // dotted lines to connect original pallas keys
  3180. document.write(`<path stroke="black" d="
  3181. M ${cx+g2/2 + g*5/6 - g2 - (oddness /* odd cross */)} ${cy+g2/2 - g*1/2}
  3182. h ${-g-g2}
  3183. " stroke-dasharray="${stroke_width*3} ${stroke_width*6}" />`);
  3184. document.write(`<path stroke="black" d="
  3185. M ${cx+g2/2 + g*5/6 - g2 - (oddness /* odd cross */)} ${cy+g2/2 + g*1/2 - g2}
  3186. h ${-g-g2}
  3187. " stroke-dasharray="${stroke_width*3} ${stroke_width*6}" />`);
  3188. document.write('</g>');
  3189. document.write('</svg>');
  3190. }
  3191. function write_double_pallas_small(pallas_origin = M1){
  3192. typeList = ac_bits_aasmg_double_pallas.map(n => {
  3193. // XOR (multiply) only last three bits, OR (add) two other bits
  3194. return ((pallas_origin & 0b111) ^ (n & 0b111)) | (n & 0b11000);
  3195. });
  3196. // NOTE age-less types need 5 bits! TODO encode?
  3197. // TODO also encode three modalities? --> 7 bits
  3198. const stroke_width = 1;
  3199. const g = 66.6; // grid size
  3200. const g2 = g*0.4;
  3201. const cx = 100;
  3202. const cy = 100;
  3203. const margin_x = 10;
  3204. document.write(`<svg
  3205. class="double-pallas-small"
  3206. xmlns="http://www.w3.org/2000/svg"
  3207. xmlns:xlink="http://www.w3.org/1999/xlink"
  3208. x="0" y="0" width="${content_x/9}mm" height="${content_x/9*200/(200+2*margin_x)}mm"
  3209. viewBox="-${margin_x} 0 ${200+2*margin_x} 200"
  3210. >
  3211. `);
  3212. // style
  3213. document.write(`
  3214. <g
  3215. font-size="${font_size*9}"
  3216. font-family="sans-serif"
  3217. text-anchor="middle"
  3218. dominant-baseline="mathematical"
  3219. stroke-width="${stroke_width*2}"
  3220. >
  3221. `);
  3222. //const g = letterFromASMG('g', asmgBits); // gender
  3223. //const aasmgBits = getBits(asmgNum, 5);
  3224. //const noAge = aasmgBits[0];
  3225. // typeList index vs position in double-pallas
  3226. //
  3227. // 0 1 2 3 // parents
  3228. // 4 5 6 // same age
  3229. // 7 8 9 A // kids
  3230. // TODO shorter, use one loop
  3231. // use lookup-tables for text positions?
  3232. // parents = idx 0, 1, 2, 3
  3233. typeList.slice(0, 4).forEach((asmgNum, posIdx) => {
  3234. const asmgBits = getBits(asmgNum, 4);
  3235. const b = letterFromASMG('B', asmgBits); // body
  3236. const e = letterFromASMG('E', asmgBits); // element
  3237. //const pos = 2/3*(posIdx - 3/2);
  3238. //const pos = 7/8*(posIdx - 3/2);
  3239. const posMap = [-4/3, -1/3, +1/3, +4/3];
  3240. const pos = posMap[posIdx];
  3241. document.write(`<text fill="black" x="${cx + g*pos}" y="${cy - g}">${b+e}</text>`);
  3242. });
  3243. // same age = idx 4, 5, 6
  3244. typeList.slice(4, 7).forEach((asmgNum, posIdx) => {
  3245. const asmgBits = getBits(asmgNum, 4);
  3246. const gender = letterFromASMG('g', asmgBits); // gender
  3247. // var `g` already taken for "grid constant"
  3248. const e = letterFromASMG('E', asmgBits); // element
  3249. //const pos = 2/3*(posIdx - 3/2);
  3250. //const pos = posIdx - 1;
  3251. const pos = 4/3*(posIdx - 1);
  3252. document.write(`<text fill="black" x="${cx + g*pos}" y="${cy}">${gender+e}</text>`);
  3253. });
  3254. // kids = idx 7, 8, 9, 10
  3255. typeList.slice(7, 11).forEach((asmgNum, posIdx) => {
  3256. const asmgBits = getBits(asmgNum, 4);
  3257. const b = letterFromASMG('B', asmgBits); // body
  3258. const e = letterFromASMG('E', asmgBits); // element
  3259. //const pos = 2/3*(posIdx - 3/2);
  3260. const posMap = [-4/3, -1/3, +1/3, +4/3];
  3261. const pos = posMap[posIdx];
  3262. document.write(`<text fill="black" x="${cx + g*pos}" y="${cy + g}">${b+e}</text>`);
  3263. });
  3264. //const oddness = g/6;
  3265. const oddness = 0;
  3266. // same class square, flusskreis, flowsquare
  3267. // top left:
  3268. document.write(`<rect
  3269. x="${(cx-g2/2) - g*5/6}"
  3270. y="${(cy-g2/2) - g*1/2}"
  3271. width="${g2}" height="${g2}" fill="none" stroke="black" />`);
  3272. // bottom left:
  3273. document.write(`<rect
  3274. x="${(cx-g2/2) - g*5/6}"
  3275. y="${(cy-g2/2) + g*1/2}"
  3276. width="${g2}" height="${g2}" fill="none" stroke="black" />`);
  3277. /*
  3278. // top left (odd):
  3279. document.write(`<path d="
  3280. M ${(cx-g2/2) - g*5/6} ${(cy-g2/2) - g*1/2}
  3281. h ${ g2}
  3282. l ${oddness} ${ g2}
  3283. h ${-g2-oddness}
  3284. z
  3285. " fill="none" stroke="black" />`);
  3286. // bottom left (odd):
  3287. document.write(`<path d="
  3288. M ${(cx-g2/2) - g*5/6} ${(cy-g2/2) + g*1/2}
  3289. h ${ g2+oddness}
  3290. l ${-oddness} ${ g2}
  3291. h ${-g2}
  3292. z
  3293. " fill="none" stroke="black" />`);
  3294. */
  3295. // spannkreuz, tenscross
  3296. // top right:
  3297. document.write(`<line stroke="black"
  3298. x1="${cx+g2/2 + g*5/6}" x2="${cx+g2/2 + g*5/6 - g2}"
  3299. y1="${cy+g2/2 - g*1/2}" y2="${cy+g2/2 - g*1/2 - g2}" />`);
  3300. document.write(`<line stroke="black"
  3301. x1="${cx+g2/2 + g*5/6}" x2="${cx+g2/2 + g*5/6 - g2 - (oddness /* odd cross */)}"
  3302. y2="${cy+g2/2 - g*1/2}" y1="${cy+g2/2 - g*1/2 - g2}" />`);
  3303. // bottom right:
  3304. document.write(`<line stroke="black"
  3305. x1="${cx+g2/2 + g*5/6}" x2="${cx+g2/2 + g*5/6 - g2 - (oddness /* odd cross */)}"
  3306. y1="${cy+g2/2 + g*1/2}" y2="${cy+g2/2 + g*1/2 - g2}" />`);
  3307. document.write(`<line stroke="black"
  3308. x1="${cx+g2/2 + g*5/6}" x2="${cx+g2/2 + g*5/6 - g2}"
  3309. y2="${cy+g2/2 + g*1/2}" y1="${cy+g2/2 + g*1/2 - g2}" />`);
  3310. // dotted lines to connect original pallas keys
  3311. document.write(`<path stroke="black" d="
  3312. M
  3313. ${cx+g2/2 + g*5/6 - g2 - (oddness /* odd cross */)}
  3314. ${cy+g2/2 - g*1/2}
  3315. h ${-g-g2}
  3316. " stroke-dasharray="${stroke_width*3} ${stroke_width*6}" />`);
  3317. document.write(`<path stroke="black" d="
  3318. M ${cx+g2/2 + g*5/6 - g2 - (oddness /* odd cross */)} ${cy+g2/2 + g*1/2 - g2}
  3319. h ${-g-g2}
  3320. " stroke-dasharray="${stroke_width*3} ${stroke_width*6}" />`);
  3321. document.write('</g>');
  3322. document.write('</svg>');
  3323. }
  3324. function write_exchange() {
  3325. const stroke_width = 1;
  3326. //const g = 66.6; // grid size
  3327. //const g2 = g*0.666;
  3328. const s = 200; // size
  3329. const m = 4; // margin
  3330. const A = 1.5; // aspect
  3331. const d = 20; // distance
  3332. const m2 = m - stroke_width; // margin of boxes
  3333. const H = (s - d) / (A + 1);
  3334. const W = A * H;
  3335. // puzzle pieces
  3336. const h = 0.4 * H;
  3337. const w = h;
  3338. const a = w / 8;
  3339. const sw = w + 2*a;
  3340. const sh = h + 2*a;
  3341. const puzzle_path = {
  3342. I: `
  3343. M ${sw/2} ${(sh-h)/2-a}
  3344. l ${-a} ${a}
  3345. h ${-(w/2-a)}
  3346. v ${h/2-a}
  3347. l ${a} ${a}
  3348. l ${-a} ${a}
  3349. v ${h/2-a}
  3350. h ${w/2-a}
  3351. l ${a} ${a}
  3352. l ${a} ${-a}
  3353. h ${w/2-a}
  3354. v ${-(h/2-a)}
  3355. l ${-a} ${-a}
  3356. l ${a} ${-a}
  3357. v ${-(h/2-a)}
  3358. h ${-(w/2-a)}
  3359. z
  3360. `,
  3361. E: `
  3362. M ${sw/2} ${(sh-h)/2+a}
  3363. l ${-a} ${-a}
  3364. h ${-(w/2-a)}
  3365. v ${h/2-a}
  3366. l ${-a} ${a}
  3367. l ${a} ${a}
  3368. v ${h/2-a}
  3369. h ${w/2-a}
  3370. l ${a} ${-a}
  3371. l ${a} ${a}
  3372. h ${w/2-a}
  3373. v ${-(h/2-a)}
  3374. l ${a} ${-a}
  3375. l ${-a} ${-a}
  3376. v ${-(h/2-a)}
  3377. h ${-(w/2-a)}
  3378. z
  3379. `,
  3380. };
  3381. const x0 = 20;
  3382. // these numbers are a mess, but it works
  3383. let svg_exchange_h = s+2*m-2*x0;
  3384. let svg_exchange_w = s+2*m;
  3385. document.write(`<svg
  3386. id="exchange"
  3387. xmlns="http://www.w3.org/2000/svg"
  3388. xmlns:xlink="http://www.w3.org/1999/xlink"
  3389. x="0" y="0" width="${map_x_html*0.75}mm" height="${map_y_html*0.75*0.7}mm"
  3390. viewBox="${-x0*0.8} ${-x0*1} ${svg_exchange_w} ${svg_exchange_h-1.25*x0}"
  3391. style="margin: 0.5em"
  3392. >
  3393. `);
  3394. document.write(`
  3395. <defs>
  3396. <marker id="arrowhead" markerWidth="10" markerHeight="10" refX="0" refY="3" orient="auto" markerUnits="strokeWidth">
  3397. <path d="M0,0 L0,6 L9,3 z" fill="black" />
  3398. </marker>
  3399. <marker id="arrowhead-back" markerWidth="10" markerHeight="10" refX="10" refY="3" orient="auto" markerUnits="strokeWidth">
  3400. <path d="M10,0 L10,6 L1,3 z" fill="black" />
  3401. </marker>
  3402. </defs>
  3403. `);
  3404. // style + transform
  3405. // TODO set text anchor to center
  3406. document.write(`
  3407. <g
  3408. transform="
  3409. translate(${+(svg_exchange_w/2)} ${+(svg_exchange_h/2)})
  3410. rotate(90)
  3411. translate(${-(svg_exchange_w/2)} ${-(svg_exchange_h/2)})
  3412. translate(${-1.5*x0} 0 )
  3413. "
  3414. font-size="${font_size*6}"
  3415. font-family="sans-serif"
  3416. text-anchor="middle"
  3417. dominant-baseline="mathematical"
  3418. stroke-width="${stroke_width}"
  3419. fill="none"
  3420. stroke="black"
  3421. >
  3422. <style>
  3423. .rotateBack text {
  3424. transform: rotate(-90deg);
  3425. transform-box: fill-box;
  3426. }
  3427. </style>
  3428. `);
  3429. // boxes
  3430. document.write(`
  3431. <rect x="${(s-W)/2-m2}" y="${-m2}" width="${W+2*m2}" height="${H+2*m2}" stroke-dasharray="${stroke_width} ${stroke_width*2}" />
  3432. <rect x="${(s-H)/2-m2}" y="${H+d-m2}" width="${H+2*m2}" height="${W+2*m2}" stroke-dasharray="${stroke_width} ${stroke_width*2}" />
  3433. `);
  3434. // puzzle pieces
  3435. document.write(`
  3436. <path transform="translate(${(s-W)/2+W-sw},${0})" d="${puzzle_path.I}"/>
  3437. <path transform="translate(${(s-W)/2},${0})" d="${puzzle_path.E}"/>
  3438. <path transform="translate(${(s-W)/2},${H-sw})" d="${puzzle_path.I}"/>
  3439. <path transform="translate(${(s-W)/2+W-sw},${H-sw})" d="${puzzle_path.E}"/>
  3440. <path transform="translate(${s/2},${H+d})" d="${puzzle_path.I}"/>
  3441. <path transform="translate(${s/2-sw},${H+d})" d="${puzzle_path.E}"/>
  3442. <path transform="translate(${s/2-sw},${H+d+W-sw})" d="${puzzle_path.I}"/>
  3443. <path transform="translate(${s/2},${H+d+W-sw})" d="${puzzle_path.E}"/>
  3444. `);
  3445. // labels
  3446. // set fill="black" for every text node,
  3447. // so firefox-darkreader can invert colors correctly
  3448. document.write(`
  3449. <g stroke="none" class="rotateBack" transform="translate(-4, 14)">
  3450. <text fill="black" y="${sh/2}" x="${(s-W)/2+sw/2}">C</text>
  3451. <text fill="black" y="${sh/2}" x="${(s-W)/2-sw/2+W}">A</text>
  3452. <text fill="black" y="${H-sw+sh/2}" x="${(s-W)/2-sw/2+W}">D</text>
  3453. <text fill="black" y="${H-sw+sh/2}" x="${(s-W)/2+sw/2}">B</text>
  3454. <text fill="black" y="${H+d+sh/2}" x="${s/2+sw/2}">A</text>
  3455. <text fill="black" y="${H+d+sh/2}" x="${s/2-sw/2}">C</text>
  3456. <text fill="black" y="${H+d+sh/2+W-sw}" x="${s/2-sw/2}">B</text>
  3457. <text fill="black" y="${H+d+sh/2+W-sw}" x="${s/2+sw/2}">D</text>
  3458. </g>
  3459. `);
  3460. // arrows
  3461. /* variant: middle to corner
  3462. document.write(`<path d="
  3463. M ${s/2+W/2+3*m2} ${H+5}
  3464. A ${s/4} ${s/4} 0 0 1 ${s/2+(H/2+2*m2)+8} ${H+d+W/2-5}
  3465. " marker-end="url(#arrowhead)" />`);
  3466. document.write(`<path d="
  3467. M ${s/2-(W/2+3*m2)} ${H+15}
  3468. A ${s/4} ${s/4} 0 0 0 ${s/2-(H/2+3*m2)} ${H+d+W/2}
  3469. " marker-start="url(#arrowhead-back)" />`);
  3470. */
  3471. // variant: middle to middle
  3472. document.write(`<path d="
  3473. M ${s/2+W/2+3*m2-2} ${H+5-40}
  3474. A ${s/4*2} ${s/4*2} 0 0 1 ${s/2+(H/2+2*m2)+8} ${H+d+W/2-5}
  3475. " marker-end="url(#arrowhead)" />`);
  3476. document.write(`<path d="
  3477. M ${s/2-(W/2+3*m2)} ${H+15-40}
  3478. A ${s/4*2} ${s/4*2} 0 0 0 ${s/2-(H/2+3*m2)} ${H+d+W/2}
  3479. " marker-start="url(#arrowhead-back)" />`);
  3480. document.write('</g>');
  3481. document.write('</svg>');
  3482. }
  3483. function write_balance(id) {
  3484. const bal = text[id];
  3485. document.write(`<div class="balance">`);
  3486. if (bal.title) {
  3487. document.write(`<div class="title">${bal.title}</div>`);
  3488. }
  3489. ["f", "m"].forEach(gender => {
  3490. document.write(`<div class="${gender}">`);
  3491. [1, 2, 3, 4].forEach(element => {
  3492. document.write(`<div class="${gender}${element}">`);
  3493. document.write(`<div class="h1">${gender.toUpperCase() + element}</div>`);
  3494. /* save some space
  3495. if (gender == "f") {
  3496. document.write(`<div class="h2">B${element} + C${element}</div>`);
  3497. } else {
  3498. document.write(`<div class="h2">A${element} + D${element}</div>`);
  3499. }
  3500. */
  3501. bal[gender + element].forEach(name => {
  3502. document.write(`<div>${name}</div>`);
  3503. });
  3504. document.write(`</div>`);
  3505. });
  3506. document.write(`</div>`);
  3507. });
  3508. document.write(`</div>`);
  3509. }
  3510. function write_table(id) {
  3511. text[id]
  3512. .trim().split("\n\n").forEach(line => {
  3513. document.write(`<div>`);
  3514. line.split("\n").forEach(cell => {
  3515. document.write(`<div>${cell.trim()}</div>`);
  3516. });
  3517. document.write(`</div>`);
  3518. });
  3519. }
  3520. const numword = ["zero", "one", "two", "three", "four", "five"];
  3521. function write_table_inline(id /*, idx_list=null*/) {
  3522. // TODO use regular expression for .split()
  3523. // like .split(/\n[ \t]*\n/g)
  3524. // to ignore empty indent lines
  3525. /*
  3526. const cell_filter = idx_list ? (
  3527. (val, idx) => (idx in idx_list)
  3528. ) : () => true;
  3529. const cell_count = idx_list ? idx_list.length : (
  3530. text[id].trim().split("\n\n")[0].split("\n").length
  3531. );
  3532. */
  3533. // remove multi-line comments
  3534. const text2 = text[id].replace(/\n<!--.*?-->\n/sg, '\n\n').trim();
  3535. const cell_count = (
  3536. text2.trim().split("\n\n")[0].split("\n").length
  3537. );
  3538. document.write(`<div id="table-inline-${id}" class="table-inline ${numword[cell_count]}-cell">`);
  3539. text2
  3540. .trim().split("\n\n").forEach((line, line_idx, line_arr) => {
  3541. document.write(`<div>`);
  3542. line.split("\n")
  3543. //.filter(cell_filter)
  3544. .forEach((cell, idx, cell_arr) => {
  3545. const ct = cell.trim();
  3546. let ctr = ct.replace(/<!--.*?-->/g, '').trim();
  3547. const sm = ctr.match(/<div class="suffix">.*<\/div>/s);
  3548. let suf = '';
  3549. if (sm) {
  3550. ctr = ctr.replace(sm[0], ''); // remove suffix
  3551. suf = sm[0];
  3552. }
  3553. if (idx == 0) {
  3554. if (ctr == "") {
  3555. document.write(`<div></div>`);
  3556. }
  3557. else {
  3558. document.write(`<div>${ctr}</div>:&nbsp;`);
  3559. }
  3560. }
  3561. else if (idx == cell_arr.length-1) {
  3562. // add suffix only in last cell
  3563. if (line_idx == line_arr.length-1) {
  3564. document.write(`<div>${ctr}</div>${suf}`);
  3565. }
  3566. else {
  3567. document.write(`<div>${ctr}</div>${suf} = `);
  3568. }
  3569. }
  3570. else {
  3571. document.write(`<div>${ctr}</div>&nbsp;/&nbsp;`);
  3572. }
  3573. });
  3574. document.write(`</div> `);
  3575. // extra whitespace after </div> = allow wrap
  3576. });
  3577. document.write('</div>')
  3578. }
  3579. </script>
  3580. </head>
  3581. <body>
  3582. <!-- page 1 -->
  3583. <div class="page page1">
  3584. <div class="content">
  3585. <div class="inner_content"><!-- content above footer -->
  3586. <script>write_para("header_page1")</script>
  3587. <script>write_para("project_intro")</script>
  3588. <script>write_para("problem_misunderstandings")</script>
  3589. <div id="table-inline-bodies-wrapper" class="para-margin-bottom">
  3590. <script>
  3591. document.write(text["para_four_bodies"]);
  3592. write_table_inline("bodies");
  3593. </script>
  3594. </div>
  3595. <div class="caption-container float-right four_bodies">
  3596. <div id="div_four_bodies"><!--<script>document.write(`<img style="width: 210px" src="${file.four_bodies}" />`)</script>--></div>
  3597. <div><script>write_caption("four_bodies")</script></div>
  3598. </div>
  3599. <div id="table-inline-elements-wrapper" class="para-margin-bottom">
  3600. <script>
  3601. document.write(text["para_four_elements"]);
  3602. write_table_inline("elements");
  3603. </script>
  3604. </div>
  3605. <div class="caption-container float-left" style="margin-top:0.5em">
  3606. <div id="div_three_hands"><!--<script>document.write(`<img style="width: 180px" src="${file.three_hands}" />`)</script>--></div>
  3607. <div><script>write_caption("three_hands")</script></div>
  3608. </div>
  3609. <script>write_para("mix_types")</script>
  3610. <!-- compass illustrates four elements x three modalities -->
  3611. <div class="caption-container float-right">
  3612. <div><script>write_compass()</script></div>
  3613. <div><script>write_caption("compass")</script></div>
  3614. </div>
  3615. <script>write_para("mix_types_sample")</script>
  3616. <script>write_para("two_modalities")</script>
  3617. <div class="caption-container float-left">
  3618. <div style="margin-left:0.5em"><script>write_map()</script></div>
  3619. <div><script>write_caption("map")</script></div>
  3620. </div>
  3621. <div id="table-inline-sense-wrapper" class="para-margin-bottom">
  3622. <nw><b><script>document.write(text.caption.sense)</script></b>
  3623. = </nw><script>write_table_inline("sense")</script>
  3624. </div>
  3625. <div id="table-inline-modalities-wrapper" class="para-margin-bottom">
  3626. <nw><b><script>document.write(text.caption.modality)</script></b>
  3627. = </nw><script>write_table_inline("modalities")</script>
  3628. </div>
  3629. <div class="caption-container float-right">
  3630. <div><script>write_pallas()</script></div>
  3631. <div><script>write_caption("pallas")</script></div>
  3632. </div>
  3633. <script>write_para("club16")</script>
  3634. <div id="table-inline-sense-wrapper" class="para-margin-bottom">
  3635. <nw><b><script>document.write(text.caption.move)</script></b>
  3636. = </nw><script>write_table_inline("move")</script>
  3637. </div>
  3638. <script>write_para("dress_opposite_color")</script>
  3639. <div id="table-inline-sensexmove-wrapper" class="para-margin-bottom">
  3640. <script>document.write(text.caption.flowsquare)</script>
  3641. = <script>write_table_inline("sensexmove")</script>
  3642. </div>
  3643. <script>write_para("translation_bigfive")</script>
  3644. <script>write_para("translation_mbti")</script>
  3645. </div><!-- close .inner_content -->
  3646. <div class="footer">
  3647. <script>write_para("page_footer", "para-page-footer para-page-footer-1")</script>
  3648. </div>
  3649. </div><!-- close .content -->
  3650. </div><!-- close .page -->
  3651. <!-- ######################################## -->
  3652. <div class="page page2">
  3653. <div class="content">
  3654. <div class="inner_content"><!-- content above footer -->
  3655. <script>write_para("header_page2")</script>
  3656. <div class="caption-container float-right">
  3657. <div><script>write_double_pallas(M3)</script></div>
  3658. <div><script>write_caption("double_pallas")</script></div>
  3659. </div>
  3660. <script>write_para("monolog_bond")</script>
  3661. <script>write_para("dialog_bonds")</script>
  3662. <script>write_para("diagonal_bonds")</script>
  3663. <script>write_para("four_truths")</script>
  3664. <script>write_para("anti_nature")</script>
  3665. <script>write_para("false_talking")</script>
  3666. <script>write_para("false_hearing")</script>
  3667. <script>write_para("right_feedback")</script>
  3668. <div class="float-right" style="margin: 1em 1em 1em 0">
  3669. <script>write_balance("bal")</script>
  3670. </div>
  3671. <div class="caption-container float-left">
  3672. <div class="double-pallas-small-container">
  3673. <script>
  3674. //[M1, F1, M2, F2, M3, F3, M4, F4]
  3675. [F1, M1, F2, M2, F3, M3, F4, M4]
  3676. .forEach(pallas_origin => (
  3677. write_double_pallas_small(pallas_origin)
  3678. ))
  3679. </script>
  3680. </div>
  3681. <div><script>write_caption("eight_double_pallas")</script></div>
  3682. </div>
  3683. <div class="caption-container float-right">
  3684. <div><script>write_map_6x6()</script></div>
  3685. <div><script>write_caption("map_6x6")</script></div>
  3686. </div>
  3687. <script>write_para("nature_vs_art")</script>
  3688. <script>write_para("natural_order")</script>
  3689. <script>write_para("made_order")</script>
  3690. <script>write_para("mutable_modality")</script>
  3691. <script>write_para("gender2_age3")</script>
  3692. <div class="caption-container float-right">
  3693. <div><script>write_exchange()</script></div>
  3694. <div><script>write_caption("exchange")</script></div>
  3695. </div>
  3696. <script>write_para("gender_vs_modality")</script>
  3697. <script>write_para("education_mothers")</script>
  3698. <script>write_para("school_no_choice")</script>
  3699. <script>write_para("works_everywhere")</script>
  3700. <script>write_para("four_crosses")</script>
  3701. <script>write_para("four_dots")</script>
  3702. <script>write_para("in_case_of_doubt")</script>
  3703. <script>write_para("post_script")</script>
  3704. <script>write_para("post_script_2")</script>
  3705. </div><!-- close .inner_content -->
  3706. <!-- footer -->
  3707. <div class="footer">
  3708. <script>write_para("page_footer", "para-page-footer")</script>
  3709. </div>
  3710. </div></div><!-- .content .page -->
  3711. <script>
  3712. // attached/inlined SVG files to have only one HTML file
  3713. // TODO make SVGs smaller, inkscape is too verbose
  3714. //color = {};
  3715. color.middle = {};
  3716. if (1) {
  3717. // variant: eigencolor is middle
  3718. color.middle.fire = "#ff0000";
  3719. color.middle.earth = "#00ff00";
  3720. color.middle.air = "#ffff00";
  3721. color.middle.water = "#0000ff";
  3722. } else {
  3723. // variant: gegencolor is middle
  3724. color.middle.fire = "#00ff00";
  3725. color.middle.earth = "#ff0000";
  3726. color.middle.air = "#0000ff";
  3727. color.middle.water = "#ffff00";
  3728. }
  3729. // TODO verify leg positions. who has x-legs? wo has o-legs?
  3730. // current variant: 14 have x-legs and 23 have o-legs
  3731. // weak legs = x legs, strong legs = o legs
  3732. // xml header only needed for standalone svg file
  3733. const svg_four_bodies = `
  3734. <!--
  3735. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  3736. -->
  3737. <svg
  3738. xmlns:dc="http://purl.org/dc/elements/1.1/"
  3739. xmlns:cc="http://creativecommons.org/ns#"
  3740. xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  3741. xmlns:svg="http://www.w3.org/2000/svg"
  3742. xmlns="http://www.w3.org/2000/svg"
  3743. xmlns:xlink="http://www.w3.org/1999/xlink"
  3744. xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
  3745. xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
  3746. sodipodi:docname="four-bodies.svg"
  3747. inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
  3748. id="svg1005"
  3749. version="1.1"
  3750. viewBox="0 0 73.146881 36.105923"
  3751. height="36.105923mm"
  3752. width="73.146881mm">
  3753. <defs
  3754. id="defs999">
  3755. <linearGradient
  3756. inkscape:collect="always"
  3757. id="linearGradient1205-3">
  3758. <!-- water: red blue green -->
  3759. <stop
  3760. style="stop-color:#ff0000;stop-opacity:1"
  3761. offset="0"
  3762. id="stop1201" />
  3763. <stop
  3764. id="stop971"
  3765. offset="0.05"
  3766. style="stop-color:${color.middle.water};stop-opacity:1" />
  3767. <!-- firefox prints 0.99 as sharp edge but 0.96 as gradient -->
  3768. <!-- chrome prints 0.95 as sharp edge but 0.99 is wrong color -->
  3769. <stop
  3770. id="stop969"
  3771. offset="0.95"
  3772. style="stop-color:${color.middle.water};stop-opacity:1" />
  3773. <stop
  3774. style="stop-color:#00ff00;stop-opacity:1"
  3775. offset="1"
  3776. id="stop1203" />
  3777. </linearGradient>
  3778. <linearGradient
  3779. id="linearGradient1168"
  3780. inkscape:collect="always">
  3781. <!-- earth: blue green yellow -->
  3782. <stop
  3783. style="stop-color:#0000ff;stop-opacity:1"
  3784. offset="0"
  3785. id="stop1162" />
  3786. <stop
  3787. id="stop955"
  3788. offset="0.05"
  3789. style="stop-color:${color.middle.earth};stop-opacity:1" />
  3790. <stop
  3791. style="stop-color:${color.middle.earth};stop-opacity:1"
  3792. offset="0.95"
  3793. id="stop957" />
  3794. <stop
  3795. id="stop1164"
  3796. offset="1"
  3797. style="stop-color:#ffff00;stop-opacity:1" />
  3798. </linearGradient>
  3799. <linearGradient
  3800. inkscape:collect="always"
  3801. id="linearGradient1124">
  3802. <!-- fire: blue red yellow -->
  3803. <stop
  3804. id="stop1132"
  3805. offset="0"
  3806. style="stop-color:#0000ff;stop-opacity:1" />
  3807. <stop
  3808. style="stop-color:${color.middle.fire};stop-opacity:1"
  3809. offset="0.05"
  3810. id="stop925" />
  3811. <stop
  3812. id="stop927"
  3813. offset="0.95"
  3814. style="stop-color:${color.middle.fire};stop-opacity:1" />
  3815. <stop
  3816. style="stop-color:#ffff00;stop-opacity:1"
  3817. offset="1"
  3818. id="stop1134" />
  3819. </linearGradient>
  3820. <rect
  3821. id="rect1766"
  3822. height="22.613817"
  3823. width="1.7945622"
  3824. y="141.39067"
  3825. x="86.136185" />
  3826. <linearGradient
  3827. inkscape:collect="always"
  3828. xlink:href="#linearGradient1168"
  3829. id="linearGradient1158"
  3830. x1="120.57774"
  3831. y1="38.886681"
  3832. x2="120.57774"
  3833. y2="33.754547"
  3834. gradientUnits="userSpaceOnUse" />
  3835. <linearGradient
  3836. gradientTransform="translate(0,-0.49254013)"
  3837. inkscape:collect="always"
  3838. xlink:href="#linearGradient1205-3"
  3839. id="linearGradient1227"
  3840. x1="114.7877"
  3841. y1="148.13826"
  3842. x2="114.7877"
  3843. y2="145.40222"
  3844. gradientUnits="userSpaceOnUse" />
  3845. <linearGradient
  3846. y2="33.689411"
  3847. x2="120.28236"
  3848. y1="38.821548"
  3849. x1="120.28236"
  3850. gradientUnits="userSpaceOnUse"
  3851. id="linearGradient953"
  3852. xlink:href="#linearGradient1124"
  3853. inkscape:collect="always" />
  3854. </defs>
  3855. <sodipodi:namedview
  3856. inkscape:window-maximized="1"
  3857. inkscape:window-y="0"
  3858. inkscape:window-x="0"
  3859. inkscape:window-height="835"
  3860. inkscape:window-width="1440"
  3861. fit-margin-bottom="1"
  3862. fit-margin-right="1"
  3863. lock-margins="true"
  3864. fit-margin-left="1"
  3865. fit-margin-top="1"
  3866. showgrid="false"
  3867. inkscape:document-rotation="0"
  3868. inkscape:current-layer="layer1"
  3869. inkscape:document-units="mm"
  3870. inkscape:cy="85.135138"
  3871. inkscape:cx="142.11401"
  3872. inkscape:zoom="4"
  3873. inkscape:pageshadow="2"
  3874. inkscape:pageopacity="0.0"
  3875. borderopacity="1.0"
  3876. bordercolor="#666666"
  3877. pagecolor="#ffffff"
  3878. id="base"
  3879. showguides="true"
  3880. inkscape:guide-bbox="true">
  3881. <sodipodi:guide
  3882. id="guide933"
  3883. orientation="0,-1"
  3884. position="58.406772,26.962817" />
  3885. <sodipodi:guide
  3886. id="guide935"
  3887. orientation="0,-1"
  3888. position="48.905566,21.496227" />
  3889. <sodipodi:guide
  3890. id="guide937"
  3891. orientation="0,-1"
  3892. position="48.846455,18.760196" />
  3893. <sodipodi:guide
  3894. id="guide939"
  3895. orientation="0,-1"
  3896. position="47.707611,13.248413" />
  3897. </sodipodi:namedview>
  3898. <metadata
  3899. id="metadata1002">
  3900. <rdf:RDF>
  3901. <cc:Work
  3902. rdf:about="">
  3903. <dc:format>image/svg+xml</dc:format>
  3904. <dc:type
  3905. rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  3906. <dc:title />
  3907. </cc:Work>
  3908. </rdf:RDF>
  3909. </metadata>
  3910. <g
  3911. transform="translate(-49.496701,-130.29999)"
  3912. id="layer1"
  3913. inkscape:groupmode="layer"
  3914. inkscape:label="Layer 1">
  3915. <path
  3916. transform="matrix(0.35499659,0,0,-0.53311774,35.565007,165.64086)"
  3917. inkscape:transform-center-y="-3.2714685"
  3918. inkscape:transform-center-x="1.1137021e-06"
  3919. inkscape:randomized="0"
  3920. inkscape:rounded="0"
  3921. inkscape:flatsided="true"
  3922. sodipodi:arg2="2.6179939"
  3923. sodipodi:arg1="1.5707963"
  3924. sodipodi:r2="8.4144154"
  3925. sodipodi:r1="16.828831"
  3926. sodipodi:cy="32.204994"
  3927. sodipodi:cx="120.20919"
  3928. sodipodi:sides="3"
  3929. id="path1354"
  3930. style="fill:url(#linearGradient1158);fill-opacity:1;stroke:#000000;stroke-width:0.574667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  3931. sodipodi:type="star"
  3932. d="M 120.20919,49.033825 105.635,23.790579 l 29.14839,-1e-6 z" />
  3933. <path
  3934. inkscape:transform-center-x="1.0041159e-06"
  3935. sodipodi:type="star"
  3936. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.00573;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  3937. id="path1360"
  3938. sodipodi:sides="3"
  3939. sodipodi:cx="120.20919"
  3940. sodipodi:cy="32.204994"
  3941. sodipodi:r1="16.828831"
  3942. sodipodi:r2="8.4144154"
  3943. sodipodi:arg1="1.5707963"
  3944. sodipodi:arg2="2.6179939"
  3945. inkscape:flatsided="true"
  3946. inkscape:rounded="0"
  3947. inkscape:randomized="0"
  3948. inkscape:transform-center-y="-1.8692973"
  3949. transform="matrix(0.20284289,0,0,-0.30462022,53.855276,146.74714)"
  3950. d="M 120.20919,49.033825 105.635,23.790579 l 29.14839,-1e-6 z" />
  3951. <path
  3952. sodipodi:nodetypes="cc"
  3953. inkscape:connector-curvature="0"
  3954. id="path2414"
  3955. d="m 79.168509,141.91816 c 1.934125,3.70083 4.022425,5.90565 5.851055,6.5019"
  3956. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  3957. <path
  3958. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  3959. d="m 77.309218,141.91816 c -1.93412,3.70083 -4.022431,5.90565 -5.851059,6.5019"
  3960. id="path4798"
  3961. inkscape:connector-curvature="0"
  3962. sodipodi:nodetypes="cc" />
  3963. <text
  3964. style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:3.88056px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;text-align:start;letter-spacing:0px;word-spacing:0px;white-space:pre;shape-inside:url(#rect1766);fill:#000000;fill-opacity:1;stroke:none;"
  3965. id="text1764"
  3966. xml:space="preserve" />
  3967. <!-- air middle -->
  3968. <ellipse
  3969. style="fill:${color.middle.air};fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  3970. id="ellipse1816"
  3971. cx="96.767349"
  3972. cy="146.28188"
  3973. rx="2.4822698"
  3974. ry="1.534127" />
  3975. <!-- air bottom = green -->
  3976. <ellipse
  3977. ry="2.6319511"
  3978. rx="5.2639022"
  3979. cy="150.54318"
  3980. cx="96.767349"
  3981. id="ellipse1818"
  3982. style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  3983. <ellipse
  3984. ry="0.92686599"
  3985. rx="1.4997007"
  3986. cy="138.50757"
  3987. cx="96.767349"
  3988. id="ellipse1820"
  3989. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  3990. <!-- air top = red -->
  3991. <ellipse
  3992. style="fill:#ff0000;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  3993. id="ellipse2412"
  3994. cx="96.767349"
  3995. cy="142.0704"
  3996. rx="5.2639022"
  3997. ry="2.6319511" />
  3998. <circle
  3999. r="3.0492694"
  4000. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4001. id="circle1860"
  4002. cx="96.77066"
  4003. cy="134.47426" />
  4004. <path
  4005. sodipodi:type="star"
  4006. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.00573;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4007. id="path1025"
  4008. sodipodi:sides="3"
  4009. sodipodi:cx="120.20919"
  4010. sodipodi:cy="32.204994"
  4011. sodipodi:r1="16.828831"
  4012. sodipodi:r2="8.4144154"
  4013. sodipodi:arg1="1.5707963"
  4014. sodipodi:arg2="2.6179939"
  4015. inkscape:flatsided="true"
  4016. inkscape:rounded="0"
  4017. inkscape:randomized="0"
  4018. inkscape:transform-center-y="1.8692966"
  4019. transform="matrix(0.20284291,0,0,0.30462024,35.542288,124.69572)"
  4020. d="M 120.20919,49.033825 105.635,23.790579 l 29.14839,-1e-6 z" />
  4021. <path
  4022. transform="matrix(0.35499659,0,0,0.53311774,17.252018,126.94926)"
  4023. inkscape:transform-center-y="3.2714685"
  4024. inkscape:transform-center-x="1.1137021e-06"
  4025. inkscape:randomized="0"
  4026. inkscape:rounded="0"
  4027. inkscape:flatsided="true"
  4028. sodipodi:arg2="2.6179939"
  4029. sodipodi:arg1="1.5707963"
  4030. sodipodi:r2="8.4144154"
  4031. sodipodi:r1="16.828831"
  4032. sodipodi:cy="32.204994"
  4033. sodipodi:cx="120.20919"
  4034. sodipodi:sides="3"
  4035. id="path196"
  4036. style="fill:url(#linearGradient953);fill-opacity:1;stroke:#000000;stroke-width:0.574667;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4037. sodipodi:type="star"
  4038. d="M 120.20919,49.033825 105.635,23.790579 l 29.14839,-1e-6 z" />
  4039. <g
  4040. transform="translate(0,-0.23195425)"
  4041. id="g1005">
  4042. <path
  4043. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4044. d="m 60.952953,150.65508 c -0.795942,2.95292 -0.388135,9.12065 1.196325,13.61511"
  4045. id="path1009"
  4046. inkscape:connector-curvature="0"
  4047. sodipodi:nodetypes="cc" />
  4048. <path
  4049. sodipodi:nodetypes="cc"
  4050. inkscape:connector-curvature="0"
  4051. id="path1001"
  4052. d="m 58.899912,150.65508 c 0.795942,2.95292 0.388135,9.12065 -1.196325,13.61511"
  4053. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4054. </g>
  4055. <path
  4056. inkscape:connector-curvature="0"
  4057. id="path2212"
  4058. d="m 114.82582,139.48181 2.57522,6.72882 -2.57522,6.72881 -2.57521,-6.72881 z"
  4059. style="fill:url(#linearGradient1227);fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4060. <path
  4061. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4062. d="m 114.82582,131.79221 1.47147,3.8448 -1.47147,3.8448 -1.47146,-3.8448 z"
  4063. id="path2309"
  4064. inkscape:connector-curvature="0" />
  4065. <path
  4066. sodipodi:nodetypes="cc"
  4067. inkscape:connector-curvature="0"
  4068. id="path4859"
  4069. d="m 115.75377,141.90647 c 1.93412,3.70083 4.02243,5.90565 5.85106,6.5019"
  4070. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4071. <path
  4072. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4073. d="m 113.89448,141.90647 c -1.93412,3.70083 -4.02243,5.90565 -5.85106,6.5019"
  4074. id="path4861"
  4075. inkscape:connector-curvature="0"
  4076. sodipodi:nodetypes="cc" />
  4077. <g
  4078. transform="translate(0,-0.49254013)"
  4079. id="g1024">
  4080. <path
  4081. sodipodi:nodetypes="cc"
  4082. inkscape:connector-curvature="0"
  4083. id="path1014"
  4084. d="m 115.89104,150.65508 c -0.79595,2.95292 -0.38814,9.12065 1.19632,13.61511"
  4085. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4086. <path
  4087. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4088. d="m 113.76108,150.65508 c 0.79595,2.95292 0.38814,9.12065 -1.19632,13.61511"
  4089. id="path1016"
  4090. inkscape:connector-curvature="0"
  4091. sodipodi:nodetypes="cc" />
  4092. </g>
  4093. <g
  4094. id="g137">
  4095. <circle
  4096. transform="rotate(-12.964937)"
  4097. r="1.37503"
  4098. cy="151.64958"
  4099. cx="33.121284"
  4100. id="circle2182"
  4101. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4102. <circle
  4103. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4104. id="circle2186"
  4105. cx="34.192848"
  4106. cy="156.75101"
  4107. r="1.37503"
  4108. transform="rotate(-12.964937)" />
  4109. <circle
  4110. transform="rotate(-12.964937)"
  4111. r="1.37503"
  4112. cy="161.85565"
  4113. cx="33.121284"
  4114. id="circle2188"
  4115. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4116. <path
  4117. style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4118. d="m 67.428238,141.22636 1.138883,2.46236"
  4119. id="path117" />
  4120. <path
  4121. style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4122. d="m 66.197057,141.7958 1.138884,2.46236"
  4123. id="path119" />
  4124. <path
  4125. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4126. d="m 67.847489,146.31337 0.05249,2.71248"
  4127. id="path126" />
  4128. <path
  4129. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4130. d="m 69.203727,146.28713 0.05249,2.71247"
  4131. id="path128" />
  4132. </g>
  4133. <g
  4134. transform="matrix(-1,0,0,1,119.8348,0)"
  4135. id="g153">
  4136. <circle
  4137. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4138. id="circle139"
  4139. cx="33.121284"
  4140. cy="151.64958"
  4141. r="1.37503"
  4142. transform="rotate(-12.964937)" />
  4143. <circle
  4144. transform="rotate(-12.964937)"
  4145. r="1.37503"
  4146. cy="156.75101"
  4147. cx="34.192848"
  4148. id="circle141"
  4149. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4150. <circle
  4151. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4152. id="circle143"
  4153. cx="33.121284"
  4154. cy="161.85565"
  4155. r="1.37503"
  4156. transform="rotate(-12.964937)" />
  4157. <path
  4158. id="path145"
  4159. d="m 67.428238,141.22636 1.138883,2.46236"
  4160. style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4161. <path
  4162. id="path147"
  4163. d="m 66.197057,141.7958 1.138884,2.46236"
  4164. style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4165. <path
  4166. id="path149"
  4167. d="m 67.847489,146.31337 0.05249,2.71248"
  4168. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4169. <path
  4170. id="path151"
  4171. d="m 69.203727,146.28713 0.05249,2.71247"
  4172. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4173. </g>
  4174. <g
  4175. transform="translate(36.559604)"
  4176. id="g169">
  4177. <circle
  4178. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4179. id="circle155"
  4180. cx="33.121284"
  4181. cy="151.64958"
  4182. r="1.37503"
  4183. transform="rotate(-12.964937)" />
  4184. <circle
  4185. transform="rotate(-12.964937)"
  4186. r="1.37503"
  4187. cy="156.75101"
  4188. cx="34.192848"
  4189. id="circle157"
  4190. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4191. <circle
  4192. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4193. id="circle159"
  4194. cx="33.121284"
  4195. cy="161.85565"
  4196. r="1.37503"
  4197. transform="rotate(-12.964937)" />
  4198. <path
  4199. id="path161"
  4200. d="m 67.428238,141.22636 1.138883,2.46236"
  4201. style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4202. <path
  4203. id="path163"
  4204. d="m 66.197057,141.7958 1.138884,2.46236"
  4205. style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4206. <path
  4207. id="path165"
  4208. d="m 67.847489,146.31337 0.05249,2.71248"
  4209. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4210. <path
  4211. id="path167"
  4212. d="m 69.203727,146.28713 0.05249,2.71247"
  4213. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4214. </g>
  4215. <g
  4216. id="g185"
  4217. transform="matrix(-1,0,0,1,156.9543,0)">
  4218. <circle
  4219. transform="rotate(-12.964937)"
  4220. r="1.37503"
  4221. cy="151.64958"
  4222. cx="33.121284"
  4223. id="circle171"
  4224. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4225. <circle
  4226. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4227. id="circle173"
  4228. cx="34.192848"
  4229. cy="156.75101"
  4230. r="1.37503"
  4231. transform="rotate(-12.964937)" />
  4232. <circle
  4233. transform="rotate(-12.964937)"
  4234. r="1.37503"
  4235. cy="161.85565"
  4236. cx="33.121284"
  4237. id="circle175"
  4238. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4239. <path
  4240. style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4241. d="m 67.428238,141.22636 1.138883,2.46236"
  4242. id="path177" />
  4243. <path
  4244. style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4245. d="m 66.197057,141.7958 1.138884,2.46236"
  4246. id="path179" />
  4247. <path
  4248. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4249. d="m 67.847489,146.31337 0.05249,2.71248"
  4250. id="path181" />
  4251. <path
  4252. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4253. d="m 69.203727,146.28713 0.05249,2.71247"
  4254. id="path183" />
  4255. </g>
  4256. <g
  4257. transform="translate(-0.56042484,0.19809781)"
  4258. id="g210">
  4259. <circle
  4260. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4261. id="circle1468"
  4262. cx="-74.280235"
  4263. cy="154.16206"
  4264. r="1.37503"
  4265. transform="scale(-1,1)" />
  4266. <circle
  4267. transform="scale(-1,1)"
  4268. r="1.37503"
  4269. cy="159.2635"
  4270. cx="-73.208672"
  4271. id="circle1472"
  4272. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4273. <circle
  4274. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4275. id="circle1474"
  4276. cx="-74.280235"
  4277. cy="164.36815"
  4278. r="1.37503"
  4279. transform="scale(-1,1)" />
  4280. <path
  4281. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4282. d="m 73.377004,155.26649 -0.557407,2.6551"
  4283. id="path192" />
  4284. <path
  4285. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4286. d="m 74.704555,155.54519 -0.557407,2.6551"
  4287. id="path197" />
  4288. <path
  4289. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4290. d="m 74.109734,160.31788 0.557407,2.6551"
  4291. id="path199" />
  4292. <path
  4293. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4294. d="m 72.782182,160.59658 0.557408,2.6551"
  4295. id="path201" />
  4296. </g>
  4297. <g
  4298. transform="matrix(-1,0,0,1,157.04387,0.19809781)"
  4299. id="g226">
  4300. <circle
  4301. transform="scale(-1,1)"
  4302. r="1.37503"
  4303. cy="154.16206"
  4304. cx="-74.280235"
  4305. id="circle212"
  4306. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4307. <circle
  4308. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4309. id="circle214"
  4310. cx="-73.208672"
  4311. cy="159.2635"
  4312. r="1.37503"
  4313. transform="scale(-1,1)" />
  4314. <circle
  4315. transform="scale(-1,1)"
  4316. r="1.37503"
  4317. cy="164.36815"
  4318. cx="-74.280235"
  4319. id="circle216"
  4320. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4321. <path
  4322. id="path218"
  4323. d="m 73.377004,155.26649 -0.557407,2.6551"
  4324. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4325. <path
  4326. id="path220"
  4327. d="m 74.704555,155.54519 -0.557407,2.6551"
  4328. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4329. <path
  4330. id="path222"
  4331. d="m 74.109734,160.31788 0.557407,2.6551"
  4332. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4333. <path
  4334. id="path224"
  4335. d="m 72.782182,160.59658 0.557408,2.6551"
  4336. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4337. </g>
  4338. <g
  4339. id="g242"
  4340. transform="translate(17.968689,-0.59775811)">
  4341. <circle
  4342. transform="scale(-1,1)"
  4343. r="1.37503"
  4344. cy="154.16206"
  4345. cx="-74.280235"
  4346. id="circle228"
  4347. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4348. <circle
  4349. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4350. id="circle230"
  4351. cx="-73.208672"
  4352. cy="159.2635"
  4353. r="1.37503"
  4354. transform="scale(-1,1)" />
  4355. <circle
  4356. transform="scale(-1,1)"
  4357. r="1.37503"
  4358. cy="164.36815"
  4359. cx="-74.280235"
  4360. id="circle232"
  4361. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4362. <path
  4363. id="path234"
  4364. d="m 73.377004,155.26649 -0.557407,2.6551"
  4365. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4366. <path
  4367. id="path236"
  4368. d="m 74.704555,155.54519 -0.557407,2.6551"
  4369. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4370. <path
  4371. id="path238"
  4372. d="m 74.109734,160.31788 0.557407,2.6551"
  4373. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4374. <path
  4375. id="path240"
  4376. d="m 72.782182,160.59658 0.557408,2.6551"
  4377. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4378. </g>
  4379. <g
  4380. id="g258"
  4381. transform="matrix(-1,0,0,1,175.57298,-0.59775811)">
  4382. <circle
  4383. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4384. id="circle244"
  4385. cx="-74.280235"
  4386. cy="154.16206"
  4387. r="1.37503"
  4388. transform="scale(-1,1)" />
  4389. <circle
  4390. transform="scale(-1,1)"
  4391. r="1.37503"
  4392. cy="159.2635"
  4393. cx="-73.208672"
  4394. id="circle246"
  4395. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0" />
  4396. <circle
  4397. style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
  4398. id="circle248"
  4399. cx="-74.280235"
  4400. cy="164.36815"
  4401. r="1.37503"
  4402. transform="scale(-1,1)" />
  4403. <path
  4404. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4405. d="m 73.377004,155.26649 -0.557407,2.6551"
  4406. id="path250" />
  4407. <path
  4408. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4409. d="m 74.704555,155.54519 -0.557407,2.6551"
  4410. id="path252" />
  4411. <path
  4412. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4413. d="m 74.109734,160.31788 0.557407,2.6551"
  4414. id="path254" />
  4415. <path
  4416. style="fill:none;stroke:#000000;stroke-width:0.25;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4417. d="m 72.782182,160.59658 0.557408,2.6551"
  4418. id="path256" />
  4419. </g>
  4420. </g>
  4421. </svg>
  4422. `;
  4423. // xml header only needed for standalone svg file
  4424. const svg_three_hands = `
  4425. <!--
  4426. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  4427. -->
  4428. <svg
  4429. xmlns:dc="http://purl.org/dc/elements/1.1/"
  4430. xmlns:cc="http://creativecommons.org/ns#"
  4431. xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  4432. xmlns:svg="http://www.w3.org/2000/svg"
  4433. xmlns="http://www.w3.org/2000/svg"
  4434. xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
  4435. xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
  4436. width="158.22539mm"
  4437. height="113.21396mm"
  4438. viewBox="0 0 158.22539 113.21396"
  4439. version="1.1"
  4440. id="svg8"
  4441. inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
  4442. sodipodi:docname="three-hands.svg"
  4443. inkscape:export-filename="/home/user/doc/alchi/alchi hands wrist size test 2019-04-03.svg.png"
  4444. inkscape:export-xdpi="199"
  4445. inkscape:export-ydpi="199">
  4446. <defs
  4447. id="defs2">
  4448. <marker
  4449. inkscape:isstock="true"
  4450. style="overflow:visible"
  4451. id="marker1750"
  4452. refX="0"
  4453. refY="0"
  4454. orient="auto"
  4455. inkscape:stockid="Arrow1Mend">
  4456. <path
  4457. transform="matrix(-0.4,0,0,-0.4,-4,0)"
  4458. style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
  4459. d="M 0,0 5,-5 -12.5,0 5,5 Z"
  4460. id="path1748"
  4461. inkscape:connector-curvature="0" />
  4462. </marker>
  4463. <marker
  4464. inkscape:stockid="Arrow1Mend"
  4465. orient="auto"
  4466. refY="0"
  4467. refX="0"
  4468. id="Arrow1Mend"
  4469. style="overflow:visible"
  4470. inkscape:isstock="true"
  4471. inkscape:collect="always">
  4472. <path
  4473. id="path1135"
  4474. d="M 0,0 5,-5 -12.5,0 5,5 Z"
  4475. style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
  4476. transform="matrix(-0.4,0,0,-0.4,-4,0)"
  4477. inkscape:connector-curvature="0" />
  4478. </marker>
  4479. <marker
  4480. inkscape:stockid="Arrow1Lend"
  4481. orient="auto"
  4482. refY="0"
  4483. refX="0"
  4484. id="Arrow1Lend"
  4485. style="overflow:visible"
  4486. inkscape:isstock="true">
  4487. <path
  4488. id="path1129"
  4489. d="M 0,0 5,-5 -12.5,0 5,5 Z"
  4490. style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
  4491. transform="matrix(-0.8,0,0,-0.8,-10,0)"
  4492. inkscape:connector-curvature="0" />
  4493. </marker>
  4494. <marker
  4495. inkscape:stockid="Arrow1Lstart"
  4496. orient="auto"
  4497. refY="0"
  4498. refX="0"
  4499. id="marker1590"
  4500. style="overflow:visible"
  4501. inkscape:isstock="true">
  4502. <path
  4503. id="path1588"
  4504. d="M 0,0 5,-5 -12.5,0 5,5 Z"
  4505. style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
  4506. transform="matrix(0.8,0,0,0.8,10,0)"
  4507. inkscape:connector-curvature="0" />
  4508. </marker>
  4509. <marker
  4510. inkscape:stockid="Arrow1Lstart"
  4511. orient="auto"
  4512. refY="0"
  4513. refX="0"
  4514. id="marker1514"
  4515. style="overflow:visible"
  4516. inkscape:isstock="true">
  4517. <path
  4518. id="path1512"
  4519. d="M 0,0 5,-5 -12.5,0 5,5 Z"
  4520. style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
  4521. transform="matrix(0.8,0,0,0.8,10,0)"
  4522. inkscape:connector-curvature="0" />
  4523. </marker>
  4524. <marker
  4525. inkscape:stockid="Arrow1Lstart"
  4526. orient="auto"
  4527. refY="0"
  4528. refX="0"
  4529. id="marker1450"
  4530. style="overflow:visible"
  4531. inkscape:isstock="true">
  4532. <path
  4533. id="path1448"
  4534. d="M 0,0 5,-5 -12.5,0 5,5 Z"
  4535. style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
  4536. transform="matrix(0.8,0,0,0.8,10,0)"
  4537. inkscape:connector-curvature="0" />
  4538. </marker>
  4539. <marker
  4540. inkscape:stockid="Arrow1Lstart"
  4541. orient="auto"
  4542. refY="0"
  4543. refX="0"
  4544. id="marker1410"
  4545. style="overflow:visible"
  4546. inkscape:isstock="true">
  4547. <path
  4548. id="path1408"
  4549. d="M 0,0 5,-5 -12.5,0 5,5 Z"
  4550. style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
  4551. transform="matrix(0.8,0,0,0.8,10,0)"
  4552. inkscape:connector-curvature="0" />
  4553. </marker>
  4554. <marker
  4555. inkscape:stockid="Arrow1Lstart"
  4556. orient="auto"
  4557. refY="0"
  4558. refX="0"
  4559. id="Arrow1Lstart"
  4560. style="overflow:visible"
  4561. inkscape:isstock="true">
  4562. <path
  4563. id="path1126"
  4564. d="M 0,0 5,-5 -12.5,0 5,5 Z"
  4565. style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
  4566. transform="matrix(0.8,0,0,0.8,10,0)"
  4567. inkscape:connector-curvature="0" />
  4568. </marker>
  4569. </defs>
  4570. <sodipodi:namedview
  4571. id="base"
  4572. pagecolor="#ffffff"
  4573. bordercolor="#666666"
  4574. borderopacity="1.0"
  4575. inkscape:pageopacity="0.0"
  4576. inkscape:pageshadow="2"
  4577. inkscape:zoom="1.4142136"
  4578. inkscape:cx="367.64485"
  4579. inkscape:cy="255.66586"
  4580. inkscape:document-units="mm"
  4581. inkscape:current-layer="layer1"
  4582. showgrid="false"
  4583. inkscape:window-width="1440"
  4584. inkscape:window-height="835"
  4585. inkscape:window-x="0"
  4586. inkscape:window-y="0"
  4587. inkscape:window-maximized="1"
  4588. showguides="true"
  4589. inkscape:guide-bbox="true"
  4590. fit-margin-top="2"
  4591. fit-margin-left="2"
  4592. fit-margin-right="2"
  4593. fit-margin-bottom="2"
  4594. inkscape:document-rotation="0"
  4595. lock-margins="true" />
  4596. <metadata
  4597. id="metadata5">
  4598. <rdf:RDF>
  4599. <cc:Work
  4600. rdf:about="">
  4601. <dc:format>image/svg+xml</dc:format>
  4602. <dc:type
  4603. rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
  4604. <dc:title />
  4605. </cc:Work>
  4606. </rdf:RDF>
  4607. </metadata>
  4608. <g
  4609. inkscape:label="Layer 1"
  4610. inkscape:groupmode="layer"
  4611. id="layer1"
  4612. transform="translate(-38.506274,-140.83657)">
  4613. <path
  4614. style="fill:#ffff41;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4615. d="m 65.734413,250.57877 c 0,0 1.37016,-29.31678 1.55915,-32.34059 0.0697,-1.11573 0.3025,-4.26463 0.5326,-5.79524 l 1.101647,-4.30403 c -0.439771,-0.26418 -1.437529,-0.90339 -1.99009,-1.6727 -2.139607,1.92645 -4.711031,2.57948 -5.443526,1.50721 -1.825734,-2.67263 4.114402,-6.09791 5.536307,-6.31638 0.389939,-0.0599 2.218211,0.17752 3.982475,0.68445 0.33073,-0.8032 1.430517,-3.71083 1.808487,-5.26998 0.37798,-1.55915 0.79984,-4.02787 0.89434,-6.24848 0.0945,-2.22061 0.0783,-3.10782 0.0783,-3.48579 0,-0.37798 0.2558,-2.45546 0.3503,-3.11692 0.0945,-0.66146 0.96856,-5.90587 1.06305,-7.27604 0.0945,-1.37016 0.47784,-4.03457 0.11812,-5.95312 -0.2209,-1.17817 -1.13393,-0.44885 -1.79538,0.80319 -0.67702,1.2815 -0.75596,1.96076 -1.32292,3.96876 -0.29528,1.04579 -1.13393,3.49627 -1.51191,4.81919 -0.37797,1.32292 -1.19124,5.58916 -1.75821,5.44742 -0.56697,-0.14174 0.81327,-5.21118 1.33299,-7.14831 0.51972,-1.93713 2.55855,-9.48765 2.87257,-11.17856 0.30711,-1.65364 0.67362,-4.25623 -0.18899,-4.53571 -1.11977,-0.3628 -2.17558,2.28516 -3.1183,5.05543 -0.70888,2.0831 -2.82532,8.62722 -3.2033,9.85564 -0.37798,1.22842 -2.26172,6.86205 -2.59245,6.67306 -0.33073,-0.18899 1.31678,-6.1061 1.60026,-7.66525 0.28348,-1.55915 0.99219,-4.44122 1.46466,-5.95313 0.47247,-1.5119 1.2048,-5.26804 1.34654,-6.77994 0.14174,-1.51191 0.15009,-3.17351 -0.59059,-3.28367 -0.76293,-0.11347 -1.62878,1.01644 -2.38597,2.50409 -1.12385,2.208 -1.88922,4.9313 -2.57497,7.32329 -0.39664,1.38356 -1.18117,3.96876 -1.65364,5.85864 -0.395628,1.58251 -1.730537,7.20759 -2.344748,6.92411 -0.614212,-0.28348 0.953291,-6.32201 1.541547,-8.53052 0.566386,-2.1264 0.666946,-2.7346 1.141051,-4.64454 0.48399,-1.94975 0.45821,-1.60378 0.67243,-2.98647 0.30596,-1.97482 0.86478,-3.3574 -0.2219,-3.82987 -1.086686,-0.47247 -1.63887,0.53623 -2.982297,2.86922 -1.393244,2.4195 -1.954731,4.02016 -2.663436,6.09903 -0.708705,2.07887 -2.814845,8.87729 -3.018216,9.57951 0.02456,-0.83167 0.100481,-1.55071 0.09262,-2.32876 -0.01146,-1.13393 0.188032,-2.32649 0.199466,-4.12434 0.01058,-1.6633 -0.12486,-3.12284 -0.362458,-3.78381 -0.286249,-0.79631 -0.676688,-1.71641 -1.881488,-1.19669 -1.13393,1.2048 -0.894919,2.24651 -1.464657,3.55875 -0.501025,1.15399 -1.067093,2.61911 -1.371555,3.95688 -0.251855,1.10661 -0.660069,4.20163 -1.038045,5.19382 -0.377976,0.99218 -1.181174,1.93712 -1.181174,2.97656 0,1.03943 1.181174,3.9215 1.511903,5.10268 0.330729,1.18117 0.992188,4.81919 1.417413,5.81138 0.425222,0.99219 1.322916,1.22842 1.842632,2.64583 0.740502,1.88953 0.129344,5.47625 0.129344,5.47625 3.289157,0.42904 4.402447,2.43948 3.77946,3.69718 -0.492722,0.99472 -1.419866,0.66661 -3.28694,0.34244 1.686528,0.3267 5.219787,1.29895 4.511551,3.52622 -0.601405,1.8913 -2.943749,0.76494 -4.899526,0.58395 2.744832,0.57413 6.213296,1.97738 5.429089,3.59873 -0.84458,1.74618 -4.832514,0.50845 -6.816517,0.12561 3.459791,0.7031 4.269615,1.8226 3.922403,2.52475 -0.572822,1.15838 -2.187951,1.81263 -5.149962,1.71265 -0.321051,1.157 -0.699205,3.00473 -1.080906,4.52772 -0.33073,1.93712 -0.969669,4.52686 -1.442138,7.50342 -0.472469,2.97657 -2.371849,11.64373 -2.844318,13.20289"
  4616. id="path95-3"
  4617. inkscape:connector-curvature="0"
  4618. sodipodi:nodetypes="cscccsscscscsssssscssssssscssssssssssscssscsscsccccscscscsccsc" />
  4619. <path
  4620. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4621. d="m 53.434874,189.27789 c -0.712065,-2.93325 -0.232038,-4.44174 -0.160331,-5.38395 0.03341,-0.43899 0.07973,-1.3017 0.09583,-1.65817"
  4622. id="path97-6"
  4623. inkscape:connector-curvature="0"
  4624. sodipodi:nodetypes="csc" />
  4625. <path
  4626. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4627. d="m 45.874608,209.95817 c -1.365898,-3.76955 1.681117,-4.55145 4.5249,-4.49522 1.928055,0.0381 5.102898,1.13014 4.754445,3.35673 -0.299038,1.91083 -2.54633,1.05929 -3.957874,0.61883"
  4628. id="path54"
  4629. sodipodi:nodetypes="cssc" />
  4630. <path
  4631. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4632. d="m 47.373696,226.65364 c -2.17042,-0.78142 -3.385651,-1.75527 -3.847719,-3.81573 -0.811057,-4.89614 3.774646,-5.86667 6.758633,-5.39375 m -6.005255,1.54363 c -1.332617,-2.43868 -0.630183,-3.8034 0.993177,-4.86573 -0.914482,-1.34932 -0.801374,-2.23276 -0.442278,-2.9835 1.038364,-2.17084 5.090909,-2.05314 7.067211,-1.54749 1.390173,0.34066 4.931735,1.18252 4.302567,3.63592 -0.479788,1.8709 -4.342618,0.44904 -4.87136,0.44627 2.972242,0.85961 5.719354,1.78274 5.562005,3.16306 -0.290658,2.54975 -5.562895,0.71341 -6.606067,0.60784 1.430311,0.28365 4.002863,1.21503 3.659637,2.40145 -0.730798,2.1548 -5.269671,1.77197 -6.226678,1.76186 m -2.445037,-7.48541 c 1.71155,-1.1577 4.293745,-0.87123 6.05614,-0.4488"
  4633. id="path103-3"
  4634. inkscape:connector-curvature="0"
  4635. sodipodi:nodetypes="cccccscscsccccc" />
  4636. <path
  4637. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4638. d="m 87.160843,214.68372 c -3.355865,0.0179 -7.926806,-1.22825 -8.77828,-1.92265 -0.968775,-0.79006 -2.845344,-7.86165 -4.027431,-8.99273 -1.182087,-1.13108 -6.077027,-2.17018 -7.268112,-2.16055 -1.891845,0.0153 -7.308394,4.40664 -5.598002,6.24831 1.190637,1.28202 3.463644,0.36351 5.36908,-1.39443 0.76135,0.64898 0.850881,1.04258 2.069712,1.67724 0,0 -1.279346,2.83185 -1.467077,7.91515 -0.03822,0.81626 -0.320242,3.64282 -0.367243,4.85271 -0.05636,1.4509 -0.334297,5.42759 -0.374473,8.72377 3.13887,-0.12885 16.989896,0.32711 19.832659,1.09016"
  4639. id="path115-2"
  4640. inkscape:connector-curvature="0"
  4641. sodipodi:nodetypes="cszsscccscc" />
  4642. <path
  4643. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
  4644. d="m 64.982314,152.92736 -2.40543,7.75082"
  4645. id="path319"
  4646. inkscape:connector-curvature="0" />
  4647. <text
  4648. xml:space="preserve"
  4649. style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87778px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;fill:#010101;fill-opacity:1;stroke:none;stroke-width:0.264583"
  4650. x="58.454838"
  4651. y="197.80933"
  4652. id="text2134"><tspan
  4653. sodipodi:role="line"
  4654. id="tspan2132"
  4655. x="58.454838"
  4656. y="197.80933"
  4657. style="font-size:12px;stroke-width:0.264583">3</tspan></text>
  4658. <path
  4659. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4660. d="m 119.78299,249.73529 c 0,0 0.74958,-17.08094 0.93857,-20.10475 m 4.04268,-27.3526 c 0.33073,-0.8032 1.72783,-4.49076 2.10581,-6.04991 0.37797,-1.55915 1.13393,-5.19717 1.22842,-7.41778 0.0945,-2.22061 -0.18899,-2.74033 -0.18899,-3.1183 0,-0.37798 0.18899,-1.65365 0.28349,-2.31511 0.0945,-0.66146 1.27249,-5.96337 1.46465,-7.32329 0.3071,-2.17336 0.95441,-4.48428 0.0473,-5.62239 -0.41647,-0.5225 -1.93246,-0.79085 -2.55134,0.51971 -0.4016,0.85045 -1.03943,2.78758 -1.27567,4.1105 -0.19103,1.06976 -0.75595,3.35453 -1.13393,4.67745 -0.37797,1.32292 -0.60408,3.11226 -1.03943,2.92932 -0.42352,-0.17797 0.0945,-2.69308 0.61421,-4.63021 0.51972,-1.93713 1.79539,-7.41778 2.26786,-9.07143 0.47247,-1.65364 1.55915,-3.73252 -0.51972,-4.77195 -2.07887,-1.03943 -2.64583,2.50409 -3.59077,5.00818 -0.77687,2.05871 -1.98438,7.11068 -2.36235,8.3391 -0.37798,1.22842 -0.6117,2.3683 -1.06306,2.24424 -0.466,-0.12808 0.2008,-1.92532 0.62602,-3.44903 0.42597,-1.52639 1.004,-4.15774 1.47647,-5.66965 0.47247,-1.5119 2.22061,-6.14211 2.36235,-7.65401 0.14174,-1.51191 -0.56696,-2.45685 -1.6064,-2.78758 -1.03943,-0.33073 -2.07887,0 -2.97656,2.3151 -0.89769,2.31511 -2.03162,6.04763 -2.59859,7.37054 -0.56696,1.32292 -1.44103,4.016 -1.72451,5.6224 -0.28348,1.6064 -0.44216,2.8596 -0.87407,2.64583 -0.42886,-0.21226 0.11306,-2.21587 0.47247,-3.66165 0.41449,-1.66737 0.80805,-3.63905 1.32291,-5.5279 0.52231,-1.91617 1.17396,-4.21163 1.43264,-5.67468 0.17531,-0.99152 0.33983,-2.06978 -0.74686,-2.54225 -1.08668,-0.47247 -2.22298,-0.42042 -3.35691,2.13087 -1.13392,2.55134 -2.14805,6.6294 -2.85676,8.70827 -0.7087,2.07887 -1.22251,6.58506 -1.79541,7.24947 0.124,-1.10145 0.37795,-2.19403 0.47245,-3.98942 0.0945,-1.79539 -0.3241,-3.11647 -0.66146,-3.73252 -0.54334,-0.99218 -1.84439,-1.5934 -2.57497,-1.02762 -0.84617,0.65531 -0.9996,2.8669 -1.7083,3.80611 -0.75777,1.00423 -0.78708,1.67098 -1.20451,3.08825 -0.32065,1.08867 -0.55984,4.66935 -0.93782,5.66154 -0.37798,0.99218 -1.18117,1.93712 -1.18117,2.97656 0,1.03943 1.18117,3.9215 1.5119,5.10268 0.33073,1.18117 0.99219,4.81919 1.41741,5.81138 0.42522,0.99219 1.32292,1.22842 1.84263,2.64583 0.51972,1.41741 0.0897,6.30006 0.0897,6.30006 m -2.7862,16.12334 c 0,0 -0.42183,1.67259 -0.75256,3.60972 -0.33073,1.93712 -0.92608,4.5202 -1.3985,7.49676 -0.472467,2.97657 -2.42851,11.73277 -2.900979,13.29193"
  4661. id="path95"
  4662. inkscape:connector-curvature="0"
  4663. sodipodi:nodetypes="cccscscsssssscssssssccssccssssscsccsssscsccccccsc" />
  4664. <path
  4665. sodipodi:nodetypes="cac"
  4666. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4667. d="m 108.46902,185.29399 c -0.4782,-1.12918 -0.7706,-2.10936 -0.81374,-3.21349 -0.0425,-1.08775 0.36324,-2.08477 0.55223,-3.2187"
  4668. id="path97"
  4669. inkscape:connector-curvature="0" />
  4670. <path
  4671. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4672. d="m 109.19498,155.70439 8.4961,3.15808 m 8.10683,3.06506 7.69014,2.8068"
  4673. id="path2130"
  4674. inkscape:connector-curvature="0"
  4675. sodipodi:nodetypes="cccc" />
  4676. <text
  4677. xml:space="preserve"
  4678. style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87778px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
  4679. x="109.11175"
  4680. y="194.62601"
  4681. id="text2138"><tspan
  4682. sodipodi:role="line"
  4683. id="tspan2136"
  4684. x="109.11175"
  4685. y="194.62601"
  4686. style="font-size:11px;stroke-width:0.264583">12</tspan></text>
  4687. <path
  4688. sodipodi:nodetypes="cscccszcccscsssssscssssssssssssssssssscsssscsscscccccscscscsccsc"
  4689. inkscape:connector-curvature="0"
  4690. id="path295"
  4691. d="m 174.17303,250.39409 c 0,0 1.37016,-29.31678 1.55915,-32.34059 0.0697,-1.11573 0.34885,-3.15004 0.44535,-5.01473 l 1.22835,-4.89986 c -1.52163,-0.74498 -3.81726,-1.63227 -4.56389,-2.23475 -1.59467,0.73916 -8.89578,1.11221 -10.20469,-1.40073 -1.49064,-2.86185 10.46065,-3.00292 11.64789,-3.09786 1.18724,-0.0949 3.87249,0.57682 4.90905,0.88803 0.4643,-1.2466 1.68498,-3.85785 2.06585,-5.40677 0.38308,-1.5579 0.79984,-4.02787 0.89433,-6.24848 0.0945,-2.22061 0.0783,-3.10782 0.0783,-3.48579 0,-0.37798 2.26032,-9.67174 2.35482,-10.3332 0.0945,-0.66146 0.96856,-5.90587 1.06306,-7.27604 0.0945,-1.37016 0.47783,-4.03457 0.11811,-5.95312 -0.2209,-1.17817 -1.13392,-0.44885 -1.79538,0.80319 -0.67702,1.2815 -0.75596,1.96076 -1.32292,3.96876 -0.29528,1.04579 -1.13393,3.49627 -1.5119,4.81919 -0.37798,1.32292 -1.19125,5.58916 -1.75822,5.44742 -0.56696,-0.14174 0.81327,-5.21118 1.33299,-7.14831 0.51972,-1.93713 1.48947,-6.07996 1.8035,-7.77087 0.3071,-1.65364 0.67362,-4.25623 -0.18899,-4.53571 -1.11978,-0.3628 -2.17558,2.28516 -3.1183,5.05543 -0.70888,2.0831 -1.75625,5.21953 -2.13423,6.44795 -0.37797,1.22842 -2.26171,6.86205 -2.59244,6.67306 -0.33073,-0.18899 1.31677,-6.1061 1.60026,-7.66525 0.28348,-1.55915 1.12582,-4.77531 1.59829,-6.28722 0.47247,-1.5119 0.97853,-3.76957 1.34654,-5.44359 0.4359,-1.98284 0.28373,-3.9085 -0.45695,-4.01866 -0.76293,-0.11347 -1.42833,0.61554 -2.18553,2.10319 -1.12384,2.208 -1.42149,3.26086 -2.10724,5.65285 -0.39665,1.38356 -1.60782,5.55804 -2.255,7.39544 -0.86335,2.45114 -2.06462,7.47486 -2.67883,7.19138 -0.61422,-0.28348 0.95329,-6.32201 1.54154,-8.53052 0.56639,-2.1264 0.66695,-2.7346 1.14105,-4.64454 0.484,-1.94975 1.46522,-4.74223 1.67944,-6.12492 0.30596,-1.97482 0.86478,-3.3574 -0.2219,-3.82987 -1.08668,-0.47247 -1.50523,0.73668 -2.84866,3.06967 -1.39324,2.4195 -3.09537,6.95816 -3.80408,9.03703 -0.7087,2.07887 -4.68844,13.78741 -5.06642,14.16539 0.0141,-0.25976 0.0314,-0.47838 0.0314,-0.59843 0,-0.94494 0.1166,-2.20265 0.10498,-3.35216 -0.0115,-1.13393 0.18803,-2.32649 0.19946,-4.12434 0.0106,-1.6633 -0.12486,-3.12284 -0.36245,-3.78381 -0.28625,-0.79631 -0.67669,-1.71641 -1.88149,-1.19669 -1.13393,1.2048 -0.89492,2.24651 -1.46466,3.55875 -0.50102,1.15399 -1.06709,2.61911 -1.37155,3.95688 -0.25186,1.10661 -0.66007,4.20163 -1.03805,5.19382 -0.37798,0.99218 -1.18117,6.18935 -1.18117,7.22879 0,1.03943 1.18117,3.9215 1.5119,5.10268 0.33073,1.18117 0.99219,4.81919 1.41741,5.81138 0.42522,0.99219 1.32292,1.22842 1.84263,2.64583 0.51972,1.41741 0.78937,3.06869 0.78937,3.06869 l -0.45363,2.58237 c 5.0366,0.67658 14.94189,4.19709 13.33404,6.13948 -1.01841,1.2303 -4.0578,0.32565 -6.24015,-0.15176 0,0 5.43509,1.72195 4.97146,3.73358 -0.42656,1.85083 -7.47339,-0.26131 -7.47339,-0.26131 0,0 5.50948,1.81776 4.99789,3.38461 -0.6275,1.92187 -7.1969,0.0501 -7.1969,0.0501 0,0 5.37917,1.49419 4.57447,3.17197 -1.20074,2.50349 -9.63528,-0.44623 -9.77518,0.063 -0.36124,1.315 -0.73864,2.85567 -0.97705,4.25205 -0.33073,1.93712 -0.98269,4.60924 -1.45516,7.5858 -0.47247,2.97657 -2.37185,11.64373 -2.84432,13.20289"
  4692. style="fill:#0000c0;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4693. <path
  4694. sodipodi:nodetypes="cc"
  4695. inkscape:connector-curvature="0"
  4696. id="path297"
  4697. d="m 161.95701,188.45844 c -0.6216,-2.56059 -0.28012,-7.44082 -0.18332,-9.22568"
  4698. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4699. <path
  4700. inkscape:connector-curvature="0"
  4701. id="path1746"
  4702. d="m 173.98659,151.52845 2.40543,-7.75082"
  4703. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1750)" />
  4704. <text
  4705. xml:space="preserve"
  4706. style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87778px;line-height:1.25;font-family:monospace;-inkscape-font-specification:monospace;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
  4707. x="167.42401"
  4708. y="193.33865"
  4709. id="text2142"><tspan
  4710. sodipodi:role="line"
  4711. id="tspan2140"
  4712. x="167.42401"
  4713. y="193.33865"
  4714. style="font-size:12px;fill:#fefefe;stroke-width:0.264583">4</tspan></text>
  4715. <path
  4716. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4717. d="m 66.858098,206.46167 0.742889,-0.77779"
  4718. id="path56" />
  4719. <path
  4720. sodipodi:nodetypes="cssc"
  4721. id="path58"
  4722. d="m 99.877151,209.95817 c -1.365898,-3.76955 1.681119,-4.55145 4.524899,-4.49522 1.92806,0.0381 8.64812,1.34366 8.29967,3.57025 -0.29904,1.91083 -6.09155,0.84577 -7.5031,0.40531"
  4723. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4724. <path
  4725. sodipodi:nodetypes="csccscscsccccccc"
  4726. inkscape:connector-curvature="0"
  4727. id="path60"
  4728. d="m 101.37624,226.65364 c -2.170421,-0.78142 -3.385652,-1.75527 -3.84772,-3.81573 -0.510589,-2.27683 0.459256,-3.47826 0.8043,-3.65357 -1.332617,-2.43868 -0.681105,-3.99995 0.942255,-5.06228 -0.914482,-1.34932 -0.801374,-2.23276 -0.442278,-2.9835 1.038364,-2.17084 5.090913,-2.05314 7.067213,-1.54749 1.39017,0.34066 7.97322,1.60075 7.34406,4.05415 -0.47979,1.8709 -7.38411,0.0308 -7.91285,0.028 2.97224,0.85961 5.96172,1.76787 5.80437,3.14819 -0.29066,2.54975 -6.00679,0.95064 -7.00737,0.6867 1.50407,0.16583 5.24141,1.62421 4.89819,2.81063 -0.7308,2.1548 -6.34929,1.2988 -7.3063,1.28869 m -2.445035,-7.48541 c 1.711555,-1.1577 4.293745,-0.87123 6.056145,-0.4488 m -6.83947,5.44709 c 1.169927,-1.2345 2.67864,-2.23895 5.7954,-1.67619"
  4729. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4730. <path
  4731. sodipodi:nodetypes="cszsscccscc"
  4732. inkscape:connector-curvature="0"
  4733. id="path62"
  4734. d="m 141.16339,214.68372 c -3.35587,0.0179 -7.92681,-1.22825 -8.77828,-1.92265 -0.96878,-0.79006 -2.84535,-7.86165 -4.02743,-8.99273 -1.18209,-1.13108 -6.07703,-2.17018 -7.26812,-2.16055 -1.89184,0.0153 -9.56804,4.84062 -7.85765,6.68229 1.19064,1.28202 5.7233,-0.0705 7.62873,-1.82841 0.76135,0.64898 0.85088,1.04258 2.06971,1.67724 0,0 -1.27934,2.83185 -1.46707,7.91515 -0.0382,0.81626 -0.32025,3.64282 -0.36725,4.85271 -0.0564,1.4509 -0.33429,5.42759 -0.37447,8.72377 3.13887,-0.12885 16.9899,0.32711 19.83266,1.09016"
  4735. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4736. <path
  4737. id="path64"
  4738. d="m 120.86064,206.46167 0.74289,-0.77779"
  4739. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
  4740. <path
  4741. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4742. d="m 154.35269,209.95817 c -1.3659,-3.76955 1.68111,-4.55145 4.52489,-4.49522 1.92806,0.0381 15.20167,3.24132 14.48739,5.96672 -0.60608,2.31255 -12.27927,-1.5507 -13.69082,-1.99116"
  4743. id="path66"
  4744. sodipodi:nodetypes="cssc" />
  4745. <path
  4746. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4747. d="m 155.85177,226.65364 c -2.17042,-0.78142 -3.38565,-1.75527 -3.84772,-3.81573 -0.51058,-2.27683 0.45926,-3.47826 0.8043,-3.65357 -1.33261,-2.43868 -0.6811,-3.99995 0.94226,-5.06228 -0.91448,-1.34932 -0.80137,-2.23276 -0.44228,-2.9835 1.03837,-2.17084 5.09091,-2.05314 7.06721,-1.54749 1.39017,0.34066 11.95873,2.65787 11.51553,5.55024 -0.33879,2.21101 -11.55558,-1.46528 -12.08432,-1.46805 2.97224,0.85961 9.98615,2.63959 9.72404,4.57936 -0.34365,2.54316 -10.01768,-0.57632 -11.01826,-0.84026 1.43638,0.42923 8.80722,1.83696 8.38504,4.16651 -0.7308,2.1548 -9.74492,0.0387 -10.70193,0.0286 m -2.44503,-7.48541 c 1.71155,-1.1577 4.29374,-0.87123 6.05614,-0.4488 m -6.83947,5.44709 c 1.16993,-1.2345 2.53591,-2.24487 5.65267,-1.68211"
  4748. id="path68"
  4749. inkscape:connector-curvature="0"
  4750. sodipodi:nodetypes="csccscscsccccccc" />
  4751. <path
  4752. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4753. d="m 195.63892,214.68372 c -3.35587,0.0179 -7.92681,-1.22825 -8.77828,-1.92265 -0.96878,-0.79006 -2.84535,-7.86165 -4.02743,-8.99273 -1.18209,-1.13108 -7.51321,-2.40393 -8.7043,-2.3943 -1.89184,0.0153 -13.27048,0.52191 -11.30391,3.38633 0.99028,1.44241 7.35841,2.41491 10.01699,1.14379 0.76135,0.64898 3.34506,1.60009 4.56389,2.23475 0,0 -1.27934,2.83185 -1.46707,7.91515 -0.0382,0.81626 -0.32025,3.64282 -0.36725,4.85271 -0.0564,1.4509 -0.33429,5.42759 -0.37447,8.72377 3.13887,-0.12885 16.9899,0.32711 19.83266,1.09016"
  4754. id="path70"
  4755. inkscape:connector-curvature="0"
  4756. sodipodi:nodetypes="cszsscccscc" />
  4757. <path
  4758. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4759. d="m 172.84199,205.90416 0.67602,-0.39964"
  4760. id="path72"
  4761. sodipodi:nodetypes="cc" />
  4762. <path
  4763. style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
  4764. d="m 48.692274,221.82226 -1.180757,5.21477"
  4765. id="path74"
  4766. sodipodi:nodetypes="cc" />
  4767. </g>
  4768. </svg>
  4769. `;
  4770. // post process
  4771. // transform custom element <nw>content</nw>
  4772. Array.from(document.getElementsByTagName("nw")).forEach(e => {
  4773. e.outerHTML = '<span class="nowrap-element">' + e.innerHTML + '</span>';
  4774. });
  4775. // https://stackoverflow.com/a/41886794/10440128
  4776. const replaceOnDocument = (pattern, string, {target = document.body} = {}) => {
  4777. [ target, ...target.querySelectorAll(
  4778. "*:not(script):not(noscript):not(style)")
  4779. ].forEach(({childNodes: [...nodes]}) => nodes.map(node => {
  4780. if (node.nodeType === document.ELEMENT_NODE) {
  4781. node.innerHTML = node.innerHTML.replace(pattern, string);
  4782. }}));};
  4783. // &square; = □
  4784. replaceOnDocument(/□/g, '<span class="square-sign">&#x25A1;</span>');
  4785. // &xmark; = &amp;xmark;
  4786. replaceOnDocument(/&amp;xmark;/g, '<span class="xmark-sign">&#x2A2F;</span>');
  4787. document.getElementById('div_four_bodies').innerHTML = svg_four_bodies;
  4788. document.getElementById('div_three_hands').innerHTML = svg_three_hands;
  4789. </script>
  4790. </body>
  4791. </html>