413 ) |
413 ) |
414 |
414 |
415 # Perl 6 has a *lot* of possible bracketing characters |
415 # Perl 6 has a *lot* of possible bracketing characters |
416 # this list was lifted from STD.pm6 (https://github.com/perl6/std) |
416 # this list was lifted from STD.pm6 (https://github.com/perl6/std) |
417 PERL6_BRACKETS = { |
417 PERL6_BRACKETS = { |
418 u'\u0028': u'\u0029', u'\u003c': u'\u003e', u'\u005b': u'\u005d', |
418 '\u0028': '\u0029', '\u003c': '\u003e', '\u005b': '\u005d', |
419 u'\u007b': u'\u007d', u'\u00ab': u'\u00bb', u'\u0f3a': u'\u0f3b', |
419 '\u007b': '\u007d', '\u00ab': '\u00bb', '\u0f3a': '\u0f3b', |
420 u'\u0f3c': u'\u0f3d', u'\u169b': u'\u169c', u'\u2018': u'\u2019', |
420 '\u0f3c': '\u0f3d', '\u169b': '\u169c', '\u2018': '\u2019', |
421 u'\u201a': u'\u2019', u'\u201b': u'\u2019', u'\u201c': u'\u201d', |
421 '\u201a': '\u2019', '\u201b': '\u2019', '\u201c': '\u201d', |
422 u'\u201e': u'\u201d', u'\u201f': u'\u201d', u'\u2039': u'\u203a', |
422 '\u201e': '\u201d', '\u201f': '\u201d', '\u2039': '\u203a', |
423 u'\u2045': u'\u2046', u'\u207d': u'\u207e', u'\u208d': u'\u208e', |
423 '\u2045': '\u2046', '\u207d': '\u207e', '\u208d': '\u208e', |
424 u'\u2208': u'\u220b', u'\u2209': u'\u220c', u'\u220a': u'\u220d', |
424 '\u2208': '\u220b', '\u2209': '\u220c', '\u220a': '\u220d', |
425 u'\u2215': u'\u29f5', u'\u223c': u'\u223d', u'\u2243': u'\u22cd', |
425 '\u2215': '\u29f5', '\u223c': '\u223d', '\u2243': '\u22cd', |
426 u'\u2252': u'\u2253', u'\u2254': u'\u2255', u'\u2264': u'\u2265', |
426 '\u2252': '\u2253', '\u2254': '\u2255', '\u2264': '\u2265', |
427 u'\u2266': u'\u2267', u'\u2268': u'\u2269', u'\u226a': u'\u226b', |
427 '\u2266': '\u2267', '\u2268': '\u2269', '\u226a': '\u226b', |
428 u'\u226e': u'\u226f', u'\u2270': u'\u2271', u'\u2272': u'\u2273', |
428 '\u226e': '\u226f', '\u2270': '\u2271', '\u2272': '\u2273', |
429 u'\u2274': u'\u2275', u'\u2276': u'\u2277', u'\u2278': u'\u2279', |
429 '\u2274': '\u2275', '\u2276': '\u2277', '\u2278': '\u2279', |
430 u'\u227a': u'\u227b', u'\u227c': u'\u227d', u'\u227e': u'\u227f', |
430 '\u227a': '\u227b', '\u227c': '\u227d', '\u227e': '\u227f', |
431 u'\u2280': u'\u2281', u'\u2282': u'\u2283', u'\u2284': u'\u2285', |
431 '\u2280': '\u2281', '\u2282': '\u2283', '\u2284': '\u2285', |
432 u'\u2286': u'\u2287', u'\u2288': u'\u2289', u'\u228a': u'\u228b', |
432 '\u2286': '\u2287', '\u2288': '\u2289', '\u228a': '\u228b', |
433 u'\u228f': u'\u2290', u'\u2291': u'\u2292', u'\u2298': u'\u29b8', |
433 '\u228f': '\u2290', '\u2291': '\u2292', '\u2298': '\u29b8', |
434 u'\u22a2': u'\u22a3', u'\u22a6': u'\u2ade', u'\u22a8': u'\u2ae4', |
434 '\u22a2': '\u22a3', '\u22a6': '\u2ade', '\u22a8': '\u2ae4', |
435 u'\u22a9': u'\u2ae3', u'\u22ab': u'\u2ae5', u'\u22b0': u'\u22b1', |
435 '\u22a9': '\u2ae3', '\u22ab': '\u2ae5', '\u22b0': '\u22b1', |
436 u'\u22b2': u'\u22b3', u'\u22b4': u'\u22b5', u'\u22b6': u'\u22b7', |
436 '\u22b2': '\u22b3', '\u22b4': '\u22b5', '\u22b6': '\u22b7', |
437 u'\u22c9': u'\u22ca', u'\u22cb': u'\u22cc', u'\u22d0': u'\u22d1', |
437 '\u22c9': '\u22ca', '\u22cb': '\u22cc', '\u22d0': '\u22d1', |
438 u'\u22d6': u'\u22d7', u'\u22d8': u'\u22d9', u'\u22da': u'\u22db', |
438 '\u22d6': '\u22d7', '\u22d8': '\u22d9', '\u22da': '\u22db', |
439 u'\u22dc': u'\u22dd', u'\u22de': u'\u22df', u'\u22e0': u'\u22e1', |
439 '\u22dc': '\u22dd', '\u22de': '\u22df', '\u22e0': '\u22e1', |
440 u'\u22e2': u'\u22e3', u'\u22e4': u'\u22e5', u'\u22e6': u'\u22e7', |
440 '\u22e2': '\u22e3', '\u22e4': '\u22e5', '\u22e6': '\u22e7', |
441 u'\u22e8': u'\u22e9', u'\u22ea': u'\u22eb', u'\u22ec': u'\u22ed', |
441 '\u22e8': '\u22e9', '\u22ea': '\u22eb', '\u22ec': '\u22ed', |
442 u'\u22f0': u'\u22f1', u'\u22f2': u'\u22fa', u'\u22f3': u'\u22fb', |
442 '\u22f0': '\u22f1', '\u22f2': '\u22fa', '\u22f3': '\u22fb', |
443 u'\u22f4': u'\u22fc', u'\u22f6': u'\u22fd', u'\u22f7': u'\u22fe', |
443 '\u22f4': '\u22fc', '\u22f6': '\u22fd', '\u22f7': '\u22fe', |
444 u'\u2308': u'\u2309', u'\u230a': u'\u230b', u'\u2329': u'\u232a', |
444 '\u2308': '\u2309', '\u230a': '\u230b', '\u2329': '\u232a', |
445 u'\u23b4': u'\u23b5', u'\u2768': u'\u2769', u'\u276a': u'\u276b', |
445 '\u23b4': '\u23b5', '\u2768': '\u2769', '\u276a': '\u276b', |
446 u'\u276c': u'\u276d', u'\u276e': u'\u276f', u'\u2770': u'\u2771', |
446 '\u276c': '\u276d', '\u276e': '\u276f', '\u2770': '\u2771', |
447 u'\u2772': u'\u2773', u'\u2774': u'\u2775', u'\u27c3': u'\u27c4', |
447 '\u2772': '\u2773', '\u2774': '\u2775', '\u27c3': '\u27c4', |
448 u'\u27c5': u'\u27c6', u'\u27d5': u'\u27d6', u'\u27dd': u'\u27de', |
448 '\u27c5': '\u27c6', '\u27d5': '\u27d6', '\u27dd': '\u27de', |
449 u'\u27e2': u'\u27e3', u'\u27e4': u'\u27e5', u'\u27e6': u'\u27e7', |
449 '\u27e2': '\u27e3', '\u27e4': '\u27e5', '\u27e6': '\u27e7', |
450 u'\u27e8': u'\u27e9', u'\u27ea': u'\u27eb', u'\u2983': u'\u2984', |
450 '\u27e8': '\u27e9', '\u27ea': '\u27eb', '\u2983': '\u2984', |
451 u'\u2985': u'\u2986', u'\u2987': u'\u2988', u'\u2989': u'\u298a', |
451 '\u2985': '\u2986', '\u2987': '\u2988', '\u2989': '\u298a', |
452 u'\u298b': u'\u298c', u'\u298d': u'\u298e', u'\u298f': u'\u2990', |
452 '\u298b': '\u298c', '\u298d': '\u298e', '\u298f': '\u2990', |
453 u'\u2991': u'\u2992', u'\u2993': u'\u2994', u'\u2995': u'\u2996', |
453 '\u2991': '\u2992', '\u2993': '\u2994', '\u2995': '\u2996', |
454 u'\u2997': u'\u2998', u'\u29c0': u'\u29c1', u'\u29c4': u'\u29c5', |
454 '\u2997': '\u2998', '\u29c0': '\u29c1', '\u29c4': '\u29c5', |
455 u'\u29cf': u'\u29d0', u'\u29d1': u'\u29d2', u'\u29d4': u'\u29d5', |
455 '\u29cf': '\u29d0', '\u29d1': '\u29d2', '\u29d4': '\u29d5', |
456 u'\u29d8': u'\u29d9', u'\u29da': u'\u29db', u'\u29f8': u'\u29f9', |
456 '\u29d8': '\u29d9', '\u29da': '\u29db', '\u29f8': '\u29f9', |
457 u'\u29fc': u'\u29fd', u'\u2a2b': u'\u2a2c', u'\u2a2d': u'\u2a2e', |
457 '\u29fc': '\u29fd', '\u2a2b': '\u2a2c', '\u2a2d': '\u2a2e', |
458 u'\u2a34': u'\u2a35', u'\u2a3c': u'\u2a3d', u'\u2a64': u'\u2a65', |
458 '\u2a34': '\u2a35', '\u2a3c': '\u2a3d', '\u2a64': '\u2a65', |
459 u'\u2a79': u'\u2a7a', u'\u2a7d': u'\u2a7e', u'\u2a7f': u'\u2a80', |
459 '\u2a79': '\u2a7a', '\u2a7d': '\u2a7e', '\u2a7f': '\u2a80', |
460 u'\u2a81': u'\u2a82', u'\u2a83': u'\u2a84', u'\u2a8b': u'\u2a8c', |
460 '\u2a81': '\u2a82', '\u2a83': '\u2a84', '\u2a8b': '\u2a8c', |
461 u'\u2a91': u'\u2a92', u'\u2a93': u'\u2a94', u'\u2a95': u'\u2a96', |
461 '\u2a91': '\u2a92', '\u2a93': '\u2a94', '\u2a95': '\u2a96', |
462 u'\u2a97': u'\u2a98', u'\u2a99': u'\u2a9a', u'\u2a9b': u'\u2a9c', |
462 '\u2a97': '\u2a98', '\u2a99': '\u2a9a', '\u2a9b': '\u2a9c', |
463 u'\u2aa1': u'\u2aa2', u'\u2aa6': u'\u2aa7', u'\u2aa8': u'\u2aa9', |
463 '\u2aa1': '\u2aa2', '\u2aa6': '\u2aa7', '\u2aa8': '\u2aa9', |
464 u'\u2aaa': u'\u2aab', u'\u2aac': u'\u2aad', u'\u2aaf': u'\u2ab0', |
464 '\u2aaa': '\u2aab', '\u2aac': '\u2aad', '\u2aaf': '\u2ab0', |
465 u'\u2ab3': u'\u2ab4', u'\u2abb': u'\u2abc', u'\u2abd': u'\u2abe', |
465 '\u2ab3': '\u2ab4', '\u2abb': '\u2abc', '\u2abd': '\u2abe', |
466 u'\u2abf': u'\u2ac0', u'\u2ac1': u'\u2ac2', u'\u2ac3': u'\u2ac4', |
466 '\u2abf': '\u2ac0', '\u2ac1': '\u2ac2', '\u2ac3': '\u2ac4', |
467 u'\u2ac5': u'\u2ac6', u'\u2acd': u'\u2ace', u'\u2acf': u'\u2ad0', |
467 '\u2ac5': '\u2ac6', '\u2acd': '\u2ace', '\u2acf': '\u2ad0', |
468 u'\u2ad1': u'\u2ad2', u'\u2ad3': u'\u2ad4', u'\u2ad5': u'\u2ad6', |
468 '\u2ad1': '\u2ad2', '\u2ad3': '\u2ad4', '\u2ad5': '\u2ad6', |
469 u'\u2aec': u'\u2aed', u'\u2af7': u'\u2af8', u'\u2af9': u'\u2afa', |
469 '\u2aec': '\u2aed', '\u2af7': '\u2af8', '\u2af9': '\u2afa', |
470 u'\u2e02': u'\u2e03', u'\u2e04': u'\u2e05', u'\u2e09': u'\u2e0a', |
470 '\u2e02': '\u2e03', '\u2e04': '\u2e05', '\u2e09': '\u2e0a', |
471 u'\u2e0c': u'\u2e0d', u'\u2e1c': u'\u2e1d', u'\u2e20': u'\u2e21', |
471 '\u2e0c': '\u2e0d', '\u2e1c': '\u2e1d', '\u2e20': '\u2e21', |
472 u'\u3008': u'\u3009', u'\u300a': u'\u300b', u'\u300c': u'\u300d', |
472 '\u3008': '\u3009', '\u300a': '\u300b', '\u300c': '\u300d', |
473 u'\u300e': u'\u300f', u'\u3010': u'\u3011', u'\u3014': u'\u3015', |
473 '\u300e': '\u300f', '\u3010': '\u3011', '\u3014': '\u3015', |
474 u'\u3016': u'\u3017', u'\u3018': u'\u3019', u'\u301a': u'\u301b', |
474 '\u3016': '\u3017', '\u3018': '\u3019', '\u301a': '\u301b', |
475 u'\u301d': u'\u301e', u'\ufd3e': u'\ufd3f', u'\ufe17': u'\ufe18', |
475 '\u301d': '\u301e', '\ufd3e': '\ufd3f', '\ufe17': '\ufe18', |
476 u'\ufe35': u'\ufe36', u'\ufe37': u'\ufe38', u'\ufe39': u'\ufe3a', |
476 '\ufe35': '\ufe36', '\ufe37': '\ufe38', '\ufe39': '\ufe3a', |
477 u'\ufe3b': u'\ufe3c', u'\ufe3d': u'\ufe3e', u'\ufe3f': u'\ufe40', |
477 '\ufe3b': '\ufe3c', '\ufe3d': '\ufe3e', '\ufe3f': '\ufe40', |
478 u'\ufe41': u'\ufe42', u'\ufe43': u'\ufe44', u'\ufe47': u'\ufe48', |
478 '\ufe41': '\ufe42', '\ufe43': '\ufe44', '\ufe47': '\ufe48', |
479 u'\ufe59': u'\ufe5a', u'\ufe5b': u'\ufe5c', u'\ufe5d': u'\ufe5e', |
479 '\ufe59': '\ufe5a', '\ufe5b': '\ufe5c', '\ufe5d': '\ufe5e', |
480 u'\uff08': u'\uff09', u'\uff1c': u'\uff1e', u'\uff3b': u'\uff3d', |
480 '\uff08': '\uff09', '\uff1c': '\uff1e', '\uff3b': '\uff3d', |
481 u'\uff5b': u'\uff5d', u'\uff5f': u'\uff60', u'\uff62': u'\uff63', |
481 '\uff5b': '\uff5d', '\uff5f': '\uff60', '\uff62': '\uff63', |
482 } |
482 } |
483 |
483 |
484 def _build_word_match(words, boundary_regex_fragment=None, prefix='', suffix=''): |
484 def _build_word_match(words, boundary_regex_fragment=None, prefix='', suffix=''): |
485 if boundary_regex_fragment is None: |
485 if boundary_regex_fragment is None: |
486 return r'\b(' + prefix + r'|'.join(re.escape(x) for x in words) + \ |
486 return r'\b(' + prefix + r'|'.join(re.escape(x) for x in words) + \ |