Skip to content

Commit 0db5efa

Browse files
committed
Merge pull request #413 from ikirill/unicode-symbol-syntax
More precise syntax table entries.
2 parents c3fc181 + 60517c6 commit 0db5efa

File tree

1 file changed

+220
-46
lines changed

1 file changed

+220
-46
lines changed

haskell-mode.el

Lines changed: 220 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,219 @@ Run M-x describe-variable haskell-mode-hook for a list of such modes."))
238238
["Customize" (customize-group 'haskell)]
239239
))
240240

241+
;; Procedurally generated (see Lexeme.hs in ghc).
242+
;; This is a bit unsightly: it's generated by making a list of all
243+
;; unicode characters whose Unicode general category ghc would
244+
;; recognize as valid symbol (or identifier, below) constituent.
245+
(defvar haskell--char-syntax-symbols
246+
'((161 . 169) 172 (174 . 177) 180 (182 . 184) 191 215 247
247+
(706 . 709) (722 . 735) (741 . 747) 749 (751 . 767) 885
248+
894 (900 . 901) 903 1014 1154 (1370 . 1375) (1417 . 1418)
249+
(1421 . 1423) 1470 1472 1475 1478 (1523 . 1524) (1542 . 1551)
250+
1563 (1566 . 1567) (1642 . 1645) 1748 1758 1769 (1789 . 1790)
251+
(1792 . 1805) (2038 . 2041) (2096 . 2110) 2142 (2404 . 2405)
252+
2416 (2546 . 2547) (2554 . 2555) (2800 . 2801) 2928
253+
(3059 . 3066) 3199 3449 3572 3647 3663 (3674 . 3675)
254+
(3841 . 3863) (3866 . 3871) 3892 3894 3896 3973 (4030 . 4037)
255+
(4039 . 4044) (4046 . 4058) (4170 . 4175) (4254 . 4255)
256+
4347 (4960 . 4968) (5008 . 5017) 5120 (5741 . 5742)
257+
(5867 . 5869) (5941 . 5942) (6100 . 6102) (6104 . 6107)
258+
(6144 . 6154) 6464 (6468 . 6469) (6622 . 6623) (6624 . 6655)
259+
(6686 . 6687) (6816 . 6822) (6824 . 6829) (7002 . 7018)
260+
(7028 . 7036) (7164 . 7167) (7227 . 7231) (7294 . 7295)
261+
(7360 . 7367) 7379 8125 (8127 . 8129) (8141 . 8143)
262+
(8157 . 8159) (8173 . 8175) (8189 . 8190) (8208 . 8215)
263+
(8224 . 8231) (8240 . 8248) (8251 . 8260) (8263 . 8286)
264+
(8314 . 8316) (8330 . 8332) (8352 . 8381) (8448 . 8449)
265+
(8451 . 8454) (8456 . 8457) 8468 (8470 . 8472) (8478 . 8483)
266+
8485 8487 8489 8494 (8506 . 8507) (8512 . 8516) (8522 . 8525)
267+
8527 (8592 . 8703) (8704 . 8959) (8960 . 8967) (8972 . 9000)
268+
(9003 . 9210) (9216 . 9254) (9280 . 9290) (9372 . 9449)
269+
(9472 . 9599) (9600 . 9631) (9632 . 9727) (9728 . 9983)
270+
(9984 . 10087) (10132 . 10175) (10176 . 10180) (10183 . 10213)
271+
(10224 . 10239) (10240 . 10495) (10496 . 10623) (10624 . 10626)
272+
(10649 . 10711) (10716 . 10747) (10750 . 10751) (10752 . 11007)
273+
(11008 . 11123) (11126 . 11157) (11160 . 11193) (11197 . 11208)
274+
(11210 . 11217) (11493 . 11498) (11513 . 11516) (11518 . 11519)
275+
11632 (11776 . 11777) (11782 . 11784) 11787 (11790 . 11803)
276+
(11806 . 11807) (11818 . 11822) (11824 . 11841) (11904 . 11929)
277+
(11931 . 12019) (12032 . 12245) (12272 . 12283) (12289 . 12292)
278+
(12306 . 12307) 12316 12320 12336 (12342 . 12343)
279+
(12349 . 12351) (12443 . 12444) 12448 12539 (12688 . 12689)
280+
(12694 . 12703) (12736 . 12771) (12800 . 12830) (12842 . 12871)
281+
12880 (12896 . 12927) (12938 . 12976) (12992 . 13054)
282+
(13056 . 13311) (19904 . 19967) (42128 . 42182) (42238 . 42239)
283+
(42509 . 42511) 42611 42622 (42738 . 42743) (42752 . 42774)
284+
(42784 . 42785) (42889 . 42890) (43048 . 43051) (43062 . 43065)
285+
(43124 . 43127) (43214 . 43215) (43256 . 43258) (43310 . 43311)
286+
43359 (43457 . 43469) (43486 . 43487) (43612 . 43615)
287+
(43639 . 43641) (43742 . 43743) (43760 . 43761) 43867
288+
44011 64297 (64434 . 64449) (65020 . 65021) (65040 . 65046)
289+
65049 (65072 . 65076) (65093 . 65094) (65097 . 65103)
290+
(65104 . 65106) (65108 . 65112) (65119 . 65126) (65128 . 65131)
291+
(65281 . 65287) (65290 . 65295) (65306 . 65312) 65340
292+
(65342 . 65344) 65372 65374 65377 (65380 . 65381)
293+
(65504 . 65510) (65512 . 65518) (65532 . 65533) (65792 . 65794)
294+
(65847 . 65855) (65913 . 65929) 65932 (65936 . 65947)
295+
65952 (66000 . 66044) 66463 66512 66927 67671 (67703 . 67704)
296+
67871 67903 (68176 . 68184) 68223 68296 (68336 . 68342)
297+
(68409 . 68415) (68505 . 68508) (69703 . 69709) (69819 . 69820)
298+
(69822 . 69825) (69952 . 69955) (70004 . 70005) (70085 . 70088)
299+
70093 (70200 . 70205) 70854 (71105 . 71113) (71233 . 71235)
300+
(74864 . 74868) (92782 . 92783) 92917 (92983 . 92991)
301+
(92996 . 92997) 113820 113823 (118784 . 119029) (119040 . 119078)
302+
(119081 . 119140) (119146 . 119148) (119171 . 119172)
303+
(119180 . 119209) (119214 . 119261) (119296 . 119361)
304+
119365 (119552 . 119638) 120513 120539 120571 120597
305+
120629 120655 120687 120713 120745 120771 (126704 . 126705)
306+
(126976 . 127019) (127024 . 127123) (127136 . 127150)
307+
(127153 . 127167) (127169 . 127183) (127185 . 127221)
308+
(127248 . 127278) (127280 . 127339) (127344 . 127386)
309+
(127462 . 127487) (127488 . 127490) (127504 . 127546)
310+
(127552 . 127560) (127568 . 127569) (127744 . 127788)
311+
(127792 . 127869) (127872 . 127950) (127956 . 127991)
312+
(128000 . 128254) (128256 . 128330) (128336 . 128377)
313+
(128379 . 128419) (128421 . 128511) (128512 . 128578)
314+
(128581 . 128591) (128592 . 128639) (128640 . 128719)
315+
(128736 . 128748) (128752 . 128755) (128768 . 128883)
316+
(128896 . 128980) (129024 . 129035) (129040 . 129095)
317+
(129104 . 129113) (129120 . 129159) (129168 . 129197)))
318+
319+
(defvar haskell--char-syntax-identifiers
320+
'(170
321+
(178 . 179) 181 (185 . 186) (188 . 190) (192 . 214) (216 . 246)
322+
(248 . 255) (256 . 383) (384 . 591) (592 . 687) (880 . 883)
323+
(886 . 887) (891 . 893) 895 902 (904 . 906) 908 (910 . 929) (931 . 1013)
324+
(1015 . 1023) (1024 . 1153) (1162 . 1279) (1280 . 1327)
325+
(1329 . 1366) (1377 . 1415) (1488 . 1514) (1520 . 1522) (1568 . 1599)
326+
(1601 . 1610) (1632 . 1641) (1646 . 1647) (1649 . 1747) 1749
327+
(1774 . 1788) 1791 1808 (1810 . 1839) (1869 . 1871) (1872 . 1919)
328+
(1920 . 1957) 1969 (1984 . 2026) (2048 . 2069) (2112 . 2136) (2208 . 2226)
329+
(2308 . 2361) 2365 2384 (2392 . 2401) (2406 . 2415) (2418 . 2431)
330+
2432 (2437 . 2444) (2447 . 2448) (2451 . 2472) (2474 . 2480)
331+
2482 (2486 . 2489) 2493 2510 (2524 . 2525) (2527 . 2529) (2534 . 2545)
332+
(2548 . 2553) (2565 . 2570) (2575 . 2576) (2579 . 2600)
333+
(2602 . 2608) (2610 . 2611) (2613 . 2614) (2616 . 2617) (2649 . 2652)
334+
2654 (2662 . 2671) (2674 . 2676) (2693 . 2701) (2703 . 2705)
335+
(2707 . 2728) (2730 . 2736) (2738 . 2739) (2741 . 2745) 2749 2768
336+
(2784 . 2785) (2790 . 2799) (2821 . 2828) (2831 . 2832) (2835 . 2856)
337+
(2858 . 2864) (2866 . 2867) (2869 . 2873) 2877 (2908 . 2909)
338+
(2911 . 2913) (2918 . 2927) (2929 . 2935) 2947 (2949 . 2954) (2958 . 2960)
339+
(2962 . 2965) (2969 . 2970) 2972 (2974 . 2975) (2979 . 2980)
340+
(2984 . 2986) (2990 . 3001) 3024 (3046 . 3058) (3077 . 3084) (3086 . 3088)
341+
(3090 . 3112) (3114 . 3129) 3133 (3160 . 3161) (3168 . 3169)
342+
(3174 . 3183) (3192 . 3198) (3205 . 3212) (3214 . 3216) (3218 . 3240)
343+
(3242 . 3251) (3253 . 3257) 3261 3294 (3296 . 3297) (3302 . 3311)
344+
(3313 . 3314) (3333 . 3340) (3342 . 3344) (3346 . 3386) 3389
345+
3406 (3424 . 3425) (3430 . 3445) (3450 . 3455) (3461 . 3478) (3482 . 3505)
346+
(3507 . 3515) 3517 (3520 . 3526) (3558 . 3567) (3585 . 3632)
347+
(3634 . 3635) (3648 . 3653) (3664 . 3673) (3713 . 3714) 3716 (3719 . 3720)
348+
3722 3725 (3732 . 3735) (3737 . 3743) (3745 . 3747) 3749
349+
3751 (3754 . 3755) (3757 . 3760) (3762 . 3763) 3773 (3776 . 3780)
350+
(3792 . 3801) (3804 . 3807) 3840 (3872 . 3891) (3904 . 3911) (3913 . 3948)
351+
(3976 . 3980) (4096 . 4138) (4159 . 4169) (4176 . 4181)
352+
(4186 . 4189) 4193 (4197 . 4198) (4206 . 4208) (4213 . 4225) 4238
353+
(4240 . 4249) (4256 . 4293) 4295 4301 (4304 . 4346) (4349 . 4351)
354+
(4352 . 4607) (4608 . 4680) (4682 . 4685) (4688 . 4694) 4696 (4698 . 4701)
355+
(4704 . 4744) (4746 . 4749) (4752 . 4784) (4786 . 4789)
356+
(4792 . 4798) 4800 (4802 . 4805) (4808 . 4822) (4824 . 4880) (4882 . 4885)
357+
(4888 . 4954) (4969 . 4988) (4992 . 5007) (5024 . 5108)
358+
(5121 . 5740) (5743 . 5759) (5761 . 5786) (5792 . 5866) (5873 . 5880)
359+
(5888 . 5900) (5902 . 5905) (5920 . 5937) (5952 . 5969)
360+
(5984 . 5996) (5998 . 6000) (6016 . 6067) 6108 (6112 . 6121) (6128 . 6137)
361+
(6160 . 6169) (6176 . 6210) (6212 . 6263) (6272 . 6312) 6314
362+
(6320 . 6389) (6400 . 6430) (6470 . 6479) (6480 . 6509) (6512 . 6516)
363+
(6528 . 6571) (6593 . 6599) (6608 . 6618) (6656 . 6678)
364+
(6688 . 6740) (6784 . 6793) (6800 . 6809) (6917 . 6963) (6981 . 6987)
365+
(6992 . 7001) (7043 . 7072) (7086 . 7103) (7104 . 7141)
366+
(7168 . 7203) (7232 . 7241) (7245 . 7247) (7248 . 7287) (7401 . 7404)
367+
(7406 . 7409) (7413 . 7414) (7424 . 7467) (7531 . 7543)
368+
(7545 . 7551) (7552 . 7578) (7680 . 7935) (7936 . 7957) (7960 . 7965)
369+
(7968 . 8005) (8008 . 8013) (8016 . 8023) 8025 8027 8029
370+
(8031 . 8061) (8064 . 8116) (8118 . 8124) 8126 (8130 . 8132) (8134 . 8140)
371+
(8144 . 8147) (8150 . 8155) (8160 . 8172) (8178 . 8180)
372+
(8182 . 8188) 8304 (8308 . 8313) (8320 . 8329) 8450 8455 (8458 . 8467)
373+
8469 (8473 . 8477) 8484 8486 8488 (8490 . 8493) (8495 . 8505)
374+
(8508 . 8511) (8517 . 8521) 8526 (8528 . 8543) (8579 . 8580)
375+
8585 (9312 . 9371) (9450 . 9471) (10102 . 10131) (11264 . 11310)
376+
(11312 . 11358) (11360 . 11387) (11390 . 11391) (11392 . 11492)
377+
(11499 . 11502) (11506 . 11507) 11517 (11520 . 11557) 11559 11565
378+
(11568 . 11623) (11648 . 11670) (11680 . 11686) (11688 . 11694)
379+
(11696 . 11702) (11704 . 11710) (11712 . 11718) (11720 . 11726)
380+
(11728 . 11734) (11736 . 11742) 12294 12348 (12353 . 12438) 12447
381+
(12449 . 12538) 12543 (12549 . 12589) (12593 . 12686) (12690 . 12693)
382+
(12704 . 12730) (12784 . 12799) (12832 . 12841) (12872 . 12879)
383+
(12881 . 12895) (12928 . 12937) (12977 . 12991) (13312 . 19893)
384+
(19968 . 40908) (40960 . 40980) (40982 . 42124) (42192 . 42231)
385+
(42240 . 42507) (42512 . 42539) (42560 . 42606) (42624 . 42651)
386+
(42656 . 42725) (42786 . 42863) (42865 . 42887) (42891 . 42894)
387+
(42896 . 42925) (42928 . 42929) 42999 (43002 . 43007)
388+
(43008 . 43009) (43011 . 43013) (43015 . 43018) (43020 . 43042)
389+
(43056 . 43061) (43072 . 43123) (43138 . 43187) (43216 . 43225)
390+
(43250 . 43255) 43259 (43264 . 43301) (43312 . 43334) (43360 . 43388)
391+
(43396 . 43442) (43472 . 43481) (43488 . 43492) (43495 . 43518)
392+
(43520 . 43560) (43584 . 43586) (43588 . 43595) (43600 . 43609)
393+
(43616 . 43631) (43633 . 43638) 43642 (43646 . 43647)
394+
(43648 . 43695) 43697 (43701 . 43702) (43705 . 43709) 43712 43714
395+
(43739 . 43740) (43744 . 43754) 43762 (43777 . 43782) (43785 . 43790)
396+
(43793 . 43798) (43808 . 43814) (43816 . 43822) (43824 . 43866)
397+
(43876 . 43877) (43968 . 44002) (44016 . 44025) (44032 . 55203)
398+
(55216 . 55238) (55243 . 55291) (63744 . 64109) (64112 . 64217)
399+
(64256 . 64262) (64275 . 64279) 64285 (64287 . 64296)
400+
(64298 . 64310) (64312 . 64316) 64318 (64320 . 64321) (64323 . 64324)
401+
(64326 . 64335) (64336 . 64433) (64467 . 64829) (64848 . 64911)
402+
(64914 . 64967) (65008 . 65019) (65136 . 65140) (65142 . 65276)
403+
(65296 . 65305) (65313 . 65338) (65345 . 65370) (65382 . 65391)
404+
(65393 . 65437) (65440 . 65470) (65474 . 65479) (65482 . 65487)
405+
(65490 . 65495) (65498 . 65500) (65536 . 65547) (65549 . 65574)
406+
(65576 . 65594) (65596 . 65597) (65599 . 65613) (65616 . 65629)
407+
(65664 . 65786) (65799 . 65843) (65909 . 65912) (65930 . 65931)
408+
(66176 . 66204) (66208 . 66256) (66273 . 66299) (66304 . 66339)
409+
(66352 . 66368) (66370 . 66377) (66384 . 66421) (66432 . 66461)
410+
(66464 . 66499) (66504 . 66511) (66560 . 66639) (66640 . 66687)
411+
(66688 . 66717) (66720 . 66729) (66816 . 66855) (66864 . 66915)
412+
(67072 . 67382) (67392 . 67413) (67424 . 67431) (67584 . 67589)
413+
67592 (67594 . 67637) (67639 . 67640) 67644 67647 (67648 . 67669)
414+
(67672 . 67679) (67680 . 67702) (67705 . 67711) (67712 . 67742)
415+
(67751 . 67759) (67840 . 67867) (67872 . 67897) (67968 . 67999)
416+
(68000 . 68023) (68030 . 68031) 68096 (68112 . 68115)
417+
(68117 . 68119) (68121 . 68147) (68160 . 68167) (68192 . 68222)
418+
(68224 . 68255) (68288 . 68295) (68297 . 68324) (68331 . 68335)
419+
(68352 . 68405) (68416 . 68437) (68440 . 68447) (68448 . 68466)
420+
(68472 . 68479) (68480 . 68497) (68521 . 68527) (68608 . 68680)
421+
(69216 . 69246) (69635 . 69687) (69714 . 69743) (69763 . 69807)
422+
(69840 . 69864) (69872 . 69881) (69891 . 69926) (69942 . 69951)
423+
(69968 . 70002) 70006 (70019 . 70066) (70081 . 70084) (70096 . 70106)
424+
(70113 . 70132) (70144 . 70161) (70163 . 70187) (70320 . 70366)
425+
(70384 . 70393) (70405 . 70412) (70415 . 70416) (70419 . 70440)
426+
(70442 . 70448) (70450 . 70451) (70453 . 70457) 70461
427+
(70493 . 70497) (70784 . 70831) (70852 . 70853) 70855 (70864 . 70873)
428+
(71040 . 71086) (71168 . 71215) 71236 (71248 . 71257)
429+
(71296 . 71338) (71360 . 71369) (71840 . 71922) 71935 (72384 . 72440)
430+
(73728 . 74648) (77824 . 78894) (92160 . 92728) (92736 . 92766)
431+
(92768 . 92777) (92880 . 92909) (92928 . 92975) (93008 . 93017)
432+
(93019 . 93025) (93027 . 93047) (93053 . 93071) (93952 . 94020)
433+
94032 (110592 . 110593) (113664 . 113770) (113776 . 113788)
434+
(113792 . 113800) (113808 . 113817) (119648 . 119665) (119808 . 119892)
435+
(119894 . 119964) (119966 . 119967) 119970 (119973 . 119974)
436+
(119977 . 119980) (119982 . 119993) 119995 (119997 . 120003)
437+
(120005 . 120069) (120071 . 120074) (120077 . 120084)
438+
(120086 . 120092) (120094 . 120121) (120123 . 120126) (120128 . 120132)
439+
120134 (120138 . 120144) (120146 . 120485) (120488 . 120512)
440+
(120514 . 120538) (120540 . 120570) (120572 . 120596)
441+
(120598 . 120628) (120630 . 120654) (120656 . 120686) (120688 . 120712)
442+
(120714 . 120744) (120746 . 120770) (120772 . 120779)
443+
(120782 . 120831) (124928 . 125124) (125127 . 125135) (126464 . 126467)
444+
(126469 . 126495) (126497 . 126498) 126500 126503 (126505 . 126514)
445+
(126516 . 126519) 126521 126523 126530 126535 126537
446+
126539 (126541 . 126543) (126545 . 126546) 126548 126551 126553
447+
126555 126557 126559 (126561 . 126562) 126564 (126567 . 126570)
448+
(126572 . 126578) (126580 . 126583) (126585 . 126588) 126590 (126592 . 126601)
449+
(126603 . 126619) (126625 . 126627) (126629 . 126633)
450+
(126635 . 126651) (127232 . 127244) (131072 . 173782) (173824 . 177972)
451+
(177984 . 178205) (194560 . 195101)))
452+
453+
241454
;; Syntax table.
242455
(defvar haskell-mode-syntax-table
243456
(let ((table (make-syntax-table)))
@@ -291,52 +504,13 @@ Run M-x describe-variable haskell-mode-hook for a list of such modes."))
291504
;; Some of these are actually OK by default.
292505
"!#$%&*+./:<=>?@^|~")
293506

294-
;; Characters in these blocks are non-alphanumeric and can be
295-
;; symbol constituents; haskell uses Unicode character category.
296-
(dolist (block '(("Alchemical Symbols" 128768 128895)
297-
("Ancient Symbols" 65936 65999)
298-
("Arrows" 8592 8703)
299-
("Byzantine Musical Symbols" 118784 119039)
300-
("CJK Symbols and Punctuation" 12288 12351)
301-
("Combining Diacritical Marks for Symbols" 8400 8447)
302-
("Cuneiform Numbers and Punctuation" 74752 74879)
303-
("Currency Symbols" 8352 8399)
304-
("Enclosed Alphanumeric Supplement" 127232 127487)
305-
("Enclosed Alphanumerics" 9312 9471)
306-
("Enclosed CJK Letters and Months" 12800 13055)
307-
("Enclosed Ideographic Supplement" 127488 127743)
308-
("General Punctuation" 8192 8303)
309-
("Khmer Symbols" 6624 6655)
310-
("Mathematical Operators" 8704 8959)
311-
("Miscellaneous Mathematical Symbols-A" 10176 10223)
312-
("Miscellaneous Mathematical Symbols-B" 10624 10751)
313-
("Miscellaneous Symbols" 9728 9983)
314-
("Miscellaneous Symbols and Arrows" 11008 11263)
315-
("Miscellaneous Symbols and Pictographs" 127744 128511)
316-
("Musical Symbols" 119040 119295)
317-
("Rumi Numeral Symbols" 69216 69247)
318-
("Supplemental Arrows-A" 10224 10239)
319-
("Supplemental Arrows-B" 10496 10623)
320-
("Supplemental Arrows-C" 129024 129279)
321-
("Supplemental Mathematical Operators" 10752 11007)
322-
("Supplemental Punctuation" 11776 11903)
323-
("Tai Xuan Jing Symbols" 119552 119647)
324-
("Transport and Map Symbols" 128640 128767)
325-
("Yijing Hexagram Symbols" 19904 19967)))
326-
(modify-syntax-entry (cons (nth 1 block) (nth 2 block)) "_" table))
327-
328-
(unless (featurep 'mule)
329-
;; Non-ASCII syntax should be OK, at least in Emacs.
330-
(mapc (lambda (x)
331-
(modify-syntax-entry x "_" table))
332-
(concat "¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿"
333-
"×÷"))
334-
(mapc (lambda (x)
335-
(modify-syntax-entry x "w" table))
336-
(concat "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ"
337-
"ØÙÚÛÜÝÞß"
338-
"àáâãäåæçèéêëìíîïðñòóôõö"
339-
"øùúûüýþÿ")))
507+
;; Precise syntax table entries for symbol characters
508+
(dolist (charcodes haskell--char-syntax-symbols)
509+
(modify-syntax-entry charcodes "_" table))
510+
;; ... and for identifier characters
511+
(dolist (charcodes haskell--char-syntax-identifiers)
512+
(modify-syntax-entry charcodes "w" table))
513+
340514
table)
341515
"Syntax table used in Haskell mode.")
342516

0 commit comments

Comments
 (0)