aboutsummaryrefslogtreecommitdiff
path: root/scripts/theme-studio/samples.py
blob: 585fff04cd370532b9b65c38965a577b0d461cb5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
GROUND="#0d0b0a"
COLS={
 'kw':("#67809c",True),'bi':("#67809c",False),'pp':("#67809c",False),
 'fnd':("#a9b2bb",True),'fnc':("#a9b2bb",False),'dec':("#e8bd30",False),
 'ty':("#9b5fd0",False),'prop':("#838d97",False),
 'con':("#cb6b4d",False),'num':("#cb6b4d",False),'esc':("#cb6b4d",False),
 'str':("#2ba178",False),'re':("#5d9b86",False),'doc':("#5d9b86",False),
 'cm':("#be9e74",False),'cmd':("#a9b2bb",False),
 'var':("#e8bd30",False),'op':("#a9b2bb",False),'punc':("#a9b2bb",False),'p':("#ffffff",False),
}
NAMES={"#67809c":"blue","#e8bd30":"gold","#9b5fd0":"regal","#2ba178":"emerald","#cb6b4d":"terracotta","#be9e74":"tan","#5d9b86":"sage","#cdced1":"white","#a9b2bb":"silver","#838d97":"steel","#5e6770":"pewter","#2f343a":"gunmetal","#264364":"navy"}
def esc(t): return t.replace("&","&amp;").replace("<","&lt;").replace(">","&gt;")
def span(k,t):
    c,b=COLS[k]; w=";font-weight:bold" if b else ""
    return f'<span style="color:{c}{w}">{esc(t)}</span>'
def render(lines): return "\n".join("".join(span(k,t) for k,t in ln) or "&nbsp;" for ln in lines)

PYS=[
 [('cmd','#'),('cm',' theme.py')],
 [('kw','from'),('p',' '),('var','dataclasses'),('p',' '),('kw','import'),('p',' '),('var','dataclass'),('punc',','),('p',' '),('var','field')],
 [],
 [('con','DEFAULT_PORT'),('op',':'),('p',' '),('ty','int'),('p',' '),('op','='),('p',' '),('num','8080')],
 [('con','HEX'),('p',' '),('op','='),('p',' '),('var','re'),('op','.'),('fnc','compile'),('punc','('),('re','r"#[0-9a-f]{6}"'),('punc',')')],
 [],
 [('dec','@dataclass')],
 [('kw','class'),('p',' '),('ty','Theme'),('op',':')],
 [('p','    '),('doc','"""A color theme."""')],
 [('p','    '),('prop','name'),('op',':'),('p',' '),('ty','str'),('p',' '),('op','='),('p',' '),('str','"dupre"')],
 [('p','    '),('prop','colors'),('op',':'),('p',' '),('ty','dict'),('p',' '),('op','='),('p',' '),('fnc','field'),('punc','('),('prop','default_factory'),('op','='),('ty','dict'),('punc',')')],
 [],
 [('p','    '),('kw','def'),('p',' '),('fnd','resolve'),('punc','('),('var','self'),('punc',','),('p',' '),('var','key'),('op',':'),('p',' '),('ty','str'),('punc',')'),('p',' '),('op','->'),('p',' '),('ty','str'),('p',' '),('op','|'),('p',' '),('con','None'),('op',':')],
 [('p','        '),('cmd','#'),('cm',' fallback to none')],
 [('p','        '),('var','v'),('p',' '),('op','='),('p',' '),('var','self'),('op','.'),('prop','colors'),('op','.'),('fnc','get'),('punc','('),('var','key'),('punc',','),('p',' '),('str','"'),('esc','\\t'),('str','none"'),('punc',')')],
 [('p','        '),('kw','if'),('p',' '),('bi','len'),('punc','('),('var','v'),('punc',')'),('p',' '),('op','=='),('p',' '),('num','0'),('op',':'),('p',' '),('kw','return'),('p',' '),('con','None')],
 [('p','        '),('kw','return'),('p',' '),('var','v')],
 [],
 [('p','    '),('dec','@property')],
 [('p','    '),('kw','def'),('p',' '),('fnd','size'),('punc','('),('var','self'),('punc',')'),('p',' '),('op','->'),('p',' '),('ty','int'),('op',':')],
 [('p','        '),('kw','return'),('p',' '),('bi','len'),('punc','('),('var','self'),('op','.'),('prop','colors'),('punc',')')],
 [],
 [('var','theme'),('p',' '),('op','='),('p',' '),('ty','Theme'),('punc','('),('str','"dupre"'),('punc',')')],
 [('fnc','print'),('punc','('),('var','theme'),('op','.'),('fnc','resolve'),('punc','('),('str','"bg"'),('punc','))')],
]
ELS=[
 [('cmd',';;'),('cm',' cache.el')],
 [('punc','('),('kw','require'),('p',' '),('con',"'cl-lib"),('punc',')')],
 [],
 [('punc','('),('kw','defvar'),('p',' '),('var','cache--tbl'),('p',' '),('punc','('),('fnc','make-hash-table'),('p',' '),('con',':test'),('p',' '),('con',"'equal"),('punc','))')],
 [('p','  '),('doc','"Memo table.")')],
 [],
 [('punc','('),('kw','defun'),('p',' '),('fnd','cache-get'),('p',' '),('punc','('),('var','key'),('punc',')')],
 [('p','  '),('doc','"Return cached value for KEY."')],
 [('p','  '),('punc','('),('kw','or'),('p',' '),('punc','('),('bi','gethash'),('p',' '),('var','key'),('p',' '),('var','cache--tbl'),('punc',')')],
 [('p','      '),('punc','('),('kw','let'),('p',' '),('punc','(('),('var','v'),('p',' '),('punc','('),('fnc','compute'),('p',' '),('var','key'),('p',' '),('num','42'),('punc','))) ')],
 [('p','        '),('punc','('),('fnc','puthash'),('p',' '),('var','key'),('p',' '),('var','v'),('p',' '),('var','cache--tbl'),('punc',') '),('var','v'),('punc','))))')],
 [],
 [('punc','('),('kw','defun'),('p',' '),('fnd','cache-clear'),('p',' '),('punc','()')],
 [('p','  '),('doc','"Empty the memo table."')],
 [('p','  '),('punc','('),('kw','interactive'),('punc',')')],
 [('p','  '),('punc','('),('fnc','clrhash'),('p',' '),('var','cache--tbl'),('punc',')')],
 [('p','  '),('punc','('),('fnc','message'),('p',' '),('str','"cleared'),('esc','\\n'),('str','"'),('punc','))')],
 [],
 [('punc','('),('kw','defun'),('p',' '),('fnd','cache-keys'),('p',' '),('punc','()')],
 [('p','  '),('doc','"Return all keys."')],
 [('p','  '),('punc','('),('kw','let'),('p',' '),('punc','(('),('var','acc'),('p',' '),('con','nil'),('punc','))')],
 [('p','    '),('punc','('),('fnc','maphash'),('p',' '),('punc','('),('kw','lambda'),('p',' '),('punc','('),('var','k'),('p',' '),('var','_v'),('punc',')'),('p',' '),('punc','('),('fnc','push'),('p',' '),('var','k'),('p',' '),('var','acc'),('punc','))')],
 [('p','      '),('var','cache--tbl'),('punc',')'),('p',' '),('var','acc'),('punc','))')],
 [],
 [('punc','('),('kw','provide'),('p',' '),('con',"'cache"),('punc',')')],
]
GOS=[
 [('cmd','//'),('cm',' queue.go')],
 [('kw','package'),('p',' '),('var','main')],
 [],
 [('kw','import'),('p',' '),('str','"fmt"')],
 [],
 [('kw','const'),('p',' '),('con','MaxItems'),('p',' '),('op','='),('p',' '),('num','100')],
 [],
 [('kw','type'),('p',' '),('ty','Order'),('p',' '),('kw','struct'),('p',' '),('punc','{')],
 [('p','    '),('prop','ID'),('p','   '),('ty','int')],
 [('p','    '),('prop','Name'),('p',' '),('ty','string')],
 [('punc','}')],
 [],
 [('kw','func'),('p',' '),('punc','('),('var','q'),('p',' '),('op','*'),('ty','Queue'),('punc',')'),('p',' '),('fnd','Push'),('punc','('),('var','o'),('p',' '),('op','*'),('ty','Order'),('punc',')'),('p',' '),('ty','error'),('p',' '),('punc','{')],
 [('p','    '),('cmd','//'),('cm',' reject nil')],
 [('p','    '),('kw','if'),('p',' '),('var','o'),('p',' '),('op','=='),('p',' '),('con','nil'),('p',' '),('punc','{')],
 [('p','        '),('kw','return'),('p',' '),('fnc','fmt.Errorf'),('punc','('),('str','"nil'),('esc','\\n'),('str','"'),('punc',')')],
 [('p','    '),('punc','}')],
 [('p','    '),('var','q'),('op','.'),('prop','items'),('p',' '),('op','='),('p',' '),('bi','append'),('punc','('),('var','q'),('op','.'),('prop','items'),('punc',','),('p',' '),('var','o'),('punc',')')],
 [('p','    '),('kw','return'),('p',' '),('con','nil')],
 [('punc','}')],
 [],
 [('kw','func'),('p',' '),('fnd','main'),('punc','()'),('p',' '),('punc','{')],
 [('p','    '),('fnc','fmt.Println'),('punc','('),('op','&'),('ty','Queue'),('punc','{}'),('punc',')')],
 [('punc','}')],
]
TSS=[
 [('cmd','//'),('cm',' orders.ts')],
 [('kw','import'),('p',' '),('punc','{'),('p',' '),('ty','Order'),('p',' '),('punc','}'),('p',' '),('kw','from'),('p',' '),('str','"./types"')],
 [],
 [('kw','export'),('p',' '),('kw','interface'),('p',' '),('ty','Queue'),('p',' '),('punc','{')],
 [('p','  '),('prop','max'),('op',':'),('p',' '),('ty','number'),('punc',';')],
 [('p','  '),('prop','items'),('op',':'),('p',' '),('ty','Order'),('punc','[];')],
 [('punc','}')],
 [],
 [('dec','@Injectable'),('punc','()')],
 [('kw','export'),('p',' '),('kw','class'),('p',' '),('ty','OrderQueue'),('p',' '),('kw','implements'),('p',' '),('ty','Queue'),('p',' '),('punc','{')],
 [('p','  '),('kw','private'),('p',' '),('prop','re'),('p',' '),('op','='),('p',' '),('re','/^#[0-9a-f]{6}$/i'),('punc',';')],
 [],
 [('p','  '),('fnd','push'),('punc','('),('var','o'),('op',':'),('p',' '),('ty','Order'),('punc',')'),('op',':'),('p',' '),('ty','boolean'),('p',' '),('punc','{')],
 [('p','    '),('kw','if'),('p',' '),('punc','('),('var','o'),('p',' '),('op','==='),('p',' '),('con','null'),('punc',')'),('p',' '),('kw','return'),('p',' '),('con','false'),('punc',';')],
 [('p','    '),('var','console'),('op','.'),('fnc','log'),('punc','('),('str','`id '),('punc','${'),('var','o'),('op','.'),('prop','id'),('punc','}'),('esc','\\n'),('str','`'),('punc',');')],
 [('p','    '),('kw','return'),('p',' '),('con','true'),('punc',';')],
 [('p','  '),('punc','}')],
 [('punc','}')],
 [],
 [('kw','const'),('p',' '),('con','LIMIT'),('op',':'),('p',' '),('ty','number'),('p',' '),('op','='),('p',' '),('num','50'),('punc',';')],
 [('kw','const'),('p',' '),('var','q'),('p',' '),('op','='),('p',' '),('kw','new'),('p',' '),('ty','OrderQueue'),('punc','()'),('punc',';')],
 [('var','q'),('op','.'),('fnd','push'),('punc','('),('punc','{'),('p',' '),('prop','id'),('op',':'),('p',' '),('num','1'),('p',' '),('punc','}'),('p',' '),('kw','as'),('p',' '),('ty','Order'),('punc',')'),('punc',';')],
 [('var','console'),('op','.'),('fnc','log'),('punc','('),('var','q'),('op','.'),('prop','max'),('punc',')'),('punc',';')],
 [('kw','const'),('p',' '),('var','cap'),('p',' '),('op','='),('p',' '),('var','Math'),('op','.'),('bi','max'),('punc','('),('con','LIMIT'),('punc',','),('p',' '),('num','0'),('punc',')'),('punc',';')],
]

CS=[
 [('cmd','/**'),('doc',' Order queue. */')],
 [('pp','#include'),('p',' '),('str','<stdio.h>')],
 [('pp','#include'),('p',' '),('str','<stdlib.h>')],
 [('pp','#define'),('p',' '),('con','MAX_PORT'),('p',' '),('num','8080')],
 [],
 [('kw','typedef'),('p',' '),('kw','struct'),('p',' '),('punc','{')],
 [('p','    '),('ty','int'),('p','   '),('prop','id'),('punc',';')],
 [('p','    '),('kw','const'),('p',' '),('ty','char'),('p',' '),('op','*'),('prop','name'),('punc',';')],
 [('punc','}'),('p',' '),('ty','Order'),('punc',';')],
 [],
 [('cmd','//'),('cm',' returns -1 on null input')],
 [('ty','int'),('p',' '),('fnd','push'),('punc','('),('ty','Order'),('p',' '),('op','*'),('var','o'),('punc',')'),('p',' '),('dec','__attribute__'),('punc','(('),('dec','nonnull'),('punc','))'),('p',' '),('punc','{')],
 [('p','    '),('kw','if'),('p',' '),('punc','('),('var','o'),('p',' '),('op','=='),('p',' '),('con','NULL'),('punc',')'),('p',' '),('kw','return'),('p',' '),('num','-1'),('punc',';')],
 [('p','    '),('fnc','printf'),('punc','('),('str','"id=%d'),('esc','\\n'),('str','"'),('punc',','),('p',' '),('var','o'),('op','->'),('prop','id'),('punc',');')],
 [('p','    '),('kw','return'),('p',' '),('num','0'),('punc',';')],
 [('punc','}')],
 [],
 [('ty','int'),('p',' '),('fnd','main'),('punc','('),('ty','void'),('punc',')'),('p',' '),('punc','{')],
 [('p','    '),('ty','Order'),('p',' '),('var','o'),('p',' '),('op','='),('p',' '),('punc','{'),('p',' '),('op','.'),('prop','id'),('p',' '),('op','='),('p',' '),('num','1'),('punc',','),('p',' '),('op','.'),('prop','name'),('p',' '),('op','='),('p',' '),('str','"dupre"'),('p',' '),('punc','}'),('punc',';')],
 [('p','    '),('ty','Order'),('p',' '),('op','*'),('var','p2'),('p',' '),('op','='),('p',' '),('bi','malloc'),('punc','('),('bi','sizeof'),('punc','('),('ty','Order'),('punc','))'),('punc',';')],
 [('p','    '),('fnc','push'),('punc','('),('op','&'),('var','o'),('punc',')'),('punc',';')],
 [('p','    '),('bi','free'),('punc','('),('var','p2'),('punc',')'),('punc',';')],
 [('p','    '),('kw','return'),('p',' '),('num','0'),('punc',';')],
 [('punc','}')],
]
CPS=[
 [('cmd','/**'),('doc',' A color theme. */')],
 [('pp','#include'),('p',' '),('str','<string>')],
 [('pp','#include'),('p',' '),('str','<regex>')],
 [('pp','#pragma'),('p',' '),('pp','once')],
 [],
 [('kw','namespace'),('p',' '),('var','dupre'),('p',' '),('punc','{')],
 [],
 [('kw','template'),('op','<'),('kw','typename'),('p',' '),('ty','T'),('op','>'),('p',' '),('kw','class'),('p',' '),('ty','Theme'),('p',' '),('punc','{')],
 [('kw','public'),('op',':')],
 [('p','    '),('kw','static'),('p',' '),('kw','constexpr'),('p',' '),('ty','int'),('p',' '),('con','MAX'),('p',' '),('op','='),('p',' '),('num','0x20'),('punc',';')],
 [('p','    '),('ty','std'),('op','::'),('ty','string'),('p',' '),('prop','name_'),('p',' '),('op','='),('p',' '),('str','"dupre"'),('punc',';')],
 [],
 [('p','    '),('dec','[[nodiscard]]'),('p',' '),('ty','T'),('p',' '),('fnd','resolve'),('punc','('),('kw','const'),('p',' '),('ty','std'),('op','::'),('ty','string'),('op','&'),('p',' '),('var','key'),('punc',')'),('p',' '),('kw','const'),('p',' '),('punc','{')],
 [('p','        '),('cmd','//'),('cm',' validate against a hex pattern')],
 [('p','        '),('kw','static'),('p',' '),('ty','std'),('op','::'),('ty','regex'),('p',' '),('var','re'),('punc','('),('re','R"(#[0-9a-f]{6})"'),('punc',')'),('punc',';')],
 [('p','        '),('kw','if'),('p',' '),('punc','('),('var','key'),('op','.'),('fnc','empty'),('punc','()'),('punc',')'),('p',' '),('kw','return'),('p',' '),('con','nullptr'),('punc',';')],
 [('p','        '),('kw','return'),('p',' '),('ty','T'),('punc','{'),('var','key'),('punc','}'),('punc',';')],
 [('p','    '),('punc','}')],
 [('punc','}'),('punc',';')],
 [],
 [('ty','int'),('p',' '),('fnd','main'),('punc','()'),('p',' '),('punc','{')],
 [('p','    '),('kw','auto'),('p',' '),('var','t'),('p',' '),('op','='),('p',' '),('ty','Theme'),('op','<'),('ty','int'),('op','>'),('punc','{}'),('punc',';')],
 [('p','    '),('bi','static_cast'),('op','<'),('ty','int'),('op','>'),('punc','('),('var','t'),('op','.'),('prop','name_'),('op','.'),('fnc','size'),('punc','())'),('punc',';')],
 [('p','    '),('ty','std'),('op','::'),('fnc','printf'),('punc','('),('str','"%s'),('esc','\\n'),('str','"'),('punc',','),('p',' '),('var','t'),('op','.'),('prop','name_'),('op','.'),('fnc','c_str'),('punc','())'),('punc',';')],
 [('p','    '),('kw','return'),('p',' '),('num','0'),('punc',';')],
 [('punc','}')],
]
JAS=[
 [('cmd','/**'),('doc',' A color theme. */')],
 [('kw','package'),('p',' '),('var','com'),('op','.'),('var','dupre'),('punc',';')],
 [('kw','import'),('p',' '),('var','java'),('op','.'),('var','util'),('op','.'),('var','regex'),('op','.'),('ty','Pattern'),('punc',';')],
 [],
 [('dec','@Deprecated')],
 [('kw','public'),('p',' '),('kw','final'),('p',' '),('kw','class'),('p',' '),('ty','Theme'),('p',' '),('punc','{')],
 [('p','    '),('kw','private'),('p',' '),('kw','static'),('p',' '),('kw','final'),('p',' '),('ty','int'),('p',' '),('con','MAX_PORT'),('p',' '),('op','='),('p',' '),('num','8080'),('punc',';')],
 [('p','    '),('kw','private'),('p',' '),('kw','final'),('p',' '),('ty','String'),('p',' '),('prop','name'),('p',' '),('op','='),('p',' '),('str','"dupre"'),('punc',';')],
 [('p','    '),('kw','private'),('p',' '),('kw','static'),('p',' '),('kw','final'),('p',' '),('ty','Pattern'),('p',' '),('con','HEX'),('p',' '),('op','='),('p',' '),('ty','Pattern'),('op','.'),('fnc','compile'),('punc','('),('re','"#[0-9a-f]{6}"'),('punc',')'),('punc',';')],
 [],
 [('p','    '),('dec','@Override')],
 [('p','    '),('kw','public'),('p',' '),('ty','String'),('p',' '),('fnd','resolve'),('punc','('),('ty','String'),('p',' '),('var','key'),('punc',')'),('p',' '),('punc','{')],
 [('p','        '),('cmd','//'),('cm',' fall back to null')],
 [('p','        '),('kw','if'),('p',' '),('punc','('),('var','key'),('op','.'),('fnc','isEmpty'),('punc','()'),('punc',')'),('p',' '),('kw','return'),('p',' '),('con','null'),('punc',';')],
 [('p','        '),('kw','return'),('p',' '),('var','key'),('op','.'),('fnc','strip'),('punc','('),('punc',')'),('op','+'),('str','"'),('esc','\\t'),('str','"'),('punc',';')],
 [('p','    '),('punc','}')],
 [],
 [('p','    '),('kw','public'),('p',' '),('kw','static'),('p',' '),('ty','void'),('p',' '),('fnd','main'),('punc','('),('ty','String'),('punc','[]'),('p',' '),('var','args'),('punc',')'),('p',' '),('punc','{')],
 [('p','        '),('ty','var'),('p',' '),('var','t'),('p',' '),('op','='),('p',' '),('kw','new'),('p',' '),('ty','Theme'),('punc','()'),('punc',';')],
 [('p','        '),('ty','System'),('op','.'),('prop','out'),('op','.'),('fnc','println'),('punc','('),('var','t'),('op','.'),('fnc','resolve'),('punc','('),('str','"bg"'),('punc','))'),('punc',';')],
 [('p','    '),('punc','}')],
 [('punc','}')],
]
SHS=[
 [('cmd','#!'),('cm','/bin/bash')],
 [('cmd','#'),('cm',' deploy.sh')],
 [('bi','set'),('p',' '),('op','-'),('var','euo'),('p',' '),('var','pipefail')],
 [],
 [('var','PORT'),('op','='),('num','8080')],
 [('var','NAME'),('op','='),('str','"dupre"')],
 [],
 [('fnd','deploy'),('punc','()'),('p',' '),('punc','{')],
 [('p','    '),('kw','local'),('p',' '),('var','target'),('op','='),('str','"$1"')],
 [('p','    '),('kw','if'),('p',' '),('punc','[['),('p',' '),('op','-z'),('p',' '),('str','"$target"'),('p',' '),('punc',']]'),('punc',';'),('p',' '),('kw','then')],
 [('p','        '),('bi','echo'),('p',' '),('str','"no target"')],
 [('p','        '),('kw','return'),('p',' '),('num','1')],
 [('p','    '),('kw','fi')],
 [('p','    '),('fnc','rsync'),('p',' '),('op','-az'),('p',' '),('str','"$NAME"'),('p',' '),('str','"$target"')],
 [('punc','}')],
 [],
 [('fnd','main'),('punc','()'),('p',' '),('punc','{')],
 [('p','    '),('kw','for'),('p',' '),('var','host'),('p',' '),('kw','in'),('p',' '),('str','"$@"'),('punc',';'),('p',' '),('kw','do')],
 [('p','        '),('fnc','deploy'),('p',' '),('str','"$host"'),('p',' '),('op','||'),('p',' '),('bi','exit'),('p',' '),('num','1')],
 [('p','    '),('kw','done')],
 [('p','    '),('bi','echo'),('p',' '),('op','-e'),('p',' '),('str','"all done'),('esc','\\n'),('str','"')],
 [('punc','}')],
 [],
 [('fnc','main'),('p',' '),('str','"$@"')],
]

RUSTS=[
 [('cmd','//'),('cm',' theme.rs')],
 [('dec','#![allow(dead_code)]')],
 [('kw','use'),('p',' '),('var','std'),('op','::'),('var','fmt'),('punc',';')],
 [],
 [('dec','#[derive'),('punc','('),('dec','Debug'),('punc',','),('p',' '),('dec','Clone'),('punc',')]')],
 [('kw','pub'),('p',' '),('kw','trait'),('p',' '),('ty','Theme'),('op','<'),('var',"'a"),('op','>'),('p',' '),('punc','{')],
 [('p','    '),('kw','const'),('p',' '),('con','NAME'),('op',':'),('p',' '),('op','&'),('var',"'static"),('p',' '),('ty','str'),('punc',';')],
 [('p','    '),('kw','fn'),('p',' '),('fnd','resolve'),('punc','('),('op','&'),('var',"'a"),('p',' '),('var','self'),('punc',','),('p',' '),('var','key'),('op',':'),('p',' '),('op','&'),('var',"'a"),('p',' '),('ty','str'),('punc',')'),('p',' '),('op','->'),('p',' '),('ty','Option'),('op','<'),('op','&'),('var',"'a"),('p',' '),('ty','str'),('op','>'),('punc',';')],
 [('punc','}')],
 [],
 [('kw','pub'),('p',' '),('kw','struct'),('p',' '),('ty','Palette'),('op','<'),('var',"'a"),('op','>'),('p',' '),('punc','{')],
 [('p','    '),('kw','pub'),('p',' '),('prop','name'),('op',':'),('p',' '),('op','&'),('var',"'a"),('p',' '),('ty','str'),('punc',',')],
 [('p','    '),('kw','pub'),('p',' '),('prop','colors'),('op',':'),('p',' '),('ty','Vec'),('op','<'),('punc','('),('op','&'),('var',"'a"),('p',' '),('ty','str'),('punc',','),('p',' '),('op','&'),('var',"'a"),('p',' '),('ty','str'),('punc',')'),('op','>'),('punc',',')],
 [('punc','}')],
 [],
 [('kw','impl'),('op','<'),('var',"'a"),('op','>'),('p',' '),('ty','Theme'),('op','<'),('var',"'a"),('op','>'),('p',' '),('kw','for'),('p',' '),('ty','Palette'),('op','<'),('var',"'a"),('op','>'),('p',' '),('punc','{')],
 [('p','    '),('kw','const'),('p',' '),('con','NAME'),('op',':'),('p',' '),('op','&'),('var',"'static"),('p',' '),('ty','str'),('p',' '),('op','='),('p',' '),('str','"dupre"'),('punc',';')],
 [('p','    '),('kw','fn'),('p',' '),('fnd','resolve'),('punc','('),('op','&'),('var',"'a"),('p',' '),('var','self'),('punc',','),('p',' '),('var','key'),('op',':'),('p',' '),('op','&'),('var',"'a"),('p',' '),('ty','str'),('punc',')'),('p',' '),('op','->'),('p',' '),('ty','Option'),('op','<'),('op','&'),('var',"'a"),('p',' '),('ty','str'),('op','>'),('p',' '),('punc','{')],
 [('p','        '),('kw','if'),('p',' '),('var','key'),('op','.'),('fnc','is_empty'),('punc','()'),('p',' '),('punc','{'),('p',' '),('kw','return'),('p',' '),('con','None'),('punc',';'),('p',' '),('punc','}')],
 [('p','        '),('var','self'),('op','.'),('prop','colors'),('op','.'),('fnc','iter'),('punc','()'),('op','.'),('fnc','find'),('punc','('),('op','|'),('punc','('),('var','k'),('punc',','),('p',' '),('var','_'),('punc',')'),('op','|'),('p',' '),('op','*'),('var','k'),('p',' '),('op','=='),('p',' '),('var','key'),('punc',')'),('op','.'),('fnc','map'),('punc','('),('op','|'),('punc','('),('var','_'),('punc',','),('p',' '),('var','v'),('punc',')'),('op','|'),('p',' '),('op','*'),('var','v'),('punc',')')],
 [('p','    '),('punc','}')],
 [('punc','}')],
 [],
 [('kw','fn'),('p',' '),('fnd','main'),('punc','()'),('p',' '),('punc','{')],
 [('p','    '),('kw','let'),('p',' '),('var','palette'),('p',' '),('op','='),('p',' '),('ty','Palette'),('p',' '),('punc','{'),('p',' '),('prop','name'),('op',':'),('p',' '),('str','"dupre"'),('punc',','),('p',' '),('prop','colors'),('op',':'),('p',' '),('bi','vec!'),('punc','['),('punc','('),('str','"bg"'),('punc',','),('p',' '),('str','"#0d0b0a"'),('punc',')'),('punc',']'),('p',' '),('punc','}'),('punc',';')],
 [('p','    '),('bi','println!'),('punc','('),('str','"{:?}"'),('punc',','),('p',' '),('var','palette'),('op','.'),('fnc','resolve'),('punc','('),('str','"bg"'),('punc','))'),('punc',';')],
 [('punc','}')],
]

ZIGS=[
 [('cmd','//'),('cm',' theme.zig')],
 [('kw','const'),('p',' '),('var','std'),('p',' '),('op','='),('p',' '),('bi','@import'),('punc','('),('str','"std"'),('punc',')'),('punc',';')],
 [('kw','const'),('p',' '),('ty','Allocator'),('p',' '),('op','='),('p',' '),('var','std'),('op','.'),('var','mem'),('op','.'),('ty','Allocator'),('punc',';')],
 [],
 [('kw','pub'),('p',' '),('kw','const'),('p',' '),('ty','Theme'),('p',' '),('op','='),('p',' '),('kw','struct'),('p',' '),('punc','{')],
 [('p','    '),('prop','name'),('op',':'),('p',' '),('punc','['),('punc',']'),('kw','const'),('p',' '),('ty','u8'),('punc',',')],
 [('p','    '),('prop','colors'),('op',':'),('p',' '),('punc','['),('punc',']'),('kw','const'),('p',' '),('ty','Color'),('punc',',')],
 [],
 [('p','    '),('kw','pub'),('p',' '),('kw','fn'),('p',' '),('fnd','init'),('punc','('),('var','alloc'),('op',':'),('p',' '),('op','*'),('ty','Allocator'),('punc',')'),('p',' '),('op','!'),('bi','@This'),('punc','()'),('p',' '),('punc','{')],
 [('p','        '),('kw','const'),('p',' '),('var','colors'),('p',' '),('op','='),('p',' '),('kw','try'),('p',' '),('var','alloc'),('op','.'),('fnc','alloc'),('punc','('),('ty','Color'),('punc',','),('p',' '),('num','2'),('punc',')'),('punc',';')],
 [('p','        '),('var','colors'),('punc','['),('num','0'),('punc',']'),('p',' '),('op','='),('p',' '),('ty','Color'),('punc','{'),('p',' '),('prop','.name'),('p',' '),('op','='),('p',' '),('str','"bg"'),('punc',','),('p',' '),('prop','.hex'),('p',' '),('op','='),('p',' '),('str','"#0d0b0a"'),('p',' '),('punc','}'),('punc',';')],
 [('p','        '),('kw','return'),('p',' '),('bi','@This'),('punc','()'),('punc','{'),('p',' '),('prop','.name'),('p',' '),('op','='),('p',' '),('str','"dupre"'),('punc',','),('p',' '),('prop','.colors'),('p',' '),('op','='),('p',' '),('var','colors'),('p',' '),('punc','}'),('punc',';')],
 [('p','    '),('punc','}')],
 [('punc','}'),('punc',';')],
 [],
 [('kw','const'),('p',' '),('ty','Color'),('p',' '),('op','='),('p',' '),('kw','struct'),('p',' '),('punc','{'),('p',' '),('prop','name'),('op',':'),('p',' '),('punc','['),('punc',']'),('kw','const'),('p',' '),('ty','u8'),('punc',','),('p',' '),('prop','hex'),('op',':'),('p',' '),('punc','['),('punc',']'),('kw','const'),('p',' '),('ty','u8'),('p',' '),('punc','}'),('punc',';')],
 [],
 [('kw','fn'),('p',' '),('fnd','resolve'),('punc','('),('var','theme'),('op',':'),('p',' '),('ty','Theme'),('punc',','),('p',' '),('kw','comptime'),('p',' '),('var','key'),('op',':'),('p',' '),('punc','['),('punc',':'),('num','0'),('punc',']'),('kw','const'),('p',' '),('ty','u8'),('punc',')'),('p',' '),('op','!'),('punc','['),('punc',']'),('kw','const'),('p',' '),('ty','u8'),('p',' '),('punc','{')],
 [('p','    '),('kw','inline'),('p',' '),('kw','for'),('p',' '),('punc','('),('var','theme'),('op','.'),('prop','colors'),('punc',')'),('p',' '),('op','|'),('var','color'),('op','|'),('p',' '),('punc','{')],
 [('p','        '),('kw','if'),('p',' '),('punc','('),('var','std'),('op','.'),('var','mem'),('op','.'),('fnc','eql'),('punc','('),('ty','u8'),('punc',','),('p',' '),('var','color'),('op','.'),('prop','name'),('punc',','),('p',' '),('var','key'),('punc',')'),('punc',')'),('p',' '),('kw','return'),('p',' '),('var','color'),('op','.'),('prop','hex'),('punc',';')],
 [('p','    '),('punc','}')],
 [('p','    '),('kw','return'),('p',' '),('con','error.MissingColor'),('punc',';')],
 [('punc','}')],
 [],
 [('kw','test'),('p',' '),('str','"resolve bg"'),('p',' '),('punc','{')],
 [('p','    '),('kw','var'),('p',' '),('var','arena'),('p',' '),('op','='),('p',' '),('var','std'),('op','.'),('var','heap'),('op','.'),('ty','ArenaAllocator'),('op','.'),('fnc','init'),('punc','('),('var','std'),('op','.'),('var','testing'),('op','.'),('prop','allocator'),('punc',')'),('punc',';')],
 [('p','    '),('kw','defer'),('p',' '),('var','arena'),('op','.'),('fnc','deinit'),('punc','()'),('punc',';')],
 [('p','    '),('kw','try'),('p',' '),('var','std'),('op','.'),('var','testing'),('op','.'),('fnc','expectEqualStrings'),('punc','('),('str','"#0d0b0a"'),('punc',','),('p',' '),('kw','try'),('p',' '),('fnc','resolve'),('punc','('),('kw','try'),('p',' '),('ty','Theme'),('op','.'),('fnc','init'),('punc','('),('op','&'),('var','arena'),('op','.'),('prop','allocator'),('punc',')'),('punc',','),('p',' '),('str','"bg"'),('punc','))'),('punc',';')],
 [('punc','}')],
]

RACKETS=[
 [('pp','#lang'),('p',' '),('pp','racket')],
 [],
 [('cmd',';;'),('p',' '),('cm','Compute Fibonacci numbers with memoization')],
 [('punc','('),('kw','require'),('p',' '),('var','racket/list'),('punc',')')],
 [],
 [('punc','('),('kw','define'),('p',' '),('punc','('),('fnd','fib'),('p',' '),('var','n'),('punc',')')],
 [('p','  '),('punc','('),('kw','cond'),('p',' ')],
 [('p','    '),('punc','[('),('bi','<'),('p',' '),('var','n'),('p',' '),('num','2'),('punc',')'),('p',' '),('var','n'),('punc',']')],
 [('p','    '),('punc','['),('con','else'),('p',' ')],
 [('p','     '),('punc','('),('bi','+'),('p',' '),('punc','('),('fnc','fib'),('p',' '),('punc','('),('bi','-'),('p',' '),('var','n'),('p',' '),('num','1'),('punc','))'),('p',' ')],
 [('p','        '),('punc','('),('fnc','fib'),('p',' '),('punc','('),('bi','-'),('p',' '),('var','n'),('p',' '),('num','2'),('punc',')))])]')],
 [],
 [('cmd',';;'),('p',' '),('cm','A point struct with two fields')],
 [('punc','('),('kw','struct'),('p',' '),('ty','point'),('p',' '),('punc','('),('prop','x'),('p',' '),('prop','y'),('punc',')'),('p',' '),('con','#:transparent'),('punc',')')],
 [],
 [('punc','('),('kw','define'),('p',' '),('var','origin'),('p',' '),('punc','('),('fnc','point'),('p',' '),('num','0'),('p',' '),('num','0'),('punc','))')],
 [],
 [('punc','('),('kw','define'),('p',' '),('var','nums'),('p',' '),('punc','('),('kw','quote'),('p',' '),('punc','('),('num','1'),('p',' '),('num','2'),('p',' '),('num','3'),('p',' '),('num','4'),('p',' '),('num','5'),('punc','))')],
 [],
 [('punc','('),('kw','define'),('p',' '),('var','squared'),('p',' ')],
 [('p','  '),('punc','('),('bi','map'),('p',' '),('punc','('),('kw','lambda'),('p',' '),('punc','('),('var','x'),('punc',')'),('p',' '),('punc','('),('bi','*'),('p',' '),('var','x'),('p',' '),('var','x'),('punc','))'),('p',' '),('var','nums'),('punc','))')],
 [],
 [('punc','('),('bi','printf'),('p',' '),('str','"squares: ~a\\n"'),('p',' '),('var','squared'),('punc',')')],
 [('punc','('),('bi','displayln'),('p',' '),('punc','('),('fnc','first'),('p',' '),('var','squared'),('punc','))')],
]
SCHEMES=[
 [('cmd',';;'),('p',' '),('cm','Tail-recursive factorial in Scheme')],
 [],
 [('punc','('),('kw','define'),('p',' '),('punc','('),('fnd','factorial'),('p',' '),('var','n'),('punc',')')],
 [('p','  '),('punc','('),('kw','let'),('p',' '),('fnd','loop'),('p',' '),('punc','(['),('var','acc'),('p',' '),('num','1'),('punc',']'),('p',' '),('punc','['),('var','i'),('p',' '),('var','n'),('punc','])')],
 [('p','    '),('punc','('),('kw','if'),('p',' '),('punc','('),('bi','='),('p',' '),('var','i'),('p',' '),('num','0'),('punc',')')],
 [('p','        '),('var','acc'),('p',' ')],
 [('p','        '),('punc','('),('fnc','loop'),('p',' '),('punc','('),('bi','*'),('p',' '),('var','acc'),('p',' '),('var','i'),('punc',')'),('p',' '),('punc','('),('bi','-'),('p',' '),('var','i'),('p',' '),('num','1'),('punc','))))')],
 [],
 [('cmd',';;'),('p',' '),('cm','Higher-order map over a quoted list')],
 [('punc','('),('kw','define'),('p',' '),('var','primes'),('p',' '),('punc','('),('kw','quote'),('p',' '),('punc','('),('num','2'),('p',' '),('num','3'),('p',' '),('num','5'),('p',' '),('num','7'),('p',' '),('num','11'),('punc','))')],
 [],
 [('punc','('),('kw','define'),('p',' '),('punc','('),('fnd','double'),('p',' '),('var','x'),('punc',')')],
 [('p','  '),('punc','('),('bi','*'),('p',' '),('var','x'),('p',' '),('num','2'),('punc',')')],
 [],
 [('punc','('),('kw','define'),('p',' '),('var','doubled'),('p',' '),('punc','('),('bi','map'),('p',' '),('var','double'),('p',' '),('var','primes'),('punc','))')],
 [],
 [('cmd',';;'),('p',' '),('cm','Predicate using cond and recursion')],
 [('punc','('),('kw','define'),('p',' '),('punc','('),('fnd','member?'),('p',' '),('var','x'),('p',' '),('var','lst'),('punc',')')],
 [('p','  '),('punc','('),('kw','cond'),('p',' ')],
 [('p','    '),('punc','[('),('bi','null?'),('p',' '),('var','lst'),('punc',')'),('p',' '),('con','#f'),('punc',']')],
 [('p','    '),('punc','[('),('bi','equal?'),('p',' '),('punc','('),('bi','car'),('p',' '),('var','lst'),('punc',')'),('p',' '),('var','x'),('punc',')'),('p',' '),('con','#t'),('punc',']')],
 [('p','    '),('punc','['),('con','else'),('p',' '),('punc','('),('fnc','member?'),('p',' '),('var','x'),('p',' '),('punc','('),('bi','cdr'),('p',' '),('var','lst'),('punc','))]'),('punc',')')],
 [],
 [('punc','('),('bi','display'),('p',' '),('punc','('),('fnc','member?'),('p',' '),('num','5'),('p',' '),('var','primes'),('punc','))')],
 [('punc','('),('bi','newline'),('punc',')')],
]
HASKELLS=[
 [('cmd','-- |'),('cm',' Compute statistics over a stream of samples.')],
 [('pp','{-# LANGUAGE ScopedTypeVariables #-}')],
 [('kw','module'),('p',' '),('ty','Stats'),('p',' '),('punc','('),('var','mean'),('punc',','),('p',' '),('var','variance'),('punc',')'),('p',' '),('kw','where')],
 [],
 [('kw','import'),('p',' '),('kw','qualified'),('p',' '),('ty','Data.List'),('p',' '),('kw','as'),('p',' '),('ty','L')],
 [],
 [('cmd','-- |'),('cm',' A labelled measurement.')],
 [('kw','data'),('p',' '),('ty','Sample'),('p',' '),('op','='),('p',' '),('ty','Sample')],
 [('p',' '),('p',' '),('punc','{'),('p',' '),('prop','label'),('p','  '),('op','::'),('p',' '),('ty','String')],
 [('p',' '),('p',' '),('punc',','),('p',' '),('prop','value'),('p','  '),('op','::'),('p',' '),('ty','Double')],
 [('p',' '),('p',' '),('punc','}'),('p',' '),('kw','deriving'),('p',' '),('punc','('),('ty','Show'),('punc',','),('p',' '),('ty','Eq'),('punc',')')],
 [],
 [('cmd','-- |'),('cm',' Arithmetic mean; returns 0 for an empty list.')],
 [('fnd','mean'),('p',' '),('op','::'),('p',' '),('punc','['),('ty','Double'),('punc',']'),('p',' '),('op','->'),('p',' '),('ty','Double')],
 [('fnd','mean'),('p',' '),('con','[]'),('p',' '),('op','='),('p',' '),('num','0')],
 [('fnd','mean'),('p',' '),('var','xs'),('p',' '),('op','='),('p',' '),('fnc','sum'),('p',' '),('var','xs'),('p',' '),('op','/'),('p',' '),('fnc','fromIntegral'),('p',' '),('punc','('),('fnc','length'),('p',' '),('var','xs'),('punc',')')],
 [],
 [('fnd','variance'),('p',' '),('op','::'),('p',' '),('punc','['),('ty','Double'),('punc',']'),('p',' '),('op','->'),('p',' '),('ty','Double')],
 [('fnd','variance'),('p',' '),('var','xs'),('p',' '),('op','='),('p',' '),('kw','let'),('p',' '),('var','m'),('p',' '),('op','='),('p',' '),('fnc','mean'),('p',' '),('var','xs')],
 [('p','               '),('kw','in'),('p',' '),('fnc','mean'),('p',' '),('punc','['),('p',' '),('punc','('),('var','x'),('p',' '),('op','-'),('p',' '),('var','m'),('punc',')'),('p',' '),('op','^'),('p',' '),('num','2'),('p',' '),('op','|'),('p',' '),('var','x'),('p',' '),('op','<-'),('p',' '),('var','xs'),('p',' '),('punc',']')],
 [],
 [('cmd','-- |'),('cm',' Demo entry point.')],
 [('fnd','main'),('p',' '),('op','::'),('p',' '),('ty','IO'),('p',' '),('punc','('),('punc',')')],
 [('fnd','main'),('p',' '),('op','='),('p',' '),('kw','do')],
 [('p','  '),('kw','let'),('p',' '),('var','samples'),('p',' '),('op','='),('p',' '),('punc','['),('num','1.0'),('punc',','),('p',' '),('num','2.5'),('punc',','),('p',' '),('num','3.5'),('punc',']')],
 [('p','  '),('fnc','putStrLn'),('p',' '),('punc','('),('str','"mean = "'),('p',' '),('op','++'),('p',' '),('fnc','show'),('p',' '),('punc','('),('fnc','mean'),('p',' '),('var','samples'),('punc','))')],
]
OCAMLS=[
 [('cmd','(*'),('cm',' Simple expression evaluator with variant types. '),('cmd','*)')],
 [],
 [('kw','type'),('p',' '),('ty','expr'),('p',' '),('op','=')],
 [('p',' '),('p',' '),('op','|'),('p',' '),('ty','Num'),('p',' '),('kw','of'),('p',' '),('ty','float')],
 [('p',' '),('p',' '),('op','|'),('p',' '),('ty','Var'),('p',' '),('kw','of'),('p',' '),('ty','string')],
 [('p',' '),('p',' '),('op','|'),('p',' '),('ty','Add'),('p',' '),('kw','of'),('p',' '),('ty','expr'),('p',' '),('op','*'),('p',' '),('ty','expr')],
 [('p',' '),('p',' '),('op','|'),('p',' '),('ty','Mul'),('p',' '),('kw','of'),('p',' '),('ty','expr'),('p',' '),('op','*'),('p',' '),('ty','expr')],
 [],
 [('cmd','(**'),('cm',' Evaluate [e] under environment [env]. '),('cmd','*)')],
 [('kw','let'),('p',' '),('kw','rec'),('p',' '),('fnd','eval'),('p',' '),('var','env'),('p',' '),('var','e'),('p',' '),('op','=')],
 [('p','  '),('kw','match'),('p',' '),('var','e'),('p',' '),('kw','with')],
 [('p','  '),('op','|'),('p',' '),('ty','Num'),('p',' '),('var','n'),('p',' '),('op','->'),('p',' '),('var','n')],
 [('p','  '),('op','|'),('p',' '),('ty','Var'),('p',' '),('var','x'),('p',' '),('op','->'),('p',' '),('ty','List'),('punc','.'),('fnc','assoc'),('p',' '),('var','x'),('p',' '),('var','env')],
 [('p','  '),('op','|'),('p',' '),('ty','Add'),('p',' '),('punc','('),('var','a'),('punc',','),('p',' '),('var','b'),('punc',')'),('p',' '),('op','->'),('p',' '),('fnc','eval'),('p',' '),('var','env'),('p',' '),('var','a'),('p',' '),('op','+.'),('p',' '),('fnc','eval'),('p',' '),('var','env'),('p',' '),('var','b')],
 [('p','  '),('op','|'),('p',' '),('ty','Mul'),('p',' '),('punc','('),('var','a'),('punc',','),('p',' '),('var','b'),('punc',')'),('p',' '),('op','->'),('p',' '),('fnc','eval'),('p',' '),('var','env'),('p',' '),('var','a'),('p',' '),('op','*.'),('p',' '),('fnc','eval'),('p',' '),('var','env'),('p',' '),('var','b')],
 [],
 [('kw','let'),('p',' '),('punc','()'),('p',' '),('op','='),('p',' '),('kw','let'),('p',' '),('var','env'),('p',' '),('op','='),('p',' '),('punc','['),('p',' '),('punc','('),('str','"x"'),('punc',','),('p',' '),('num','3.0'),('punc',')'),('p',' '),('punc',']'),('p',' '),('kw','in')],
 [('p','  '),('kw','let'),('p',' '),('var','e'),('p',' '),('op','='),('p',' '),('ty','Add'),('p',' '),('punc','('),('ty','Var'),('p',' '),('str','"x"'),('punc',','),('p',' '),('ty','Num'),('p',' '),('num','4.0'),('punc',')'),('p',' '),('kw','in')],
 [('p','  '),('ty','Printf'),('punc','.'),('fnc','printf'),('p',' '),('str','"result = %g\\n"'),('p',' '),('punc','('),('fnc','eval'),('p',' '),('var','env'),('p',' '),('var','e'),('punc',')')],
]
SCALAS=[
 [('cmd','//'),('cm',' Geometry helpers for 2D shapes')],
 [('kw','package'),('p',' '),('var','geometry')],
 [],
 [('kw','import'),('p',' '),('var','scala'),('op','.'),('var','math'),('op','.'),('fnc','sqrt')],
 [],
 [('dec','@inline'),('p',' '),('kw','final'),('p',' '),('kw','case'),('p',' '),('kw','class'),('p',' '),('ty','Point'),('punc','('),('kw','val'),('p',' '),('prop','x'),('op',':'),('p',' '),('ty','Double'),('punc',','),('p',' '),('kw','val'),('p',' '),('prop','y'),('op',':'),('p',' '),('ty','Double'),('punc',')'),('p',' '),('punc','{')],
 [('p','  '),('kw','def'),('p',' '),('fnd','distanceTo'),('punc','('),('var','that'),('op',':'),('p',' '),('ty','Point'),('punc',')'),('op',':'),('p',' '),('ty','Double'),('p',' '),('op','='),('p',' '),('punc','{')],
 [('p','    '),('kw','val'),('p',' '),('var','dx'),('p',' '),('op','='),('p',' '),('var','x'),('p',' '),('op','-'),('p',' '),('var','that'),('op','.'),('prop','x')],
 [('p','    '),('kw','val'),('p',' '),('var','dy'),('p',' '),('op','='),('p',' '),('var','y'),('p',' '),('op','-'),('p',' '),('var','that'),('op','.'),('prop','y')],
 [('p','    '),('fnc','sqrt'),('punc','('),('var','dx'),('p',' '),('op','*'),('p',' '),('var','dx'),('p',' '),('op','+'),('p',' '),('var','dy'),('p',' '),('op','*'),('p',' '),('var','dy'),('punc',')')],
 [('p','  '),('punc','}')],
 [('punc','}')],
 [],
 [('kw','object'),('p',' '),('ty','Geometry'),('p',' '),('punc','{')],
 [('p','  '),('kw','val'),('p',' '),('var','origin'),('p',' '),('op','='),('p',' '),('ty','Point'),('punc','('),('num','0.0'),('punc',','),('p',' '),('num','0.0'),('punc',')')],
 [('p','  '),('kw','val'),('p',' '),('var','pts'),('p',' '),('op','='),('p',' '),('ty','List'),('punc','('),('ty','Point'),('punc','('),('num','3.0'),('punc',','),('p',' '),('num','4.0'),('punc','),'),('p',' '),('ty','Point'),('punc','('),('num','1.0'),('punc',','),('p',' '),('num','2.0'),('punc','))')],
 [('p','  '),('kw','val'),('p',' '),('var','dists'),('p',' '),('op','='),('p',' '),('kw','for'),('p',' '),('punc','('),('var','p'),('p',' '),('op','<-'),('p',' '),('var','pts'),('punc',')'),('p',' '),('kw','yield'),('p',' '),('var','origin'),('op','.'),('fnc','distanceTo'),('punc','('),('var','p'),('punc',')')],
 [],
 [('p','  '),('kw','def'),('p',' '),('fnd','main'),('punc','('),('var','args'),('op',':'),('p',' '),('ty','Array'),('punc','['),('ty','String'),('punc',']'),('punc',')'),('op',':'),('p',' '),('ty','Unit'),('p',' '),('op','='),('p',' '),('punc','{')],
 [('p','    '),('var','dists'),('op','.'),('fnc','foreach'),('punc','('),('var','d'),('p',' '),('op','=>'),('p',' '),('fnc','println'),('punc','('),('str','s"dist = $d"'),('punc',')'),('punc',')')],
 [('p','    '),('kw','val'),('p',' '),('var','ok'),('p',' '),('op','='),('p',' '),('var','dists'),('op','.'),('fnc','nonEmpty'),('p',' '),('op','&&'),('p',' '),('con','true')],
 [('p','  '),('punc','}')],
 [('punc','}')],
]
KOTLINS=[
 [('cmd','//'),('cm',' User repository with a simple cache')],
 [('kw','package'),('p',' '),('var','com'),('op','.'),('var','example'),('op','.'),('var','data')],
 [],
 [('kw','import'),('p',' '),('var','kotlin'),('op','.'),('var','collections'),('op','.'),('var','mutableMapOf')],
 [],
 [('kw','data'),('p',' '),('kw','class'),('p',' '),('ty','User'),('punc','('),('kw','val'),('p',' '),('prop','id'),('op',':'),('p',' '),('ty','Int'),('punc',','),('p',' '),('kw','val'),('p',' '),('prop','name'),('op',':'),('p',' '),('ty','String'),('punc',')')],
 [],
 [('kw','class'),('p',' '),('ty','UserRepo'),('p',' '),('punc','{')],
 [('p','    '),('kw','private'),('p',' '),('kw','val'),('p',' '),('var','cache'),('p',' '),('op','='),('p',' '),('bi','mutableMapOf'),('punc','<'),('ty','Int'),('punc',','),('p',' '),('ty','User'),('punc','>'),('punc','()')],
 [],
 [('p','    '),('dec','@JvmStatic'),('p',' ')],
 [('p','    '),('kw','fun'),('p',' '),('fnd','findById'),('punc','('),('var','id'),('op',':'),('p',' '),('ty','Int'),('punc',')'),('op',':'),('p',' '),('ty','User'),('op','?'),('p',' '),('op','='),('p',' '),('var','cache'),('punc','['),('var','id'),('punc',']')],
 [],
 [('p','    '),('kw','fun'),('p',' '),('fnd','save'),('punc','('),('var','user'),('op',':'),('p',' '),('ty','User'),('punc',')'),('p',' '),('punc','{')],
 [('p','        '),('var','cache'),('punc','['),('var','user'),('op','.'),('prop','id'),('punc',']'),('p',' '),('op','='),('p',' '),('var','user')],
 [('p','        '),('bi','println'),('punc','('),('str','"saved '),('esc','\\n'),('str','"'),('p',' '),('op','+'),('p',' '),('var','user'),('op','.'),('prop','name'),('punc',')')],
 [('p','    '),('punc','}')],
 [('punc','}')],
 [],
 [('kw','fun'),('p',' '),('fnd','main'),('punc','()'),('p',' '),('punc','{')],
 [('p','    '),('kw','val'),('p',' '),('var','repo'),('p',' '),('op','='),('p',' '),('ty','UserRepo'),('punc','()')],
 [('p','    '),('var','repo'),('op','.'),('fnc','save'),('punc','('),('ty','User'),('punc','('),('num','1'),('punc',','),('p',' '),('str','"Ada"'),('punc','))')],
 [('p','    '),('kw','val'),('p',' '),('var','found'),('p',' '),('op','='),('p',' '),('var','repo'),('op','.'),('fnc','findById'),('punc','('),('num','1'),('punc',')'),('p',' '),('op','?:'),('p',' '),('kw','return')],
 [('p','    '),('bi','println'),('punc','('),('var','found'),('punc',')')],
 [('punc','}')],
]
SWIFTS=[
 [('cmd','//'),('cm',' Account model with balance guard')],
 [('kw','import'),('p',' '),('ty','Foundation')],
 [],
 [('dec','@frozen'),('p',' ')],
 [('kw','struct'),('p',' '),('ty','Account'),('p',' '),('punc','{')],
 [('p','    '),('kw','let'),('p',' '),('prop','id'),('op',':'),('p',' '),('ty','Int')],
 [('p','    '),('kw','var'),('p',' '),('prop','balance'),('op',':'),('p',' '),('ty','Double'),('p',' '),('op','='),('p',' '),('num','0.0')],
 [],
 [('p','    '),('kw','func'),('p',' '),('fnd','withdraw'),('punc','('),('var','amount'),('op',':'),('p',' '),('ty','Double'),('punc',')'),('p',' '),('op','->'),('p',' '),('ty','Bool'),('p',' '),('punc','{')],
 [('p','        '),('kw','guard'),('p',' '),('var','amount'),('p',' '),('op','<='),('p',' '),('prop','balance'),('p',' '),('kw','else'),('p',' '),('punc','{')],
 [('p','            '),('kw','return'),('p',' '),('con','false')],
 [('p','        '),('punc','}')],
 [('p','        '),('prop','balance'),('p',' '),('op','-='),('p',' '),('var','amount')],
 [('p','        '),('kw','return'),('p',' '),('con','true')],
 [('p','    '),('punc','}')],
 [('punc','}')],
 [],
 [('kw','let'),('p',' '),('var','acct'),('p',' '),('op','='),('p',' '),('ty','Account'),('punc','('),('var','id'),('op',':'),('p',' '),('num','7'),('punc',','),('p',' '),('var','balance'),('op',':'),('p',' '),('num','100.0'),('punc',')')],
 [('kw','var'),('p',' '),('var','copy'),('p',' '),('op','='),('p',' '),('var','acct')],
 [('kw','let'),('p',' '),('var','ok'),('p',' '),('op','='),('p',' '),('var','copy'),('op','.'),('fnc','withdraw'),('punc','('),('var','amount'),('op',':'),('p',' '),('num','30.0'),('punc',')')],
 [('bi','print'),('punc','('),('str','"acct ok="'),('punc',','),('p',' '),('var','ok'),('punc',')')],
]
LUAS=[
 [('cmd','--'),('cm',' Account module: balances and transfers')],
 [('kw','local'),('p',' '),('ty','Account'),('op','='),('punc','{}')],
 [('ty','Account'),('punc','.'),('prop','__index'),('op','='),('ty','Account')],
 [],
 [('kw','local'),('p',' '),('var','rates'),('op','='),('p',' '),('punc','{'),('str','"usd"'),('op','='),('num','1.0'),('punc',','),('p',' '),('str','"eur"'),('op','='),('num','0.92'),('punc','}')],
 [],
 [('kw','function'),('p',' '),('ty','Account'),('op','.'),('fnd','new'),('punc','('),('var','name'),('punc',','),('p',' '),('var','balance'),('punc',')')],
 [('p','    '),('kw','local'),('p',' '),('var','self'),('op','='),('p',' '),('fnc','setmetatable'),('punc','('),('punc','{}'),('punc',','),('p',' '),('ty','Account'),('punc',')')],
 [('p','    '),('var','self'),('punc','.'),('prop','name'),('op','='),('var','name')],
 [('p','    '),('var','self'),('punc','.'),('prop','balance'),('op','='),('p',' '),('var','balance'),('p',' '),('kw','or'),('p',' '),('num','0')],
 [('p','    '),('kw','return'),('p',' '),('var','self')],
 [('kw','end')],
 [],
 [('kw','function'),('p',' '),('ty','Account'),('op',':'),('fnd','report'),('punc','()')],
 [('p','    '),('kw','for'),('p',' '),('var','code'),('punc',','),('p',' '),('var','rate'),('p',' '),('kw','in'),('p',' '),('bi','pairs'),('punc','('),('var','rates'),('punc',')'),('p',' '),('kw','do')],
 [('p','        '),('bi','print'),('punc','('),('var','code'),('punc',','),('p',' '),('var','self'),('punc','.'),('prop','balance'),('p',' '),('op','*'),('p',' '),('var','rate'),('punc',')')],
 [('p','    '),('kw','end')],
 [('p','    '),('kw','if'),('p',' '),('var','self'),('punc','.'),('prop','balance'),('p',' '),('op','=='),('p',' '),('num','0'),('p',' '),('kw','then')],
 [('p','        '),('kw','return'),('p',' '),('con','nil')],
 [('p','    '),('kw','end')],
 [('p','    '),('kw','return'),('p',' '),('con','true')],
 [('kw','end')],
]
RUBYS=[
 [('cmd','#'),('cm',' Inventory tracker with tagged items')],
 [('kw','class'),('p',' '),('ty','Inventory')],
 [('p','  '),('kw','def'),('p',' '),('fnd','initialize'),('punc','('),('var','items'),('p',' '),('op','='),('p',' '),('punc','[]'),('punc',')')],
 [('p','    '),('var','@items'),('p',' '),('op','='),('p',' '),('var','items')],
 [('p','    '),('var','@tags'),('p',' '),('op','='),('p',' '),('punc','{'),('prop','sku:'),('p',' '),('con','nil'),('punc','}')],
 [('p','  '),('kw','end')],
 [],
 [('p','  '),('kw','def'),('p',' '),('fnd','add'),('punc','('),('var','name'),('punc',','),('p',' '),('var','price'),('punc',')')],
 [('p','    '),('kw','return'),('p',' '),('con','false'),('p',' '),('kw','unless'),('p',' '),('var','name'),('p',' '),('op','=~'),('p',' '),('re','/\\A\\w+\\z/')],
 [('p','    '),('var','@items'),('p',' '),('op','<<'),('p',' '),('punc','{'),('p',' '),('prop','name:'),('p',' '),('var','name'),('punc',','),('p',' '),('prop','price:'),('p',' '),('var','price'),('p',' '),('punc','}')],
 [('p','  '),('kw','end')],
 [],
 [('p','  '),('kw','def'),('p',' '),('fnd','total'),('punc','('),('var','tax'),('p',' '),('op','='),('p',' '),('num','0.08'),('punc',')')],
 [('p','    '),('var','sum'),('p',' '),('op','='),('p',' '),('num','0')],
 [('p','    '),('var','@items'),('punc','.'),('fnc','each'),('p',' '),('kw','do'),('p',' '),('punc','|'),('var','item'),('punc','|')],
 [('p','      '),('var','sum'),('p',' '),('op','+='),('p',' '),('var','item'),('punc','['),('prop',':price'),('punc',']')],
 [('p','    '),('kw','end')],
 [('p','    '),('bi','printf'),('punc','('),('str','"total: %.2f\\n"'),('punc',','),('p',' '),('var','sum'),('p',' '),('op','*'),('p',' '),('punc','('),('num','1'),('p',' '),('op','+'),('p',' '),('var','tax'),('punc','))')],
 [('p','  '),('kw','end')],
 [('kw','end')],
]
PERLS=[
 [('cmd','#'),('cm','!/usr/bin/perl')],
 [('kw','use'),('p',' '),('pp','strict'),('punc',';')],
 [('kw','use'),('p',' '),('pp','warnings'),('punc',';')],
 [],
 [('cmd','#'),('cm',' Parse a config line into a hash')],
 [('kw','sub'),('p',' '),('fnd','parse_config'),('p',' '),('punc','{')],
 [('p','    '),('kw','my'),('p',' '),('punc','('),('var','$line'),('punc',')'),('p',' '),('op','='),('p',' '),('var','@_'),('punc',';')],
 [('p','    '),('kw','my'),('p',' '),('var','%conf'),('p',' '),('op','='),('p',' '),('punc','()'),('punc',';')],
 [],
 [('p','    '),('kw','if'),('p',' '),('punc','('),('var','$line'),('p',' '),('op','=~'),('p',' '),('re','/^(\\w+)\\s*=\\s*(.+)$/'),('punc',')'),('p',' '),('punc','{')],
 [('p','        '),('var','$conf'),('punc','{'),('var','$1'),('punc','}'),('p',' '),('op','='),('p',' '),('var','$2'),('punc',';')],
 [('p','    '),('punc','}')],
 [],
 [('p','    '),('kw','return'),('p',' '),('op','\\'),('var','%conf'),('punc',';')],
 [('punc','}')],
 [],
 [('kw','my'),('p',' '),('var','$ref'),('p',' '),('op','='),('p',' '),('fnc','parse_config'),('punc','('),('str','"host = localhost"'),('punc',')'),('punc',';')],
 [('kw','my'),('p',' '),('var','@keys'),('p',' '),('op','='),('p',' '),('bi','keys'),('p',' '),('var','%$ref'),('punc',';')],
 [('bi','print'),('p',' '),('var','@keys'),('punc',';')],
]
RLANGS=[
 [('cmd','#'),('cm',' Summarize sales by region and fit a model')],
 [('var','library'),('punc','('),('bi','dplyr'),('punc',')')],
 [],
 [('var','sales'),('p',' '),('op','<-'),('p',' '),('fnc','read.csv'),('punc','('),('str','"sales.csv"'),('punc',','),('p',' '),('prop','stringsAsFactors'),('p',' '),('op','='),('p',' '),('con','FALSE'),('punc',')')],
 [('var','regions'),('p',' '),('op','<-'),('p',' '),('bi','c'),('punc','('),('str','"North"'),('punc',','),('p',' '),('str','"South"'),('punc',','),('p',' '),('str','"East"'),('punc',','),('p',' '),('str','"West"'),('punc',')')],
 [],
 [('cmd','#'),('cm',' Compute mean revenue per region')],
 [('fnd','summarize_region'),('p',' '),('op','<-'),('p',' '),('kw','function'),('punc','('),('var','df'),('punc',','),('p',' '),('var','reg'),('punc',')'),('p',' '),('punc','{')],
 [('p','  '),('var','subset'),('p',' '),('op','<-'),('p',' '),('var','df'),('punc','['),('var','df'),('op','$'),('prop','region'),('p',' '),('op','=='),('p',' '),('var','reg'),('punc',','),('p',' '),('punc',']')],
 [('p','  '),('kw','if'),('p',' '),('punc','('),('fnc','nrow'),('punc','('),('var','subset'),('punc',')'),('p',' '),('op','=='),('p',' '),('num','0'),('punc',')'),('p',' '),('punc','{')],
 [('p','    '),('kw','return'),('punc','('),('con','NA'),('punc',')')],
 [('p','  '),('punc','}')],
 [('p','  '),('fnc','mean'),('punc','('),('var','subset'),('op','$'),('prop','revenue'),('punc',','),('p',' '),('prop','na.rm'),('p',' '),('op','='),('p',' '),('con','TRUE'),('punc',')')],
 [('punc','}')],
 [],
 [('var','means'),('p',' '),('op','<-'),('p',' '),('fnc','sapply'),('punc','('),('var','regions'),('punc',','),('p',' '),('kw','function'),('punc','('),('var','r'),('punc',')'),('p',' '),('fnc','summarize_region'),('punc','('),('var','sales'),('punc',','),('p',' '),('var','r'),('punc',')'),('punc',')')],
 [('var','sales'),('p',' '),('op','%>%'),('p',' '),('fnc','filter'),('punc','('),('prop','revenue'),('p',' '),('op','>'),('p',' '),('num','1000'),('punc',')'),('p',' '),('op','%>%'),('p',' '),('fnc','head'),('punc','('),('num','5'),('punc',')')],
 [],
 [('var','model'),('p',' '),('op','<-'),('p',' '),('fnc','lm'),('punc','('),('prop','revenue'),('p',' '),('op','~'),('p',' '),('prop','units'),('p',' '),('op','+'),('p',' '),('prop','region'),('punc',','),('p',' '),('prop','data'),('p',' '),('op','='),('p',' '),('var','sales'),('punc',')')],
 [('fnc','print'),('punc','('),('fnc','summary'),('punc','('),('var','model'),('punc',')'),('punc',')')],
]
ERLANGS=[
 [('cmd','%'),('cm',' Bank account server with pattern matching')],
 [('pp','-module'),('punc','('),('ty','bank'),('punc',').')],
 [('pp','-export'),('punc','(['),('fnc','start'),('op','/'),('num','0'),('punc',','),('p',' '),('fnc','balance'),('op','/'),('num','1'),('punc','])'),('punc','.')],
 [],
 [('fnd','start'),('punc','()'),('p',' '),('op','->')],
 [('p','    '),('fnc','spawn'),('punc','('),('kw','fun'),('punc','()'),('p',' '),('op','->'),('p',' '),('fnc','loop'),('punc','('),('num','0'),('punc',')'),('p',' '),('kw','end'),('punc',').')],
 [],
 [('fnd','loop'),('punc','('),('var','Balance'),('punc',')'),('p',' '),('op','->')],
 [('p','    '),('kw','receive')],
 [('p','        '),('punc','{'),('con','deposit'),('punc',','),('p',' '),('var','Amount'),('punc','}'),('p',' '),('kw','when'),('p',' '),('var','Amount'),('p',' '),('op','>'),('p',' '),('num','0'),('p',' '),('op','->')],
 [('p','            '),('fnc','loop'),('punc','('),('var','Balance'),('p',' '),('op','+'),('p',' '),('var','Amount'),('punc',')'),('punc',';')],
 [('p','        '),('punc','{'),('con','withdraw'),('punc',','),('p',' '),('var','Amount'),('punc','}'),('p',' '),('op','->')],
 [('p','            '),('fnc','loop'),('punc','('),('var','Balance'),('p',' '),('op','-'),('p',' '),('var','Amount'),('punc',')'),('punc',';')],
 [('p','        '),('punc','{'),('con','balance'),('punc',','),('p',' '),('var','From'),('punc','}'),('p',' '),('op','->')],
 [('p','            '),('var','From'),('p',' '),('op','!'),('p',' '),('punc','{'),('con','ok'),('punc',','),('p',' '),('var','Balance'),('punc','}'),('punc',','),('p',' '),('fnc','loop'),('punc','('),('var','Balance'),('punc',')')],
 [('p','    '),('kw','end'),('punc','.')],
 [],
 [('fnd','balance'),('punc','('),('var','Pid'),('punc',')'),('p',' '),('op','->')],
 [('p','    '),('var','Pid'),('p',' '),('op','!'),('p',' '),('punc','{'),('con','balance'),('punc',','),('p',' '),('fnc','self'),('punc','()'),('punc','}'),('punc',','),('p',' '),('kw','receive'),('p',' '),('punc','{'),('con','ok'),('punc',','),('p',' '),('var','B'),('punc','}'),('p',' '),('op','->'),('p',' '),('var','B'),('p',' '),('kw','end'),('punc','.')],
]
SQLS=[
 [('cmd','-- '),('cm','Monthly revenue by active customer')],
 [('kw','SELECT'),('p',' '),('prop','c.id'),('punc',','),('p',' '),('prop','c.name'),('punc',',')],
 [('p','       '),('bi','COUNT'),('punc','('),('prop','o.id'),('punc',')'),('p',' '),('kw','AS'),('p',' '),('var','order_count'),('punc',',')],
 [('p','       '),('bi','COALESCE'),('punc','('),('bi','SUM'),('punc','('),('prop','o.total'),('punc','),'),('p',' '),('num','0'),('punc',')'),('p',' '),('kw','AS'),('p',' '),('var','revenue')],
 [('kw','FROM'),('p',' '),('prop','customers'),('p',' '),('var','c')],
 [('kw','JOIN'),('p',' '),('prop','orders'),('p',' '),('var','o'),('p',' '),('kw','ON'),('p',' '),('prop','o.customer_id'),('p',' '),('op','='),('p',' '),('prop','c.id')],
 [('kw','WHERE'),('p',' '),('prop','c.active'),('p',' '),('op','='),('p',' '),('con','TRUE')],
 [('p','  '),('kw','AND'),('p',' '),('prop','o.created_at'),('p',' '),('op','>='),('p',' '),('str',"'2024-01-01'")],
 [('p','  '),('kw','AND'),('p',' '),('prop','o.status'),('p',' '),('op','<>'),('p',' '),('con','NULL')],
 [('kw','GROUP BY'),('p',' '),('prop','c.id'),('punc',','),('p',' '),('prop','c.name')],
 [('kw','HAVING'),('p',' '),('bi','COUNT'),('punc','('),('prop','o.id'),('punc',')'),('p',' '),('op','>'),('p',' '),('num','5')],
 [('kw','ORDER BY'),('p',' '),('var','revenue'),('p',' '),('kw','DESC')],
 [('kw','LIMIT'),('p',' '),('num','25'),('punc',';')],
 [],
 [('cmd','-- '),('cm','Flag stale accounts for review')],
 [('kw','UPDATE'),('p',' '),('prop','customers')],
 [('kw','SET'),('p',' '),('prop','status'),('p',' '),('op','='),('p',' '),('str',"'dormant'")],
 [('kw','WHERE'),('p',' '),('prop','last_login'),('p',' '),('op','<'),('p',' '),('bi','CURRENT_DATE'),('p',' '),('op','-'),('p',' '),('kw','INTERVAL'),('p',' '),('str',"'90 days'")],
 [('p','  '),('kw','AND'),('p',' '),('prop','active'),('p',' '),('op','='),('p',' '),('con','FALSE'),('punc',';')],
]
PHPS=[
 [('pp','<?php')],
 [('kw','namespace'),('p',' '),('ty','App\\Service'),('punc',';')],
 [],
 [('cmd','/** '),('doc','Computes invoice totals. */')],
 [('dec','#[Service]')],
 [('kw','class'),('p',' '),('ty','InvoiceCalculator')],
 [('punc','{')],
 [('p','    '),('kw','public'),('p',' '),('ty','float'),('p',' '),('var','$taxRate'),('p',' '),('op','='),('p',' '),('num','0.0825'),('punc',';')],
 [],
 [('p','    '),('kw','public'),('p',' '),('kw','function'),('p',' '),('fnd','total'),('punc','('),('kw','array'),('p',' '),('var','$items'),('punc',')'),('op',':'),('p',' '),('ty','float')],
 [('p','    '),('punc','{')],
 [('p','        '),('cmd','// '),('cm','sum each line item')],
 [('p','        '),('var','$prices'),('p',' '),('op','='),('p',' '),('bi','array_map'),('punc','('),('kw','fn'),('punc','('),('var','$i'),('punc',')'),('p',' '),('op','=>'),('p',' '),('var','$i'),('op','['),('str',"'price'"),('op',']'),('punc',','),('p',' '),('var','$items'),('punc',')'),('punc',';')],
 [('p','        '),('var','$subtotal'),('p',' '),('op','='),('p',' '),('bi','array_sum'),('punc','('),('var','$prices'),('punc',')'),('punc',';')],
 [],
 [('p','        '),('kw','if'),('p',' '),('punc','('),('var','$subtotal'),('p',' '),('op','==='),('p',' '),('num','0'),('punc',')'),('p',' '),('punc','{')],
 [('p','            '),('kw','return'),('p',' '),('num','0.0'),('punc',';')],
 [('p','        '),('punc','}')],
 [],
 [('p','        '),('var','$total'),('p',' '),('op','='),('p',' '),('var','$subtotal'),('p',' '),('op','*'),('p',' '),('punc','('),('num','1'),('p',' '),('op','+'),('p',' '),('var','$this'),('op','->'),('prop','taxRate'),('punc',')'),('punc',';')],
 [('p','        '),('fnc','printf'),('punc','('),('str','"Total: %.2f\\n"'),('punc',','),('p',' '),('var','$total'),('punc',')'),('punc',';')],
 [('p','        '),('kw','return'),('p',' '),('var','$total'),('punc',';')],
 [('p','    '),('punc','}')],
 [('punc','}')],
]
ADAS=[
 [('cmd','-- '),('cm','Compute factorial and print the result')],
 [('pp','with'),('p',' '),('var','Ada.Text_IO'),('punc',';')],
 [('pp','use'),('p',' '),('var','Ada.Text_IO'),('punc',';')],
 [],
 [('kw','procedure'),('p',' '),('fnd','Factorial_Demo'),('p',' '),('kw','is')],
 [('p','   '),('var','N'),('p',' '),('punc',':'),('p',' '),('ty','Integer'),('p',' '),('op',':='),('p',' '),('num','5'),('punc',';')],
 [('p','   '),('var','Result'),('p',' '),('punc',':'),('p',' '),('ty','Integer'),('p',' '),('op',':='),('p',' '),('num','1'),('punc',';')],
 [('kw','begin')],
 [('p','   '),('kw','for'),('p',' '),('var','I'),('p',' '),('kw','in'),('p',' '),('num','1'),('p',' '),('op','..'),('p',' '),('var','N'),('p',' '),('kw','loop')],
 [('p','      '),('var','Result'),('p',' '),('op',':='),('p',' '),('var','Result'),('p',' '),('op','*'),('p',' '),('var','I'),('punc',';')],
 [('p','   '),('kw','end'),('p',' '),('kw','loop'),('punc',';')],
 [],
 [('p','   '),('kw','if'),('p',' '),('var','Result'),('p',' '),('op','>'),('p',' '),('num','0'),('p',' '),('kw','then')],
 [('p','      '),('bi','Put_Line'),('punc','('),('str','"Factorial = "'),('p',' '),('op','&'),('p',' '),('var','Integer'),('punc',"'"),('var','Image'),('punc','('),('var','Result'),('punc','))'),('punc',';')],
 [('p','   '),('kw','end'),('p',' '),('kw','if'),('punc',';')],
 [('kw','end'),('p',' '),('fnd','Factorial_Demo'),('punc',';')],
]
FORTRANS=[
 [('cmd','! '),('cm','Sum the elements of an array')],
 [('kw','program'),('p',' '),('fnd','array_sum')],
 [('p','  '),('kw','implicit none')],
 [('p','  '),('ty','integer'),('p',' '),('punc','::'),('p',' '),('var','i'),('punc',','),('p',' '),('var','n')],
 [('p','  '),('ty','real'),('punc','('),('var','kind'),('op','='),('num','8'),('punc',')'),('p',' '),('punc','::'),('p',' '),('var','total')],
 [('p','  '),('ty','real'),('punc','('),('var','kind'),('op','='),('num','8'),('punc',')'),('punc',','),('p',' '),('kw','dimension'),('punc','('),('num','5'),('punc',')'),('p',' '),('punc','::'),('p',' '),('var','a')],
 [],
 [('p','  '),('var','n'),('p',' '),('op','='),('p',' '),('num','5')],
 [('p','  '),('var','total'),('p',' '),('op','='),('p',' '),('num','0.0')],
 [('p','  '),('var','a'),('p',' '),('op','='),('p',' '),('punc','['),('num','1.0'),('punc',','),('p',' '),('num','2.0'),('punc',','),('p',' '),('num','3.0'),('punc',','),('p',' '),('num','4.0'),('punc',','),('p',' '),('num','5.0'),('punc',']')],
 [],
 [('p','  '),('kw','do'),('p',' '),('var','i'),('p',' '),('op','='),('p',' '),('num','1'),('punc',','),('p',' '),('var','n')],
 [('p','    '),('var','total'),('p',' '),('op','='),('p',' '),('var','total'),('p',' '),('op','+'),('p',' '),('var','a'),('punc','('),('var','i'),('punc',')')],
 [('p','  '),('kw','end do')],
 [],
 [('p','  '),('bi','print'),('p',' '),('op','*'),('punc',','),('p',' '),('str','"Sum = "'),('punc',','),('p',' '),('var','total')],
 [('kw','end program'),('p',' '),('fnd','array_sum')],
]
MATLABS=[
 [('cmd','% '),('cm','Normalize a vector and report its length')],
 [('kw','function'),('p',' '),('var','out'),('p',' '),('op','='),('p',' '),('fnd','normalize_vec'),('punc','('),('var','v'),('punc',')')],
 [('p','    '),('var','n'),('p',' '),('op','='),('p',' '),('bi','length'),('punc','('),('var','v'),('punc',')'),('punc',';')],
 [('p','    '),('var','acc'),('p',' '),('op','='),('p',' '),('num','0'),('punc',';')],
 [],
 [('p','    '),('kw','for'),('p',' '),('var','i'),('p',' '),('op','='),('p',' '),('num','1'),('op',':'),('var','n')],
 [('p','        '),('var','acc'),('p',' '),('op','='),('p',' '),('var','acc'),('p',' '),('op','+'),('p',' '),('var','v'),('punc','('),('var','i'),('punc',')'),('op','^'),('num','2'),('punc',';')],
 [('p','    '),('kw','end')],
 [],
 [('p','    '),('var','mag'),('p',' '),('op','='),('p',' '),('bi','sqrt'),('punc','('),('var','acc'),('punc',')'),('punc',';')],
 [('p','    '),('kw','if'),('p',' '),('var','mag'),('p',' '),('op','=='),('p',' '),('num','0')],
 [('p','        '),('var','out'),('p',' '),('op','='),('p',' '),('bi','zeros'),('punc','('),('bi','size'),('punc','('),('var','v'),('punc',')'),('punc',')'),('punc',';')],
 [('p','    '),('kw','else')],
 [('p','        '),('var','out'),('p',' '),('op','='),('p',' '),('var','v'),('p',' '),('op','/'),('p',' '),('var','mag'),('punc',';')],
 [('p','    '),('kw','end')],
 [],
 [('p','    '),('bi','disp'),('punc','('),('str','"vector length:"'),('punc',')'),('punc',';')],
 [('p','    '),('bi','disp'),('punc','('),('var','n'),('punc',')'),('punc',';')],
 [('kw','end')],
]
ASMS=[
 [('cmd',';'),('cm',' print a greeting via the write syscall')],
 [('pp','section'),('p',' '),('pp','.data')],
 [('p','    '),('var','msg'),('p','     '),('pp','db'),('p',' '),('str','"Hello, world!"'),('punc',','),('p',' '),('num','0xA')],
 [('p','    '),('con','msglen'),('p','  '),('pp','equ'),('p',' '),('var','$'),('p',' '),('op','-'),('p',' '),('var','msg')],
 [],
 [('pp','section'),('p',' '),('pp','.text')],
 [('p','    '),('bi','global'),('p',' '),('fnc','_start')],
 [],
 [('fnd','_start'),('punc',':')],
 [('p','    '),('kw','mov'),('p','     '),('var','rax'),('punc',','),('p',' '),('num','1'),('p','          '),('cmd',';'),('cm',' sys_write')],
 [('p','    '),('kw','mov'),('p','     '),('var','rdi'),('punc',','),('p',' '),('num','1'),('p','          '),('cmd',';'),('cm',' stdout')],
 [('p','    '),('kw','lea'),('p','     '),('var','rsi'),('punc',','),('p',' '),('punc','['),('var','rel'),('p',' '),('var','msg'),('punc',']')],
 [('p','    '),('kw','mov'),('p','     '),('var','rdx'),('punc',','),('p',' '),('con','msglen')],
 [('p','    '),('kw','syscall')],
 [],
 [('p','    '),('kw','mov'),('p','     '),('var','rax'),('punc',','),('p',' '),('num','60'),('p','         '),('cmd',';'),('cm',' sys_exit')],
 [('p','    '),('kw','xor'),('p','     '),('var','rdi'),('punc',','),('p',' '),('var','rdi'),('p','        '),('cmd',';'),('cm',' status 0')],
 [('p','    '),('kw','syscall')],
]

# THEME_STUDIO_DATA_END: generate.py execs only the lines above this marker (the
# code samples and COLS). Everything below is the standalone /tmp/dupre-canon.html
# preview generator, run only when samples.py is executed directly.
cols="".join(f'<div class="col"><h2>{n}</h2><pre>{render(s)}</pre></div>' for n,s in [("Elisp",ELS),("Go",GOS),("Python",PYS),("TypeScript",TSS),("Java",JAS),("C",CS),("C++",CPS),("Rust",RUSTS),("Zig",ZIGS),("Shell",SHS)])
legend_rows=[
 ("keyword (bold)","kw","class def if return import"),("builtin","bi","len range print"),
 ("function — definition (bold)","fnd","resolve cache-get push"),("function — call","fnc","get append fmt.Errorf"),
 ("decorator / attribute","dec","@dataclass @Injectable"),("type / class","ty","str dict Order Queue boolean"),
 ("property / field / key","prop","name colors items id re"),("constant","con","None nil true MaxItems :test"),
 ("number","num","8080 100 42 0"),("string","str",'"dupre" "fmt" `id`'),("escape","esc",r'\t \n'),
 ("regexp","re",'/^#[0-9a-f]{6}$/i'),("docstring","doc",'"""..." "Memo table."'),
 ("comment","cm","# reject nil // fallback"),("comment delimiter","cmd","# // ;; /*"),
 ("variable / use","var","v key self q console"),("operator","op",": = -> | == === . *"),
 ("punctuation / bracket","punc","{ } ( ) [ ] , ;"),
]
def lrow(label,k,ex):
    c,b=COLS[k]
    return f'<tr><td class="sw" style="background:{c}"></td><td class="nm">{NAMES.get(c,"")}</td><td class="hx">{c}</td><td class="cat">{label}</td><td class="ex" style="color:{c}{";font-weight:bold" if b else ""}">{esc(ex)}</td></tr>'
legend="".join(lrow(l,k,e) for l,k,e in legend_rows)
def grp(title,items):
    sw="".join(f'<div class="m"><div class="psw" style="background:{h}"></div><div class="lb">{n}<br>{h}</div></div>' for n,h in items)
    return f'<div class="g"><div class="gt">{title}</div><div class="ramp">{sw}</div></div>'
palette=(grp("ground / foreground",[("ground","#0d0b0a"),("bg-dim","#1a1714"),("fg","#cdced1")])
 + grp("syntax hues",[("blue · keyword","#67809c"),("gold · variable","#e8bd30"),("regal · type","#9b5fd0"),("emerald · string","#2ba178"),("terracotta · const/num","#cb6b4d"),("tan · comment","#be9e74")])
 + grp("metallic greyscale (structural)",[("gunmetal","#2f343a"),("metal","#474e56"),("pewter","#5e6770"),("steel · property","#838d97"),("silver · fn/op/punct","#a9b2bb"),("bright · fg","#cdced1")])
 + grp("special green + fills",[("muted emerald · doc/regexp","#5d9b86"),("navy fill","#264364"),("gunmetal fill","#2f343a")]))
html=f'''<!doctype html><meta charset=utf-8><title>dupre revision — canonical</title>
<style>body{{background:{GROUND};color:#cdced1;font:15px/1.55 monospace;margin:20px}}
 h1{{font-size:22px;font-weight:normal;color:#e8bd30;margin:26px 0 10px;border-bottom:1px solid #252321;padding-bottom:6px}}
 h2{{font-size:13px;color:#8a9496;font-weight:normal;margin:0 0 4px}}
 .wrap{{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:14px;padding-bottom:10px}} .col{{flex:0 0 auto;width:460px}}
 pre{{background:#0d0b0a;border:1px solid #252321;border-radius:8px;padding:14px 16px;font-size:19px;overflow:auto}}
 table.leg{{border-collapse:collapse}} table.leg td{{padding:3px 10px;vertical-align:middle}} table.leg th{{cursor:pointer;color:#b4b1a2;text-align:left;padding:3px 10px;user-select:none;font-weight:normal}} table.leg th:hover{{color:#e8bd30}}
 .sw{{width:26px;height:16px;border-radius:3px;border:1px solid #00000060}} .nm{{color:#c0c5ca;font-size:12px}} .hx{{color:#969385;font-size:11px}} .cat{{color:#b4b1a2}} .ex{{font-size:18px}}
 .g{{margin:4px 0 10px}} .gt{{color:#8a9496;font-size:12px;margin-bottom:4px}}
 .ramp{{display:flex;gap:8px;flex-wrap:wrap}} .m{{text-align:center}} .psw{{width:120px;height:30px;border-radius:5px;border:1px solid #00000060}} .lb{{font-size:10px;color:#969385;margin-top:3px}}</style>
<h1>code samples</h1>
<div class="wrap">{cols}</div>
<h1>color &rarr; tree-sitter category assignment &mdash; click a header to sort</h1>
<table class="leg" id="legtable"><thead><tr><th></th><th onclick="srt(1)">color &#9651;</th><th onclick="srt(2)">hex &#9651;</th><th onclick="srt(3)">category &#9651;</th><th>example</th></tr></thead><tbody>{legend}</tbody></table>
<h1>palette</h1>
{palette}\n<script>let D={{}};function srt(c){{const t=document.querySelector("#legtable tbody");const r=[...t.rows];D[c]=!D[c];r.sort((a,b)=>{{const x=a.cells[c].innerText.trim().toLowerCase(),y=b.cells[c].innerText.trim().toLowerCase();return (x<y?-1:x>y?1:0)*(D[c]?1:-1)}});r.forEach(x=>t.appendChild(x))}}</script>'''
with open("/tmp/dupre-canon.html","w") as out:
    out.write(html)
print("wrote /tmp/dupre-canon.html")