comparison tests/automated/regexp-tests.el @ 5648:3f4a234f4672

Support non-ASCII correctly in character classes, test this. src/ChangeLog addition: 2012-04-21 Aidan Kehoe <kehoea@parhasard.net> Support non-ASCII correctly in character classes ([:alnum:] and friends). * regex.c: * regex.c (ISBLANK, ISUNIBYTE): New. Make these and friends independent of the locale, since we want them to be consistent in XEmacs. * regex.c (print_partial_compiled_pattern): Print the flags for charset_mule; don't print non-ASCII as the character values in ranges, this breaks with locales. * regex.c (enum): Define various flags the charset_mule and charset_mule_not opcodes can now take. * regex.c (CHAR_CLASS_MAX_LENGTH): Update this. * regex.c (re_iswctype, re_wctype): New, from GNU. * regex.c (re_wctype_can_match_non_ascii): New; used when deciding on whether to use charset_mule or the ASCII-only regex character set opcode. * regex.c (regex_compile): Error correctly on long, non-existent character class names. Break out the handling of charsets that can match non-ASCII into a separate clause. Use compile_char_class when compiling character classes. * regex.c (compile_char_class): New. Used in regex_compile when compiling character sets that may match non-ASCII. * regex.c (re_compile_fastmap): If there are flags set for charset_mule or charset_mule_not, we can't use the fastmap (since we need to check syntax table values that aren't available there). * regex.c (re_match_2_internal): Check the new flags passed to the charset_mule{,_not} opcode, observe them if appropriate. * regex.h: * regex.h (enum): Expose re_wctype_t here, imported from GNU. tests/ChangeLog addition: 2012-04-21 Aidan Kehoe <kehoea@parhasard.net> * automated/regexp-tests.el: * automated/regexp-tests.el (Assert-char-class): Check that #'string-match errors correctly with an over-long character class name. Add tests for character class functionality that supports non-ASCII characters. These tests expose bugs in GNU Emacs 24.0.94.2, but pass under current XEmacs.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 21 Apr 2012 18:58:28 +0100
parents 1d9f603e9125
children d026b665014f
comparison
equal deleted inserted replaced
5647:1d9f603e9125 5648:3f4a234f4672
596 (Assert (eql (string-match "[\x7f\x80\x9f]" "\x80") 0)) 596 (Assert (eql (string-match "[\x7f\x80\x9f]" "\x80") 0))
597 (Assert (eql (string-match "[\x7e\x80-\x9f]" "\x80") 0)) 597 (Assert (eql (string-match "[\x7e\x80-\x9f]" "\x80") 0))
598 (Assert (eql (string-match "[\x7f\x81-\x9f]" "\x81") 0)) 598 (Assert (eql (string-match "[\x7f\x81-\x9f]" "\x81") 0))
599 599
600 ;; Test character classes 600 ;; Test character classes
601
602 ;; This used not to error:
603 (Check-Error-Message invalid-regexp "Invalid character class name"
604 (string-match "[[:alnum12345:]]" "a"))
605 ;; This alwayed errored, as long as character classes were turned on
606 (Check-Error-Message invalid-regexp "Invalid character class name"
607 (string-match "[[:alnum1234:]]" "a"))
608
601 (macrolet 609 (macrolet
602 ((Assert-char-class (class matching-char non-matching-char) 610 ((Assert-char-class (class matching-char non-matching-char)
603 (if (and (not (featurep 'mule)) 611 (if (and (not (featurep 'mule))
604 (or (eq (car-safe matching-char) 'decode-char) 612 (or (eq (car-safe matching-char) 'decode-char)
605 (eq (car-safe non-matching-char) 'decode-char))) 613 (eq (car-safe non-matching-char) 'decode-char)))
646 (Assert (null (string-match ,(concat "[^" class "]") 654 (Assert (null (string-match ,(concat "[^" class "]")
647 ,(string matching-char)))) 655 ,(string matching-char))))
648 (Assert (null (string-match ,(concat "[^" class 656 (Assert (null (string-match ,(concat "[^" class
649 (string non-matching-char) "]") 657 (string non-matching-char) "]")
650 ,(concat (string matching-char) 658 ,(concat (string matching-char)
651 (string non-matching-char)))))))) 659 (string non-matching-char)))))))
660 (Assert-never-matching (class &rest characters)
661 (cons
662 'progn
663 (mapcan #'(lambda (character)
664 (if (or (not (eq 'decode-char (car-safe character)))
665 (featurep 'mule))
666 `((Assert (null (string-match
667 ,(concat "[" class "]")
668 ,(string (eval character)))))
669 (Assert (eql (string-match
670 ,(concat "[^" class "]")
671 ,(string (eval character)))
672 0)))))
673 characters))))
652 (Assert-char-class "[:alpha:]" ?a ?0) 674 (Assert-char-class "[:alpha:]" ?a ?0)
653 (Assert-char-class "[:alpha:]" ?z ?9) 675 (Assert-char-class "[:alpha:]" ?z ?9)
654 (Assert-char-class "[:alpha:]" ?A ?0) 676 (Assert-char-class "[:alpha:]" ?A ?0)
655 (Assert-char-class "[:alpha:]" ?Z ?9) 677 (Assert-char-class "[:alpha:]" ?Z ?9)
656 (Assert-char-class "[:alpha:]" ?b ?\x00) 678 (Assert-char-class "[:alpha:]" ?b ?\x00)
657 (Assert-char-class "[:alpha:]" ?c ?\x09) 679 (Assert-char-class "[:alpha:]" ?c ?\x09)
658 (Assert-char-class "[:alpha:]" ?d ?\ ) 680 (Assert-char-class "[:alpha:]" ?d ?\ )
659 (Assert-char-class "[:alpha:]" ?e ?\x7f) 681 (Assert-char-class "[:alpha:]" ?e ?\x7f)
682 (Assert-char-class
683 "[:alpha:]"
684 (decode-char 'ucs #x0430) ;; CYRILLIC SMALL LETTER A
685 (decode-char 'ucs #x2116)) ;; NUMERO SIGN
686 (Assert-char-class
687 "[:alpha:]"
688 (decode-char 'ucs #x0410) ;; CYRILLIC CAPITAL LETTER A
689 ?\x02)
690 (Assert-char-class
691 "[:alpha:]"
692 (decode-char 'ucs #x03B2) ;; GREEK SMALL LETTER BETA
693 (decode-char 'ucs #x0385)) ;; GREEK DIALYTIKA TONOS
660 694
661 (Assert-char-class "[:alnum:]" ?a ?.) 695 (Assert-char-class "[:alnum:]" ?a ?.)
662 (Assert-char-class "[:alnum:]" ?z ?') 696 (Assert-char-class "[:alnum:]" ?z ?')
663 (Assert-char-class "[:alnum:]" ?A ?/) 697 (Assert-char-class "[:alnum:]" ?A ?/)
664 (Assert-char-class "[:alnum:]" ?Z ?!) 698 (Assert-char-class "[:alnum:]" ?Z ?!)
665 (Assert-char-class "[:alnum:]" ?0 ?,) 699 (Assert-char-class "[:alnum:]" ?0 ?,)
666 (Assert-char-class "[:alnum:]" ?9 ?$) 700 (Assert-char-class "[:alnum:]" ?9 ?$)
667
668 (Assert-char-class "[:alnum:]" ?b ?\x00) 701 (Assert-char-class "[:alnum:]" ?b ?\x00)
669 (Assert-char-class "[:alnum:]" ?c ?\x09) 702 (Assert-char-class "[:alnum:]" ?c ?\x09)
670 (Assert-char-class "[:alnum:]" ?d ?\ ) 703 (Assert-char-class "[:alnum:]" ?d ?\ )
671 (Assert-char-class "[:alnum:]" ?e ?\x7f) 704 (Assert-char-class "[:alnum:]" ?e ?\x7f)
705 (Assert-char-class
706 "[:alnum:]"
707 (decode-char 'ucs #x0430) ;; CYRILLIC SMALL LETTER A
708 (decode-char 'ucs #x2116)) ;; NUMERO SIGN
709 (Assert-char-class
710 "[:alnum:]"
711 (decode-char 'ucs #x0410) ;; CYRILLIC CAPITAL LETTER A
712 ?\x02)
713 (Assert-char-class
714 "[:alnum:]"
715 (decode-char 'ucs #x03B2) ;; GREEK SMALL LETTER BETA
716 (decode-char 'ucs #x0385)) ;; GREEK DIALYTIKA TONOS
717
718 ;; Word is equivalent to alnum in this implementation.
719 (Assert-char-class "[:word:]" ?a ?.)
720 (Assert-char-class "[:word:]" ?z ?')
721 (Assert-char-class "[:word:]" ?A ?/)
722 (Assert-char-class "[:word:]" ?Z ?!)
723 (Assert-char-class "[:word:]" ?0 ?,)
724 (Assert-char-class "[:word:]" ?9 ?$)
725 (Assert-char-class "[:word:]" ?b ?\x00)
726 (Assert-char-class "[:word:]" ?c ?\x09)
727 (Assert-char-class "[:word:]" ?d ?\ )
728 (Assert-char-class "[:word:]" ?e ?\x7f)
729 (Assert-char-class
730 "[:word:]"
731 (decode-char 'ucs #x0430) ;; CYRILLIC SMALL LETTER A
732 (decode-char 'ucs #x2116)) ;; NUMERO SIGN
733 (Assert-char-class
734 "[:word:]"
735 (decode-char 'ucs #x0410) ;; CYRILLIC CAPITAL LETTER A
736 ?\x02)
737 (Assert-char-class
738 "[:word:]"
739 (decode-char 'ucs #x03B2) ;; GREEK SMALL LETTER BETA
740 (decode-char 'ucs #x0385)) ;; GREEK DIALYTIKA TONOS
672 741
673 (let ((case-fold-search nil)) 742 (let ((case-fold-search nil))
674 (Assert-char-class "[:upper:]" ?A ?a) 743 (Assert-char-class "[:upper:]" ?A ?a)
675 (Assert-char-class "[:upper:]" ?Z ?z) 744 (Assert-char-class "[:upper:]" ?Z ?z)
676 (Assert-char-class "[:upper:]" ?B ?0) 745 (Assert-char-class "[:upper:]" ?B ?0)
677 (Assert-char-class "[:upper:]" ?C ?9) 746 (Assert-char-class "[:upper:]" ?C ?9)
678 (Assert-char-class "[:upper:]" ?D ?\x00) 747 (Assert-char-class "[:upper:]" ?D ?\x00)
679 (Assert-char-class "[:upper:]" ?E ?\x09) 748 (Assert-char-class "[:upper:]" ?E ?\x09)
680 (Assert-char-class "[:upper:]" ?F ?\ ) 749 (Assert-char-class "[:upper:]" ?F ?\ )
681 (Assert-char-class "[:upper:]" ?G ?\x7f) 750 (Assert-char-class "[:upper:]" ?G ?\x7f)
751 (Assert-char-class
752 "[:upper:]"
753 (decode-char 'ucs #x0410) ;; CYRILLIC CAPITAL LETTER A
754 (decode-char 'ucs #x0686)) ;; ARABIC LETTER TCHEH
755 (Assert-char-class
756 "[:upper:]"
757 (decode-char 'ucs #x0392) ;; GREEK CAPITAL LETTER BETA
758 (decode-char 'ucs #x5357)) ;; kDefinition south; southern part; southward
682 759
683 (Assert-char-class "[:lower:]" ?a ?A) 760 (Assert-char-class "[:lower:]" ?a ?A)
684 (Assert-char-class "[:lower:]" ?z ?Z) 761 (Assert-char-class "[:lower:]" ?z ?Z)
685 (Assert-char-class "[:lower:]" ?b ?0) 762 (Assert-char-class "[:lower:]" ?b ?0)
686 (Assert-char-class "[:lower:]" ?c ?9) 763 (Assert-char-class "[:lower:]" ?c ?9)
687 (Assert-char-class "[:lower:]" ?d ?\x00) 764 (Assert-char-class "[:lower:]" ?d ?\x00)
688 (Assert-char-class "[:lower:]" ?e ?\x09) 765 (Assert-char-class "[:lower:]" ?e ?\x09)
689 (Assert-char-class "[:lower:]" ?f ? ) 766 (Assert-char-class "[:lower:]" ?f ? )
690 (Assert-char-class "[:lower:]" ?g ?\x7f)) 767 (Assert-char-class "[:lower:]" ?g ?\x7f)
768 (Assert-char-class
769 "[:lower:]"
770 (decode-char 'ucs #x0430) ;; CYRILLIC SMALL LETTER A
771 (decode-char 'ucs #x0686)) ;; ARABIC LETTER TCHEH
772 (Assert-char-class
773 "[:lower:]"
774 (decode-char 'ucs #x03B2) ;; GREEK SMALL LETTER BETA
775 (decode-char 'ucs #x5357)));; kDefinition south; southern part; southward
691 776
692 (let ((case-fold-search t)) 777 (let ((case-fold-search t))
693 ;; These currently fail, because we don't take into account the buffer's
694 ;; case table.
695 (Assert-char-class "[:upper:]" ?a ?\x00) 778 (Assert-char-class "[:upper:]" ?a ?\x00)
696 (Assert-char-class "[:upper:]" ?z ?\x01) 779 (Assert-char-class "[:upper:]" ?z ?\x01)
697 (Assert-char-class "[:upper:]" ?b ?{) 780 (Assert-char-class "[:upper:]" ?b ?{)
698 (Assert-char-class "[:upper:]" ?c ?}) 781 (Assert-char-class "[:upper:]" ?c ?})
699 (Assert-char-class "[:upper:]" ?d ?<) 782 (Assert-char-class "[:upper:]" ?d ?<)
700 (Assert-char-class "[:upper:]" ?e ?>) 783 (Assert-char-class "[:upper:]" ?e ?>)
701 (Assert-char-class "[:upper:]" ?f ?\ ) 784 (Assert-char-class "[:upper:]" ?f ?\ )
702 (Assert-char-class "[:upper:]" ?g ?\x7f) 785 (Assert-char-class "[:upper:]" ?g ?\x7f)
703 786 (Assert-char-class
787 "[:upper:]"
788 (decode-char 'ucs #x0430) ;; CYRILLIC SMALL LETTER A
789 (decode-char 'ucs #x0686)) ;; ARABIC LETTER TCHEH
790 (Assert-char-class
791 "[:upper:]"
792 (decode-char 'ucs #x03B2) ;; GREEK SMALL LETTER BETA
793 (decode-char 'ucs #x5357)) ;; kDefinition south; southern part; southward
704 (Assert-char-class "[:lower:]" ?A ?\x00) 794 (Assert-char-class "[:lower:]" ?A ?\x00)
705 (Assert-char-class "[:lower:]" ?Z ?\x01) 795 (Assert-char-class "[:lower:]" ?Z ?\x01)
706 (Assert-char-class "[:lower:]" ?B ?{) 796 (Assert-char-class "[:lower:]" ?B ?{)
707 (Assert-char-class "[:lower:]" ?C ?}) 797 (Assert-char-class "[:lower:]" ?C ?})
708 (Assert-char-class "[:lower:]" ?D ?<) 798 (Assert-char-class "[:lower:]" ?D ?<)
709 (Assert-char-class "[:lower:]" ?E ?>) 799 (Assert-char-class "[:lower:]" ?E ?>)
710 (Assert-char-class "[:lower:]" ?F ?\ ) 800 (Assert-char-class "[:lower:]" ?F ?\ )
711 (Assert-char-class "[:lower:]" ?G ?\x7F)) 801 (Assert-char-class "[:lower:]" ?G ?\x7F)
802 (Assert-char-class
803 "[:lower:]"
804 (decode-char 'ucs #x0410) ;; CYRILLIC CAPITAL LETTER A
805 (decode-char 'ucs #x0686)) ;; ARABIC LETTER TCHEH
806 (Assert-char-class
807 "[:lower:]"
808 (decode-char 'ucs #x0392) ;; GREEK CAPITAL LETTER BETA
809 (decode-char 'ucs #x5357)));; kDefinition south; southern part; southward
712 810
713 (Assert-char-class "[:digit:]" ?0 ?a) 811 (Assert-char-class "[:digit:]" ?0 ?a)
714 (Assert-char-class "[:digit:]" ?9 ?z) 812 (Assert-char-class "[:digit:]" ?9 ?z)
715 (Assert-char-class "[:digit:]" ?1 ?A) 813 (Assert-char-class "[:digit:]" ?1 ?A)
716 (Assert-char-class "[:digit:]" ?2 ?Z) 814 (Assert-char-class "[:digit:]" ?2 ?Z)
717 (Assert-char-class "[:digit:]" ?3 ?\x00) 815 (Assert-char-class "[:digit:]" ?3 ?\x00)
718 (Assert-char-class "[:digit:]" ?4 ?\x09) 816 (Assert-char-class "[:digit:]" ?4 ?\x09)
719 (Assert-char-class "[:digit:]" ?5 ? ) 817 (Assert-char-class "[:digit:]" ?5 ? )
720 (Assert-char-class "[:digit:]" ?6 ?\x7f) 818 (Assert-char-class "[:digit:]" ?6 ?\x7f)
819 (Assert-char-class
820 "[:digit:]" ?7
821 (decode-char 'ucs #x0385)) ;; GREEK DIALYTIKA TONOS
822 (Assert-char-class
823 "[:digit:]" ?8
824 (decode-char 'ucs #x0392)) ;; GREEK CAPITAL LETTER BETA
825 (Assert-char-class
826 "[:digit:]" ?9
827 (decode-char 'ucs #x03B2)) ;; GREEK SMALL LETTER BETA
828 (Assert-char-class
829 "[:digit:]" ?0
830 (decode-char 'ucs #x0410)) ;; CYRILLIC CAPITAL LETTER A
831 (Assert-char-class
832 "[:digit:]" ?1
833 (decode-char 'ucs #x0430)) ;; CYRILLIC SMALL LETTER A
834 (Assert-char-class
835 "[:digit:]" ?2
836 (decode-char 'ucs #x0686)) ;; ARABIC LETTER TCHEH
837 (Assert-char-class
838 "[:digit:]" ?3
839 (decode-char 'ucs #x2116)) ;; NUMERO SIGN
840 (Assert-char-class
841 "[:digit:]" ?4
842 (decode-char 'ucs #x5357)) ;; kDefinition south; southern part; southward
721 843
722 (Assert-char-class "[:xdigit:]" ?0 ?g) 844 (Assert-char-class "[:xdigit:]" ?0 ?g)
723 (Assert-char-class "[:xdigit:]" ?9 ?G) 845 (Assert-char-class "[:xdigit:]" ?9 ?G)
724 (Assert-char-class "[:xdigit:]" ?A ?{) 846 (Assert-char-class "[:xdigit:]" ?A ?{)
725 (Assert-char-class "[:xdigit:]" ?a ?}) 847 (Assert-char-class "[:xdigit:]" ?a ?})
727 (Assert-char-class "[:xdigit:]" ?2 ?Z) 849 (Assert-char-class "[:xdigit:]" ?2 ?Z)
728 (Assert-char-class "[:xdigit:]" ?3 ?\x00) 850 (Assert-char-class "[:xdigit:]" ?3 ?\x00)
729 (Assert-char-class "[:xdigit:]" ?4 ?\x09) 851 (Assert-char-class "[:xdigit:]" ?4 ?\x09)
730 (Assert-char-class "[:xdigit:]" ?5 ?\x7f) 852 (Assert-char-class "[:xdigit:]" ?5 ?\x7f)
731 (Assert-char-class "[:xdigit:]" ?6 ?z) 853 (Assert-char-class "[:xdigit:]" ?6 ?z)
854 (Assert-char-class
855 "[:xdigit:]" ?7
856 (decode-char 'ucs #x0385)) ;; GREEK DIALYTIKA TONOS
857 (Assert-char-class
858 "[:xdigit:]" ?8
859 (decode-char 'ucs #x0392)) ;; GREEK CAPITAL LETTER BETA
860 (Assert-char-class
861 "[:xdigit:]" ?9
862 (decode-char 'ucs #x03B2)) ;; GREEK SMALL LETTER BETA
863 (Assert-char-class
864 "[:xdigit:]" ?a
865 (decode-char 'ucs #x0410)) ;; CYRILLIC CAPITAL LETTER A
866 (Assert-char-class
867 "[:xdigit:]" ?B
868 (decode-char 'ucs #x0430)) ;; CYRILLIC SMALL LETTER A
869 (Assert-char-class
870 "[:xdigit:]" ?c
871 (decode-char 'ucs #x0686)) ;; ARABIC LETTER TCHEH
872 (Assert-char-class
873 "[:xdigit:]" ?D
874 (decode-char 'ucs #x2116)) ;; NUMERO SIGN
875 (Assert-char-class
876 "[:xdigit:]" ?e
877 (decode-char 'ucs #x5357)) ;; kDefinition south; southern part; southward
732 878
733 (Assert-char-class "[:space:]" ?\ ?0) 879 (Assert-char-class "[:space:]" ?\ ?0)
734 (Assert-char-class "[:space:]" ?\t ?9) 880 (Assert-char-class "[:space:]" ?\t ?9)
735 (Assert-char-class "[:space:]" ?\ ?A) 881 (Assert-char-class "[:space:]" ?\ ?A)
736 (Assert-char-class "[:space:]" ?\t ?Z) 882 (Assert-char-class "[:space:]" ?\t ?Z)
737 (Assert-char-class "[:space:]" ?\ ?\x00) 883 (Assert-char-class "[:space:]" ?\ ?\x00)
738 (Assert-char-class "[:space:]" ?\ ?\x7f) 884 (Assert-char-class "[:space:]" ?\ ?\x7f)
739 (Assert-char-class "[:space:]" ?\t ?a) 885 (Assert-char-class "[:space:]" ?\t ?a)
740 (Assert-char-class "[:space:]" ?\ ?z) 886 (Assert-char-class "[:space:]" ?\ ?z)
887 (Assert-char-class
888 "[:space:]" ?\
889 (decode-char 'ucs #x0385)) ;; GREEK DIALYTIKA TONOS
890 (Assert-char-class
891 "[:space:]" ?\t
892 (decode-char 'ucs #x0392)) ;; GREEK CAPITAL LETTER BETA
893 (Assert-char-class
894 "[:space:]" ?\
895 (decode-char 'ucs #x03B2)) ;; GREEK SMALL LETTER BETA
896 (Assert-char-class
897 "[:space:]" ?\t
898 (decode-char 'ucs #x0410)) ;; CYRILLIC CAPITAL LETTER A
899 (Assert-char-class
900 "[:space:]" ?\
901 (decode-char 'ucs #x0430)) ;; CYRILLIC SMALL LETTER A
902 (Assert-char-class
903 "[:space:]" ?\t
904 (decode-char 'ucs #x0686)) ;; ARABIC LETTER TCHEH
905 (Assert-char-class
906 "[:space:]" ?\
907 (decode-char 'ucs #x2116)) ;; NUMERO SIGN
908 (Assert-char-class
909 "[:space:]" ?\t
910 (decode-char 'ucs #x5357)) ;; kDefinition south; southern part; southward
741 911
742 (Assert-char-class "[:print:]" ?\ ?\x00) 912 (Assert-char-class "[:print:]" ?\ ?\x00)
743 (Assert-char-class "[:print:]" ?0 ?\x09) 913 (Assert-char-class "[:print:]" ?0 ?\x09)
744 (Assert-char-class "[:print:]" ?9 ?\x7f) 914 (Assert-char-class "[:print:]" ?9 ?\x7f)
745 (Assert-char-class "[:print:]" ?A ?\x01) 915 (Assert-char-class "[:print:]" ?A ?\x01)
746 (Assert-char-class "[:print:]" ?Z ?\x02) 916 (Assert-char-class "[:print:]" ?Z ?\x02)
747 (Assert-char-class "[:print:]" ?B ?\t) 917 (Assert-char-class "[:print:]" ?B ?\t)
748 (Assert-char-class "[:print:]" ?a ?\x03) 918 (Assert-char-class "[:print:]" ?a ?\x03)
749 (Assert-char-class "[:print:]" ?z ?\x04) 919 (Assert-char-class "[:print:]" ?z ?\x04)
920 (Assert-char-class
921 "[:print:]" (decode-char 'ucs #x0385) ;; GREEK DIALYTIKA TONOS
922 ?\x05)
923 (Assert-char-class
924 "[:print:]" (decode-char 'ucs #x0392) ;; GREEK CAPITAL LETTER BETA
925 ?\x06)
926 (Assert-char-class
927 "[:print:]" (decode-char 'ucs #x03B2) ;; GREEK SMALL LETTER BETA
928 ?\x07)
929 (Assert-char-class
930 "[:print:]" (decode-char 'ucs #x0410) ;; CYRILLIC CAPITAL LETTER A
931 ?\x08)
932 (Assert-char-class
933 "[:print:]" (decode-char 'ucs #x0430) ;; CYRILLIC SMALL LETTER A
934 ?\x09)
935 (Assert-char-class
936 "[:print:]" (decode-char 'ucs #x0686) ;; ARABIC LETTER TCHEH
937 ?\x0a)
938 (Assert-char-class
939 "[:print:]" (decode-char 'ucs #x2116) ;; NUMERO SIGN
940 ?\x0b)
941 (Assert-char-class
942 "[:print:]" (decode-char 'ucs #x5357) ;; kDefinition south; southern part; southward
943 ?\x0c)
944
945 (Assert-char-class "[:graph:]" ?! ?\ )
946 (Assert-char-class "[:graph:]" ?0 ?\x09)
947 (Assert-char-class "[:graph:]" ?9 ?\x7f)
948 (Assert-char-class "[:graph:]" ?A ?\x01)
949 (Assert-char-class "[:graph:]" ?Z ?\x02)
950 (Assert-char-class "[:graph:]" ?B ?\t)
951 (Assert-char-class "[:graph:]" ?a ?\x03)
952 (Assert-char-class "[:graph:]" ?z ?\x04)
953 (Assert-char-class
954 "[:graph:]" (decode-char 'ucs #x0385) ;; GREEK DIALYTIKA TONOS
955 ?\x05)
956 (Assert-char-class
957 "[:graph:]" (decode-char 'ucs #x0392) ;; GREEK CAPITAL LETTER BETA
958 ?\x06)
959 (Assert-char-class
960 "[:graph:]" (decode-char 'ucs #x03B2) ;; GREEK SMALL LETTER BETA
961 ?\x07)
962 (Assert-char-class
963 "[:graph:]" (decode-char 'ucs #x0410) ;; CYRILLIC CAPITAL LETTER A
964 ?\x08)
965 (Assert-char-class
966 "[:graph:]" (decode-char 'ucs #x0430) ;; CYRILLIC SMALL LETTER A
967 ?\x09)
968 (Assert-char-class
969 "[:graph:]" (decode-char 'ucs #x0686) ;; ARABIC LETTER TCHEH
970 ?\x0a)
971 (Assert-char-class
972 "[:graph:]" (decode-char 'ucs #x2116) ;; NUMERO SIGN
973 ?\x0b)
974 (Assert-char-class
975 "[:graph:]" (decode-char 'ucs #x5357) ;; kDefinition south; southern part; southward
976 ?\x0c)
750 977
751 (Assert-char-class "[:punct:]" ?\( ?0) 978 (Assert-char-class "[:punct:]" ?\( ?0)
752 (Assert-char-class "[:punct:]" ?. ?9) 979 (Assert-char-class "[:punct:]" ?. ?9)
753 (Assert-char-class "[:punct:]" ?{ ?A) 980 (Assert-char-class "[:punct:]" ?{ ?A)
754 (Assert-char-class "[:punct:]" ?} ?Z) 981 (Assert-char-class "[:punct:]" ?} ?Z)
755 (Assert-char-class "[:punct:]" ?: ?\t) 982 (Assert-char-class "[:punct:]" ?: ?\t)
756 (Assert-char-class "[:punct:]" ?\; ?\x00) 983 (Assert-char-class "[:punct:]" ?\; ?\x00)
757 (Assert-char-class "[:punct:]" ?< ?\x09) 984 (Assert-char-class "[:punct:]" ?< ?\x09)
758 (Assert-char-class "[:punct:]" ?> ?\x7f) 985 (Assert-char-class "[:punct:]" ?> ?\x7f)
759 (Assert-char-class "[:punct:]" ?= ?a) 986 (Assert-char-class "[:punct:]" ?= ?a)
760 (Assert-char-class "[:punct:]" ?\? ?z)) 987 (Assert-char-class "[:punct:]" ?\? ?z)
988 (Assert-char-class
989 "[:punct:]"
990 (decode-char 'ucs #x0385) ;; GREEK DIALYTIKA TONOS
991 ?a)
992 (Assert-char-class
993 "[:punct:]"
994 (decode-char 'ucs #x20af) ;; DRACHMA SIGN
995 (decode-char 'ucs #x0392)) ;; GREEK CAPITAL LETTER BETA
996 (Assert-char-class
997 "[:punct:]"
998 (decode-char 'ucs #x00a7) ;; SECTION SIGN
999 (decode-char 'ucs #x03B2)) ;; GREEK SMALL LETTER BETA
1000 (Assert-char-class
1001 "[:punct:]"
1002 (decode-char 'ucs #x00a8) ;; DIAERESIS
1003 (decode-char 'ucs #x0410)) ;; CYRILLIC CAPITAL LETTER A
1004 (Assert-char-class
1005 "[:punct:]"
1006 (decode-char 'ucs #x0384) ;; GREEK TONOS
1007 (decode-char 'ucs #x0430)) ;; CYRILLIC SMALL LETTER A
1008 (Assert-char-class
1009 "[:punct:]"
1010 (decode-char 'ucs #x00b7) ;; MIDDLE DOT
1011 (decode-char 'ucs #x0686)) ;; ARABIC LETTER TCHEH
1012 (Assert-char-class
1013 "[:punct:]"
1014 (decode-char 'ucs #x2116) ;; NUMERO SIGN
1015 ?x)
1016 (Assert-char-class
1017 "[:punct:]"
1018 ?=
1019 (decode-char 'ucs #x5357)) ;; kDefinition south; southern part; southward
1020
1021 (Assert-char-class "[:ascii:]" ?a (decode-char 'ucs #x00a7)) ;; SECTION SIGN
1022 (Assert-char-class "[:ascii:]" ?b (decode-char 'ucs #x00a8)) ;; DIAERESIS
1023 (Assert-char-class "[:ascii:]" ?c (decode-char 'ucs #x00b7)) ;; MIDDLE DOT
1024 (Assert-char-class "[:ascii:]" ?d (decode-char 'ucs #x0384)) ;; GREEK TONOS
1025 (Assert-char-class
1026 "[:ascii:]" ?\x00 (decode-char 'ucs #x0392)) ;; GREEK CAPITAL LETTER BETA
1027 (Assert-char-class
1028 "[:ascii:]" ?\x01 (decode-char 'ucs #x03B2)) ;; GREEK SMALL LETTER BETA
1029 (Assert-char-class
1030 "[:ascii:]" ?\t (decode-char 'ucs #x0410)) ;; CYRILLIC CAPITAL LETTER A
1031 (Assert-char-class
1032 "[:ascii:]" ?A (decode-char 'ucs #x0430)) ;; CYRILLIC SMALL LETTER A
1033 (Assert-char-class
1034 "[:ascii:]" ?B (decode-char 'ucs #x0686)) ;; ARABIC LETTER TCHEH
1035 (Assert-char-class
1036 "[:ascii:]" ?C (decode-char 'ucs #x20af)) ;; DRACHMA SIGN
1037 (Assert-char-class
1038 "[:ascii:]" ?\x7f (decode-char 'ucs #x2116)) ;; NUMERO SIGN
1039
1040 (Assert-char-class
1041 "[:nonascii:]" (decode-char 'ucs #x00a7) ?a) ;; SECTION SIGN
1042 (Assert-char-class
1043 "[:nonascii:]" (decode-char 'ucs #x00a8) ?b) ;; DIAERESIS
1044 (Assert-char-class
1045 "[:nonascii:]" (decode-char 'ucs #x00b7) ?c) ;; MIDDLE DOT
1046 (Assert-char-class
1047 "[:nonascii:]" (decode-char 'ucs #x0384) ?d) ;; GREEK TONOS
1048 (Assert-char-class
1049 "[:nonascii:]" (decode-char 'ucs #x0392) ?\x00) ;; GREEK CAPITAL LETTER BETA
1050 (Assert-char-class
1051 "[:nonascii:]" (decode-char 'ucs #x03B2) ?\x01) ;; GREEK SMALL LETTER BETA
1052 (Assert-char-class
1053 "[:nonascii:]" (decode-char 'ucs #x0410) ?\t) ;; CYRILLIC CAPITAL LETTER A
1054 (Assert-char-class
1055 "[:nonascii:]" (decode-char 'ucs #x0430) ?A) ;; CYRILLIC SMALL LETTER A
1056 (Assert-char-class
1057 "[:nonascii:]" (decode-char 'ucs #x0686) ?B) ;; ARABIC LETTER TCHEH
1058 (Assert-char-class
1059 "[:nonascii:]" (decode-char 'ucs #x20af) ?C) ;; DRACHMA SIGN
1060 (Assert-char-class
1061 "[:nonascii:]" (decode-char 'ucs #x2116) ?\x7f) ;; NUMERO SIGN
1062
1063 (Assert-char-class
1064 "[:multibyte:]" (decode-char 'ucs #x00a7) ?a) ;; SECTION SIGN
1065 (Assert-char-class
1066 "[:multibyte:]" (decode-char 'ucs #x00a8) ?b) ;; DIAERESIS
1067 (Assert-char-class
1068 "[:multibyte:]" (decode-char 'ucs #x00b7) ?c) ;; MIDDLE DOT
1069 (Assert-char-class
1070 "[:multibyte:]" (decode-char 'ucs #x0384) ?d) ;; GREEK TONOS
1071 (Assert-char-class
1072 "[:multibyte:]" (decode-char 'ucs #x0392)
1073 ?\x00) ;; GREEK CAPITAL LETTER BETA
1074
1075 (Assert-never-matching
1076 "[:unibyte:]"
1077 ?\x01 ?\t ?A ?B ?C ?\x7f
1078 (decode-char 'ucs #x03B2) ;; GREEK SMALL LETTER BETA
1079 (decode-char 'ucs #x0410) ;; CYRILLIC CAPITAL LETTER A
1080 (decode-char 'ucs #x0430) ;; CYRILLIC SMALL LETTER A
1081 (decode-char 'ucs #x0686) ;; ARABIC LETTER TCHEH
1082 (decode-char 'ucs #x20af) ;; DRACHMA SIGN
1083 (decode-char 'ucs #x2116) ;; NUMERO SIGN
1084 (decode-char 'ucs #x5357))) ;; kDefinition south; southern part; southward
1085