|
1 | 1 | { |
| 2 | + "cache_buster": "2024-05-22-T1430-FORCE-REBUILD", |
| 3 | + "exclusions": [ |
| 4 | + "**/Class Modules/**", |
| 5 | + "**/Microsoft Excel Objects/**" |
| 6 | + ], |
2 | 7 | "repo_notes": [ |
3 | | - { "content": "The project is an Excel-based wrapper for Graphviz. Every documentation page must respect the distinction between Excel (the UI/Data layer) and Graphviz (the rendering engine)." }, |
| 8 | + { "content": "The project is an Excel-based wrapper for Graphviz. Every documentation page must respect the distinction between Excel (the UI and Data layer) and Graphviz (the rendering engine)." }, |
4 | 9 | { "content": "Technical Consistency: Always refer to the primary data entry points as 'Items' and 'Related Items' rather than 'From' and 'To' to match the worksheet headers." }, |
5 | | - { "content": "Cross-Platform Logic: When documenting any code that triggers a shell command or file I/O, mention the conditional logic for Windows (Shell/CreatePipe) vs. macOS (AppleScript bridge)." }, |
| 10 | + { "content": "Cross-Platform Logic: When documenting any code that triggers a shell command or file input output, mention the conditional logic for Windows (Windows Shell via CreatePipe) vs. macOS (AppleScript bridge)." }, |
6 | 11 | { "content": "Module Mapping: Every functional feature should be linked to its corresponding VBA module (e.g., modRibbonTab*.bas for UI, modCreateGraph.bas for parsing, Graphviz.cls for execution)." }, |
7 | 12 | { "content": "State Management: Remind that the tool relies on a 'Settings' worksheet for persistent state and a global 'internalMyRibbon' variable for UI state." }, |
8 | 13 | { "content": "Error Handling Philosophy: Emphasize that the tool uses 'ValidateData' and local error handling to prevent VBA global state loss, which would break the Ribbon reference." }, |
9 | 14 | { "content": "Graphviz Syntax: When discussing attributes (color, shape, etc.), ensure they align with the official DOT language specifications." }, |
10 | 15 | { "content": "Community Feedback: Mention that community feedback and feature requests are captured via GitHub issues, and via Giscus-powered comments on the official website blog pages." }, |
11 | 16 | { "content": "Version Awareness: Reference v8.0+ enhancements including Style Designer galleries, Graphviz.cls refactor, SQL connection pooling, unlimited CLUSTERn, SVG editor form, silent mode, and new ribbon tabs (Info, Console, Diagnostics, Styles)." }, |
12 | | - { "content": "Common Pitfalls & Best Practices: Include Graphviz node ID rules (must start with letter or underscore, quote digits), layout reproducibility tips (start=regular), SVG image embedding via base64 in post-processor, and named-range contract for safe sheet modifications." } |
| 17 | + { "content": "Common Pitfalls and Best Practices: Include Graphviz node ID rules (must start with letter or underscore, quote digits), layout reproducibility tips (start=regular), SVG image embedding via base64 in post-processor, and named-range contract for safe sheet modifications." }, |
| 18 | + { "content": "Project structure update: All VBA source files are now organized in CamelCase directories (e.g., ClassModules, MicrosoftExcelObjects) to improve cross-platform compatibility." } |
13 | 19 | ], |
14 | 20 | "pages": [ |
15 | 21 | { |
|
22 | 28 | ] |
23 | 29 | }, |
24 | 30 | { |
25 | | - "title": "Getting Started & Installation", |
| 31 | + "title": "Getting Started and Installation", |
26 | 32 | "purpose": "Onboarding guide covering setup, dependencies, and cross-platform compatibility.", |
27 | 33 | "parent": "Overview", |
28 | 34 | "page_notes": [ |
|
32 | 38 | ] |
33 | 39 | }, |
34 | 40 | { |
35 | | - "title": "Core Concepts & Terminology", |
| 41 | + "title": "Core Concepts and Terminology", |
36 | 42 | "purpose": "Foundational glossary of graph terms and project-specific concepts.", |
37 | 43 | "parent": "Overview", |
38 | 44 | "page_notes": [ |
|
41 | 47 | ] |
42 | 48 | }, |
43 | 49 | { |
44 | | - "title": "Architecture & Data Flow", |
| 50 | + "title": "Architecture and Data Flow", |
45 | 51 | "purpose": "High-level technical map of the system's layers and transformation pipeline.", |
46 | 52 | "page_notes": [ |
47 | 53 | { "content": "Transformation Pipeline: Worksheet data → modCreateGraph.bas parsing → DOT file → Graphviz executable → output image (or worksheet)." }, |
48 | | - { "content": "Multi-Tiered Layers: Excel UI/Data, VBA Logic (modules + classes), and External Graphviz engine." } |
| 54 | + { "content": "Multi-Tiered Layers: Excel UI and Data, VBA Logic (modules + classes), and External Graphviz engine." } |
49 | 55 | ] |
50 | 56 | }, |
51 | 57 | { |
52 | | - "title": "VBA Class Hierarchy & Key Objects", |
| 58 | + "title": "VBA Class Hierarchy and Key Objects", |
53 | 59 | "purpose": "Overview of the object-oriented core and data structures.", |
54 | | - "parent": "Architecture & Data Flow", |
| 60 | + "parent": "Architecture and Data Flow", |
55 | 61 | "page_notes": [ |
56 | 62 | { "content": "Key Classes: Graphviz.cls (execution), Cluster.cls, Style object model, and dataRow UDT as worksheet-to-DOT intermediary." }, |
57 | 63 | { "content": "Integration: Classes work with named ranges and modCreateGraph.bas while protecting Ribbon state via local error handling." } |
|
60 | 66 | { |
61 | 67 | "title": "Graph Generation Pipeline", |
62 | 68 | "purpose": "End-to-end lifecycle from worksheet parsing to rendering.", |
63 | | - "parent": "Architecture & Data Flow", |
| 69 | + "parent": "Architecture and Data Flow", |
64 | 70 | "page_notes": [ |
65 | 71 | { "content": "Row Classification: modCreateGraph.bas handles TYPE_NODE, TYPE_EDGE, and TYPE_SUBGRAPH rows." }, |
66 | 72 | { "content": "File Handshake: Writes DOT string to temp file and invokes Graphviz via platform-specific execution." } |
67 | 73 | ] |
68 | 74 | }, |
69 | 75 | { |
70 | | - "title": "Graphviz Class & Process Execution", |
| 76 | + "title": "Graphviz Class and Process Execution", |
71 | 77 | "purpose": "Low-level execution logic for communicating with Graphviz binaries.", |
72 | | - "parent": "Architecture & Data Flow", |
| 78 | + "parent": "Architecture and Data Flow", |
73 | 79 | "page_notes": [ |
74 | | - { "content": "Windows Path: Uses modExecuteAndCapture.bas with CreatePipe/CreateProcessA and PeekNamedPipe/ReadFile for deadlock-free stdout/stderr capture." }, |
| 80 | + { "content": "Windows Path: Uses modExecuteAndCapture.bas with CreatePipe, CreateProcessA, PeekNamedPipe, and ReadFile routines for deadlock-free stdout and stderr capture." }, |
75 | 81 | { "content": "macOS Path: AppleScript bridge. Graphviz.cls refactor centralizes cross-platform logic." } |
76 | 82 | ] |
77 | 83 | }, |
78 | 84 | { |
79 | | - "title": "Worksheet Architecture & Named Ranges", |
| 85 | + "title": "Worksheet Architecture and Named Ranges", |
80 | 86 | "purpose": "Guide to sheet structure and the named-range contract.", |
81 | | - "parent": "Architecture & Data Flow", |
| 87 | + "parent": "Architecture and Data Flow", |
82 | 88 | "page_notes": [ |
83 | 89 | { "content": "Named Range API: Over 700 named ranges act as a stable contract, allowing UI changes without breaking VBA code." }, |
84 | 90 | { "content": "Maintenance Note: Avoid hard-coded cell addresses; always use named ranges." } |
85 | 91 | ] |
86 | 92 | }, |
87 | 93 | { |
88 | | - "title": "Constants, Data Types & Utility Modules", |
| 94 | + "title": "Constants, Data Types and Utility Modules", |
89 | 95 | "purpose": "Foundational building blocks and utility organization.", |
90 | | - "parent": "Architecture & Data Flow", |
| 96 | + "parent": "Architecture and Data Flow", |
91 | 97 | "page_notes": [ |
92 | 98 | { "content": "Constant Prefixes: SETTINGS_ and DESIGNER_ map directly to named ranges." }, |
93 | | - { "content": "Utilities: String helpers, picture management, OptimizeCode_Begin/End, and ADO connection pooling." } |
| 99 | + { "content": "Utilities: String helpers, picture management, OptimizeCode_Begin, OptimizeCode_End, and ADO connection pooling." } |
94 | 100 | ] |
95 | 101 | }, |
96 | 102 | { |
97 | | - "title": "User Interface: Ribbon Tabs", |
| 103 | + "title": "User Interface Ribbon Tabs", |
98 | 104 | "purpose": "Overview of custom Ribbon architecture and callback system.", |
99 | 105 | "page_notes": [ |
100 | 106 | { "content": "Callback Model: Dedicated modules (e.g., modRibbonTabGraphviz.bas) bridge UI to logic." }, |
|
104 | 110 | { |
105 | 111 | "title": "Graphviz Ribbon Tab", |
106 | 112 | "purpose": "Guide to layout engines and publishing functions.", |
107 | | - "parent": "User Interface: Ribbon Tabs", |
| 113 | + "parent": "User Interface Ribbon Tabs", |
108 | 114 | "page_notes": [ |
109 | 115 | { "content": "Layout Engines: dot, neato, fdp, sfdp, twopi, circo, osage, patchwork." }, |
110 | 116 | { "content": "Publish Group: graphToWorksheet, graphToFile, graphAllViewsToFile." } |
|
113 | 119 | { |
114 | 120 | "title": "Style Designer Ribbon Tab", |
115 | 121 | "purpose": "Technical guide to the Style Designer and gallery system.", |
116 | | - "parent": "User Interface: Ribbon Tabs", |
| 122 | + "parent": "User Interface Ribbon Tabs", |
117 | 123 | "page_notes": [ |
118 | 124 | { "content": "Gallery Previews: Uses ChartObjects for color swatches and Graphviz for font previews (v8.0+ enhancements)." }, |
119 | 125 | { "content": "RestoreStyleDesigner: Re-hydrates ribbon settings when a style is selected." } |
120 | 126 | ] |
121 | 127 | }, |
122 | 128 | { |
123 | 129 | "title": "SQL Ribbon Tab", |
124 | | - "purpose": "Interface and floating action button framework.", |
125 | | - "parent": "User Interface: Ribbon Tabs", |
| 130 | + "purpose": "Technical guide to the SQL-driven graph generation and connection management.", |
| 131 | + "parent": "User Interface Ribbon Tabs", |
126 | 132 | "page_notes": [ |
127 | | - { "content": "Filter System: Dynamic dropdowns via filterValues Dictionary." }, |
128 | | - { "content": "Floating Buttons: UpdateFloatingButtonsOnSheet enables on-sheet SQL execution (Windows-only)." } |
| 133 | + { "content": "Query Engine: Uses modWorksheetSQL.bas and modWorksheetSQLClusters.bas to execute user-defined SQL against external databases or local Excel tables via ADO." }, |
| 134 | + { "content": "Dynamic Mapping: SQL results are mapped to 'Item' and 'Related Item' fields to feed the Graphviz pipeline automatically." }, |
| 135 | + { "content": "Connection Pooling: Leverages a centralized connection string managed in code, which finds the best Provider for the user's OS and software." }, |
| 136 | + { "content": "Floating Action Button (FAB): Explains the 'Run SQL' overlay that allows for rapid iterative testing of graph queries." }, |
| 137 | + { "content": "Platform Limitation: Clearly state that SQL features are Windows-only due to dependency on ActiveX Data Objects (ADO)." } |
129 | 138 | ] |
130 | 139 | }, |
131 | 140 | { |
|
137 | 146 | ] |
138 | 147 | }, |
139 | 148 | { |
140 | | - "title": "Defining Nodes & Edges", |
| 149 | + "title": "Defining Nodes and Edges", |
141 | 150 | "purpose": "Node and Edge data models with advanced syntax.", |
142 | 151 | "parent": "Working with the Data Worksheet", |
143 | 152 | "page_notes": [ |
144 | 153 | { "content": "Advanced Support: Port syntax (node:port), HTML-like labels in angle brackets, and GetDataRow structure." } |
145 | 154 | ] |
146 | 155 | }, |
147 | 156 | { |
148 | | - "title": "Subgraphs & Clustering", |
| 157 | + "title": "Subgraphs and Clustering", |
149 | 158 | "purpose": "Hierarchical grouping and stack-based parsing.", |
150 | 159 | "parent": "Working with the Data Worksheet", |
151 | 160 | "page_notes": [ |
|
154 | 163 | ] |
155 | 164 | }, |
156 | 165 | { |
157 | | - "title": "Styles & the Style Gallery", |
| 166 | + "title": "Styles and the Style Gallery", |
158 | 167 | "purpose": "Style object model, caching, and preview lifecycle.", |
159 | 168 | "parent": "Working with the Data Worksheet", |
160 | 169 | "page_notes": [ |
|
172 | 181 | { |
173 | 182 | "title": "SQL Data Integration", |
174 | 183 | "purpose": "Windows-only ADO-based external data connectivity.", |
| 184 | + "parent": "Architecture and Data Flow", |
175 | 185 | "page_notes": [ |
176 | | - { "content": "Windows-Only: SQL/ADO unavailable on macOS." }, |
| 186 | + { "content": "Windows-Only: SQL ADO unavailable on macOS." }, |
177 | 187 | { "content": "Supported Sources: External Excel workbooks and Access databases." } |
178 | 188 | ] |
179 | 189 | }, |
180 | 190 | { |
181 | | - "title": "SQL Engine & Connection Pooling", |
| 191 | + "title": "SQL Engine and Connection Pooling", |
182 | 192 | "purpose": "ADO execution engine details.", |
183 | 193 | "parent": "SQL Data Integration", |
184 | 194 | "page_notes": [ |
|
191 | 201 | "purpose": "Specialized query modes and recent enhancements.", |
192 | 202 | "parent": "SQL Data Integration", |
193 | 203 | "page_notes": [ |
194 | | - { "content": "RecursiveSearch: Anchor/recursive member pattern for tree traversal." }, |
195 | | - { "content": "Enhancements: Placeholders, concatenation/iterative queries, CREATE EDGES/RANK, and multi-level CLUSTERn." } |
| 204 | + { "content": "RecursiveSearch: Anchor and recursive member pattern for tree traversal." }, |
| 205 | + { "content": "Enhancements: Placeholders, concatenation, iterative queries, enumeration queries, CREATE EDGES, CREATE RANK, and multi-level CLUSTERn." } |
196 | 206 | ] |
197 | 207 | }, |
198 | 208 | { |
199 | | - "title": "Output, Publishing & Post-Processing", |
| 209 | + "title": "Output, Publishing and Post-Processing", |
200 | 210 | "purpose": "Rendering, publishing, and SVG manipulation.", |
201 | 211 | "page_notes": [ |
202 | | - { "content": "SVG Post-Processor: XML find/replace and JS injection for interactivity and base64 image embedding (Excel reliability)." }, |
| 212 | + { "content": "SVG Post-Processor: XML find and replace for JS injection for interactivity and base64 image embedding (Excel reliability)." }, |
203 | 213 | { "content": "Formats: EMF for Office integration; SVG editor form available for manual tweaks." } |
204 | 214 | ] |
205 | 215 | }, |
206 | 216 | { |
207 | | - "title": "Event-Driven Architecture & AutoDraw", |
| 217 | + "title": "Event-Driven Architecture and AutoDraw", |
208 | 218 | "purpose": "Worksheet events and real-time reactivity.", |
209 | 219 | "parent": "Working with the Data Worksheet", |
210 | 220 | "page_notes": [ |
211 | 221 | { "content": "Lifecycle: Worksheet_Change and Worksheet_SelectionChange drive AutoDraw while protecting internalMyRibbon via ValidateData." } |
212 | 222 | ] |
213 | 223 | }, |
214 | 224 | { |
215 | | - "title": "Troubleshooting, Best Practices & Graphviz Quirks", |
216 | | - "purpose": "Practical guidance for common issues.", |
217 | | - "parent": "Settings & Diagnostics", |
| 225 | + "title": "Settings and Diagnostics", |
| 226 | + "purpose": "Configuration, health checks, and system state.", |
218 | 227 | "page_notes": [ |
219 | | - { "content": "Node IDs: Start with letter/underscore; quote digits. Use start=regular for reproducible layouts in neato/fdp." }, |
220 | | - { "content": "Diagnostics: Worksheet tests OS/Excel/Graphviz versions; check Console for stdout/stderr." } |
| 228 | + { "content": "GetSettings UDT: Cached repository for all configuration values." }, |
| 229 | + { "content": "Diagnostics Worksheet: Automated version and environment tests; supports silent mode." } |
221 | 230 | ] |
222 | 231 | }, |
223 | 232 | { |
224 | | - "title": "Settings & Diagnostics", |
225 | | - "purpose": "Configuration, health checks, and system state.", |
| 233 | + "title": "Troubleshooting, Best Practices and Graphviz Quirks", |
| 234 | + "purpose": "Practical guidance for common issues.", |
| 235 | + "parent": "Settings and Diagnostics", |
226 | 236 | "page_notes": [ |
227 | | - { "content": "GetSettings UDT: Cached repository for all configuration values." }, |
228 | | - { "content": "Diagnostics Worksheet: Automated version and environment tests; supports silent mode." } |
| 237 | + { "content": "Node IDs: Start with letter or underscore; quote digits." }, |
| 238 | + { "content": "Diagnostics: Worksheet tests OS, Excel, and Graphviz versions; check Console for stdout and stderr messages." } |
229 | 239 | ] |
230 | 240 | }, |
231 | 241 | { |
232 | | - "title": "Data Exchange (JSON Import/Export)", |
| 242 | + "title": "Data Exchange (JSON Import and Export)", |
233 | 243 | "purpose": "E2GXF format for portability and version control.", |
234 | 244 | "page_notes": [ |
235 | 245 | { "content": "Use Cases: Git-friendly templates and sharing via text files." }, |
236 | 246 | { "content": "Implementation: modExchangeImport.bas handles carriage-return kludge for multi-line cells." } |
237 | 247 | ] |
238 | 248 | }, |
239 | 249 | { |
240 | | - "title": "Web Presence & Community", |
| 250 | + "title": "Web Presence and Community", |
241 | 251 | "purpose": "Public ecosystem and contribution channels.", |
242 | 252 | "page_notes": [ |
243 | 253 | { "content": "Site: VitePress on GitHub Pages at exceltographviz.com with custom domain." }, |
|
0 commit comments