commit a8f93f2df2df70e9d19a962b40aeb481205989d7 Author: Thibaut Cuvelier <tcuvel...@lyx.org> Date: Wed Oct 30 04:26:08 2024 +0100
Generate a list of Unicode alphanum characters and their font variants for use in MathML Core. --- .../tools/generate_unicode_alphanum_variants.py | 199 +++++++++++++++++++++ lib/unicode_alphanum_variants | 145 +++++++++++++++ 2 files changed, 344 insertions(+) diff --git a/development/tools/generate_unicode_alphanum_variants.py b/development/tools/generate_unicode_alphanum_variants.py new file mode 100644 index 0000000000..7019d3b7aa --- /dev/null +++ b/development/tools/generate_unicode_alphanum_variants.py @@ -0,0 +1,199 @@ +"""Script used to generate unicode_alphanum_variants.""" + +import unicodedata +from typing import List + + +# If True, prints the actual characters to the terminal (which thus requires +# support for Unicode and an appropriate font). Otherwise, prints the value +# that LyX can consume (hexadecimal codepoints). +DEBUG = False + + +def get_lower_latin_letter_variant_names(character_name: str) -> List[str]: + return [f'mathematical bold small {character_name}', + f'mathematical italic small {character_name}', + f'mathematical bold italic small {character_name}', + f'mathematical script small {character_name}', + f'mathematical bold script small {character_name}', + f'mathematical fraktur small {character_name}', + f'mathematical bold fraktur small {character_name}', + f'mathematical double-struck small {character_name}', + f'mathematical sans-serif small {character_name}', + f'mathematical sans-serif bold small {character_name}', + f'mathematical sans-serif italic small {character_name}', + f'mathematical sans-serif bold italic small {character_name}', + f'mathematical monospace small {character_name}'] + + +def get_upper_latin_letter_variant_names(character_name: str) -> List[str]: + return [n.replace('small', 'capital') for n in get_lower_latin_letter_variant_names(character_name)] + + +def get_lower_greek_letter_variant_names(character_name: str) -> List[str]: + return [f'mathematical bold small {character_name}', + f'mathematical italic small {character_name}', + f'mathematical bold italic small {character_name}', + '', # No script. + '', # No bold script. + '', # No fraktur. + '', # No bold fraktur. + '', # No double-struck. + '', # No sans-serif. + f'mathematical sans-serif bold small {character_name}', + '', # No sans-serif italic. + f'mathematical sans-serif bold italic small {character_name}', + '' # No monospace. + ] + + +def get_upper_greek_letter_variant_names(character_name: str) -> List[str]: + return [n.replace('small', 'capital') for n in get_lower_greek_letter_variant_names(character_name)] + + +def get_number_variant_names(character_name: str) -> List[str]: + return [f'mathematical bold digit {character_name}', + '', # No italic. + '', # No bold italic. + '', # No script. + '', # No bold script. + '', # No fraktur. + '', # No bold fraktur. + f'mathematical double-struck digit {character_name}', + '', # No sans-serif. + f'mathematical sans-serif digit {character_name}', + f'mathematical sans-serif bold digit {character_name}', + '', # No sans-serif italic. + f'mathematical monospace digit {character_name}'] + + +# This table comes from https://en.wikipedia.org/wiki/Letterlike_Symbols. +EXCEPTIONS_MAPPING = { + # get_lower_latin_letter_variant_names + 'mathematical script small e': '212F', + 'mathematical script small g': '210A', + 'mathematical italic small h': '210E', + 'mathematical script small o': '2134', + # get_upper_latin_letter_variant_names + 'mathematical script capital b': '212C', + 'mathematical fraktur capital c': '212D', + 'mathematical double-struck capital c': '2102', + 'mathematical script capital e': '2130', + 'mathematical script capital f': '2131', + 'mathematical script capital h': '210B', + 'mathematical fraktur capital h': '210C', + 'mathematical double-struck capital h': '210D', + 'mathematical script capital i': '2110', + 'mathematical fraktur capital i': '2111', + 'mathematical script capital l': '2112', + 'mathematical script capital m': '2133', + 'mathematical double-struck capital n': '2115', + 'mathematical double-struck capital p': '2119', + 'mathematical double-struck capital q': '211A', + 'mathematical script capital r': '211B', + 'mathematical fraktur capital r': '211C', + 'mathematical double-struck capital r': '211D', + 'mathematical fraktur capital z': '2128', + 'mathematical double-struck capital z': '2124' + # No other exception. +} + + +def lookup_with_exceptions(char_name: str) -> str: + # Maybe the character isn't supposed to exist. + if not char_name: + return '' + + # Some characters don't exist in the usual, recent mathematical block, but + # existed in Unicode 1.x in the Letterlike Symbols block. + # Usual mapping: drop 'mathematical', replace 'fraktur' by 'black-letter'. + try: + return unicodedata.lookup(char_name) + except KeyError as e: + char_name = char_name.lower() + if char_name in EXCEPTIONS_MAPPING: + return chr(int(EXCEPTIONS_MAPPING[char_name], 16)) + + if DEBUG: + print(char_name) + else: + raise e + + +def format_variants(variants: List[str]) -> str: + return ' '.join([hex(ord(v)) if v != '' else '""' for v in variants]) + + +print("# Lower-case Latin letters") +for letter_index in range(26): + letter = chr(ord('a') + letter_index) # 'a' to 'z' + variant_names = get_lower_latin_letter_variant_names(letter) + variants = [lookup_with_exceptions(char_name) for char_name in variant_names] + + if DEBUG: + print(variants) + else: + print(f'{letter} {format_variants(variants)}') + +print("# Upper-case Latin letters") +for letter_index in range(26): + letter = chr(ord('a') + letter_index) # 'a' to 'z' + variant_names = get_upper_latin_letter_variant_names(letter) + variants = [lookup_with_exceptions(char_name) for char_name in variant_names] + + if DEBUG: + print(variants) + else: + print(f'{letter} {format_variants(variants)}') + +# The Unicode Greek alphabet has 25 lower-case letters due to two sigmas +# (middle or final). +print("# Lower-case Greek letters") +for letter_index in range(25): + # 'alpha' to 'omega', the actual character. + letter = chr(945 + letter_index) + # 'alpha' to 'omega' (including 'sigma' and 'final sigma'). + letter_name = unicodedata.name(letter).lower().replace('greek small letter', '').strip() + variant_names = get_lower_greek_letter_variant_names(letter_name) + variants = [lookup_with_exceptions(char_name) for char_name in variant_names] + + if DEBUG: + print(variants) + else: + print(f'{hex(ord(letter))} {format_variants(variants)}') + +print("# Upper-case Greek letters") +for letter_index in range(25): + # For upper-case Greek letters, we need to filter out 'final sigma'. + # It's not sufficient to iterate over the upper-case Greek letters + # (with ALPHA being 913): there is a gap between RHO and SIGMA for, well, + # FINAL SIGMA (which, for obvious reasons, does not exist). + + # 'alpha' to 'omega', the actual character. + letter = chr(945 + letter_index) + # 'alpha' to 'omega' (still a 'final sigma'). + letter_name = unicodedata.name(letter).lower().replace('greek small letter', '').strip() + # 'alpha' to 'omega' (without 'final sigma'). + if letter_name == 'final sigma': + continue + variant_names = get_upper_greek_letter_variant_names(letter_name) + variants = [lookup_with_exceptions(char_name) for char_name in variant_names] + + if DEBUG: + print(variants) + else: + print(f'{hex(ord(letter))} {format_variants(variants)}') + +print("# Numbers") +for number_index in range(10): + # '0' to '9', the actual character. + number = chr(ord('0') + number_index) + # 'zero' to 'nine'. + number_name = unicodedata.name(number).lower().replace('digit', '').strip() + variant_names = get_number_variant_names(number_name) + variants = [lookup_with_exceptions(char_name) for char_name in variant_names] + + if DEBUG: + print(variants) + else: + print(f'{number} {format_variants(variants)}') diff --git a/lib/unicode_alphanum_variants b/lib/unicode_alphanum_variants new file mode 100644 index 0000000000..1ad7997cea --- /dev/null +++ b/lib/unicode_alphanum_variants @@ -0,0 +1,145 @@ +# file unicode_letter_variants +# This file is part of LyX, the document processor. +# Licence details can be found in the file COPYING. + +# Full author contact details are available in file CREDITS. + +# This file is a database of Unicode variants for Unicode letters and digits. +# They are used to map a letter to its variants in various fonts. +# Characters are given by their UCS4 codepoint instead of a character (unless +# the character is ASCII). +# Empty mappings (if a character does not exist in a given font) are given by +# empty quotation marks: "". + +# Syntax: each line corresponds to one character. Columns: +# - Base character. +# - Bold. +# - Italic. +# - Bold italic. +# - Script. +# - Bold script. +# - Fraktur. +# - Bold fraktur. +# - Double-struck. +# - Sans-serif. +# - Bold sans-serif. +# - Italic sans-serif. +# - Bold italic sans-serif. +# - Monospace. + +# Lower-case Latin letters +a 0x1d41a 0x1d44e 0x1d482 0x1d4b6 0x1d4ea 0x1d51e 0x1d586 0x1d552 0x1d5ba 0x1d5ee 0x1d622 0x1d656 0x1d68a +b 0x1d41b 0x1d44f 0x1d483 0x1d4b7 0x1d4eb 0x1d51f 0x1d587 0x1d553 0x1d5bb 0x1d5ef 0x1d623 0x1d657 0x1d68b +c 0x1d41c 0x1d450 0x1d484 0x1d4b8 0x1d4ec 0x1d520 0x1d588 0x1d554 0x1d5bc 0x1d5f0 0x1d624 0x1d658 0x1d68c +d 0x1d41d 0x1d451 0x1d485 0x1d4b9 0x1d4ed 0x1d521 0x1d589 0x1d555 0x1d5bd 0x1d5f1 0x1d625 0x1d659 0x1d68d +e 0x1d41e 0x1d452 0x1d486 0x212f 0x1d4ee 0x1d522 0x1d58a 0x1d556 0x1d5be 0x1d5f2 0x1d626 0x1d65a 0x1d68e +f 0x1d41f 0x1d453 0x1d487 0x1d4bb 0x1d4ef 0x1d523 0x1d58b 0x1d557 0x1d5bf 0x1d5f3 0x1d627 0x1d65b 0x1d68f +g 0x1d420 0x1d454 0x1d488 0x210a 0x1d4f0 0x1d524 0x1d58c 0x1d558 0x1d5c0 0x1d5f4 0x1d628 0x1d65c 0x1d690 +h 0x1d421 0x210e 0x1d489 0x1d4bd 0x1d4f1 0x1d525 0x1d58d 0x1d559 0x1d5c1 0x1d5f5 0x1d629 0x1d65d 0x1d691 +i 0x1d422 0x1d456 0x1d48a 0x1d4be 0x1d4f2 0x1d526 0x1d58e 0x1d55a 0x1d5c2 0x1d5f6 0x1d62a 0x1d65e 0x1d692 +j 0x1d423 0x1d457 0x1d48b 0x1d4bf 0x1d4f3 0x1d527 0x1d58f 0x1d55b 0x1d5c3 0x1d5f7 0x1d62b 0x1d65f 0x1d693 +k 0x1d424 0x1d458 0x1d48c 0x1d4c0 0x1d4f4 0x1d528 0x1d590 0x1d55c 0x1d5c4 0x1d5f8 0x1d62c 0x1d660 0x1d694 +l 0x1d425 0x1d459 0x1d48d 0x1d4c1 0x1d4f5 0x1d529 0x1d591 0x1d55d 0x1d5c5 0x1d5f9 0x1d62d 0x1d661 0x1d695 +m 0x1d426 0x1d45a 0x1d48e 0x1d4c2 0x1d4f6 0x1d52a 0x1d592 0x1d55e 0x1d5c6 0x1d5fa 0x1d62e 0x1d662 0x1d696 +n 0x1d427 0x1d45b 0x1d48f 0x1d4c3 0x1d4f7 0x1d52b 0x1d593 0x1d55f 0x1d5c7 0x1d5fb 0x1d62f 0x1d663 0x1d697 +o 0x1d428 0x1d45c 0x1d490 0x2134 0x1d4f8 0x1d52c 0x1d594 0x1d560 0x1d5c8 0x1d5fc 0x1d630 0x1d664 0x1d698 +p 0x1d429 0x1d45d 0x1d491 0x1d4c5 0x1d4f9 0x1d52d 0x1d595 0x1d561 0x1d5c9 0x1d5fd 0x1d631 0x1d665 0x1d699 +q 0x1d42a 0x1d45e 0x1d492 0x1d4c6 0x1d4fa 0x1d52e 0x1d596 0x1d562 0x1d5ca 0x1d5fe 0x1d632 0x1d666 0x1d69a +r 0x1d42b 0x1d45f 0x1d493 0x1d4c7 0x1d4fb 0x1d52f 0x1d597 0x1d563 0x1d5cb 0x1d5ff 0x1d633 0x1d667 0x1d69b +s 0x1d42c 0x1d460 0x1d494 0x1d4c8 0x1d4fc 0x1d530 0x1d598 0x1d564 0x1d5cc 0x1d600 0x1d634 0x1d668 0x1d69c +t 0x1d42d 0x1d461 0x1d495 0x1d4c9 0x1d4fd 0x1d531 0x1d599 0x1d565 0x1d5cd 0x1d601 0x1d635 0x1d669 0x1d69d +u 0x1d42e 0x1d462 0x1d496 0x1d4ca 0x1d4fe 0x1d532 0x1d59a 0x1d566 0x1d5ce 0x1d602 0x1d636 0x1d66a 0x1d69e +v 0x1d42f 0x1d463 0x1d497 0x1d4cb 0x1d4ff 0x1d533 0x1d59b 0x1d567 0x1d5cf 0x1d603 0x1d637 0x1d66b 0x1d69f +w 0x1d430 0x1d464 0x1d498 0x1d4cc 0x1d500 0x1d534 0x1d59c 0x1d568 0x1d5d0 0x1d604 0x1d638 0x1d66c 0x1d6a0 +x 0x1d431 0x1d465 0x1d499 0x1d4cd 0x1d501 0x1d535 0x1d59d 0x1d569 0x1d5d1 0x1d605 0x1d639 0x1d66d 0x1d6a1 +y 0x1d432 0x1d466 0x1d49a 0x1d4ce 0x1d502 0x1d536 0x1d59e 0x1d56a 0x1d5d2 0x1d606 0x1d63a 0x1d66e 0x1d6a2 +z 0x1d433 0x1d467 0x1d49b 0x1d4cf 0x1d503 0x1d537 0x1d59f 0x1d56b 0x1d5d3 0x1d607 0x1d63b 0x1d66f 0x1d6a3 +# Upper-case Latin letters +a 0x1d400 0x1d434 0x1d468 0x1d49c 0x1d4d0 0x1d504 0x1d56c 0x1d538 0x1d5a0 0x1d5d4 0x1d608 0x1d63c 0x1d670 +b 0x1d401 0x1d435 0x1d469 0x212c 0x1d4d1 0x1d505 0x1d56d 0x1d539 0x1d5a1 0x1d5d5 0x1d609 0x1d63d 0x1d671 +c 0x1d402 0x1d436 0x1d46a 0x1d49e 0x1d4d2 0x212d 0x1d56e 0x2102 0x1d5a2 0x1d5d6 0x1d60a 0x1d63e 0x1d672 +d 0x1d403 0x1d437 0x1d46b 0x1d49f 0x1d4d3 0x1d507 0x1d56f 0x1d53b 0x1d5a3 0x1d5d7 0x1d60b 0x1d63f 0x1d673 +e 0x1d404 0x1d438 0x1d46c 0x2130 0x1d4d4 0x1d508 0x1d570 0x1d53c 0x1d5a4 0x1d5d8 0x1d60c 0x1d640 0x1d674 +f 0x1d405 0x1d439 0x1d46d 0x2131 0x1d4d5 0x1d509 0x1d571 0x1d53d 0x1d5a5 0x1d5d9 0x1d60d 0x1d641 0x1d675 +g 0x1d406 0x1d43a 0x1d46e 0x1d4a2 0x1d4d6 0x1d50a 0x1d572 0x1d53e 0x1d5a6 0x1d5da 0x1d60e 0x1d642 0x1d676 +h 0x1d407 0x1d43b 0x1d46f 0x210b 0x1d4d7 0x210c 0x1d573 0x210d 0x1d5a7 0x1d5db 0x1d60f 0x1d643 0x1d677 +i 0x1d408 0x1d43c 0x1d470 0x2110 0x1d4d8 0x2111 0x1d574 0x1d540 0x1d5a8 0x1d5dc 0x1d610 0x1d644 0x1d678 +j 0x1d409 0x1d43d 0x1d471 0x1d4a5 0x1d4d9 0x1d50d 0x1d575 0x1d541 0x1d5a9 0x1d5dd 0x1d611 0x1d645 0x1d679 +k 0x1d40a 0x1d43e 0x1d472 0x1d4a6 0x1d4da 0x1d50e 0x1d576 0x1d542 0x1d5aa 0x1d5de 0x1d612 0x1d646 0x1d67a +l 0x1d40b 0x1d43f 0x1d473 0x2112 0x1d4db 0x1d50f 0x1d577 0x1d543 0x1d5ab 0x1d5df 0x1d613 0x1d647 0x1d67b +m 0x1d40c 0x1d440 0x1d474 0x2133 0x1d4dc 0x1d510 0x1d578 0x1d544 0x1d5ac 0x1d5e0 0x1d614 0x1d648 0x1d67c +n 0x1d40d 0x1d441 0x1d475 0x1d4a9 0x1d4dd 0x1d511 0x1d579 0x2115 0x1d5ad 0x1d5e1 0x1d615 0x1d649 0x1d67d +o 0x1d40e 0x1d442 0x1d476 0x1d4aa 0x1d4de 0x1d512 0x1d57a 0x1d546 0x1d5ae 0x1d5e2 0x1d616 0x1d64a 0x1d67e +p 0x1d40f 0x1d443 0x1d477 0x1d4ab 0x1d4df 0x1d513 0x1d57b 0x2119 0x1d5af 0x1d5e3 0x1d617 0x1d64b 0x1d67f +q 0x1d410 0x1d444 0x1d478 0x1d4ac 0x1d4e0 0x1d514 0x1d57c 0x211a 0x1d5b0 0x1d5e4 0x1d618 0x1d64c 0x1d680 +r 0x1d411 0x1d445 0x1d479 0x211b 0x1d4e1 0x211c 0x1d57d 0x211d 0x1d5b1 0x1d5e5 0x1d619 0x1d64d 0x1d681 +s 0x1d412 0x1d446 0x1d47a 0x1d4ae 0x1d4e2 0x1d516 0x1d57e 0x1d54a 0x1d5b2 0x1d5e6 0x1d61a 0x1d64e 0x1d682 +t 0x1d413 0x1d447 0x1d47b 0x1d4af 0x1d4e3 0x1d517 0x1d57f 0x1d54b 0x1d5b3 0x1d5e7 0x1d61b 0x1d64f 0x1d683 +u 0x1d414 0x1d448 0x1d47c 0x1d4b0 0x1d4e4 0x1d518 0x1d580 0x1d54c 0x1d5b4 0x1d5e8 0x1d61c 0x1d650 0x1d684 +v 0x1d415 0x1d449 0x1d47d 0x1d4b1 0x1d4e5 0x1d519 0x1d581 0x1d54d 0x1d5b5 0x1d5e9 0x1d61d 0x1d651 0x1d685 +w 0x1d416 0x1d44a 0x1d47e 0x1d4b2 0x1d4e6 0x1d51a 0x1d582 0x1d54e 0x1d5b6 0x1d5ea 0x1d61e 0x1d652 0x1d686 +x 0x1d417 0x1d44b 0x1d47f 0x1d4b3 0x1d4e7 0x1d51b 0x1d583 0x1d54f 0x1d5b7 0x1d5eb 0x1d61f 0x1d653 0x1d687 +y 0x1d418 0x1d44c 0x1d480 0x1d4b4 0x1d4e8 0x1d51c 0x1d584 0x1d550 0x1d5b8 0x1d5ec 0x1d620 0x1d654 0x1d688 +z 0x1d419 0x1d44d 0x1d481 0x1d4b5 0x1d4e9 0x2128 0x1d585 0x2124 0x1d5b9 0x1d5ed 0x1d621 0x1d655 0x1d689 +# Lower-case Greek letters +0x3b1 0x1d6c2 0x1d6fc 0x1d736 "" "" "" "" "" "" 0x1d770 "" 0x1d7aa "" +0x3b2 0x1d6c3 0x1d6fd 0x1d737 "" "" "" "" "" "" 0x1d771 "" 0x1d7ab "" +0x3b3 0x1d6c4 0x1d6fe 0x1d738 "" "" "" "" "" "" 0x1d772 "" 0x1d7ac "" +0x3b4 0x1d6c5 0x1d6ff 0x1d739 "" "" "" "" "" "" 0x1d773 "" 0x1d7ad "" +0x3b5 0x1d6c6 0x1d700 0x1d73a "" "" "" "" "" "" 0x1d774 "" 0x1d7ae "" +0x3b6 0x1d6c7 0x1d701 0x1d73b "" "" "" "" "" "" 0x1d775 "" 0x1d7af "" +0x3b7 0x1d6c8 0x1d702 0x1d73c "" "" "" "" "" "" 0x1d776 "" 0x1d7b0 "" +0x3b8 0x1d6c9 0x1d703 0x1d73d "" "" "" "" "" "" 0x1d777 "" 0x1d7b1 "" +0x3b9 0x1d6ca 0x1d704 0x1d73e "" "" "" "" "" "" 0x1d778 "" 0x1d7b2 "" +0x3ba 0x1d6cb 0x1d705 0x1d73f "" "" "" "" "" "" 0x1d779 "" 0x1d7b3 "" +0x3bb 0x1d6cc 0x1d706 0x1d740 "" "" "" "" "" "" 0x1d77a "" 0x1d7b4 "" +0x3bc 0x1d6cd 0x1d707 0x1d741 "" "" "" "" "" "" 0x1d77b "" 0x1d7b5 "" +0x3bd 0x1d6ce 0x1d708 0x1d742 "" "" "" "" "" "" 0x1d77c "" 0x1d7b6 "" +0x3be 0x1d6cf 0x1d709 0x1d743 "" "" "" "" "" "" 0x1d77d "" 0x1d7b7 "" +0x3bf 0x1d6d0 0x1d70a 0x1d744 "" "" "" "" "" "" 0x1d77e "" 0x1d7b8 "" +0x3c0 0x1d6d1 0x1d70b 0x1d745 "" "" "" "" "" "" 0x1d77f "" 0x1d7b9 "" +0x3c1 0x1d6d2 0x1d70c 0x1d746 "" "" "" "" "" "" 0x1d780 "" 0x1d7ba "" +0x3c2 0x1d6d3 0x1d70d 0x1d747 "" "" "" "" "" "" 0x1d781 "" 0x1d7bb "" +0x3c3 0x1d6d4 0x1d70e 0x1d748 "" "" "" "" "" "" 0x1d782 "" 0x1d7bc "" +0x3c4 0x1d6d5 0x1d70f 0x1d749 "" "" "" "" "" "" 0x1d783 "" 0x1d7bd "" +0x3c5 0x1d6d6 0x1d710 0x1d74a "" "" "" "" "" "" 0x1d784 "" 0x1d7be "" +0x3c6 0x1d6d7 0x1d711 0x1d74b "" "" "" "" "" "" 0x1d785 "" 0x1d7bf "" +0x3c7 0x1d6d8 0x1d712 0x1d74c "" "" "" "" "" "" 0x1d786 "" 0x1d7c0 "" +0x3c8 0x1d6d9 0x1d713 0x1d74d "" "" "" "" "" "" 0x1d787 "" 0x1d7c1 "" +0x3c9 0x1d6da 0x1d714 0x1d74e "" "" "" "" "" "" 0x1d788 "" 0x1d7c2 "" +# Upper-case Greek letters +0x3b1 0x1d6a8 0x1d6e2 0x1d71c "" "" "" "" "" "" 0x1d756 "" 0x1d790 "" +0x3b2 0x1d6a9 0x1d6e3 0x1d71d "" "" "" "" "" "" 0x1d757 "" 0x1d791 "" +0x3b3 0x1d6aa 0x1d6e4 0x1d71e "" "" "" "" "" "" 0x1d758 "" 0x1d792 "" +0x3b4 0x1d6ab 0x1d6e5 0x1d71f "" "" "" "" "" "" 0x1d759 "" 0x1d793 "" +0x3b5 0x1d6ac 0x1d6e6 0x1d720 "" "" "" "" "" "" 0x1d75a "" 0x1d794 "" +0x3b6 0x1d6ad 0x1d6e7 0x1d721 "" "" "" "" "" "" 0x1d75b "" 0x1d795 "" +0x3b7 0x1d6ae 0x1d6e8 0x1d722 "" "" "" "" "" "" 0x1d75c "" 0x1d796 "" +0x3b8 0x1d6af 0x1d6e9 0x1d723 "" "" "" "" "" "" 0x1d75d "" 0x1d797 "" +0x3b9 0x1d6b0 0x1d6ea 0x1d724 "" "" "" "" "" "" 0x1d75e "" 0x1d798 "" +0x3ba 0x1d6b1 0x1d6eb 0x1d725 "" "" "" "" "" "" 0x1d75f "" 0x1d799 "" +0x3bb 0x1d6b2 0x1d6ec 0x1d726 "" "" "" "" "" "" 0x1d760 "" 0x1d79a "" +0x3bc 0x1d6b3 0x1d6ed 0x1d727 "" "" "" "" "" "" 0x1d761 "" 0x1d79b "" +0x3bd 0x1d6b4 0x1d6ee 0x1d728 "" "" "" "" "" "" 0x1d762 "" 0x1d79c "" +0x3be 0x1d6b5 0x1d6ef 0x1d729 "" "" "" "" "" "" 0x1d763 "" 0x1d79d "" +0x3bf 0x1d6b6 0x1d6f0 0x1d72a "" "" "" "" "" "" 0x1d764 "" 0x1d79e "" +0x3c0 0x1d6b7 0x1d6f1 0x1d72b "" "" "" "" "" "" 0x1d765 "" 0x1d79f "" +0x3c1 0x1d6b8 0x1d6f2 0x1d72c "" "" "" "" "" "" 0x1d766 "" 0x1d7a0 "" +0x3c3 0x1d6ba 0x1d6f4 0x1d72e "" "" "" "" "" "" 0x1d768 "" 0x1d7a2 "" +0x3c4 0x1d6bb 0x1d6f5 0x1d72f "" "" "" "" "" "" 0x1d769 "" 0x1d7a3 "" +0x3c5 0x1d6bc 0x1d6f6 0x1d730 "" "" "" "" "" "" 0x1d76a "" 0x1d7a4 "" +0x3c6 0x1d6bd 0x1d6f7 0x1d731 "" "" "" "" "" "" 0x1d76b "" 0x1d7a5 "" +0x3c7 0x1d6be 0x1d6f8 0x1d732 "" "" "" "" "" "" 0x1d76c "" 0x1d7a6 "" +0x3c8 0x1d6bf 0x1d6f9 0x1d733 "" "" "" "" "" "" 0x1d76d "" 0x1d7a7 "" +0x3c9 0x1d6c0 0x1d6fa 0x1d734 "" "" "" "" "" "" 0x1d76e "" 0x1d7a8 "" +# Numbers +0 0x1d7ce "" "" "" "" "" "" 0x1d7d8 "" 0x1d7e2 0x1d7ec "" 0x1d7f6 +1 0x1d7cf "" "" "" "" "" "" 0x1d7d9 "" 0x1d7e3 0x1d7ed "" 0x1d7f7 +2 0x1d7d0 "" "" "" "" "" "" 0x1d7da "" 0x1d7e4 0x1d7ee "" 0x1d7f8 +3 0x1d7d1 "" "" "" "" "" "" 0x1d7db "" 0x1d7e5 0x1d7ef "" 0x1d7f9 +4 0x1d7d2 "" "" "" "" "" "" 0x1d7dc "" 0x1d7e6 0x1d7f0 "" 0x1d7fa +5 0x1d7d3 "" "" "" "" "" "" 0x1d7dd "" 0x1d7e7 0x1d7f1 "" 0x1d7fb +6 0x1d7d4 "" "" "" "" "" "" 0x1d7de "" 0x1d7e8 0x1d7f2 "" 0x1d7fc +7 0x1d7d5 "" "" "" "" "" "" 0x1d7df "" 0x1d7e9 0x1d7f3 "" 0x1d7fd +8 0x1d7d6 "" "" "" "" "" "" 0x1d7e0 "" 0x1d7ea 0x1d7f4 "" 0x1d7fe +9 0x1d7d7 "" "" "" "" "" "" 0x1d7e1 "" 0x1d7eb 0x1d7f5 "" 0x1d7ff \ No newline at end of file -- lyx-cvs mailing list lyx-cvs@lists.lyx.org https://lists.lyx.org/mailman/listinfo/lyx-cvs