💾 Archived View for jb55.com › ward.asia.wiki.org › extract-site-to-dot captured on 2021-12-05 at 23:47:19. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2021-12-04)

-=-=-=-=-=-=-

Extract Site to Dot

Here we start with as specific algorithm that is not large but has already defied an attempt at refactoring. We'll abstract it to pseudo-code and then suggest markup keywords that are both a simple and powerful replacement. See Growing Regions as Hypertext

Growing Regions as Hypertext

Here is what I'm thinking I should do: Add a keyword, DOT, to the Graphviz plugin that surplants the existing dot markup with dot from some other source. riot

riot

About Graphviz Plugin

I will expand this with additional keywords to make a markup language roughly as complex as the Grep plugin which knows how to look for things in a site. I will make sure that one can say DOT LINEUP that will mean find a dotsource in the lineup. The Map plugin already does something like this.

I will also slightly generalize my 40 lines of Mehaffy specific code so as to find relevant links by various means, including "charmed" markdown. I think I could have this done by the weekend. For me the motivation is to have fast diagnostic tools to help Michael succeed with his Growing Regions collaboration.

The code understands something about how we format section and pattern pages. It maps the link structure of the patterns within one section. github

github

The current implementation does not treat links as Collaborative Link. More tight integration with core javascript might enable this fundamental improvement.

Collaborative Link

I hacked a version of this algorithm into the ebook extractor where "await fetch(slug)" turned into "e[slug]" where e is the extraction in progress. github

github

See Graphviz Markup Semantics derived from examples.

Graphviz Markup Semantics

Markup will breadth-first traverse the tree represented by indentation. Lower case passed through to dot. HERE for current page. LINK for all links in this context that exist, ELSE when absent. WHEN charms items that match. NODE makes dot node. -> makes dot edge. FAKE makes a node of similar name.

Here is a diagram based on charmed paragraphs in the lineup. We duplicate this showing lineup pages as bisque.

<img width=420 src='data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjk0cHQiIGhlaWdodD0iMTk0cHQiCiB2aWV3Qm94PSIw LjAwIDAuMDAgNjkzLjUwIDE5NC4wMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMu b3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcv MTk5OS94bGluayI+CjxnIGlkPSJncmFwaDAiIGNsYXNzPSJncmFwaCIgdHJh bnNmb3JtPSJzY2FsZSgxIDEpIHJvdGF0ZSgwKSB0cmFuc2xhdGUoNCAxOTAp Ij4KPHRpdGxlPiUzPC90aXRsZT4KPHBvbHlnb24gZmlsbD0id2hpdGUiIHN0 cm9rZT0ibm9uZSIgcG9pbnRzPSItNCw0IC00LC0xOTAgNjg5LjUsLTE5MCA2 ODkuNSw0IC00LDQiLz4KPCEtLSBQcmlvcml0eQpGb2N1cyAtLT4KPGcgaWQ9 Im5vZGUxIiBjbGFzcz0ibm9kZSI+PHRpdGxlPlByaW9yaXR5CkZvY3VzPC90 aXRsZT4KPHBvbHlnb24gZmlsbD0icGFsZUdyZWVuIiBzdHJva2U9ImJsYWNr IiBwb2ludHM9IjI3NSwtMTg2IDIwNCwtMTg2IDIwNCwtMTQ4IDI3NSwtMTQ4 IDI3NSwtMTg2Ii8+Cjx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjIz OS41IiB5PSItMTcwLjgiIGZvbnQtZmFtaWx5PSJUaW1lcyxzZXJpZiIgZm9u dC1zaXplPSIxNC4wMCI+UHJpb3JpdHk8L3RleHQ+Cjx0ZXh0IHRleHQtYW5j aG9yPSJtaWRkbGUiIHg9IjIzOS41IiB5PSItMTU1LjgiIGZvbnQtZmFtaWx5 PSJUaW1lcyxzZXJpZiIgZm9udC1zaXplPSIxNC4wMCI+Rm9jdXM8L3RleHQ+ CjwvZz4KPCEtLSBBcHByb3ByaWF0ZQpCb3VuZGFyaWVzIC0tPgo8ZyBpZD0i bm9kZTIiIGNsYXNzPSJub2RlIj48dGl0bGU+QXBwcm9wcmlhdGUKQm91bmRh cmllczwvdGl0bGU+Cjxwb2x5Z29uIGZpbGw9InBhbGVHcmVlbiIgc3Ryb2tl PSJibGFjayIgcG9pbnRzPSIxMDMsLTExMiAwLC0xMTIgMCwtNzQgMTAzLC03 NCAxMDMsLTExMiIvPgo8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI1 MS41IiB5PSItOTYuOCIgZm9udC1mYW1pbHk9IlRpbWVzLHNlcmlmIiBmb250 LXNpemU9IjE0LjAwIj5BcHByb3ByaWF0ZTwvdGV4dD4KPHRleHQgdGV4dC1h bmNob3I9Im1pZGRsZSIgeD0iNTEuNSIgeT0iLTgxLjgiIGZvbnQtZmFtaWx5 PSJUaW1lcyxzZXJpZiIgZm9udC1zaXplPSIxNC4wMCI+Qm91bmRhcmllczwv dGV4dD4KPC9nPgo8IS0tIFByaW9yaXR5CkZvY3VzJiM0NTsmZ3Q7QXBwcm9w cmlhdGUKQm91bmRhcmllcyAtLT4KPGcgaWQ9ImVkZ2UxIiBjbGFzcz0iZWRn ZSI+PHRpdGxlPlByaW9yaXR5CkZvY3VzJiM0NTsmZ3Q7QXBwcm9wcmlhdGUK Qm91bmRhcmllczwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0i YmxhY2siIGQ9Ik0yMDMuNjk2LC0xNTIuMjg4QzE3Ni42NjMsLTE0MS45MzUg MTM5LjA0MiwtMTI3LjUyNyAxMDcuOTY4LC0xMTUuNjI2Ii8+Cjxwb2x5Z29u IGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjEwOS4xNDQs LTExMi4zMjkgOTguNTUzOCwtMTEyLjAyMSAxMDYuNjQxLC0xMTguODY2IDEw OS4xNDQsLTExMi4zMjkiLz4KPC9nPgo8IS0tIEhvbGRpbmcKU3BhY2UgLS0+ CjxnIGlkPSJub2RlMyIgY2xhc3M9Im5vZGUiPjx0aXRsZT5Ib2xkaW5nClNw YWNlPC90aXRsZT4KPHBvbHlnb24gZmlsbD0icGFsZUdyZWVuIiBzdHJva2U9 ImJsYWNrIiBwb2ludHM9Ijk0LjUsLTM4IDIwLjUsLTM4IDIwLjUsLTAgOTQu NSwtMCA5NC41LC0zOCIvPgo8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4 PSI1Ny41IiB5PSItMjIuOCIgZm9udC1mYW1pbHk9IlRpbWVzLHNlcmlmIiBm b250LXNpemU9IjE0LjAwIj5Ib2xkaW5nPC90ZXh0Pgo8dGV4dCB0ZXh0LWFu Y2hvcj0ibWlkZGxlIiB4PSI1Ny41IiB5PSItNy44IiBmb250LWZhbWlseT0i VGltZXMsc2VyaWYiIGZvbnQtc2l6ZT0iMTQuMDAiPlNwYWNlPC90ZXh0Pgo8 L2c+CjwhLS0gUHJpb3JpdHkKRm9jdXMmIzQ1OyZndDtIb2xkaW5nClNwYWNl IC0tPgo8ZyBpZD0iZWRnZTIiIGNsYXNzPSJlZGdlIj48dGl0bGU+UHJpb3Jp dHkKRm9jdXMmIzQ1OyZndDtIb2xkaW5nClNwYWNlPC90aXRsZT4KPHBhdGgg ZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTIxNC4xOTksLTE0Ny44 OTdDMjAwLjAwOSwtMTM3LjU5MiAxODIuMDgyLC0xMjQuMzE4IDE2Ni41LC0x MTIgMTM4LjQ3MiwtODkuODQyMiAxMDcuNDE0LC02My40Mzc0IDg1LjY0NDIs LTQ0LjYxMTEiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxh Y2siIHBvaW50cz0iODcuOTE0OCwtNDEuOTQ3NCA3OC4wNjY5LC0zOC4wMzk5 IDgzLjMyODYsLTQ3LjIzNTggODcuOTE0OCwtNDEuOTQ3NCIvPgo8L2c+Cjwh LS0gTW92aW5nIHRvd2FyZApBbGlnbm1lbnQgLS0+CjxnIGlkPSJub2RlNCIg Y2xhc3M9Im5vZGUiPjx0aXRsZT5Nb3ZpbmcgdG93YXJkCkFsaWdubWVudDwv dGl0bGU+Cjxwb2x5Z29uIGZpbGw9InBhbGVHcmVlbiIgc3Ryb2tlPSJibGFj ayIgcG9pbnRzPSI0MjQsLTExMiAyOTksLTExMiAyOTksLTc0IDQyNCwtNzQg NDI0LC0xMTIiLz4KPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMzYx LjUiIHk9Ii05Ni44IiBmb250LWZhbWlseT0iVGltZXMsc2VyaWYiIGZvbnQt c2l6ZT0iMTQuMDAiPk1vdmluZyB0b3dhcmQ8L3RleHQ+Cjx0ZXh0IHRleHQt YW5jaG9yPSJtaWRkbGUiIHg9IjM2MS41IiB5PSItODEuOCIgZm9udC1mYW1p bHk9IlRpbWVzLHNlcmlmIiBmb250LXNpemU9IjE0LjAwIj5BbGlnbm1lbnQ8 L3RleHQ+CjwvZz4KPCEtLSBQcmlvcml0eQpGb2N1cyYjNDU7Jmd0O01vdmlu ZyB0b3dhcmQKQWxpZ25tZW50IC0tPgo8ZyBpZD0iZWRnZTMiIGNsYXNzPSJl ZGdlIj48dGl0bGU+UHJpb3JpdHkKRm9jdXMmIzQ1OyZndDtNb3ZpbmcgdG93 YXJkCkFsaWdubWVudDwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9r ZT0iYmxhY2siIGQ9Ik0yNzAuMjg2LC0xNDcuODMxQzI4NS44OSwtMTM4LjYy MiAzMDUuMDI0LC0xMjcuMzMgMzIxLjczLC0xMTcuNDcxIi8+Cjxwb2x5Z29u IGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjMyMy44OTEs LTEyMC4yNiAzMzAuNzI0LC0xMTIuMTYzIDMyMC4zMzMsLTExNC4yMzEgMzIz Ljg5MSwtMTIwLjI2Ii8+CjwvZz4KPCEtLSBQdXJwb3NlIC0tPgo8ZyBpZD0i bm9kZTUiIGNsYXNzPSJub2RlIj48dGl0bGU+UHVycG9zZTwvdGl0bGU+Cjxw b2x5Z29uIGZpbGw9InBhbGVHcmVlbiIgc3Ryb2tlPSJibGFjayIgcG9pbnRz PSIxODgsLTM3IDExMywtMzcgMTEzLC0xIDE4OCwtMSAxODgsLTM3Ii8+Cjx0 ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjE1MC41IiB5PSItMTUuMyIg Zm9udC1mYW1pbHk9IlRpbWVzLHNlcmlmIiBmb250LXNpemU9IjE0LjAwIj5Q dXJwb3NlPC90ZXh0Pgo8L2c+CjwhLS0gUHJpb3JpdHkKRm9jdXMmIzQ1OyZn dDtQdXJwb3NlIC0tPgo8ZyBpZD0iZWRnZTQiIGNsYXNzPSJlZGdlIj48dGl0 bGU+UHJpb3JpdHkKRm9jdXMmIzQ1OyZndDtQdXJwb3NlPC90aXRsZT4KPHBh dGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTIxOS4yMzMsLTE0 Ny45NkMyMDkuMDI5LC0xMzguMDkyIDE5Ny4wNDYsLTEyNS4yMDkgMTg4LjUs LTExMiAxNzUuMjkxLC05MS41ODQyIDE2NS4xMjIsLTY1LjgxNjggMTU4LjY0 MiwtNDYuNzQ4OCIvPgo8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJi bGFjayIgcG9pbnRzPSIxNjEuOTQ5LC00NS42MDAzIDE1NS41MSwtMzcuMTg3 IDE1NS4yOTcsLTQ3Ljc3OTcgMTYxLjk0OSwtNDUuNjAwMyIvPgo8L2c+Cjwh LS0gU2V0dGluZwpJbnRlbnRpb24gLS0+CjxnIGlkPSJub2RlNiIgY2xhc3M9 Im5vZGUiPjx0aXRsZT5TZXR0aW5nCkludGVudGlvbjwvdGl0bGU+Cjxwb2x5 Z29uIGZpbGw9InBhbGVHcmVlbiIgc3Ryb2tlPSJibGFjayIgcG9pbnRzPSIy ODEsLTExMiAxOTgsLTExMiAxOTgsLTc0IDI4MSwtNzQgMjgxLC0xMTIiLz4K PHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjM5LjUiIHk9Ii05Ni44 IiBmb250LWZhbWlseT0iVGltZXMsc2VyaWYiIGZvbnQtc2l6ZT0iMTQuMDAi PlNldHRpbmc8L3RleHQ+Cjx0ZXh0IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9 IjIzOS41IiB5PSItODEuOCIgZm9udC1mYW1pbHk9IlRpbWVzLHNlcmlmIiBm b250LXNpemU9IjE0LjAwIj5JbnRlbnRpb248L3RleHQ+CjwvZz4KPCEtLSBQ cmlvcml0eQpGb2N1cyYjNDU7Jmd0O1NldHRpbmcKSW50ZW50aW9uIC0tPgo8 ZyBpZD0iZWRnZTUiIGNsYXNzPSJlZGdlIj48dGl0bGU+UHJpb3JpdHkKRm9j dXMmIzQ1OyZndDtTZXR0aW5nCkludGVudGlvbjwvdGl0bGU+CjxwYXRoIGZp bGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0yMzMuNTQ4LC0xNDcuODMx QzIzMi43OTcsLTE0MC4xMzEgMjMyLjU3NiwtMTMwLjk3NCAyMzIuODg1LC0x MjIuNDE3Ii8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJva2U9ImJsYWNr IiBwb2ludHM9IjIzNi4zNzksLTEyMi42MTYgMjMzLjUyNCwtMTEyLjQxMyAy MjkuMzkzLC0xMjIuMTcgMjM2LjM3OSwtMTIyLjYxNiIvPgo8L2c+CjwhLS0g VHJhamVjdG9yeSAtLT4KPGcgaWQ9Im5vZGU3IiBjbGFzcz0ibm9kZSI+PHRp dGxlPlRyYWplY3Rvcnk8L3RpdGxlPgo8cG9seWdvbiBmaWxsPSJwYWxlR3Jl ZW4iIHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNTMzLC0xMTEgNDQyLC0xMTEg NDQyLC03NSA1MzMsLTc1IDUzMywtMTExIi8+Cjx0ZXh0IHRleHQtYW5jaG9y PSJtaWRkbGUiIHg9IjQ4Ny41IiB5PSItODkuMyIgZm9udC1mYW1pbHk9IlRp bWVzLHNlcmlmIiBmb250LXNpemU9IjE0LjAwIj5UcmFqZWN0b3J5PC90ZXh0 Pgo8L2c+CjwhLS0gUHJpb3JpdHkKRm9jdXMmIzQ1OyZndDtUcmFqZWN0b3J5 IC0tPgo8ZyBpZD0iZWRnZTYiIGNsYXNzPSJlZGdlIj48dGl0bGU+UHJpb3Jp dHkKRm9jdXMmIzQ1OyZndDtUcmFqZWN0b3J5PC90aXRsZT4KPHBhdGggZmls bD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTI3NS4wNTYsLTE1Ni42NzhD MzEyLjA5OCwtMTQ2LjgzOSAzNzIuMDIzLC0xMzAuNTY5IDQzMi4yMjYsLTEx Mi4zMjciLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0iYmxhY2si IHBvaW50cz0iNDMzLjM0MSwtMTE1LjY0NiA0NDEuODg3LC0xMDkuMzg0IDQz MS4zMDEsLTEwOC45NSA0MzMuMzQxLC0xMTUuNjQ2Ii8+CjwvZz4KPCEtLSBC YWxhbmNlIFByb2Nlc3MKYW5kIENvbnRlbnQgLS0+CjxnIGlkPSJub2RlOCIg Y2xhc3M9Im5vZGUiPjx0aXRsZT5CYWxhbmNlIFByb2Nlc3MKYW5kIENvbnRl bnQ8L3RpdGxlPgo8cG9seWdvbiBmaWxsPSJwYWxlR3JlZW4iIHN0cm9rZT0i YmxhY2siIHBvaW50cz0iNjg1LjUsLTExMiA1NTEuNSwtMTEyIDU1MS41LC03 NCA2ODUuNSwtNzQgNjg1LjUsLTExMiIvPgo8dGV4dCB0ZXh0LWFuY2hvcj0i bWlkZGxlIiB4PSI2MTguNSIgeT0iLTk2LjgiIGZvbnQtZmFtaWx5PSJUaW1l cyxzZXJpZiIgZm9udC1zaXplPSIxNC4wMCI+QmFsYW5jZSBQcm9jZXNzPC90 ZXh0Pgo8dGV4dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSI2MTguNSIgeT0i LTgxLjgiIGZvbnQtZmFtaWx5PSJUaW1lcyxzZXJpZiIgZm9udC1zaXplPSIx NC4wMCI+YW5kIENvbnRlbnQ8L3RleHQ+CjwvZz4KPCEtLSBQcmlvcml0eQpG b2N1cyYjNDU7Jmd0O0JhbGFuY2UgUHJvY2VzcwphbmQgQ29udGVudCAtLT4K PGcgaWQ9ImVkZ2U3IiBjbGFzcz0iZWRnZSI+PHRpdGxlPlByaW9yaXR5CkZv Y3VzJiM0NTsmZ3Q7QmFsYW5jZSBQcm9jZXNzCmFuZCBDb250ZW50PC90aXRs ZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTI3NS4w NzYsLTE2MC4zMjVDMzMwLjA0NSwtMTUxLjQxMyA0MzkuMTM3LC0xMzMuMTUg NTQxLjUyMywtMTEyLjE0NyIvPgo8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ry b2tlPSJibGFjayIgcG9pbnRzPSI1NDIuMzIzLC0xMTUuNTU2IDU1MS40MDks LTExMC4xMDYgNTQwLjkwOCwtMTA4LjcgNTQyLjMyMywtMTE1LjU1NiIvPgo8 L2c+CjwhLS0gU2V0dGluZwpJbnRlbnRpb24mIzQ1OyZndDtQcmlvcml0eQpG b2N1cyAtLT4KPGcgaWQ9ImVkZ2UxMiIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5T ZXR0aW5nCkludGVudGlvbiYjNDU7Jmd0O1ByaW9yaXR5CkZvY3VzPC90aXRs ZT4KPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTI0NS40 NzYsLTExMi40MTNDMjQ2LjIwNywtMTIwLjA1OSAyNDYuNDIsLTEyOS4xMDgg MjQ2LjExNSwtMTM3LjU3MyIvPgo8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ry b2tlPSJibGFjayIgcG9pbnRzPSIyNDIuNjA1LC0xMzcuNjI2IDI0NS40NTIs LTE0Ny44MzEgMjQ5LjU5LC0xMzguMDc4IDI0Mi42MDUsLTEzNy42MjYiLz4K PC9nPgo8IS0tIFNldHRpbmcKSW50ZW50aW9uJiM0NTsmZ3Q7SG9sZGluZwpT cGFjZSAtLT4KPGcgaWQ9ImVkZ2U5IiBjbGFzcz0iZWRnZSI+PHRpdGxlPlNl dHRpbmcKSW50ZW50aW9uJiM0NTsmZ3Q7SG9sZGluZwpTcGFjZTwvdGl0bGU+ CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9Ik0xOTcuNzQ2 LC03NS40ODE3QzE2OS44MzYsLTY0LjQ0MDcgMTMzLjA4MywtNDkuOTAxMSAx MDQuMjAzLC0zOC40NzYxIi8+Cjxwb2x5Z29uIGZpbGw9ImJsYWNrIiBzdHJv a2U9ImJsYWNrIiBwb2ludHM9IjEwNS4zMjIsLTM1LjE1NDUgOTQuNzM1Miwt MzQuNzMwNCAxMDIuNzQ2LC00MS42NjM3IDEwNS4zMjIsLTM1LjE1NDUiLz4K PC9nPgo8IS0tIFNldHRpbmcKSW50ZW50aW9uJiM0NTsmZ3Q7UHVycG9zZSAt LT4KPGcgaWQ9ImVkZ2UxMyIgY2xhc3M9ImVkZ2UiPjx0aXRsZT5TZXR0aW5n CkludGVudGlvbiYjNDU7Jmd0O1B1cnBvc2U8L3RpdGxlPgo8cGF0aCBmaWxs PSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMjE3LjA0MiwtNzMuODMxNEMy MDUuNzQ1LC02NC42OTI0IDE5MS45MTMsLTUzLjUwMjQgMTc5Ljc5MiwtNDMu Njk2NyIvPgo8cG9seWdvbiBmaWxsPSJibGFjayIgc3Ryb2tlPSJibGFjayIg cG9pbnRzPSIxODEuNzAyLC00MC43Mzk5IDE3MS43MjYsLTM3LjE3MTUgMTc3 LjI5OSwtNDYuMTgyIDE4MS43MDIsLTQwLjczOTkiLz4KPC9nPgo8IS0tIENv bW1pdG1lbnQgLS0+CjxnIGlkPSJub2RlOSIgY2xhc3M9Im5vZGUiPjx0aXRs ZT5Db21taXRtZW50PC90aXRsZT4KPHBvbHlnb24gZmlsbD0icGFsZUdyZWVu IiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjUxOC41LC0zNyA0MDguNSwtMzcg NDA4LjUsLTEgNTE4LjUsLTEgNTE4LjUsLTM3Ii8+Cjx0ZXh0IHRleHQtYW5j aG9yPSJtaWRkbGUiIHg9IjQ2My41IiB5PSItMTUuMyIgZm9udC1mYW1pbHk9 IlRpbWVzLHNlcmlmIiBmb250LXNpemU9IjE0LjAwIj5Db21taXRtZW50PC90 ZXh0Pgo8L2c+CjwhLS0gU2V0dGluZwpJbnRlbnRpb24mIzQ1OyZndDtDb21t aXRtZW50IC0tPgo8ZyBpZD0iZWRnZTgiIGNsYXNzPSJlZGdlIj48dGl0bGU+ U2V0dGluZwpJbnRlbnRpb24mIzQ1OyZndDtDb21taXRtZW50PC90aXRsZT4K PHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSJibGFjayIgZD0iTTI4MS4yMDYs LTc3LjE0MDFDMjg0LjM0NiwtNzYuMDY0MSAyODcuNDcxLC03NS4wMDcgMjkw LjUsLTc0IDMyNi4wODIsLTYyLjE3MjEgMzY2LjAyNiwtNDkuNjU0MyAzOTgu NTYsLTM5LjY1MjEiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0i YmxhY2siIHBvaW50cz0iMzk5Ljg3MSwtNDIuOTEwNyA0MDguNDA2LC0zNi42 MzIyIDM5Ny44MTksLTM2LjIxODQgMzk5Ljg3MSwtNDIuOTEwNyIvPgo8L2c+ CjwhLS0gSW52aXRhdGlvbiAtLT4KPGcgaWQ9Im5vZGUxMCIgY2xhc3M9Im5v ZGUiPjx0aXRsZT5JbnZpdGF0aW9uPC90aXRsZT4KPHBvbHlnb24gZmlsbD0i cGFsZUdyZWVuIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjYyMi41LC0zNyA1 MzYuNSwtMzcgNTM2LjUsLTEgNjIyLjUsLTEgNjIyLjUsLTM3Ii8+Cjx0ZXh0 IHRleHQtYW5jaG9yPSJtaWRkbGUiIHg9IjU3OS41IiB5PSItMTUuMyIgZm9u dC1mYW1pbHk9IlRpbWVzLHNlcmlmIiBmb250LXNpemU9IjE0LjAwIj5JbnZp dGF0aW9uPC90ZXh0Pgo8L2c+CjwhLS0gU2V0dGluZwpJbnRlbnRpb24mIzQ1 OyZndDtJbnZpdGF0aW9uIC0tPgo8ZyBpZD0iZWRnZTEwIiBjbGFzcz0iZWRn ZSI+PHRpdGxlPlNldHRpbmcKSW50ZW50aW9uJiM0NTsmZ3Q7SW52aXRhdGlv bjwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxhY2siIGQ9 Ik0yODEuMDUzLC03Ni42MTUzQzI4NC4yMjksLTc1LjY2MDYgMjg3LjQwMywt NzQuNzc0NCAyOTAuNSwtNzQgMzkwLjczLC00OC45MzggNDIyLjE2NywtNjIu NjM4NSA1MjYuMjk3LC0zOC4wNDUiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2si IHN0cm9rZT0iYmxhY2siIHBvaW50cz0iNTI3LjM3MywtNDEuMzg1NyA1MzYu MjY2LC0zNS42Mjc0IDUyNS43MjMsLTM0LjU4MjggNTI3LjM3MywtNDEuMzg1 NyIvPgo8L2c+CjwhLS0gT3BlbmluZyBhbmQKV2VsY29tZSAtLT4KPGcgaWQ9 Im5vZGUxMSIgY2xhc3M9Im5vZGUiPjx0aXRsZT5PcGVuaW5nIGFuZApXZWxj b21lPC90aXRsZT4KPHBvbHlnb24gZmlsbD0icGFsZUdyZWVuIiBzdHJva2U9 ImJsYWNrIiBwb2ludHM9IjMxMywtMzggMjA2LC0zOCAyMDYsLTAgMzEzLC0w IDMxMywtMzgiLz4KPHRleHQgdGV4dC1hbmNob3I9Im1pZGRsZSIgeD0iMjU5 LjUiIHk9Ii0yMi44IiBmb250LWZhbWlseT0iVGltZXMsc2VyaWYiIGZvbnQt c2l6ZT0iMTQuMDAiPk9wZW5pbmcgYW5kPC90ZXh0Pgo8dGV4dCB0ZXh0LWFu Y2hvcj0ibWlkZGxlIiB4PSIyNTkuNSIgeT0iLTcuOCIgZm9udC1mYW1pbHk9 IlRpbWVzLHNlcmlmIiBmb250LXNpemU9IjE0LjAwIj5XZWxjb21lPC90ZXh0 Pgo8L2c+CjwhLS0gU2V0dGluZwpJbnRlbnRpb24mIzQ1OyZndDtPcGVuaW5n IGFuZApXZWxjb21lIC0tPgo8ZyBpZD0iZWRnZTExIiBjbGFzcz0iZWRnZSI+ PHRpdGxlPlNldHRpbmcKSW50ZW50aW9uJiM0NTsmZ3Q7T3BlbmluZyBhbmQK V2VsY29tZTwvdGl0bGU+CjxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iYmxh Y2siIGQ9Ik0yNDQuNTQ3LC03My44MzE0QzI0Ni43MDksLTY2LjA0NjMgMjQ5 LjI4NSwtNTYuNzcyOSAyNTEuNjg1LC00OC4xMzQ3Ii8+Cjxwb2x5Z29uIGZp bGw9ImJsYWNrIiBzdHJva2U9ImJsYWNrIiBwb2ludHM9IjI1NS4wODEsLTQ4 Ljk4NTIgMjU0LjM4NSwtMzguNDEzMyAyNDguMzM2LC00Ny4xMTE3IDI1NS4w ODEsLTQ4Ljk4NTIiLz4KPC9nPgo8IS0tIFJpdHVhbCAtLT4KPGcgaWQ9Im5v ZGUxMiIgY2xhc3M9Im5vZGUiPjx0aXRsZT5SaXR1YWw8L3RpdGxlPgo8cG9s eWdvbiBmaWxsPSJwYWxlR3JlZW4iIHN0cm9rZT0iYmxhY2siIHBvaW50cz0i MzkwLC0zNyAzMzEsLTM3IDMzMSwtMSAzOTAsLTEgMzkwLC0zNyIvPgo8dGV4 dCB0ZXh0LWFuY2hvcj0ibWlkZGxlIiB4PSIzNjAuNSIgeT0iLTE1LjMiIGZv bnQtZmFtaWx5PSJUaW1lcyxzZXJpZiIgZm9udC1zaXplPSIxNC4wMCI+Uml0 dWFsPC90ZXh0Pgo8L2c+CjwhLS0gU2V0dGluZwpJbnRlbnRpb24mIzQ1OyZn dDtSaXR1YWwgLS0+CjxnIGlkPSJlZGdlMTQiIGNsYXNzPSJlZGdlIj48dGl0 bGU+U2V0dGluZwpJbnRlbnRpb24mIzQ1OyZndDtSaXR1YWw8L3RpdGxlPgo8 cGF0aCBmaWxsPSJub25lIiBzdHJva2U9ImJsYWNrIiBkPSJNMjcwLjAzMywt NzMuODMxNEMyODYuMTMsLTY0LjI1MyAzMDYuMDE0LC01Mi40MjE3IDMyMy4w MzYsLTQyLjI5MjMiLz4KPHBvbHlnb24gZmlsbD0iYmxhY2siIHN0cm9rZT0i YmxhY2siIHBvaW50cz0iMzI0LjgzOCwtNDUuMjkyOSAzMzEuNjQyLC0zNy4x NzE1IDMyMS4yNTksLTM5LjI3NzMgMzI0LjgzOCwtNDUuMjkyOSIvPgo8L2c+ CjwvZz4KPC9zdmc+Cg== '>

See Thompson's Anchors Visualized for a more challenging test case based on whole site analysis and ad-hoc selections based on age and count.

Thompson's Anchors Visualized

SITE retrieves every page. TALLY counts link frequency. COUNT selects specific frequency. DAYS selects specific age. INLINK is inbound version of LINK.

The <graphviz-viewer> is just slow enough that one can read past where the diagrams will eventually go. So I have emit render a loading message but that is discarded quickly, probably by bind when it inserts the custom tag.

<div style="width:80%; padding:8px; color:gray; background-color:#eee; margin:0 auto; text-align:center"> <i>loading diagram</i> </div>

I wonder if there is a better place than emit to display this message?

I fiddled with eval for some time before I got serious about writing a breadth-first eval. Compare the parse and eval order for this test program.

<table width=100%> <tr><th>parse<th>eval <tr> <td><pre style="background-color:#eee; padding:8px;margin-right:16px;"> DOT a [shape=box] ZERO b ONE c [fillcolor=palegreen] TWO d ONE e [fillcolor=lightblue] TWO f THREE g ONE h ZERO i ZERO j [shape=diamond] ZERO k ZERO l <td><pre style="background-color:#eee; padding:8px;"> DOT a [shape=box] ZERO b ZERO i ZERO j [shape=diamond] ZERO k ZERO l ONE c ONE e [fillcolor=lightblue] ONE h [fillcolor=palegreen] TWO d TWO f THREE g </table>

It's published, installed and in use here. We'll be learning lots about what we could have and now should be doing. See Dynamic Diagrams in Use

Dynamic Diagrams in Use