Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: qelurg 30. 01. 2022, 20:11:40

Název: Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: qelurg 30. 01. 2022, 20:11:40
Chtěl bych si naprogramovat vlastní jednoduchý jazyk na kreslení vektorových obrázků, který bych překládal do SVG.

Hlavní záměry jsou tři a to:

1) zjednodušit ruční zápis svg (zbavení se XML omáčky)
2) umožnit používat proměnné pro definici bodu, definici pera a definici přechodu
3) zjednodušit si výpočty, takže třeba pro vykreslení čáry plánuji několik způsobů zadání (x1 y1 x2 y2), (b1 b2), (b1 delka uhel)

Formát by byl jednoduchý:
Kód: [Vybrat]
B b1 = 20 20
B b2 = 20 50
P pero = <definice pera>
L pero b1 b2
L pero b2 50 30°

Naprogramovat to chci v Pythonu. Jaký parser by pro to byl nejvhodnější? Moje znalosti končí znalostí existence nástrojů flex, yacc a bison z dávné minulosti, které jsem nikdy nepoužíval. Koukám, že dnes existuje nepřeberné množství podobných nástrojů. Viz třeba článek https://tomassetti.me/parsing-in-python/ Je toho tolik, že si vlastně neumím vybrat, co je pro mé potřeby nejvhodnější. Umím si představit, že bych to udělal i pomocí regexpu, ale pro pozdější údržbu a rozšiřování by asi bylo lepší mít nějakou gramatiku, ale zase nechci jít s kanonem na vrabce. Možná by se mi líbila i možnost výpočtů typu b3 = b2 + 50 30°.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: tap 30. 01. 2022, 20:31:42
Najprv by som si skúsil pozrieť čo nedokážem urobiť v metapost-e, či to tam nestačí len pridať. Až potom by som niečo začínal. A začínať výberom jazyka pokračovať hľadaním knižnice na parsovanie... neviem či je to správna cesta.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: androfx 30. 01. 2022, 20:40:44
https://pypi.org/search/?q=svg
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Death Walker 30. 01. 2022, 21:09:40
Ten jazyk co popisujes uz existuje. Vola sa postscript.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: qelurg 30. 01. 2022, 23:00:51
Ten jazyk co popisujes uz existuje. Vola sa postscript.
Ten je moc složitý a těžkopádný. Já ho chci co nejjednodušší, aby ho mohly používat i děti.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: qelurg 30. 01. 2022, 23:12:11
Najprv by som si skúsil pozrieť čo nedokážem urobiť v metapost-e, či to tam nestačí len pridať. Až potom by som niečo začínal. A začínať výberom jazyka pokračovať hľadaním knižnice na parsovanie... neviem či je to správna cesta.

Když kouknu na tohle https://www.root.cz/clanky/metapost-aneb-grafika-v-postscriptu/ tak je to také těžkopádné. Já potřebuji něco jednoduchého, co zvládnou děti na 1. stupni ZŠ, které se učí základy geometrie. Ta jednoduchost je základ.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: qelurg 30. 01. 2022, 23:15:06
Zkuste prosím odpovědět na dotaz, jakým nástrojem parsovat nadhozený jednoduchý jazyk. Nechce se mi zkoumat to množství nástrojů, abych poznal, který je nejvhodnější. Zbytek už si pořeším sám. Děkuji.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: alex6bbc 30. 01. 2022, 23:16:30
tak naprogramuj obrazek primo v pythonu, pocitani s promennymi primo v kodu akorat vypis budou primo sekvence svg xml, treba circle, elipse, text, path a souradnice, barvy, vlastnosti uz budes mit nachystane v promennych v pythonu.

tj. na co novy jazyk, kdyz to muzes mit primo v pythonu. tech par tagu svg je jak nic.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: alex6bbc 30. 01. 2022, 23:19:44
kdyz pro deti, tak treba ve scratchi. pomoci bloku say muzete vypsat xml svg tag, treba <circle> a z promennych nasypat hodnoty.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Death Walker 31. 01. 2022, 03:28:00
Zkuste prosím odpovědět na dotaz, jakým nástrojem parsovat nadhozený jednoduchý jazyk. Nechce se mi zkoumat to množství nástrojů, abych poznal, který je nejvhodnější. Zbytek už si pořeším sám. Děkuji.

No, ja ma dobre skusenosti s antlr. Ten generuje parser v pythone na zaklade gramatiky.

S cim budete mat dobre skusenosti vy sa dozviete az si nadefinujete gramatiku a pre nu si vyberiete vhodny parser alebo parser generator. Pisat tu gramatiku na zaklade toho aky parser vam niekto odporuci nieje prave ten najlepsi napad.

Ked tak pouzite antlr4 definiciu gramatiky, ta sa da pripadne konvertovat do ebnf, naopak je to problematicke.

A az tu gramatiku budete mat definovanu tak mozno zistite ze postscript s jeho obratenou polskou notaciou, je dobry napad. Naviac deti na 1 stupni este nie su tak skazene infixovou notaciou ;)
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Ink 31. 01. 2022, 06:38:03
A začínať výberom jazyka pokračovať hľadaním knižnice na parsovanie... neviem či je to správna cesta.

Nebyla by, kdyby daný jazyk rozumné knihovny neměl. Jelikož to ale není zjevně případ Pythonu a lexerů/parserů, netrápil bych se tím. Dokonce si myslím, že by se to v tomto případě dalo udělat ručně s pomocí split() na dané řádce a pár podmínek. Obecný parser není nutný.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: qelurg 31. 01. 2022, 09:02:09
Zkuste prosím odpovědět na dotaz, jakým nástrojem parsovat nadhozený jednoduchý jazyk. Nechce se mi zkoumat to množství nástrojů, abych poznal, který je nejvhodnější. Zbytek už si pořeším sám. Děkuji.

No, ja ma dobre skusenosti s antlr. Ten generuje parser v pythone na zaklade gramatiky.

Děkuji za praktickou radu.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Karmelos 31. 01. 2022, 09:39:54
Co takhle klasiku HPGL ? https://www.root.cz/clanky/vektorovy-graficky-format-hpgl/ (https://www.root.cz/clanky/vektorovy-graficky-format-hpgl/)
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Martin Poljak 31. 01. 2022, 09:40:00
A az tu gramatiku budete mat definovanu tak mozno zistite ze postscript s jeho obratenou polskou notaciou, je dobry napad. Naviac deti na 1 stupni este nie su tak skazene infixovou notaciou ;)

Děti je hlavně dobrý nápad učit to, co budou potřebovat. Nikoliv se na ZŠ zabývat akademickou genialitou polské notace.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Death Walker 31. 01. 2022, 10:20:15
Děti je hlavně dobrý nápad učit to, co budou potřebovat. Nikoliv se na ZŠ zabývat akademickou genialitou polské notace.

Fakt?
"Marinka ma dve jablcka a Janko ma tri jablcka, kolko jablcok maju spolu"
Tj, 2 3 +

Alebo "Janko ma 4 jablcka a 2 zje, kolko jablcok mu zostane"
Tj, 4 2 -

A az potom sa prechadza na infixovu notaciu, vy ste nikdy mozno polsku notaciu nepotreboval, ale mnohy z tohoto serveru mali/maju napr. programovatelnu kalkulacku
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Death Walker 31. 01. 2022, 11:01:59
A začínať výberom jazyka pokračovať hľadaním knižnice na parsovanie... neviem či je to správna cesta.

Nebyla by, kdyby daný jazyk rozumné knihovny neměl. Jelikož to ale není zjevně případ Pythonu a lexerů/parserů, netrápil bych se tím. Dokonce si myslím, že by se to v tomto případě dalo udělat ručně s pomocí split() na dané řádce a pár podmínek. Obecný parser není nutný.

Tak, ja by som to videl na kolekciu, s regex ktore ma kazde priradeny callback na konkretny kod, kde sa tento callback bude volat s vysledkami toho konkretneho regexpu. Dava to potom moznost ze kazdy modul/plugin si do kolekcie prida svoje. Je tam ale riziko ze si neustrazi, to aby boli vysledky jednoznacne. Autor dotazu ale uz ma viziu vlastneho hranateho kolesa, len potrebuje nasmerovat ako ho ostruhat tak aby fungovalo aspom scasti tak dobre ako uz vymyslene koleso...
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: oss 31. 01. 2022, 12:37:50
Je tu vela rad co pouzit prinicpialne. Ale tou cestou som si uz presiel.

Ci uz jednoduche parsovanie, rekurzivny zostup, regularne vyrazy, Shunting-yard (https://en.wikipedia.org/wiki/Shunting-yard_algorithm) uz som si tym presiel. Na zaciatku to vyzera jednoduchsie ale nebude a nstanu problemy. A ked budes chciet pridat novu vlastnost jazyka zacnes si trhat vlasy.

Zas pri polskej notacii si budu trhat vlasy tie deti a dospli nadavat, ze ktory kodil taku blbost.

Pouzi gramatiku a k tomu vhodny generator parseru. Usetris si plno kodu, nervov a ladenia.

Robim sice v inom jazyku a inom syntaktickom generatore, ale nieco take je s gramatikou na pol hodinu.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: qelurg 31. 01. 2022, 23:17:38
Tak prima, prototyp už funguje:

Tento kód:

Kód: [Vybrat]
SL obrys = 1 - #000 o o
SL arrow = 1 - #000 - >

P  b1 = 20 20
P  b2 = 50 20

U  arrow
Lp b1 b2
La b2 50 30° 50 330° 50 0°

U obrys
P  a = 100 100
P  b = 200 100
P  c = 100 200
P  d = 200 200
P  e = 150 250
Lp a b c d a
Lp a c e d b


U  arrow
P  x = 125 275
P  y = 140 260
Lp x y

Vytvoří tento kód:

Kód: [Vybrat]
<html>
    <body>
<svg width="400" height="300"
    viewPort="0 0 400 300" version="1.1"
    xmlns="http://www.w3.org/2000/svg">

    <style type="text/css" ><![CDATA[
        ._sl_ {stroke-width: 1.000000; stroke-linecap: square; stroke: #000000}
        .obrys {stroke-width: 1.000000; stroke-linecap: round; stroke: #000}
        .arrow {stroke-width: 1.000000; stroke-linecap: square; stroke: #000; marker-end: url(#triangle)}
    ]]></style>

  <defs>
    <marker id="circle" markerWidth="8" markerHeight="8" refX="4" refY="4">
        <circle cx="4" cy="4" r="4" stroke="none" fill="#000"/>
    </marker>
    <marker id="triangle" markerWidth="10" markerHeight="10" refX="1" refY="5" viewBox="0 0 10 10" orient="auto" markerUnits="strokeWidth">
      <path d="M 0 0 L 10 5 L 0 10 z" fill="#000"/>
    </marker>
  </defs>

    <line x1="20.000000" y1="280.000000" x2="50.000000" y2="280.000000" class="arrow" />
    <line x1="50.000000" y1="280.000000" x2="93.301270" y2="255.000000" class="arrow" />
    <line x1="93.301270" y1="255.000000" x2="136.602540" y2="280.000000" class="arrow" />
    <line x1="136.602540" y1="280.000000" x2="186.602540" y2="280.000000" class="arrow" />
    <line x1="100.000000" y1="200.000000" x2="200.000000" y2="200.000000" class="obrys" />
    <line x1="200.000000" y1="200.000000" x2="100.000000" y2="100.000000" class="obrys" />
    <line x1="100.000000" y1="100.000000" x2="200.000000" y2="100.000000" class="obrys" />
    <line x1="200.000000" y1="100.000000" x2="100.000000" y2="200.000000" class="obrys" />
    <line x1="100.000000" y1="200.000000" x2="100.000000" y2="100.000000" class="obrys" />
    <line x1="100.000000" y1="100.000000" x2="150.000000" y2="50.000000" class="obrys" />
    <line x1="150.000000" y1="50.000000" x2="200.000000" y2="100.000000" class="obrys" />
    <line x1="200.000000" y1="100.000000" x2="200.000000" y2="200.000000" class="obrys" />
    <line x1="125.000000" y1="25.000000" x2="140.000000" y2="40.000000" class="arrow" />
</svg>
    </body>
</html>

A teď už si s tím mohu hrát. Přidám další objekty, doplním vícenásobné definování bodů na jednom řádku, doplním matematiku atd.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Ink 01. 02. 2022, 07:30:13
Tak prima, prototyp už funguje:

No a co jsi teda použil?
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: anonacct 01. 02. 2022, 14:00:48
No to je hnus teda ten prototyp :)
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: BoneFlute 01. 02. 2022, 16:42:45
No to je hnus teda ten prototyp :)

Konkrétní výhrady, nebo jen estetika?
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Ondrej Nemecek 01. 02. 2022, 17:46:26
No to je hnus teda ten prototyp :)

Konkrétní výhrady, nebo jen estetika?

Já osobně bych použil normální prog. jazyk a do něj si napsal knihovnu. Pokud by to mělo být hodně vyzuální, tak by asi šel použít Scratch či podobné. Ale přijde mi, že děti nemají problém ani s tím zadávat počítači čistě textové příkazy.

Jinak ovšem nic proti hraní si s vlastním jazykem...
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Death Walker 01. 02. 2022, 19:19:50
Tak zadavatel nikde nepisal ze ten jazyk budu pouzivat deti, on pisal ze ho chce tak jednoduchy aby ho vedeli pouzit aj deti...

To bolo v reakcii na to ze som sa pytal preco nepouzit postscript.

Ja myslim ze aj deti by pochopili princip zasobniku a RPN. Ved sa ako prve ucia matiku v RPN: Marka ma 2 jablcka a Janko 3 jablcka, kolko jablcok maju spolu?
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: BoneFlute 01. 02. 2022, 23:15:46
No to je hnus teda ten prototyp :)

Konkrétní výhrady, nebo jen estetika?

Já osobně bych použil normální prog. jazyk a do něj si napsal knihovnu. Pokud by to mělo být hodně vyzuální, tak by asi šel použít Scratch či podobné. Ale přijde mi, že děti nemají problém ani s tím zadávat počítači čistě textové příkazy.

To nejsou konkrétní výhrady ;)

Třeba za mě, mě se to esteticky nelíbí. Ale konkrétní výhrady nemám, protože jsem ten zápis úplně nepochopil, protože mě to odradilo vizuálem, a tudíž jsem se tomu nevěnoval ani trochu.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: anonacct 02. 02. 2022, 12:59:29
Já tak nějak nevidím, v čem je ten šílenozápis lepší než to zatracované SVG - SVG rozumí každý a má spoustu dokumentace, ale ten šílenozápis, tomu rozumí snad jen jeho autor a každý kdo s tím bude ztrácet čas se bude učit něco co nikde nevyužije.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Karmelos 02. 02. 2022, 13:46:41
A neni lepší teda nainstalovat nějaký 2D CAD  (Qcad, LibreCad) a kreslit ty 2D obrázky v něm? 
Tam se v podstatě taky programuje a dopisují příkazy, hodnoty do cmdlajny, plus má to rovnou vizuální reprezentaci a kromě toho to může být do budoucna i užitečné umět.
Takové to ruční parsování a vyrobený specifický jazyk je imho vymýšlení kola...

Anebo co třeba inkscape scripting?
https://inkscape.org/~pakin/%E2%98%85simple-inkscape-scripting (https://inkscape.org/~pakin/%E2%98%85simple-inkscape-scripting)

Anebo co tvorba grafiky v pythonu, je tu spousta skvělých článků od pana Tišnovského
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: Tomas-T 02. 02. 2022, 14:25:54
Takže např OpenSCAD  :)
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: BoneFlute 02. 02. 2022, 16:12:17
Anebo co třeba inkscape scripting?
https://inkscape.org/~pakin/%E2%98%85simple-inkscape-scripting (https://inkscape.org/~pakin/%E2%98%85simple-inkscape-scripting)
To je dobré. Díky za tip.
Název: Re:Vlastní jazyk pro tvorbu vektorových obrázků
Přispěvatel: David Král 02. 02. 2022, 17:13:59
Nebo použít nějaký nastroj pro matematiku? Jako třeba Julia

https://docs.juliaplots.org/stable/tutorial/#tutorial
https://docs.juliaplots.org/stable/#Intro-to-Plots-in-Julia