Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
-- This file:
--   http://anggtwu.net/LUA/ParseTikz1.lua.html
--   http://anggtwu.net/LUA/ParseTikz1.lua
--          (find-angg "LUA/ParseTikz1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
--
-- See: (find-es "tikz" "tikz-non-terminals")
--      http://anggtwu.net/IMAGES/2024-ParseTikz1-1.png
--
-- (defun e () (interactive) (find-angg "LUA/ParseTikz1.lua"))
-- (defun o () (interactive) (find-angg "LUA/ParseTree2.lua"))
--   (find-angg "LUA/MapAST1.lua")
--
-- «.grammar-2»		(to "grammar-2")
-- «.grammar-2-tests»	(to "grammar-2-tests")

require "Tos3"          -- (find-angg "LUA/Tos3.lua")
require "ELpeg1"        -- (find-angg "LUA/ELpeg1.lua")
require "MapAST2"       -- (find-angg "LUA/MapAST2.lua")
require "ToTeX1"        -- (find-angg "LUA/ToTeX1.lua")
                        -- (find-angg "LUA/ToTeX1.lua" "totexer")

-- (find-angg "LUA/ParseTree2.lua" "grammar")
-- (find-angg "LUA/SubstInSteps1.lua")
-- (find-es "tikz" "path-operations")
-- (find-es "tikz" "labels-next-to-lines")
-- (find-angg "LUA/ELpeg1.lua" "AST")

Gram.__index.be = true
Gram.__index.cm0 = function (gr, top, newsubj, pos)
    subj = newsubj
    if type(pos) == "string" then pos = subj:match(pos) end
    return gr:compile(top):match(subj, pos)
  end

gr,V,VA,VE,PE       = Gram.new()
_                   = S(" ")^0
VA.Name             = C"(c)"
VA.CanvasPolar      = C"(240:1)"
VA.Coordinate       = V.CanvasPolar
VA.NameAtCoordinate = V.Name *_* C"at" *_* V.Coordinate
VA.Contents         = C"{C}"
VA.Node             = C"node" *_* V.NameAtCoordinate *_* V.Contents

--[[
* (show2-use "/tmp/Show2.tex")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "ParseTikz1.lua"
MapAST.__index.trivs = Set.from(split("var num"))

  o = gr:cm0("Node", "node (c) at (240:1) {C}")
= subj
= o
= o:delstrings()
= o:dotstrings()
= o:delstrings():underbracify()
  o10 = o:delstrings():underbracify()
= o10:show {em=1}
* (etv)

--]]



-- \path [draw]  [->]    (node cs:name=c) to node [swap]  {CA}     (node cs:name=a);
--       ------- ------- ----------------         ------- -------- ----------------
--       Options Options Coordinate               Options Contents Coordinate
--                       ----------------    --------------------- ----------------
--                       MoveTo              Node                  MoveTo          
--                       ----------------                          ----------------
--                       PathOp                                    PathOp
--                                                                 ----------------
--                                                                 Path
--                                        -----------------------------------------
--                                        ToPath
--                                        -----------------------------------------
--                                        PathOp
--       --------------------------------------------------------------------------
--       PathSpec

-- «grammar-2»  (to ".grammar-2")
gr,V,VA,VE,PE       = Gram.new()
_                   = S(" ")^0
VA.Options          = C"[draw]" + C"[->]" + C"[swap]"
VA.Coordinate       = C"(node cs:name=a)" + C"(node cs:name=c)"
VA.Contents         = C"{CA}"
VA.MoveTo           = V.Coordinate
VA.Node             = C"node" *_* V.Options *_* V.Contents
VA.ToPath           = C"to"   *_* V.Node    *_* V.Path
VA.Path             = V.PathOp
VA.PathOp           = V.MoveTo + V.ToPath
VA.PathSpec         = oneormorec(V.Options + V.PathOp, "")

-- «grammar-2-tests»  (to ".grammar-2-tests")
--[[
* (show2-use "/tmp/Show2.tex")
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
-- (find-angg "LUA/MapAST2.lua" "totex")
-- (find-angg "LUA/MapAST2.lua" "totex" "<>")
dofile "ParseTikz1.lua"

  o = gr:cm0("PathOp", "(node cs:name=c)")
  o = gr:cm0("ToPath", "to node [swap] {CA} (node cs:name=a)")
  o = gr:cm0("PathSpec", "[draw] [->] (node cs:name=c) to node [swap] {CA} (node cs:name=a)")

= subj
= o
= o:delstrings()
= o:dotstrings()
--    = o:delstrings():underbracify()
  o10 = o:delstrings():underbracify()
= o10:show {em=1,scale=0.8}
* (etv)

--]]




-- Local Variables:
-- coding:  utf-8-unix
-- End: