<div dir="ltr">Hi list,<br><br>I'm looking for some help to create parse trees for TikZ - not parse<br>trees _in_ TikZ, parse trees _for_ Tikz, that would show how certain<br>TikZ commands are parsed...<br><br>Let me try to explain. I've been working on a certain set of tools for<br>Lpeg that can display the parse tree of an expression like this one<br><br>  if (x>9) { x=0; y=y+1; }<br><br>both as a tree in ascii art, like this one,<br><br><font face="monospace" size="1">  Stmt__.________________.<br>  |     |                |<br>  if    Expr__._____.    Stmt<br>        |     |     |    |<br>        Id    Optr  Num  StmtList_______.<br>        |     |     |    |              |<br>        x     >     9    Stmt__.__.     Stmt__.__.<br>                         |     |  |     |     |  |<br>                         Id    =  Expr  Id    =  Expr__._____.<br>                         |        |     |        |     |     |<br>                         x        Num   y        Id    Optr  Num<br>                                  |              |     |     |<br>                                  0              y     +     1<br></font><br>and as an underbrace diagram, like in this screenshot:<br><br>  <a href="http://anggtwu.net/IMAGES/emacsconf2023-repls-b.jpg">http://anggtwu.net/IMAGES/emacsconf2023-repls-b.jpg</a><br>  <a href="http://anggtwu.net/emacsconf2023.html">http://anggtwu.net/emacsconf2023.html</a><br><br>There are tons of examples in the TikZ manual that I don't know how to<br>parse. Here's an example:<br><br>  \documentclass[]{book}<br>  \usepackage{tikz}<br>  \usetikzlibrary{arrows.meta, positioning}<br>  %<br>  \begin{document}<br>  \begin{tikzpicture}[ auto,bend right ]<br>    \node (a) at (0:1)   {A};<br>    \node (b) at (120:1) {B};<br>    \node (c) at (240:1) {C};<br>    \draw [->] (a) to                  (b);<br>    \draw [->] (b) to node        {BC} (c);<br>    \draw [->] (c) to node [swap] {CA} (a);<br>  \end{tikzpicture}<br>  \end{document}<br><br>I took it from the section "\subsection{Adding Labels Next to Lines}"<br>in pgfmanual-en-tutorial-nodes.tex and modified it a bit. I _guess_<br>that its third \node its parsed in this way:<br><br><font face="monospace" size="1">  Node__.__________________________________.<br>  |     |                                  |<br>  node  NameAtCoordinate__.___.            Contents<br>        |                 |   |            |<br>        Name              at  Coordinate   {C}<br>        |                     |<br>        (c)                   CanvasPolar<br>                              |<br>                              (240:1)<br><br></font>  <a href="http://anggtwu.net/IMAGES/2024-ParseTikz1-1.png">http://anggtwu.net/IMAGES/2024-ParseTikz1-1.png</a><br><br>So: I know several places in the TikZ manual in which it explains<br>\node, \draw, and \path in different levels of detail, and some of<br>these places, like the \section{Syntax for Path Specifications} in<br>pgfmanual-en-tikz-paths.tex, even try to explain what is the exact<br>language that TikZ is able to parse... but the TikZ parser is still a<br>mystery to me, and in constructs like these ones...<br><br>  \subsection{The Move-To Operation}<br>  \subsubsection{Horizontal and Vertical Lines}<br><br>...I don't have any good guesses on how to name certain subtrees of my<br>parse trees.<br><br>Questions: what are the internal names of move-to, -|, and |-? Where<br>does the parser define support for them? Also, suppose that my<br>approach works, and that I manage to produce, say, 20 nice underbrace<br>diagrams showing how to parse TikZ commands that I found hard to<br>understand... then I will need names for many non-terminals in the<br>TikZ language, and I will need a good way to choose those names. Do<br>you have any other suggestions on how to choose those names besides -<br>this is just a wild guess - looking at the tex macros with names of<br>the form such and such in tikz.code.tex? Also, btw, is the parser<br>written by hand?<br><br>  Thanks in advance!<br>    Eduardo Ochs<br>    <a href="mailto:eduardoochs@gmail.com">eduardoochs@gmail.com</a><br>    <a href="http://anggtwu.net/#eev">http://anggtwu.net/#eev</a><br>    <a href="http://anggtwu.net/eev-tikz.html">http://anggtwu.net/eev-tikz.html</a><br><br><br>P.S.: I'm sending this from a secondary e-mail because mailmain says<br>that in my gmail address "You already have a subscription pending<br>confirmation"... anyone knows how to solve that?<br><div><br></div></div>