@semanticintent/recall 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,353 @@
1
+ // ─────────────────────────────────────────────────────────
2
+ // RECALL HTML Generator — ReclProgram AST → HTML string
3
+ // ─────────────────────────────────────────────────────────
4
+ // ─────────────────────────────────────────────────────────
5
+ // Helpers
6
+ // ─────────────────────────────────────────────────────────
7
+ function clause(clauses, key, fallback = '') {
8
+ return clauses.find(c => c.key === key)?.value ?? fallback;
9
+ }
10
+ function escapeHtml(s) {
11
+ return s
12
+ .replace(/&/g, '&')
13
+ .replace(/</g, '&lt;')
14
+ .replace(/>/g, '&gt;')
15
+ .replace(/"/g, '&quot;');
16
+ }
17
+ function resolveValue(val, data) {
18
+ if (!val)
19
+ return '';
20
+ // If it looks like a variable name (all caps, hyphens), resolve from data
21
+ if (/^[A-Z][A-Z0-9-]+$/.test(val)) {
22
+ const all = [...data.workingStorage, ...data.items];
23
+ const field = all.find(f => f.name === val);
24
+ if (field)
25
+ return field.value;
26
+ }
27
+ return val;
28
+ }
29
+ function resolveGroup(name, data) {
30
+ return [...data.workingStorage, ...data.items].find(f => f.name === name);
31
+ }
32
+ // ─────────────────────────────────────────────────────────
33
+ // CSS generation
34
+ // ─────────────────────────────────────────────────────────
35
+ function generateCss(env) {
36
+ const p = env.palette;
37
+ const bg = p['COLOR-BG'] ?? (env.colorMode === 'DARK' ? '#0a0a0a' : '#ffffff');
38
+ const text = p['COLOR-TEXT'] ?? (env.colorMode === 'DARK' ? '#e0e0e0' : '#111111');
39
+ const muted = p['COLOR-MUTED'] ?? (env.colorMode === 'DARK' ? '#555555' : '#888888');
40
+ const accent = p['COLOR-ACCENT'] ?? '#00ff41';
41
+ const border = p['COLOR-BORDER'] ?? (env.colorMode === 'DARK' ? '#222222' : '#dddddd');
42
+ const fontMono = env.fontPrimary ?? 'IBM Plex Mono';
43
+ const fontSans = env.fontSecondary ?? 'IBM Plex Sans';
44
+ const fontImport = `@import url('https://fonts.googleapis.com/css2?family=${encodeURIComponent(fontMono)}:wght@400;500;600&family=${encodeURIComponent(fontSans)}:wght@300;400;500;600&display=swap');`;
45
+ const colorScheme = env.colorMode === 'SYSTEM'
46
+ ? `@media (prefers-color-scheme: light) { :root { --bg: #fff; --text: #111; } }`
47
+ : '';
48
+ return `${fontImport}
49
+ :root {
50
+ --bg: ${bg};
51
+ --text: ${text};
52
+ --muted: ${muted};
53
+ --accent: ${accent};
54
+ --border: ${border};
55
+ --font-mono: '${fontMono}', 'Courier New', monospace;
56
+ --font-sans: '${fontSans}', 'Segoe UI', sans-serif;
57
+ }
58
+ ${colorScheme}
59
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
60
+ body { font-family: var(--font-mono); background: var(--bg); color: var(--text); line-height: 1.7; font-size: 16px; -webkit-font-smoothing: antialiased; }
61
+ .container { max-width: 900px; margin: 0 auto; padding: 0 24px; }
62
+ a { color: var(--accent); text-decoration: none; }
63
+ a:hover { opacity: 0.8; }
64
+ nav { padding: 16px 0; border-bottom: 1px solid var(--border); }
65
+ nav.sticky { position: sticky; top: 0; z-index: 100; background: var(--bg); }
66
+ .nav-inner { display: flex; align-items: center; justify-content: space-between; max-width: 900px; margin: 0 auto; padding: 0 24px; }
67
+ .nav-logo { font-weight: 600; font-size: 14px; letter-spacing: 2px; text-transform: uppercase; color: var(--text); }
68
+ .nav-links { display: flex; gap: 32px; }
69
+ .nav-links a { font-size: 13px; letter-spacing: 1px; text-transform: uppercase; color: var(--muted); }
70
+ .nav-links a:hover { color: var(--text); }
71
+ section { padding: 80px 0; }
72
+ section.padding-small { padding: 40px 0; }
73
+ section.padding-medium { padding: 60px 0; }
74
+ section.padding-large { padding: 100px 0; }
75
+ .layout-centered { display: flex; flex-direction: column; align-items: center; text-align: center; }
76
+ .layout-grid { display: grid; gap: 24px; }
77
+ .layout-grid.cols-2 { grid-template-columns: repeat(2, 1fr); }
78
+ .layout-grid.cols-3 { grid-template-columns: repeat(3, 1fr); }
79
+ .layout-flex { display: flex; gap: 24px; flex-wrap: wrap; }
80
+ .layout-stack { display: flex; flex-direction: column; gap: 20px; }
81
+ h1 { font-size: clamp(28px, 5vw, 52px); font-weight: 600; line-height: 1.1; margin-bottom: 20px; }
82
+ h2 { font-size: clamp(22px, 3vw, 36px); font-weight: 600; line-height: 1.2; margin-bottom: 16px; }
83
+ h3 { font-size: 20px; font-weight: 600; margin-bottom: 12px; }
84
+ h1.style-mono, h2.style-mono, h3.style-mono { font-family: var(--font-mono); }
85
+ h1.style-sans, h2.style-sans, h3.style-sans { font-family: var(--font-sans); }
86
+ p { font-family: var(--font-sans); color: var(--muted); max-width: 680px; margin-bottom: 16px; line-height: 1.8; }
87
+ p.color-text { color: var(--text); }
88
+ p.color-accent { color: var(--accent); }
89
+ .recall-label { font-size: 11px; letter-spacing: 2px; text-transform: uppercase; color: var(--muted); font-family: var(--font-mono); margin-bottom: 8px; }
90
+ .recall-btn { display: inline-block; padding: 12px 28px; font-family: var(--font-mono); font-size: 13px; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; cursor: pointer; border: none; transition: opacity 0.2s; }
91
+ .recall-btn.primary { background: var(--accent); color: var(--bg); }
92
+ .recall-btn.ghost { background: transparent; border: 1px solid var(--border); color: var(--text); }
93
+ .recall-btn.outline { background: transparent; border: 1px solid var(--accent); color: var(--accent); }
94
+ .recall-btn:hover { opacity: 0.85; }
95
+ pre.code-block { font-family: var(--font-mono); font-size: 13px; background: rgba(255,255,255,0.04); border: 1px solid var(--border); padding: 24px; overflow-x: auto; line-height: 1.6; color: var(--accent); margin: 16px 0; }
96
+ .card { background: rgba(255,255,255,0.03); border: 1px solid var(--border); padding: 28px 24px; }
97
+ .card.hover-lift { transition: transform 0.2s, border-color 0.2s; }
98
+ .card.hover-lift:hover { transform: translateY(-3px); border-color: var(--accent); }
99
+ .card h3 { font-family: var(--font-mono); font-size: 14px; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; margin-bottom: 8px; }
100
+ .card p { font-size: 14px; margin-bottom: 12px; }
101
+ .card-tag { font-family: var(--font-mono); font-size: 11px; letter-spacing: 1px; text-transform: uppercase; color: var(--accent); }
102
+ .card a { display: block; color: inherit; text-decoration: none; height: 100%; }
103
+ .recall-divider { border: none; border-top: 1px solid var(--border); margin: 40px 0; }
104
+ .recall-divider.dashed { border-top-style: dashed; }
105
+ .recall-divider.spacing-small { margin: 20px 0; }
106
+ .recall-divider.spacing-large { margin: 80px 0; }
107
+ .recall-input-group { margin-bottom: 20px; }
108
+ .recall-input-group label { display: block; font-size: 12px; letter-spacing: 1px; text-transform: uppercase; color: var(--muted); margin-bottom: 6px; font-family: var(--font-mono); }
109
+ .recall-input-group input, .recall-input-group textarea { width: 100%; background: transparent; border: 1px solid var(--border); color: var(--text); font-family: var(--font-mono); font-size: 14px; padding: 10px 14px; outline: none; resize: vertical; }
110
+ .recall-input-group input:focus, .recall-input-group textarea:focus { border-color: var(--accent); }
111
+ .recall-banner { padding: 12px 24px; background: var(--accent); color: var(--bg); font-family: var(--font-mono); font-size: 13px; letter-spacing: 1px; text-align: center; }
112
+ footer { padding: 40px 0; border-top: 1px solid var(--border); }
113
+ footer p { font-size: 12px; letter-spacing: 1px; text-transform: uppercase; color: var(--muted); max-width: 100%; }
114
+ footer.align-center { text-align: center; }
115
+ footer.align-right { text-align: right; }
116
+ @media (max-width: 768px) {
117
+ .layout-grid.cols-2, .layout-grid.cols-3 { grid-template-columns: 1fr; }
118
+ .nav-links { gap: 16px; }
119
+ }
120
+ `;
121
+ }
122
+ // ─────────────────────────────────────────────────────────
123
+ // Element renderers
124
+ // ─────────────────────────────────────────────────────────
125
+ function renderNavigation(stmt, data) {
126
+ const sticky = clause(stmt.clauses, 'STICKY', 'NO') === 'YES';
127
+ const logo = clause(stmt.clauses, 'LOGO');
128
+ const groupName = clause(stmt.clauses, 'USING');
129
+ const group = resolveGroup(groupName, data);
130
+ const stickyClass = sticky ? ' sticky' : '';
131
+ let links = '';
132
+ if (group) {
133
+ // NAV-ITEM-1, NAV-ITEM-1-HREF pairs
134
+ const items = [];
135
+ let i = 0;
136
+ while (i < group.children.length) {
137
+ const child = group.children[i];
138
+ if (child.name.match(/NAV-ITEM-\d+$/) || child.name.match(/ITEM-\d+$/)) {
139
+ const hrefChild = group.children[i + 1];
140
+ items.push({ label: child.value, href: hrefChild?.value ?? '#' });
141
+ i += 2;
142
+ }
143
+ else {
144
+ i++;
145
+ }
146
+ }
147
+ links = items.map(it => `<a href="${escapeHtml(it.href)}">${escapeHtml(it.label)}</a>`).join('\n ');
148
+ }
149
+ return `<nav class="${stickyClass}">
150
+ <div class="nav-inner">
151
+ ${logo ? `<span class="nav-logo">${escapeHtml(logo)}</span>` : ''}
152
+ <div class="nav-links">
153
+ ${links}
154
+ </div>
155
+ </div>
156
+ </nav>`;
157
+ }
158
+ function renderSection(stmt, data) {
159
+ const id = clause(stmt.clauses, 'ID');
160
+ const layout = clause(stmt.clauses, 'LAYOUT', 'STACK').toLowerCase();
161
+ const padding = clause(stmt.clauses, 'PADDING', 'MEDIUM').toLowerCase();
162
+ const columns = clause(stmt.clauses, 'COLUMNS', '1');
163
+ const maxWidth = clause(stmt.clauses, 'MAX-WIDTH', 'STANDARD').toLowerCase();
164
+ const bg = clause(stmt.clauses, 'BACKGROUND');
165
+ const layoutClass = `layout-${layout}${layout === 'grid' ? ` cols-${columns}` : ''}`;
166
+ const style = bg ? ` style="background:var(--${bg.replace('COLOR-', '').toLowerCase()})"` : '';
167
+ const inner = stmt.children.map(c => renderStatement(c, data)).join('\n ');
168
+ return `<section${id ? ` id="${escapeHtml(id)}"` : ''} class="padding-${padding}"${style}>
169
+ <div class="container ${layoutClass}">
170
+ ${inner}
171
+ </div>
172
+ </section>`;
173
+ }
174
+ function renderHeading(stmt, data, level) {
175
+ const text = escapeHtml(resolveValue(stmt.value, data));
176
+ const style = clause(stmt.clauses, 'STYLE', '').toLowerCase();
177
+ const color = clause(stmt.clauses, 'COLOR', '');
178
+ const align = clause(stmt.clauses, 'ALIGN', '').toLowerCase();
179
+ const weight = clause(stmt.clauses, 'WEIGHT', '').toLowerCase();
180
+ const classes = [
181
+ style ? `style-${style}` : '',
182
+ color ? `color-${color.replace('COLOR-', '').toLowerCase()}` : '',
183
+ align ? `align-${align}` : '',
184
+ weight ? `weight-${weight}` : '',
185
+ ].filter(Boolean).join(' ');
186
+ return `<h${level}${classes ? ` class="${classes}"` : ''}>${text}</h${level}>`;
187
+ }
188
+ function renderParagraph(stmt, data) {
189
+ const text = escapeHtml(resolveValue(stmt.value, data));
190
+ const color = clause(stmt.clauses, 'COLOR', '').replace('COLOR-', '').toLowerCase();
191
+ return `<p${color ? ` class="color-${color}"` : ''}>${text}</p>`;
192
+ }
193
+ function renderButton(stmt, data) {
194
+ const text = escapeHtml(resolveValue(stmt.value, data));
195
+ const href = clause(stmt.clauses, 'ON-CLICK') || clause(stmt.clauses, 'HREF', '#');
196
+ const style = clause(stmt.clauses, 'STYLE', 'PRIMARY').toLowerCase();
197
+ const size = clause(stmt.clauses, 'SIZE', '').toLowerCase();
198
+ return `<a href="${escapeHtml(href)}" class="recall-btn ${style}${size ? ` size-${size}` : ''}">${text}</a>`;
199
+ }
200
+ function renderCardList(stmt, data) {
201
+ const groupName = clause(stmt.clauses, 'USING');
202
+ const style = clause(stmt.clauses, 'STYLE', 'BORDERED').toLowerCase();
203
+ const hoverLift = clause(stmt.clauses, 'HOVER-LIFT', 'NO') === 'YES';
204
+ const columns = clause(stmt.clauses, 'COLUMNS', '1');
205
+ const group = resolveGroup(groupName, data);
206
+ if (!group)
207
+ return `<!-- CARD-LIST: group ${groupName} not found -->`;
208
+ const hoverClass = hoverLift ? ' hover-lift' : '';
209
+ const cards = group.children.map(item => {
210
+ const fields = {};
211
+ item.children.forEach(f => { fields[f.name.replace(/.*-/, '')] = f.value; });
212
+ const title = fields['TITLE'] ?? item.name;
213
+ const desc = fields['DESC'] ?? '';
214
+ const tag = fields['TAG'] ?? '';
215
+ const href = fields['HREF'] ?? '#';
216
+ return `<div class="card${hoverClass}">
217
+ <a href="${escapeHtml(href)}">
218
+ <h3>${escapeHtml(title)}</h3>
219
+ ${desc ? `<p>${escapeHtml(desc)}</p>` : ''}
220
+ ${tag ? `<span class="card-tag">${escapeHtml(tag)}</span>` : ''}
221
+ </a>
222
+ </div>`;
223
+ }).join('\n ');
224
+ return `<div class="layout-grid cols-${columns} style-${style}">
225
+ ${cards}
226
+ </div>`;
227
+ }
228
+ function renderInput(stmt) {
229
+ const id = clause(stmt.clauses, 'ID', 'field');
230
+ const label = clause(stmt.clauses, 'LABEL', '');
231
+ const type = clause(stmt.clauses, 'TYPE', 'TEXT').toLowerCase();
232
+ const placeholder = clause(stmt.clauses, 'PLACEHOLDER', '');
233
+ if (type === 'textarea') {
234
+ return `<div class="recall-input-group">
235
+ ${label ? `<label for="${escapeHtml(id)}">${escapeHtml(label)}</label>` : ''}
236
+ <textarea id="${escapeHtml(id)}" placeholder="${escapeHtml(placeholder)}" rows="4"></textarea>
237
+ </div>`;
238
+ }
239
+ return `<div class="recall-input-group">
240
+ ${label ? `<label for="${escapeHtml(id)}">${escapeHtml(label)}</label>` : ''}
241
+ <input id="${escapeHtml(id)}" type="${type}" placeholder="${escapeHtml(placeholder)}" />
242
+ </div>`;
243
+ }
244
+ function renderFooter(stmt, data) {
245
+ const text = escapeHtml(resolveValue(stmt.value ?? clause(stmt.clauses, 'TEXT'), data));
246
+ const align = clause(stmt.clauses, 'ALIGN', 'LEFT').toLowerCase();
247
+ return `<footer class="align-${align}">
248
+ <div class="container">
249
+ <p>${text}</p>
250
+ </div>
251
+ </footer>`;
252
+ }
253
+ function renderDivider(stmt) {
254
+ const style = clause(stmt.clauses, 'STYLE', 'SOLID').toLowerCase();
255
+ const spacing = clause(stmt.clauses, 'SPACING', 'MEDIUM').toLowerCase();
256
+ return `<hr class="recall-divider ${style === 'dashed' ? 'dashed' : ''} spacing-${spacing}" />`;
257
+ }
258
+ function renderBanner(stmt, data) {
259
+ const text = escapeHtml(resolveValue(stmt.value, data));
260
+ return `<div class="recall-banner">${text}</div>`;
261
+ }
262
+ function renderCodeBlock(stmt, data) {
263
+ const text = escapeHtml(resolveValue(stmt.value, data));
264
+ const lang = clause(stmt.clauses, 'LANGUAGE', '');
265
+ return `<pre class="code-block"${lang ? ` data-language="${lang}"` : ''}>${text}</pre>`;
266
+ }
267
+ function renderLabel(stmt, data) {
268
+ const text = escapeHtml(resolveValue(stmt.value, data));
269
+ return `<div class="recall-label">${text}</div>`;
270
+ }
271
+ function renderImage(stmt, data) {
272
+ const src = clause(stmt.clauses, 'SRC') || resolveValue(stmt.value, data);
273
+ const alt = clause(stmt.clauses, 'ALT', '');
274
+ const size = clause(stmt.clauses, 'SIZE', 'FULL').toLowerCase();
275
+ const widthMap = { full: '100%', half: '50%', quarter: '25%', auto: 'auto' };
276
+ return `<img src="${escapeHtml(src)}" alt="${escapeHtml(alt)}" style="width:${widthMap[size] ?? '100%'}" />`;
277
+ }
278
+ // ─────────────────────────────────────────────────────────
279
+ // Main statement dispatcher
280
+ // ─────────────────────────────────────────────────────────
281
+ export function renderStatement(stmt, data) {
282
+ switch (stmt.element) {
283
+ case 'HEADING-1': return renderHeading(stmt, data, 1);
284
+ case 'HEADING-2': return renderHeading(stmt, data, 2);
285
+ case 'HEADING-3': return renderHeading(stmt, data, 3);
286
+ case 'PARAGRAPH': return renderParagraph(stmt, data);
287
+ case 'LABEL': return renderLabel(stmt, data);
288
+ case 'CODE-BLOCK': return renderCodeBlock(stmt, data);
289
+ case 'BUTTON': return renderButton(stmt, data);
290
+ case 'CARD-LIST': return renderCardList(stmt, data);
291
+ case 'INPUT': return renderInput(stmt);
292
+ case 'NAVIGATION': return renderNavigation(stmt, data);
293
+ case 'SECTION': return renderSection(stmt, data);
294
+ case 'FOOTER': return renderFooter(stmt, data);
295
+ case 'DIVIDER': return renderDivider(stmt);
296
+ case 'BANNER': return renderBanner(stmt, data);
297
+ case 'IMAGE': return renderImage(stmt, data);
298
+ case 'LINK': {
299
+ const text = escapeHtml(resolveValue(stmt.value, data));
300
+ const href = clause(stmt.clauses, 'HREF', '#');
301
+ const target = clause(stmt.clauses, 'TARGET', 'SELF') === 'BLANK' ? ' target="_blank" rel="noopener"' : '';
302
+ return `<a href="${escapeHtml(href)}"${target}>${text}</a>`;
303
+ }
304
+ default:
305
+ return `<!-- RECALL: unknown element ${stmt.element} -->`;
306
+ }
307
+ }
308
+ // ─────────────────────────────────────────────────────────
309
+ // Full HTML document generation
310
+ // ─────────────────────────────────────────────────────────
311
+ export function generate(program, source) {
312
+ const { identification: id, environment: env, data, procedure } = program;
313
+ const css = generateCss(env);
314
+ const lang = id.language?.toLowerCase() ?? 'en';
315
+ // Render all sections
316
+ const body = procedure.sections.map(section => {
317
+ return section.statements.map(stmt => renderStatement(stmt, data)).join('\n');
318
+ }).join('\n');
319
+ // Source embedding — the core RECALL principle
320
+ const sourceComment = `<!--
321
+ ${'*'.repeat(54)}
322
+ * RECALL COMPILED OUTPUT
323
+ * SOURCE: (embedded below)
324
+ * RECALL VERSION: 0.1
325
+ ${'*'.repeat(54)}
326
+
327
+ ${source.split('\n').map(l => (l ? `* ${l}` : '*')).join('\n')}
328
+
329
+ ${'*'.repeat(54)}
330
+ -->`;
331
+ const viewport = env.viewport === 'FIXED-WIDTH'
332
+ ? `<meta name="viewport" content="width=1200">`
333
+ : `<meta name="viewport" content="width=device-width, initial-scale=1.0">`;
334
+ return `${sourceComment}
335
+ <!DOCTYPE html>
336
+ <html lang="${lang}">
337
+ <head>
338
+ <meta charset="UTF-8">
339
+ ${viewport}
340
+ <title>${escapeHtml(id.pageTitle)}</title>
341
+ ${id.description ? `<meta name="description" content="${escapeHtml(id.description)}">` : ''}
342
+ ${id.author ? `<meta name="author" content="${escapeHtml(id.author)}">` : ''}
343
+ ${id.favicon ? `<link rel="icon" href="${escapeHtml(id.favicon)}">` : ''}
344
+ <style>
345
+ ${css}
346
+ </style>
347
+ </head>
348
+ <body id="${id.programId.toLowerCase()}">
349
+ ${body}
350
+ </body>
351
+ </html>`;
352
+ }
353
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/generator/html.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { parse } from './parser/rcl.js';
2
+ export { generate, renderStatement } from './generator/html.js';
3
+ export { compile, check } from './compiler/index.js';
4
+ export type { ReclProgram, IdentificationDivision, EnvironmentDivision, DataDivision, ProcedureDivision, DisplayStatement } from './parser/rcl.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { parse } from './parser/rcl.js';
2
+ export { generate, renderStatement } from './generator/html.js';
3
+ export { compile, check } from './compiler/index.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,56 @@
1
+ export type Division = 'IDENTIFICATION' | 'ENVIRONMENT' | 'DATA' | 'PROCEDURE';
2
+ export interface ReclProgram {
3
+ identification: IdentificationDivision;
4
+ environment: EnvironmentDivision;
5
+ data: DataDivision;
6
+ procedure: ProcedureDivision;
7
+ }
8
+ export interface IdentificationDivision {
9
+ programId: string;
10
+ author?: string;
11
+ dateWritten?: string;
12
+ pageTitle: string;
13
+ description?: string;
14
+ favicon?: string;
15
+ language?: string;
16
+ }
17
+ export interface EnvironmentDivision {
18
+ viewport: 'RESPONSIVE' | 'FIXED-WIDTH' | 'FULL-WIDTH';
19
+ colorMode: 'DARK' | 'LIGHT' | 'SYSTEM';
20
+ fontPrimary?: string;
21
+ fontSecondary?: string;
22
+ language: string;
23
+ palette: Record<string, string>;
24
+ }
25
+ export type DataLevel = 1 | 5 | 10;
26
+ export interface DataField {
27
+ level: DataLevel;
28
+ name: string;
29
+ pic: string;
30
+ value: string;
31
+ children: DataField[];
32
+ }
33
+ export interface DataDivision {
34
+ workingStorage: DataField[];
35
+ items: DataField[];
36
+ }
37
+ export type DisplayElement = 'HEADING-1' | 'HEADING-2' | 'HEADING-3' | 'PARAGRAPH' | 'LABEL' | 'CODE-BLOCK' | 'BUTTON' | 'LINK' | 'IMAGE' | 'DIVIDER' | 'SECTION' | 'NAVIGATION' | 'FOOTER' | 'CARD-LIST' | 'INPUT' | 'BANNER' | 'COPY';
38
+ export interface DisplayClause {
39
+ key: string;
40
+ value: string;
41
+ }
42
+ export interface DisplayStatement {
43
+ element: DisplayElement;
44
+ value?: string;
45
+ clauses: DisplayClause[];
46
+ children: DisplayStatement[];
47
+ }
48
+ export interface ProcedureSection {
49
+ name: string;
50
+ statements: DisplayStatement[];
51
+ }
52
+ export interface ProcedureDivision {
53
+ sections: ProcedureSection[];
54
+ }
55
+ export declare function parse(source: string): ReclProgram;
56
+ //# sourceMappingURL=rcl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rcl.d.ts","sourceRoot":"","sources":["../../src/parser/rcl.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAAG,gBAAgB,GAAG,aAAa,GAAG,MAAM,GAAG,WAAW,CAAA;AAE9E,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,sBAAsB,CAAA;IACtC,WAAW,EAAE,mBAAmB,CAAA;IAChC,IAAI,EAAE,YAAY,CAAA;IAClB,SAAS,EAAE,iBAAiB,CAAA;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,YAAY,GAAG,aAAa,GAAG,YAAY,CAAA;IACrD,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;IACtC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;AAElC,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,SAAS,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,SAAS,EAAE,CAAA;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAA;CACnB;AAED,MAAM,MAAM,cAAc,GACtB,WAAW,GAAG,WAAW,GAAG,WAAW,GACvC,WAAW,GAAG,OAAO,GAAG,YAAY,GACpC,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GACvC,SAAS,GAAG,YAAY,GAAG,QAAQ,GACnC,WAAW,GAAG,OAAO,GAAG,QAAQ,GAChC,MAAM,CAAA;AAEV,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,cAAc,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,gBAAgB,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B;AAsTD,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAyBjD"}