%{ note description: "Scanners for Eiffel parsers" legal: "See notice at end of class." status: "See notice at end of class." date: "$Date$" revision: "$Revision$" class EIFFEL_SCANNER inherit EIFFEL_SCANNER_SKELETON STRING_HANDLER create make %} %x SPECIAL_STR VERBATIM_STR1 VERBATIM_STR2 VERBATIM_STR3 PRAGMA %option line position nodefault outfile="eiffel_scanner.e" B [0-1] O [0-7] D [0-9] H [0-9A-Fa-f] I {D}(({D}|_)*{D})? E ([eE][+-]?{D}+)? T {D}{D}{D} U {D}|{D}{D}|{D}{D}{D} A [A-Za-z] X {A}|{D}|_ Lu [\u{0041}-\u{005A}\u{00C0}-\u{00D6}\u{00D8}-\u{00DE}\u{0100}\u{0102}\u{0104}\u{0106}\u{0108}\u{010A}\u{010C}\u{010E}\u{0110}\u{0112}\u{0114}\u{0116}\u{0118}\u{011A}\u{011C}\u{011E}\u{0120}\u{0122}\u{0124}\u{0126}\u{0128}\u{012A}\u{012C}\u{012E}\u{0130}\u{0132}\u{0134}\u{0136}\u{0139}\u{013B}\u{013D}\u{013F}\u{0141}\u{0143}\u{0145}\u{0147}\u{014A}\u{014C}\u{014E}\u{0150}\u{0152}\u{0154}\u{0156}\u{0158}\u{015A}\u{015C}\u{015E}\u{0160}\u{0162}\u{0164}\u{0166}\u{0168}\u{016A}\u{016C}\u{016E}\u{0170}\u{0172}\u{0174}\u{0176}\u{0178}-\u{0179}\u{017B}\u{017D}\u{0181}-\u{0182}\u{0184}\u{0186}-\u{0187}\u{0189}-\u{018B}\u{018E}-\u{0191}\u{0193}-\u{0194}\u{0196}-\u{0198}\u{019C}-\u{019D}\u{019F}-\u{01A0}\u{01A2}\u{01A4}\u{01A6}-\u{01A7}\u{01A9}\u{01AC}\u{01AE}-\u{01AF}\u{01B1}-\u{01B3}\u{01B5}\u{01B7}-\u{01B8}\u{01BC}\u{01C4}\u{01C7}\u{01CA}\u{01CD}\u{01CF}\u{01D1}\u{01D3}\u{01D5}\u{01D7}\u{01D9}\u{01DB}\u{01DE}\u{01E0}\u{01E2}\u{01E4}\u{01E6}\u{01E8}\u{01EA}\u{01EC}\u{01EE}\u{01F1}\u{01F4}\u{01F6}-\u{01F8}\u{01FA}\u{01FC}\u{01FE}\u{0200}\u{0202}\u{0204}\u{0206}\u{0208}\u{020A}\u{020C}\u{020E}\u{0210}\u{0212}\u{0214}\u{0216}\u{0218}\u{021A}\u{021C}\u{021E}\u{0220}\u{0222}\u{0224}\u{0226}\u{0228}\u{022A}\u{022C}\u{022E}\u{0230}\u{0232}\u{023A}-\u{023B}\u{023D}-\u{023E}\u{0241}\u{0243}-\u{0246}\u{0248}\u{024A}\u{024C}\u{024E}\u{0370}\u{0372}\u{0376}\u{037F}\u{0386}\u{0388}-\u{038A}\u{038C}\u{038E}-\u{038F}\u{0391}-\u{03A1}\u{03A3}-\u{03AB}\u{03CF}\u{03D2}-\u{03D4}\u{03D8}\u{03DA}\u{03DC}\u{03DE}\u{03E0}\u{03E2}\u{03E4}\u{03E6}\u{03E8}\u{03EA}\u{03EC}\u{03EE}\u{03F4}\u{03F7}\u{03F9}-\u{03FA}\u{03FD}-\u{042F}\u{0460}\u{0462}\u{0464}\u{0466}\u{0468}\u{046A}\u{046C}\u{046E}\u{0470}\u{0472}\u{0474}\u{0476}\u{0478}\u{047A}\u{047C}\u{047E}\u{0480}\u{048A}\u{048C}\u{048E}\u{0490}\u{0492}\u{0494}\u{0496}\u{0498}\u{049A}\u{049C}\u{049E}\u{04A0}\u{04A2}\u{04A4}\u{04A6}\u{04A8}\u{04AA}\u{04AC}\u{04AE}\u{04B0}\u{04B2}\u{04B4}\u{04B6}\u{04B8}\u{04BA}\u{04BC}\u{04BE}\u{04C0}-\u{04C1}\u{04C3}\u{04C5}\u{04C7}\u{04C9}\u{04CB}\u{04CD}\u{04D0}\u{04D2}\u{04D4}\u{04D6}\u{04D8}\u{04DA}\u{04DC}\u{04DE}\u{04E0}\u{04E2}\u{04E4}\u{04E6}\u{04E8}\u{04EA}\u{04EC}\u{04EE}\u{04F0}\u{04F2}\u{04F4}\u{04F6}\u{04F8}\u{04FA}\u{04FC}\u{04FE}\u{0500}\u{0502}\u{0504}\u{0506}\u{0508}\u{050A}\u{050C}\u{050E}\u{0510}\u{0512}\u{0514}\u{0516}\u{0518}\u{051A}\u{051C}\u{051E}\u{0520}\u{0522}\u{0524}\u{0526}\u{0528}\u{052A}\u{052C}\u{052E}\u{0531}-\u{0556}\u{10A0}-\u{10C5}\u{10C7}\u{10CD}\u{13A0}-\u{13F5}\u{1C90}-\u{1CBA}\u{1CBD}-\u{1CBF}\u{1E00}\u{1E02}\u{1E04}\u{1E06}\u{1E08}\u{1E0A}\u{1E0C}\u{1E0E}\u{1E10}\u{1E12}\u{1E14}\u{1E16}\u{1E18}\u{1E1A}\u{1E1C}\u{1E1E}\u{1E20}\u{1E22}\u{1E24}\u{1E26}\u{1E28}\u{1E2A}\u{1E2C}\u{1E2E}\u{1E30}\u{1E32}\u{1E34}\u{1E36}\u{1E38}\u{1E3A}\u{1E3C}\u{1E3E}\u{1E40}\u{1E42}\u{1E44}\u{1E46}\u{1E48}\u{1E4A}\u{1E4C}\u{1E4E}\u{1E50}\u{1E52}\u{1E54}\u{1E56}\u{1E58}\u{1E5A}\u{1E5C}\u{1E5E}\u{1E60}\u{1E62}\u{1E64}\u{1E66}\u{1E68}\u{1E6A}\u{1E6C}\u{1E6E}\u{1E70}\u{1E72}\u{1E74}\u{1E76}\u{1E78}\u{1E7A}\u{1E7C}\u{1E7E}\u{1E80}\u{1E82}\u{1E84}\u{1E86}\u{1E88}\u{1E8A}\u{1E8C}\u{1E8E}\u{1E90}\u{1E92}\u{1E94}\u{1E9E}\u{1EA0}\u{1EA2}\u{1EA4}\u{1EA6}\u{1EA8}\u{1EAA}\u{1EAC}\u{1EAE}\u{1EB0}\u{1EB2}\u{1EB4}\u{1EB6}\u{1EB8}\u{1EBA}\u{1EBC}\u{1EBE}\u{1EC0}\u{1EC2}\u{1EC4}\u{1EC6}\u{1EC8}\u{1ECA}\u{1ECC}\u{1ECE}\u{1ED0}\u{1ED2}\u{1ED4}\u{1ED6}\u{1ED8}\u{1EDA}\u{1EDC}\u{1EDE}\u{1EE0}\u{1EE2}\u{1EE4}\u{1EE6}\u{1EE8}\u{1EEA}\u{1EEC}\u{1EEE}\u{1EF0}\u{1EF2}\u{1EF4}\u{1EF6}\u{1EF8}\u{1EFA}\u{1EFC}\u{1EFE}\u{1F08}-\u{1F0F}\u{1F18}-\u{1F1D}\u{1F28}-\u{1F2F}\u{1F38}-\u{1F3F}\u{1F48}-\u{1F4D}\u{1F59}\u{1F5B}\u{1F5D}\u{1F5F}\u{1F68}-\u{1F6F}\u{1FB8}-\u{1FBB}\u{1FC8}-\u{1FCB}\u{1FD8}-\u{1FDB}\u{1FE8}-\u{1FEC}\u{1FF8}-\u{1FFB}\u{2102}\u{2107}\u{210B}-\u{210D}\u{2110}-\u{2112}\u{2115}\u{2119}-\u{211D}\u{2124}\u{2126}\u{2128}\u{212A}-\u{212D}\u{2130}-\u{2133}\u{213E}-\u{213F}\u{2145}\u{2183}\u{2C00}-\u{2C2E}\u{2C60}\u{2C62}-\u{2C64}\u{2C67}\u{2C69}\u{2C6B}\u{2C6D}-\u{2C70}\u{2C72}\u{2C75}\u{2C7E}-\u{2C80}\u{2C82}\u{2C84}\u{2C86}\u{2C88}\u{2C8A}\u{2C8C}\u{2C8E}\u{2C90}\u{2C92}\u{2C94}\u{2C96}\u{2C98}\u{2C9A}\u{2C9C}\u{2C9E}\u{2CA0}\u{2CA2}\u{2CA4}\u{2CA6}\u{2CA8}\u{2CAA}\u{2CAC}\u{2CAE}\u{2CB0}\u{2CB2}\u{2CB4}\u{2CB6}\u{2CB8}\u{2CBA}\u{2CBC}\u{2CBE}\u{2CC0}\u{2CC2}\u{2CC4}\u{2CC6}\u{2CC8}\u{2CCA}\u{2CCC}\u{2CCE}\u{2CD0}\u{2CD2}\u{2CD4}\u{2CD6}\u{2CD8}\u{2CDA}\u{2CDC}\u{2CDE}\u{2CE0}\u{2CE2}\u{2CEB}\u{2CED}\u{2CF2}\u{A640}\u{A642}\u{A644}\u{A646}\u{A648}\u{A64A}\u{A64C}\u{A64E}\u{A650}\u{A652}\u{A654}\u{A656}\u{A658}\u{A65A}\u{A65C}\u{A65E}\u{A660}\u{A662}\u{A664}\u{A666}\u{A668}\u{A66A}\u{A66C}\u{A680}\u{A682}\u{A684}\u{A686}\u{A688}\u{A68A}\u{A68C}\u{A68E}\u{A690}\u{A692}\u{A694}\u{A696}\u{A698}\u{A69A}\u{A722}\u{A724}\u{A726}\u{A728}\u{A72A}\u{A72C}\u{A72E}\u{A732}\u{A734}\u{A736}\u{A738}\u{A73A}\u{A73C}\u{A73E}\u{A740}\u{A742}\u{A744}\u{A746}\u{A748}\u{A74A}\u{A74C}\u{A74E}\u{A750}\u{A752}\u{A754}\u{A756}\u{A758}\u{A75A}\u{A75C}\u{A75E}\u{A760}\u{A762}\u{A764}\u{A766}\u{A768}\u{A76A}\u{A76C}\u{A76E}\u{A779}\u{A77B}\u{A77D}-\u{A77E}\u{A780}\u{A782}\u{A784}\u{A786}\u{A78B}\u{A78D}\u{A790}\u{A792}\u{A796}\u{A798}\u{A79A}\u{A79C}\u{A79E}\u{A7A0}\u{A7A2}\u{A7A4}\u{A7A6}\u{A7A8}\u{A7AA}-\u{A7AE}\u{A7B0}-\u{A7B4}\u{A7B6}\u{A7B8}\u{A7BA}\u{A7BC}\u{A7BE}\u{A7C2}\u{A7C4}-\u{A7C7}\u{A7C9}\u{A7F5}\u{FF21}-\u{FF3A}\u{10400}-\u{10427}\u{104B0}-\u{104D3}\u{10C80}-\u{10CB2}\u{118A0}-\u{118BF}\u{16E40}-\u{16E5F}\u{1D400}-\u{1D419}\u{1D434}-\u{1D44D}\u{1D468}-\u{1D481}\u{1D49C}\u{1D49E}-\u{1D49F}\u{1D4A2}\u{1D4A5}-\u{1D4A6}\u{1D4A9}-\u{1D4AC}\u{1D4AE}-\u{1D4B5}\u{1D4D0}-\u{1D4E9}\u{1D504}-\u{1D505}\u{1D507}-\u{1D50A}\u{1D50D}-\u{1D514}\u{1D516}-\u{1D51C}\u{1D538}-\u{1D539}\u{1D53B}-\u{1D53E}\u{1D540}-\u{1D544}\u{1D546}\u{1D54A}-\u{1D550}\u{1D56C}-\u{1D585}\u{1D5A0}-\u{1D5B9}\u{1D5D4}-\u{1D5ED}\u{1D608}-\u{1D621}\u{1D63C}-\u{1D655}\u{1D670}-\u{1D689}\u{1D6A8}-\u{1D6C0}\u{1D6E2}-\u{1D6FA}\u{1D71C}-\u{1D734}\u{1D756}-\u{1D76E}\u{1D790}-\u{1D7A8}\u{1D7CA}\u{1E900}-\u{1E921}] Ll [\u{0061}-\u{007A}\u{00B5}\u{00DF}-\u{00F6}\u{00F8}-\u{00FF}\u{0101}\u{0103}\u{0105}\u{0107}\u{0109}\u{010B}\u{010D}\u{010F}\u{0111}\u{0113}\u{0115}\u{0117}\u{0119}\u{011B}\u{011D}\u{011F}\u{0121}\u{0123}\u{0125}\u{0127}\u{0129}\u{012B}\u{012D}\u{012F}\u{0131}\u{0133}\u{0135}\u{0137}-\u{0138}\u{013A}\u{013C}\u{013E}\u{0140}\u{0142}\u{0144}\u{0146}\u{0148}-\u{0149}\u{014B}\u{014D}\u{014F}\u{0151}\u{0153}\u{0155}\u{0157}\u{0159}\u{015B}\u{015D}\u{015F}\u{0161}\u{0163}\u{0165}\u{0167}\u{0169}\u{016B}\u{016D}\u{016F}\u{0171}\u{0173}\u{0175}\u{0177}\u{017A}\u{017C}\u{017E}-\u{0180}\u{0183}\u{0185}\u{0188}\u{018C}-\u{018D}\u{0192}\u{0195}\u{0199}-\u{019B}\u{019E}\u{01A1}\u{01A3}\u{01A5}\u{01A8}\u{01AA}-\u{01AB}\u{01AD}\u{01B0}\u{01B4}\u{01B6}\u{01B9}-\u{01BA}\u{01BD}-\u{01BF}\u{01C6}\u{01C9}\u{01CC}\u{01CE}\u{01D0}\u{01D2}\u{01D4}\u{01D6}\u{01D8}\u{01DA}\u{01DC}-\u{01DD}\u{01DF}\u{01E1}\u{01E3}\u{01E5}\u{01E7}\u{01E9}\u{01EB}\u{01ED}\u{01EF}-\u{01F0}\u{01F3}\u{01F5}\u{01F9}\u{01FB}\u{01FD}\u{01FF}\u{0201}\u{0203}\u{0205}\u{0207}\u{0209}\u{020B}\u{020D}\u{020F}\u{0211}\u{0213}\u{0215}\u{0217}\u{0219}\u{021B}\u{021D}\u{021F}\u{0221}\u{0223}\u{0225}\u{0227}\u{0229}\u{022B}\u{022D}\u{022F}\u{0231}\u{0233}-\u{0239}\u{023C}\u{023F}-\u{0240}\u{0242}\u{0247}\u{0249}\u{024B}\u{024D}\u{024F}-\u{0293}\u{0295}-\u{02AF}\u{0371}\u{0373}\u{0377}\u{037B}-\u{037D}\u{0390}\u{03AC}-\u{03CE}\u{03D0}-\u{03D1}\u{03D5}-\u{03D7}\u{03D9}\u{03DB}\u{03DD}\u{03DF}\u{03E1}\u{03E3}\u{03E5}\u{03E7}\u{03E9}\u{03EB}\u{03ED}\u{03EF}-\u{03F3}\u{03F5}\u{03F8}\u{03FB}-\u{03FC}\u{0430}-\u{045F}\u{0461}\u{0463}\u{0465}\u{0467}\u{0469}\u{046B}\u{046D}\u{046F}\u{0471}\u{0473}\u{0475}\u{0477}\u{0479}\u{047B}\u{047D}\u{047F}\u{0481}\u{048B}\u{048D}\u{048F}\u{0491}\u{0493}\u{0495}\u{0497}\u{0499}\u{049B}\u{049D}\u{049F}\u{04A1}\u{04A3}\u{04A5}\u{04A7}\u{04A9}\u{04AB}\u{04AD}\u{04AF}\u{04B1}\u{04B3}\u{04B5}\u{04B7}\u{04B9}\u{04BB}\u{04BD}\u{04BF}\u{04C2}\u{04C4}\u{04C6}\u{04C8}\u{04CA}\u{04CC}\u{04CE}-\u{04CF}\u{04D1}\u{04D3}\u{04D5}\u{04D7}\u{04D9}\u{04DB}\u{04DD}\u{04DF}\u{04E1}\u{04E3}\u{04E5}\u{04E7}\u{04E9}\u{04EB}\u{04ED}\u{04EF}\u{04F1}\u{04F3}\u{04F5}\u{04F7}\u{04F9}\u{04FB}\u{04FD}\u{04FF}\u{0501}\u{0503}\u{0505}\u{0507}\u{0509}\u{050B}\u{050D}\u{050F}\u{0511}\u{0513}\u{0515}\u{0517}\u{0519}\u{051B}\u{051D}\u{051F}\u{0521}\u{0523}\u{0525}\u{0527}\u{0529}\u{052B}\u{052D}\u{052F}\u{0560}-\u{0588}\u{10D0}-\u{10FA}\u{10FD}-\u{10FF}\u{13F8}-\u{13FD}\u{1C80}-\u{1C88}\u{1D00}-\u{1D2B}\u{1D6B}-\u{1D77}\u{1D79}-\u{1D9A}\u{1E01}\u{1E03}\u{1E05}\u{1E07}\u{1E09}\u{1E0B}\u{1E0D}\u{1E0F}\u{1E11}\u{1E13}\u{1E15}\u{1E17}\u{1E19}\u{1E1B}\u{1E1D}\u{1E1F}\u{1E21}\u{1E23}\u{1E25}\u{1E27}\u{1E29}\u{1E2B}\u{1E2D}\u{1E2F}\u{1E31}\u{1E33}\u{1E35}\u{1E37}\u{1E39}\u{1E3B}\u{1E3D}\u{1E3F}\u{1E41}\u{1E43}\u{1E45}\u{1E47}\u{1E49}\u{1E4B}\u{1E4D}\u{1E4F}\u{1E51}\u{1E53}\u{1E55}\u{1E57}\u{1E59}\u{1E5B}\u{1E5D}\u{1E5F}\u{1E61}\u{1E63}\u{1E65}\u{1E67}\u{1E69}\u{1E6B}\u{1E6D}\u{1E6F}\u{1E71}\u{1E73}\u{1E75}\u{1E77}\u{1E79}\u{1E7B}\u{1E7D}\u{1E7F}\u{1E81}\u{1E83}\u{1E85}\u{1E87}\u{1E89}\u{1E8B}\u{1E8D}\u{1E8F}\u{1E91}\u{1E93}\u{1E95}-\u{1E9D}\u{1E9F}\u{1EA1}\u{1EA3}\u{1EA5}\u{1EA7}\u{1EA9}\u{1EAB}\u{1EAD}\u{1EAF}\u{1EB1}\u{1EB3}\u{1EB5}\u{1EB7}\u{1EB9}\u{1EBB}\u{1EBD}\u{1EBF}\u{1EC1}\u{1EC3}\u{1EC5}\u{1EC7}\u{1EC9}\u{1ECB}\u{1ECD}\u{1ECF}\u{1ED1}\u{1ED3}\u{1ED5}\u{1ED7}\u{1ED9}\u{1EDB}\u{1EDD}\u{1EDF}\u{1EE1}\u{1EE3}\u{1EE5}\u{1EE7}\u{1EE9}\u{1EEB}\u{1EED}\u{1EEF}\u{1EF1}\u{1EF3}\u{1EF5}\u{1EF7}\u{1EF9}\u{1EFB}\u{1EFD}\u{1EFF}-\u{1F07}\u{1F10}-\u{1F15}\u{1F20}-\u{1F27}\u{1F30}-\u{1F37}\u{1F40}-\u{1F45}\u{1F50}-\u{1F57}\u{1F60}-\u{1F67}\u{1F70}-\u{1F7D}\u{1F80}-\u{1F87}\u{1F90}-\u{1F97}\u{1FA0}-\u{1FA7}\u{1FB0}-\u{1FB4}\u{1FB6}-\u{1FB7}\u{1FBE}\u{1FC2}-\u{1FC4}\u{1FC6}-\u{1FC7}\u{1FD0}-\u{1FD3}\u{1FD6}-\u{1FD7}\u{1FE0}-\u{1FE7}\u{1FF2}-\u{1FF4}\u{1FF6}-\u{1FF7}\u{210A}\u{210E}-\u{210F}\u{2113}\u{212F}\u{2134}\u{2139}\u{213C}-\u{213D}\u{2146}-\u{2149}\u{214E}\u{2184}\u{2C30}-\u{2C5E}\u{2C61}\u{2C65}-\u{2C66}\u{2C68}\u{2C6A}\u{2C6C}\u{2C71}\u{2C73}-\u{2C74}\u{2C76}-\u{2C7B}\u{2C81}\u{2C83}\u{2C85}\u{2C87}\u{2C89}\u{2C8B}\u{2C8D}\u{2C8F}\u{2C91}\u{2C93}\u{2C95}\u{2C97}\u{2C99}\u{2C9B}\u{2C9D}\u{2C9F}\u{2CA1}\u{2CA3}\u{2CA5}\u{2CA7}\u{2CA9}\u{2CAB}\u{2CAD}\u{2CAF}\u{2CB1}\u{2CB3}\u{2CB5}\u{2CB7}\u{2CB9}\u{2CBB}\u{2CBD}\u{2CBF}\u{2CC1}\u{2CC3}\u{2CC5}\u{2CC7}\u{2CC9}\u{2CCB}\u{2CCD}\u{2CCF}\u{2CD1}\u{2CD3}\u{2CD5}\u{2CD7}\u{2CD9}\u{2CDB}\u{2CDD}\u{2CDF}\u{2CE1}\u{2CE3}-\u{2CE4}\u{2CEC}\u{2CEE}\u{2CF3}\u{2D00}-\u{2D25}\u{2D27}\u{2D2D}\u{A641}\u{A643}\u{A645}\u{A647}\u{A649}\u{A64B}\u{A64D}\u{A64F}\u{A651}\u{A653}\u{A655}\u{A657}\u{A659}\u{A65B}\u{A65D}\u{A65F}\u{A661}\u{A663}\u{A665}\u{A667}\u{A669}\u{A66B}\u{A66D}\u{A681}\u{A683}\u{A685}\u{A687}\u{A689}\u{A68B}\u{A68D}\u{A68F}\u{A691}\u{A693}\u{A695}\u{A697}\u{A699}\u{A69B}\u{A723}\u{A725}\u{A727}\u{A729}\u{A72B}\u{A72D}\u{A72F}-\u{A731}\u{A733}\u{A735}\u{A737}\u{A739}\u{A73B}\u{A73D}\u{A73F}\u{A741}\u{A743}\u{A745}\u{A747}\u{A749}\u{A74B}\u{A74D}\u{A74F}\u{A751}\u{A753}\u{A755}\u{A757}\u{A759}\u{A75B}\u{A75D}\u{A75F}\u{A761}\u{A763}\u{A765}\u{A767}\u{A769}\u{A76B}\u{A76D}\u{A76F}\u{A771}-\u{A778}\u{A77A}\u{A77C}\u{A77F}\u{A781}\u{A783}\u{A785}\u{A787}\u{A78C}\u{A78E}\u{A791}\u{A793}-\u{A795}\u{A797}\u{A799}\u{A79B}\u{A79D}\u{A79F}\u{A7A1}\u{A7A3}\u{A7A5}\u{A7A7}\u{A7A9}\u{A7AF}\u{A7B5}\u{A7B7}\u{A7B9}\u{A7BB}\u{A7BD}\u{A7BF}\u{A7C3}\u{A7C8}\u{A7CA}\u{A7F6}\u{A7FA}\u{AB30}-\u{AB5A}\u{AB60}-\u{AB68}\u{AB70}-\u{ABBF}\u{FB00}-\u{FB06}\u{FB13}-\u{FB17}\u{FF41}-\u{FF5A}\u{10428}-\u{1044F}\u{104D8}-\u{104FB}\u{10CC0}-\u{10CF2}\u{118C0}-\u{118DF}\u{16E60}-\u{16E7F}\u{1D41A}-\u{1D433}\u{1D44E}-\u{1D454}\u{1D456}-\u{1D467}\u{1D482}-\u{1D49B}\u{1D4B6}-\u{1D4B9}\u{1D4BB}\u{1D4BD}-\u{1D4C3}\u{1D4C5}-\u{1D4CF}\u{1D4EA}-\u{1D503}\u{1D51E}-\u{1D537}\u{1D552}-\u{1D56B}\u{1D586}-\u{1D59F}\u{1D5BA}-\u{1D5D3}\u{1D5EE}-\u{1D607}\u{1D622}-\u{1D63B}\u{1D656}-\u{1D66F}\u{1D68A}-\u{1D6A5}\u{1D6C2}-\u{1D6DA}\u{1D6DC}-\u{1D6E1}\u{1D6FC}-\u{1D714}\u{1D716}-\u{1D71B}\u{1D736}-\u{1D74E}\u{1D750}-\u{1D755}\u{1D770}-\u{1D788}\u{1D78A}-\u{1D78F}\u{1D7AA}-\u{1D7C2}\u{1D7C4}-\u{1D7C9}\u{1D7CB}\u{1E922}-\u{1E943}] Lt [\u{01C5}\u{01C8}\u{01CB}\u{01F2}\u{1F88}-\u{1F8F}\u{1F98}-\u{1F9F}\u{1FA8}-\u{1FAF}\u{1FBC}\u{1FCC}\u{1FFC}] Lm [\u{02B0}-\u{02C1}\u{02C6}-\u{02D1}\u{02E0}-\u{02E4}\u{02EC}\u{02EE}\u{0374}\u{037A}\u{0559}\u{0640}\u{06E5}-\u{06E6}\u{07F4}-\u{07F5}\u{07FA}\u{081A}\u{0824}\u{0828}\u{0971}\u{0E46}\u{0EC6}\u{10FC}\u{17D7}\u{1843}\u{1AA7}\u{1C78}-\u{1C7D}\u{1D2C}-\u{1D6A}\u{1D78}\u{1D9B}-\u{1DBF}\u{2071}\u{207F}\u{2090}-\u{209C}\u{2C7C}-\u{2C7D}\u{2D6F}\u{2E2F}\u{3005}\u{3031}-\u{3035}\u{303B}\u{309D}-\u{309E}\u{30FC}-\u{30FE}\u{A015}\u{A4F8}-\u{A4FD}\u{A60C}\u{A67F}\u{A69C}-\u{A69D}\u{A717}-\u{A71F}\u{A770}\u{A788}\u{A7F8}-\u{A7F9}\u{A9CF}\u{A9E6}\u{AA70}\u{AADD}\u{AAF3}-\u{AAF4}\u{AB5C}-\u{AB5F}\u{AB69}\u{FF70}\u{FF9E}-\u{FF9F}\u{16B40}-\u{16B43}\u{16F93}-\u{16F9F}\u{16FE0}-\u{16FE1}\u{16FE3}\u{1E137}-\u{1E13D}\u{1E94B}] Lo [\u{00AA}\u{00BA}\u{01BB}\u{01C0}-\u{01C3}\u{0294}\u{05D0}-\u{05EA}\u{05EF}-\u{05F2}\u{0620}-\u{063F}\u{0641}-\u{064A}\u{066E}-\u{066F}\u{0671}-\u{06D3}\u{06D5}\u{06EE}-\u{06EF}\u{06FA}-\u{06FC}\u{06FF}\u{0710}\u{0712}-\u{072F}\u{074D}-\u{07A5}\u{07B1}\u{07CA}-\u{07EA}\u{0800}-\u{0815}\u{0840}-\u{0858}\u{0860}-\u{086A}\u{08A0}-\u{08B4}\u{08B6}-\u{08C7}\u{0904}-\u{0939}\u{093D}\u{0950}\u{0958}-\u{0961}\u{0972}-\u{0980}\u{0985}-\u{098C}\u{098F}-\u{0990}\u{0993}-\u{09A8}\u{09AA}-\u{09B0}\u{09B2}\u{09B6}-\u{09B9}\u{09BD}\u{09CE}\u{09DC}-\u{09DD}\u{09DF}-\u{09E1}\u{09F0}-\u{09F1}\u{09FC}\u{0A05}-\u{0A0A}\u{0A0F}-\u{0A10}\u{0A13}-\u{0A28}\u{0A2A}-\u{0A30}\u{0A32}-\u{0A33}\u{0A35}-\u{0A36}\u{0A38}-\u{0A39}\u{0A59}-\u{0A5C}\u{0A5E}\u{0A72}-\u{0A74}\u{0A85}-\u{0A8D}\u{0A8F}-\u{0A91}\u{0A93}-\u{0AA8}\u{0AAA}-\u{0AB0}\u{0AB2}-\u{0AB3}\u{0AB5}-\u{0AB9}\u{0ABD}\u{0AD0}\u{0AE0}-\u{0AE1}\u{0AF9}\u{0B05}-\u{0B0C}\u{0B0F}-\u{0B10}\u{0B13}-\u{0B28}\u{0B2A}-\u{0B30}\u{0B32}-\u{0B33}\u{0B35}-\u{0B39}\u{0B3D}\u{0B5C}-\u{0B5D}\u{0B5F}-\u{0B61}\u{0B71}\u{0B83}\u{0B85}-\u{0B8A}\u{0B8E}-\u{0B90}\u{0B92}-\u{0B95}\u{0B99}-\u{0B9A}\u{0B9C}\u{0B9E}-\u{0B9F}\u{0BA3}-\u{0BA4}\u{0BA8}-\u{0BAA}\u{0BAE}-\u{0BB9}\u{0BD0}\u{0C05}-\u{0C0C}\u{0C0E}-\u{0C10}\u{0C12}-\u{0C28}\u{0C2A}-\u{0C39}\u{0C3D}\u{0C58}-\u{0C5A}\u{0C60}-\u{0C61}\u{0C80}\u{0C85}-\u{0C8C}\u{0C8E}-\u{0C90}\u{0C92}-\u{0CA8}\u{0CAA}-\u{0CB3}\u{0CB5}-\u{0CB9}\u{0CBD}\u{0CDE}\u{0CE0}-\u{0CE1}\u{0CF1}-\u{0CF2}\u{0D04}-\u{0D0C}\u{0D0E}-\u{0D10}\u{0D12}-\u{0D3A}\u{0D3D}\u{0D4E}\u{0D54}-\u{0D56}\u{0D5F}-\u{0D61}\u{0D7A}-\u{0D7F}\u{0D85}-\u{0D96}\u{0D9A}-\u{0DB1}\u{0DB3}-\u{0DBB}\u{0DBD}\u{0DC0}-\u{0DC6}\u{0E01}-\u{0E30}\u{0E32}-\u{0E33}\u{0E40}-\u{0E45}\u{0E81}-\u{0E82}\u{0E84}\u{0E86}-\u{0E8A}\u{0E8C}-\u{0EA3}\u{0EA5}\u{0EA7}-\u{0EB0}\u{0EB2}-\u{0EB3}\u{0EBD}\u{0EC0}-\u{0EC4}\u{0EDC}-\u{0EDF}\u{0F00}\u{0F40}-\u{0F47}\u{0F49}-\u{0F6C}\u{0F88}-\u{0F8C}\u{1000}-\u{102A}\u{103F}\u{1050}-\u{1055}\u{105A}-\u{105D}\u{1061}\u{1065}-\u{1066}\u{106E}-\u{1070}\u{1075}-\u{1081}\u{108E}\u{1100}-\u{1248}\u{124A}-\u{124D}\u{1250}-\u{1256}\u{1258}\u{125A}-\u{125D}\u{1260}-\u{1288}\u{128A}-\u{128D}\u{1290}-\u{12B0}\u{12B2}-\u{12B5}\u{12B8}-\u{12BE}\u{12C0}\u{12C2}-\u{12C5}\u{12C8}-\u{12D6}\u{12D8}-\u{1310}\u{1312}-\u{1315}\u{1318}-\u{135A}\u{1380}-\u{138F}\u{1401}-\u{166C}\u{166F}-\u{167F}\u{1681}-\u{169A}\u{16A0}-\u{16EA}\u{16F1}-\u{16F8}\u{1700}-\u{170C}\u{170E}-\u{1711}\u{1720}-\u{1731}\u{1740}-\u{1751}\u{1760}-\u{176C}\u{176E}-\u{1770}\u{1780}-\u{17B3}\u{17DC}\u{1820}-\u{1842}\u{1844}-\u{1878}\u{1880}-\u{1884}\u{1887}-\u{18A8}\u{18AA}\u{18B0}-\u{18F5}\u{1900}-\u{191E}\u{1950}-\u{196D}\u{1970}-\u{1974}\u{1980}-\u{19AB}\u{19B0}-\u{19C9}\u{1A00}-\u{1A16}\u{1A20}-\u{1A54}\u{1B05}-\u{1B33}\u{1B45}-\u{1B4B}\u{1B83}-\u{1BA0}\u{1BAE}-\u{1BAF}\u{1BBA}-\u{1BE5}\u{1C00}-\u{1C23}\u{1C4D}-\u{1C4F}\u{1C5A}-\u{1C77}\u{1CE9}-\u{1CEC}\u{1CEE}-\u{1CF3}\u{1CF5}-\u{1CF6}\u{1CFA}\u{2135}-\u{2138}\u{2D30}-\u{2D67}\u{2D80}-\u{2D96}\u{2DA0}-\u{2DA6}\u{2DA8}-\u{2DAE}\u{2DB0}-\u{2DB6}\u{2DB8}-\u{2DBE}\u{2DC0}-\u{2DC6}\u{2DC8}-\u{2DCE}\u{2DD0}-\u{2DD6}\u{2DD8}-\u{2DDE}\u{3006}\u{303C}\u{3041}-\u{3096}\u{309F}\u{30A1}-\u{30FA}\u{30FF}\u{3105}-\u{312F}\u{3131}-\u{318E}\u{31A0}-\u{31BF}\u{31F0}-\u{31FF}\u{3400}\u{4DBF}\u{4E00}\u{9FFC}\u{A000}-\u{A014}\u{A016}-\u{A48C}\u{A4D0}-\u{A4F7}\u{A500}-\u{A60B}\u{A610}-\u{A61F}\u{A62A}-\u{A62B}\u{A66E}\u{A6A0}-\u{A6E5}\u{A78F}\u{A7F7}\u{A7FB}-\u{A801}\u{A803}-\u{A805}\u{A807}-\u{A80A}\u{A80C}-\u{A822}\u{A840}-\u{A873}\u{A882}-\u{A8B3}\u{A8F2}-\u{A8F7}\u{A8FB}\u{A8FD}-\u{A8FE}\u{A90A}-\u{A925}\u{A930}-\u{A946}\u{A960}-\u{A97C}\u{A984}-\u{A9B2}\u{A9E0}-\u{A9E4}\u{A9E7}-\u{A9EF}\u{A9FA}-\u{A9FE}\u{AA00}-\u{AA28}\u{AA40}-\u{AA42}\u{AA44}-\u{AA4B}\u{AA60}-\u{AA6F}\u{AA71}-\u{AA76}\u{AA7A}\u{AA7E}-\u{AAAF}\u{AAB1}\u{AAB5}-\u{AAB6}\u{AAB9}-\u{AABD}\u{AAC0}\u{AAC2}\u{AADB}-\u{AADC}\u{AAE0}-\u{AAEA}\u{AAF2}\u{AB01}-\u{AB06}\u{AB09}-\u{AB0E}\u{AB11}-\u{AB16}\u{AB20}-\u{AB26}\u{AB28}-\u{AB2E}\u{ABC0}-\u{ABE2}\u{AC00}\u{D7A3}\u{D7B0}-\u{D7C6}\u{D7CB}-\u{D7FB}\u{F900}-\u{FA6D}\u{FA70}-\u{FAD9}\u{FB1D}\u{FB1F}-\u{FB28}\u{FB2A}-\u{FB36}\u{FB38}-\u{FB3C}\u{FB3E}\u{FB40}-\u{FB41}\u{FB43}-\u{FB44}\u{FB46}-\u{FBB1}\u{FBD3}-\u{FD3D}\u{FD50}-\u{FD8F}\u{FD92}-\u{FDC7}\u{FDF0}-\u{FDFB}\u{FE70}-\u{FE74}\u{FE76}-\u{FEFC}\u{FF66}-\u{FF6F}\u{FF71}-\u{FF9D}\u{FFA0}-\u{FFBE}\u{FFC2}-\u{FFC7}\u{FFCA}-\u{FFCF}\u{FFD2}-\u{FFD7}\u{FFDA}-\u{FFDC}\u{10000}-\u{1000B}\u{1000D}-\u{10026}\u{10028}-\u{1003A}\u{1003C}-\u{1003D}\u{1003F}-\u{1004D}\u{10050}-\u{1005D}\u{10080}-\u{100FA}\u{10280}-\u{1029C}\u{102A0}-\u{102D0}\u{10300}-\u{1031F}\u{1032D}-\u{10340}\u{10342}-\u{10349}\u{10350}-\u{10375}\u{10380}-\u{1039D}\u{103A0}-\u{103C3}\u{103C8}-\u{103CF}\u{10450}-\u{1049D}\u{10500}-\u{10527}\u{10530}-\u{10563}\u{10600}-\u{10736}\u{10740}-\u{10755}\u{10760}-\u{10767}\u{10800}-\u{10805}\u{10808}\u{1080A}-\u{10835}\u{10837}-\u{10838}\u{1083C}\u{1083F}-\u{10855}\u{10860}-\u{10876}\u{10880}-\u{1089E}\u{108E0}-\u{108F2}\u{108F4}-\u{108F5}\u{10900}-\u{10915}\u{10920}-\u{10939}\u{10980}-\u{109B7}\u{109BE}-\u{109BF}\u{10A00}\u{10A10}-\u{10A13}\u{10A15}-\u{10A17}\u{10A19}-\u{10A35}\u{10A60}-\u{10A7C}\u{10A80}-\u{10A9C}\u{10AC0}-\u{10AC7}\u{10AC9}-\u{10AE4}\u{10B00}-\u{10B35}\u{10B40}-\u{10B55}\u{10B60}-\u{10B72}\u{10B80}-\u{10B91}\u{10C00}-\u{10C48}\u{10D00}-\u{10D23}\u{10E80}-\u{10EA9}\u{10EB0}-\u{10EB1}\u{10F00}-\u{10F1C}\u{10F27}\u{10F30}-\u{10F45}\u{10FB0}-\u{10FC4}\u{10FE0}-\u{10FF6}\u{11003}-\u{11037}\u{11083}-\u{110AF}\u{110D0}-\u{110E8}\u{11103}-\u{11126}\u{11144}\u{11147}\u{11150}-\u{11172}\u{11176}\u{11183}-\u{111B2}\u{111C1}-\u{111C4}\u{111DA}\u{111DC}\u{11200}-\u{11211}\u{11213}-\u{1122B}\u{11280}-\u{11286}\u{11288}\u{1128A}-\u{1128D}\u{1128F}-\u{1129D}\u{1129F}-\u{112A8}\u{112B0}-\u{112DE}\u{11305}-\u{1130C}\u{1130F}-\u{11310}\u{11313}-\u{11328}\u{1132A}-\u{11330}\u{11332}-\u{11333}\u{11335}-\u{11339}\u{1133D}\u{11350}\u{1135D}-\u{11361}\u{11400}-\u{11434}\u{11447}-\u{1144A}\u{1145F}-\u{11461}\u{11480}-\u{114AF}\u{114C4}-\u{114C5}\u{114C7}\u{11580}-\u{115AE}\u{115D8}-\u{115DB}\u{11600}-\u{1162F}\u{11644}\u{11680}-\u{116AA}\u{116B8}\u{11700}-\u{1171A}\u{11800}-\u{1182B}\u{118FF}-\u{11906}\u{11909}\u{1190C}-\u{11913}\u{11915}-\u{11916}\u{11918}-\u{1192F}\u{1193F}\u{11941}\u{119A0}-\u{119A7}\u{119AA}-\u{119D0}\u{119E1}\u{119E3}\u{11A00}\u{11A0B}-\u{11A32}\u{11A3A}\u{11A50}\u{11A5C}-\u{11A89}\u{11A9D}\u{11AC0}-\u{11AF8}\u{11C00}-\u{11C08}\u{11C0A}-\u{11C2E}\u{11C40}\u{11C72}-\u{11C8F}\u{11D00}-\u{11D06}\u{11D08}-\u{11D09}\u{11D0B}-\u{11D30}\u{11D46}\u{11D60}-\u{11D65}\u{11D67}-\u{11D68}\u{11D6A}-\u{11D89}\u{11D98}\u{11EE0}-\u{11EF2}\u{11FB0}\u{12000}-\u{12399}\u{12480}-\u{12543}\u{13000}-\u{1342E}\u{14400}-\u{14646}\u{16800}-\u{16A38}\u{16A40}-\u{16A5E}\u{16AD0}-\u{16AED}\u{16B00}-\u{16B2F}\u{16B63}-\u{16B77}\u{16B7D}-\u{16B8F}\u{16F00}-\u{16F4A}\u{16F50}\u{17000}\u{187F7}\u{18800}-\u{18CD5}\u{18D00}\u{18D08}\u{1B000}-\u{1B11E}\u{1B150}-\u{1B152}\u{1B164}-\u{1B167}\u{1B170}-\u{1B2FB}\u{1BC00}-\u{1BC6A}\u{1BC70}-\u{1BC7C}\u{1BC80}-\u{1BC88}\u{1BC90}-\u{1BC99}\u{1E100}-\u{1E12C}\u{1E14E}\u{1E2C0}-\u{1E2EB}\u{1E800}-\u{1E8C4}\u{1EE00}-\u{1EE03}\u{1EE05}-\u{1EE1F}\u{1EE21}-\u{1EE22}\u{1EE24}\u{1EE27}\u{1EE29}-\u{1EE32}\u{1EE34}-\u{1EE37}\u{1EE39}\u{1EE3B}\u{1EE42}\u{1EE47}\u{1EE49}\u{1EE4B}\u{1EE4D}-\u{1EE4F}\u{1EE51}-\u{1EE52}\u{1EE54}\u{1EE57}\u{1EE59}\u{1EE5B}\u{1EE5D}\u{1EE5F}\u{1EE61}-\u{1EE62}\u{1EE64}\u{1EE67}-\u{1EE6A}\u{1EE6C}-\u{1EE72}\u{1EE74}-\u{1EE77}\u{1EE79}-\u{1EE7C}\u{1EE7E}\u{1EE80}-\u{1EE89}\u{1EE8B}-\u{1EE9B}\u{1EEA1}-\u{1EEA3}\u{1EEA5}-\u{1EEA9}\u{1EEAB}-\u{1EEBB}\u{20000}\u{2A6DD}\u{2A700}\u{2B734}\u{2B740}\u{2B81D}\u{2B820}\u{2CEA1}\u{2CEB0}\u{2EBE0}\u{2F800}-\u{2FA1D}\u{30000}\u{3134A}] Mn [\u{0300}-\u{036F}\u{0483}-\u{0487}\u{0591}-\u{05BD}\u{05BF}\u{05C1}-\u{05C2}\u{05C4}-\u{05C5}\u{05C7}\u{0610}-\u{061A}\u{064B}-\u{065F}\u{0670}\u{06D6}-\u{06DC}\u{06DF}-\u{06E4}\u{06E7}-\u{06E8}\u{06EA}-\u{06ED}\u{0711}\u{0730}-\u{074A}\u{07A6}-\u{07B0}\u{07EB}-\u{07F3}\u{07FD}\u{0816}-\u{0819}\u{081B}-\u{0823}\u{0825}-\u{0827}\u{0829}-\u{082D}\u{0859}-\u{085B}\u{08D3}-\u{08E1}\u{08E3}-\u{0902}\u{093A}\u{093C}\u{0941}-\u{0948}\u{094D}\u{0951}-\u{0957}\u{0962}-\u{0963}\u{0981}\u{09BC}\u{09C1}-\u{09C4}\u{09CD}\u{09E2}-\u{09E3}\u{09FE}\u{0A01}-\u{0A02}\u{0A3C}\u{0A41}-\u{0A42}\u{0A47}-\u{0A48}\u{0A4B}-\u{0A4D}\u{0A51}\u{0A70}-\u{0A71}\u{0A75}\u{0A81}-\u{0A82}\u{0ABC}\u{0AC1}-\u{0AC5}\u{0AC7}-\u{0AC8}\u{0ACD}\u{0AE2}-\u{0AE3}\u{0AFA}-\u{0AFF}\u{0B01}\u{0B3C}\u{0B3F}\u{0B41}-\u{0B44}\u{0B4D}\u{0B55}-\u{0B56}\u{0B62}-\u{0B63}\u{0B82}\u{0BC0}\u{0BCD}\u{0C00}\u{0C04}\u{0C3E}-\u{0C40}\u{0C46}-\u{0C48}\u{0C4A}-\u{0C4D}\u{0C55}-\u{0C56}\u{0C62}-\u{0C63}\u{0C81}\u{0CBC}\u{0CBF}\u{0CC6}\u{0CCC}-\u{0CCD}\u{0CE2}-\u{0CE3}\u{0D00}-\u{0D01}\u{0D3B}-\u{0D3C}\u{0D41}-\u{0D44}\u{0D4D}\u{0D62}-\u{0D63}\u{0D81}\u{0DCA}\u{0DD2}-\u{0DD4}\u{0DD6}\u{0E31}\u{0E34}-\u{0E3A}\u{0E47}-\u{0E4E}\u{0EB1}\u{0EB4}-\u{0EBC}\u{0EC8}-\u{0ECD}\u{0F18}-\u{0F19}\u{0F35}\u{0F37}\u{0F39}\u{0F71}-\u{0F7E}\u{0F80}-\u{0F84}\u{0F86}-\u{0F87}\u{0F8D}-\u{0F97}\u{0F99}-\u{0FBC}\u{0FC6}\u{102D}-\u{1030}\u{1032}-\u{1037}\u{1039}-\u{103A}\u{103D}-\u{103E}\u{1058}-\u{1059}\u{105E}-\u{1060}\u{1071}-\u{1074}\u{1082}\u{1085}-\u{1086}\u{108D}\u{109D}\u{135D}-\u{135F}\u{1712}-\u{1714}\u{1732}-\u{1734}\u{1752}-\u{1753}\u{1772}-\u{1773}\u{17B4}-\u{17B5}\u{17B7}-\u{17BD}\u{17C6}\u{17C9}-\u{17D3}\u{17DD}\u{180B}-\u{180D}\u{1885}-\u{1886}\u{18A9}\u{1920}-\u{1922}\u{1927}-\u{1928}\u{1932}\u{1939}-\u{193B}\u{1A17}-\u{1A18}\u{1A1B}\u{1A56}\u{1A58}-\u{1A5E}\u{1A60}\u{1A62}\u{1A65}-\u{1A6C}\u{1A73}-\u{1A7C}\u{1A7F}\u{1AB0}-\u{1ABD}\u{1ABF}-\u{1AC0}\u{1B00}-\u{1B03}\u{1B34}\u{1B36}-\u{1B3A}\u{1B3C}\u{1B42}\u{1B6B}-\u{1B73}\u{1B80}-\u{1B81}\u{1BA2}-\u{1BA5}\u{1BA8}-\u{1BA9}\u{1BAB}-\u{1BAD}\u{1BE6}\u{1BE8}-\u{1BE9}\u{1BED}\u{1BEF}-\u{1BF1}\u{1C2C}-\u{1C33}\u{1C36}-\u{1C37}\u{1CD0}-\u{1CD2}\u{1CD4}-\u{1CE0}\u{1CE2}-\u{1CE8}\u{1CED}\u{1CF4}\u{1CF8}-\u{1CF9}\u{1DC0}-\u{1DF9}\u{1DFB}-\u{1DFF}\u{20D0}-\u{20DC}\u{20E1}\u{20E5}-\u{20F0}\u{2CEF}-\u{2CF1}\u{2D7F}\u{2DE0}-\u{2DFF}\u{302A}-\u{302D}\u{3099}-\u{309A}\u{A66F}\u{A674}-\u{A67D}\u{A69E}-\u{A69F}\u{A6F0}-\u{A6F1}\u{A802}\u{A806}\u{A80B}\u{A825}-\u{A826}\u{A82C}\u{A8C4}-\u{A8C5}\u{A8E0}-\u{A8F1}\u{A8FF}\u{A926}-\u{A92D}\u{A947}-\u{A951}\u{A980}-\u{A982}\u{A9B3}\u{A9B6}-\u{A9B9}\u{A9BC}-\u{A9BD}\u{A9E5}\u{AA29}-\u{AA2E}\u{AA31}-\u{AA32}\u{AA35}-\u{AA36}\u{AA43}\u{AA4C}\u{AA7C}\u{AAB0}\u{AAB2}-\u{AAB4}\u{AAB7}-\u{AAB8}\u{AABE}-\u{AABF}\u{AAC1}\u{AAEC}-\u{AAED}\u{AAF6}\u{ABE5}\u{ABE8}\u{ABED}\u{FB1E}\u{FE00}-\u{FE0F}\u{FE20}-\u{FE2F}\u{101FD}\u{102E0}\u{10376}-\u{1037A}\u{10A01}-\u{10A03}\u{10A05}-\u{10A06}\u{10A0C}-\u{10A0F}\u{10A38}-\u{10A3A}\u{10A3F}\u{10AE5}-\u{10AE6}\u{10D24}-\u{10D27}\u{10EAB}-\u{10EAC}\u{10F46}-\u{10F50}\u{11001}\u{11038}-\u{11046}\u{1107F}-\u{11081}\u{110B3}-\u{110B6}\u{110B9}-\u{110BA}\u{11100}-\u{11102}\u{11127}-\u{1112B}\u{1112D}-\u{11134}\u{11173}\u{11180}-\u{11181}\u{111B6}-\u{111BE}\u{111C9}-\u{111CC}\u{111CF}\u{1122F}-\u{11231}\u{11234}\u{11236}-\u{11237}\u{1123E}\u{112DF}\u{112E3}-\u{112EA}\u{11300}-\u{11301}\u{1133B}-\u{1133C}\u{11340}\u{11366}-\u{1136C}\u{11370}-\u{11374}\u{11438}-\u{1143F}\u{11442}-\u{11444}\u{11446}\u{1145E}\u{114B3}-\u{114B8}\u{114BA}\u{114BF}-\u{114C0}\u{114C2}-\u{114C3}\u{115B2}-\u{115B5}\u{115BC}-\u{115BD}\u{115BF}-\u{115C0}\u{115DC}-\u{115DD}\u{11633}-\u{1163A}\u{1163D}\u{1163F}-\u{11640}\u{116AB}\u{116AD}\u{116B0}-\u{116B5}\u{116B7}\u{1171D}-\u{1171F}\u{11722}-\u{11725}\u{11727}-\u{1172B}\u{1182F}-\u{11837}\u{11839}-\u{1183A}\u{1193B}-\u{1193C}\u{1193E}\u{11943}\u{119D4}-\u{119D7}\u{119DA}-\u{119DB}\u{119E0}\u{11A01}-\u{11A0A}\u{11A33}-\u{11A38}\u{11A3B}-\u{11A3E}\u{11A47}\u{11A51}-\u{11A56}\u{11A59}-\u{11A5B}\u{11A8A}-\u{11A96}\u{11A98}-\u{11A99}\u{11C30}-\u{11C36}\u{11C38}-\u{11C3D}\u{11C3F}\u{11C92}-\u{11CA7}\u{11CAA}-\u{11CB0}\u{11CB2}-\u{11CB3}\u{11CB5}-\u{11CB6}\u{11D31}-\u{11D36}\u{11D3A}\u{11D3C}-\u{11D3D}\u{11D3F}-\u{11D45}\u{11D47}\u{11D90}-\u{11D91}\u{11D95}\u{11D97}\u{11EF3}-\u{11EF4}\u{16AF0}-\u{16AF4}\u{16B30}-\u{16B36}\u{16F4F}\u{16F8F}-\u{16F92}\u{16FE4}\u{1BC9D}-\u{1BC9E}\u{1D167}-\u{1D169}\u{1D17B}-\u{1D182}\u{1D185}-\u{1D18B}\u{1D1AA}-\u{1D1AD}\u{1D242}-\u{1D244}\u{1DA00}-\u{1DA36}\u{1DA3B}-\u{1DA6C}\u{1DA75}\u{1DA84}\u{1DA9B}-\u{1DA9F}\u{1DAA1}-\u{1DAAF}\u{1E000}-\u{1E006}\u{1E008}-\u{1E018}\u{1E01B}-\u{1E021}\u{1E023}-\u{1E024}\u{1E026}-\u{1E02A}\u{1E130}-\u{1E136}\u{1E2EC}-\u{1E2EF}\u{1E8D0}-\u{1E8D6}\u{1E944}-\u{1E94A}\u{E0100}-\u{E01EF}] Mc [\u{0903}\u{093B}\u{093E}-\u{0940}\u{0949}-\u{094C}\u{094E}-\u{094F}\u{0982}-\u{0983}\u{09BE}-\u{09C0}\u{09C7}-\u{09C8}\u{09CB}-\u{09CC}\u{09D7}\u{0A03}\u{0A3E}-\u{0A40}\u{0A83}\u{0ABE}-\u{0AC0}\u{0AC9}\u{0ACB}-\u{0ACC}\u{0B02}-\u{0B03}\u{0B3E}\u{0B40}\u{0B47}-\u{0B48}\u{0B4B}-\u{0B4C}\u{0B57}\u{0BBE}-\u{0BBF}\u{0BC1}-\u{0BC2}\u{0BC6}-\u{0BC8}\u{0BCA}-\u{0BCC}\u{0BD7}\u{0C01}-\u{0C03}\u{0C41}-\u{0C44}\u{0C82}-\u{0C83}\u{0CBE}\u{0CC0}-\u{0CC4}\u{0CC7}-\u{0CC8}\u{0CCA}-\u{0CCB}\u{0CD5}-\u{0CD6}\u{0D02}-\u{0D03}\u{0D3E}-\u{0D40}\u{0D46}-\u{0D48}\u{0D4A}-\u{0D4C}\u{0D57}\u{0D82}-\u{0D83}\u{0DCF}-\u{0DD1}\u{0DD8}-\u{0DDF}\u{0DF2}-\u{0DF3}\u{0F3E}-\u{0F3F}\u{0F7F}\u{102B}-\u{102C}\u{1031}\u{1038}\u{103B}-\u{103C}\u{1056}-\u{1057}\u{1062}-\u{1064}\u{1067}-\u{106D}\u{1083}-\u{1084}\u{1087}-\u{108C}\u{108F}\u{109A}-\u{109C}\u{17B6}\u{17BE}-\u{17C5}\u{17C7}-\u{17C8}\u{1923}-\u{1926}\u{1929}-\u{192B}\u{1930}-\u{1931}\u{1933}-\u{1938}\u{1A19}-\u{1A1A}\u{1A55}\u{1A57}\u{1A61}\u{1A63}-\u{1A64}\u{1A6D}-\u{1A72}\u{1B04}\u{1B35}\u{1B3B}\u{1B3D}-\u{1B41}\u{1B43}-\u{1B44}\u{1B82}\u{1BA1}\u{1BA6}-\u{1BA7}\u{1BAA}\u{1BE7}\u{1BEA}-\u{1BEC}\u{1BEE}\u{1BF2}-\u{1BF3}\u{1C24}-\u{1C2B}\u{1C34}-\u{1C35}\u{1CE1}\u{1CF7}\u{302E}-\u{302F}\u{A823}-\u{A824}\u{A827}\u{A880}-\u{A881}\u{A8B4}-\u{A8C3}\u{A952}-\u{A953}\u{A983}\u{A9B4}-\u{A9B5}\u{A9BA}-\u{A9BB}\u{A9BE}-\u{A9C0}\u{AA2F}-\u{AA30}\u{AA33}-\u{AA34}\u{AA4D}\u{AA7B}\u{AA7D}\u{AAEB}\u{AAEE}-\u{AAEF}\u{AAF5}\u{ABE3}-\u{ABE4}\u{ABE6}-\u{ABE7}\u{ABE9}-\u{ABEA}\u{ABEC}\u{11000}\u{11002}\u{11082}\u{110B0}-\u{110B2}\u{110B7}-\u{110B8}\u{1112C}\u{11145}-\u{11146}\u{11182}\u{111B3}-\u{111B5}\u{111BF}-\u{111C0}\u{111CE}\u{1122C}-\u{1122E}\u{11232}-\u{11233}\u{11235}\u{112E0}-\u{112E2}\u{11302}-\u{11303}\u{1133E}-\u{1133F}\u{11341}-\u{11344}\u{11347}-\u{11348}\u{1134B}-\u{1134D}\u{11357}\u{11362}-\u{11363}\u{11435}-\u{11437}\u{11440}-\u{11441}\u{11445}\u{114B0}-\u{114B2}\u{114B9}\u{114BB}-\u{114BE}\u{114C1}\u{115AF}-\u{115B1}\u{115B8}-\u{115BB}\u{115BE}\u{11630}-\u{11632}\u{1163B}-\u{1163C}\u{1163E}\u{116AC}\u{116AE}-\u{116AF}\u{116B6}\u{11720}-\u{11721}\u{11726}\u{1182C}-\u{1182E}\u{11838}\u{11930}-\u{11935}\u{11937}-\u{11938}\u{1193D}\u{11940}\u{11942}\u{119D1}-\u{119D3}\u{119DC}-\u{119DF}\u{119E4}\u{11A39}\u{11A57}-\u{11A58}\u{11A97}\u{11C2F}\u{11C3E}\u{11CA9}\u{11CB1}\u{11CB4}\u{11D8A}-\u{11D8E}\u{11D93}-\u{11D94}\u{11D96}\u{11EF5}-\u{11EF6}\u{16F51}-\u{16F87}\u{16FF0}-\u{16FF1}\u{1D165}-\u{1D166}\u{1D16D}-\u{1D172}] Me [\u{0488}-\u{0489}\u{1ABE}\u{20DD}-\u{20E0}\u{20E2}-\u{20E4}\u{A670}-\u{A672}] Nd [\u{0030}-\u{0039}\u{0660}-\u{0669}\u{06F0}-\u{06F9}\u{07C0}-\u{07C9}\u{0966}-\u{096F}\u{09E6}-\u{09EF}\u{0A66}-\u{0A6F}\u{0AE6}-\u{0AEF}\u{0B66}-\u{0B6F}\u{0BE6}-\u{0BEF}\u{0C66}-\u{0C6F}\u{0CE6}-\u{0CEF}\u{0D66}-\u{0D6F}\u{0DE6}-\u{0DEF}\u{0E50}-\u{0E59}\u{0ED0}-\u{0ED9}\u{0F20}-\u{0F29}\u{1040}-\u{1049}\u{1090}-\u{1099}\u{17E0}-\u{17E9}\u{1810}-\u{1819}\u{1946}-\u{194F}\u{19D0}-\u{19D9}\u{1A80}-\u{1A89}\u{1A90}-\u{1A99}\u{1B50}-\u{1B59}\u{1BB0}-\u{1BB9}\u{1C40}-\u{1C49}\u{1C50}-\u{1C59}\u{A620}-\u{A629}\u{A8D0}-\u{A8D9}\u{A900}-\u{A909}\u{A9D0}-\u{A9D9}\u{A9F0}-\u{A9F9}\u{AA50}-\u{AA59}\u{ABF0}-\u{ABF9}\u{FF10}-\u{FF19}\u{104A0}-\u{104A9}\u{10D30}-\u{10D39}\u{11066}-\u{1106F}\u{110F0}-\u{110F9}\u{11136}-\u{1113F}\u{111D0}-\u{111D9}\u{112F0}-\u{112F9}\u{11450}-\u{11459}\u{114D0}-\u{114D9}\u{11650}-\u{11659}\u{116C0}-\u{116C9}\u{11730}-\u{11739}\u{118E0}-\u{118E9}\u{11950}-\u{11959}\u{11C50}-\u{11C59}\u{11D50}-\u{11D59}\u{11DA0}-\u{11DA9}\u{16A60}-\u{16A69}\u{16B50}-\u{16B59}\u{1D7CE}-\u{1D7FF}\u{1E140}-\u{1E149}\u{1E2F0}-\u{1E2F9}\u{1E950}-\u{1E959}\u{1FBF0}-\u{1FBF9}] Nl [\u{16EE}-\u{16F0}\u{2160}-\u{2182}\u{2185}-\u{2188}\u{3007}\u{3021}-\u{3029}\u{3038}-\u{303A}\u{A6E6}-\u{A6EF}\u{10140}-\u{10174}\u{10341}\u{1034A}\u{103D1}-\u{103D5}\u{12400}-\u{1246E}] No [\u{00B2}-\u{00B3}\u{00B9}\u{00BC}-\u{00BE}\u{09F4}-\u{09F9}\u{0B72}-\u{0B77}\u{0BF0}-\u{0BF2}\u{0C78}-\u{0C7E}\u{0D58}-\u{0D5E}\u{0D70}-\u{0D78}\u{0F2A}-\u{0F33}\u{1369}-\u{137C}\u{17F0}-\u{17F9}\u{19DA}\u{2070}\u{2074}-\u{2079}\u{2080}-\u{2089}\u{2150}-\u{215F}\u{2189}\u{2460}-\u{249B}\u{24EA}-\u{24FF}\u{2776}-\u{2793}\u{2CFD}\u{3192}-\u{3195}\u{3220}-\u{3229}\u{3248}-\u{324F}\u{3251}-\u{325F}\u{3280}-\u{3289}\u{32B1}-\u{32BF}\u{A830}-\u{A835}\u{10107}-\u{10133}\u{10175}-\u{10178}\u{1018A}-\u{1018B}\u{102E1}-\u{102FB}\u{10320}-\u{10323}\u{10858}-\u{1085F}\u{10879}-\u{1087F}\u{108A7}-\u{108AF}\u{108FB}-\u{108FF}\u{10916}-\u{1091B}\u{109BC}-\u{109BD}\u{109C0}-\u{109CF}\u{109D2}-\u{109FF}\u{10A40}-\u{10A48}\u{10A7D}-\u{10A7E}\u{10A9D}-\u{10A9F}\u{10AEB}-\u{10AEF}\u{10B58}-\u{10B5F}\u{10B78}-\u{10B7F}\u{10BA9}-\u{10BAF}\u{10CFA}-\u{10CFF}\u{10E60}-\u{10E7E}\u{10F1D}-\u{10F26}\u{10F51}-\u{10F54}\u{10FC5}-\u{10FCB}\u{11052}-\u{11065}\u{111E1}-\u{111F4}\u{1173A}-\u{1173B}\u{118EA}-\u{118F2}\u{11C5A}-\u{11C6C}\u{11FC0}-\u{11FD4}\u{16B5B}-\u{16B61}\u{16E80}-\u{16E96}\u{1D2E0}-\u{1D2F3}\u{1D360}-\u{1D378}\u{1E8C7}-\u{1E8CF}\u{1EC71}-\u{1ECAB}\u{1ECAD}-\u{1ECAF}\u{1ECB1}-\u{1ECB4}\u{1ED01}-\u{1ED2D}\u{1ED2F}-\u{1ED3D}\u{1F100}-\u{1F10C}] Pc [\u{005F}\u{203F}-\u{2040}\u{2054}\u{FE33}-\u{FE34}\u{FE4D}-\u{FE4F}\u{FF3F}] Pd [\u{002D}\u{058A}\u{05BE}\u{1400}\u{1806}\u{2010}-\u{2015}\u{2E17}\u{2E1A}\u{2E3A}-\u{2E3B}\u{2E40}\u{301C}\u{3030}\u{30A0}\u{FE31}-\u{FE32}\u{FE58}\u{FE63}\u{FF0D}\u{10EAD}] Ps [\u{0028}\u{005B}\u{007B}\u{0F3A}\u{0F3C}\u{169B}\u{201A}\u{201E}\u{2045}\u{207D}\u{208D}\u{2308}\u{230A}\u{2329}\u{2768}\u{276A}\u{276C}\u{276E}\u{2770}\u{2772}\u{2774}\u{27C5}\u{27E6}\u{27E8}\u{27EA}\u{27EC}\u{27EE}\u{2983}\u{2985}\u{2987}\u{2989}\u{298B}\u{298D}\u{298F}\u{2991}\u{2993}\u{2995}\u{2997}\u{29D8}\u{29DA}\u{29FC}\u{2E22}\u{2E24}\u{2E26}\u{2E28}\u{2E42}\u{3008}\u{300A}\u{300C}\u{300E}\u{3010}\u{3014}\u{3016}\u{3018}\u{301A}\u{301D}\u{FD3F}\u{FE17}\u{FE35}\u{FE37}\u{FE39}\u{FE3B}\u{FE3D}\u{FE3F}\u{FE41}\u{FE43}\u{FE47}\u{FE59}\u{FE5B}\u{FE5D}\u{FF08}\u{FF3B}\u{FF5B}\u{FF5F}\u{FF62}] Pe [\u{0029}\u{005D}\u{007D}\u{0F3B}\u{0F3D}\u{169C}\u{2046}\u{207E}\u{208E}\u{2309}\u{230B}\u{232A}\u{2769}\u{276B}\u{276D}\u{276F}\u{2771}\u{2773}\u{2775}\u{27C6}\u{27E7}\u{27E9}\u{27EB}\u{27ED}\u{27EF}\u{2984}\u{2986}\u{2988}\u{298A}\u{298C}\u{298E}\u{2990}\u{2992}\u{2994}\u{2996}\u{2998}\u{29D9}\u{29DB}\u{29FD}\u{2E23}\u{2E25}\u{2E27}\u{2E29}\u{3009}\u{300B}\u{300D}\u{300F}\u{3011}\u{3015}\u{3017}\u{3019}\u{301B}\u{301E}-\u{301F}\u{FD3E}\u{FE18}\u{FE36}\u{FE38}\u{FE3A}\u{FE3C}\u{FE3E}\u{FE40}\u{FE42}\u{FE44}\u{FE48}\u{FE5A}\u{FE5C}\u{FE5E}\u{FF09}\u{FF3D}\u{FF5D}\u{FF60}\u{FF63}] Pi [\u{00AB}\u{2018}\u{201B}-\u{201C}\u{201F}\u{2039}\u{2E02}\u{2E04}\u{2E09}\u{2E0C}\u{2E1C}\u{2E20}] Pf [\u{00BB}\u{2019}\u{201D}\u{203A}\u{2E03}\u{2E05}\u{2E0A}\u{2E0D}\u{2E1D}\u{2E21}] Po [\u{0021}-\u{0023}\u{0025}-\u{0027}\u{002A}\u{002C}\u{002E}-\u{002F}\u{003A}-\u{003B}\u{003F}-\u{0040}\u{005C}\u{00A1}\u{00A7}\u{00B6}-\u{00B7}\u{00BF}\u{037E}\u{0387}\u{055A}-\u{055F}\u{0589}\u{05C0}\u{05C3}\u{05C6}\u{05F3}-\u{05F4}\u{0609}-\u{060A}\u{060C}-\u{060D}\u{061B}\u{061E}-\u{061F}\u{066A}-\u{066D}\u{06D4}\u{0700}-\u{070D}\u{07F7}-\u{07F9}\u{0830}-\u{083E}\u{085E}\u{0964}-\u{0965}\u{0970}\u{09FD}\u{0A76}\u{0AF0}\u{0C77}\u{0C84}\u{0DF4}\u{0E4F}\u{0E5A}-\u{0E5B}\u{0F04}-\u{0F12}\u{0F14}\u{0F85}\u{0FD0}-\u{0FD4}\u{0FD9}-\u{0FDA}\u{104A}-\u{104F}\u{10FB}\u{1360}-\u{1368}\u{166E}\u{16EB}-\u{16ED}\u{1735}-\u{1736}\u{17D4}-\u{17D6}\u{17D8}-\u{17DA}\u{1800}-\u{1805}\u{1807}-\u{180A}\u{1944}-\u{1945}\u{1A1E}-\u{1A1F}\u{1AA0}-\u{1AA6}\u{1AA8}-\u{1AAD}\u{1B5A}-\u{1B60}\u{1BFC}-\u{1BFF}\u{1C3B}-\u{1C3F}\u{1C7E}-\u{1C7F}\u{1CC0}-\u{1CC7}\u{1CD3}\u{2016}-\u{2017}\u{2020}-\u{2027}\u{2030}-\u{2038}\u{203B}-\u{203E}\u{2041}-\u{2043}\u{2047}-\u{2051}\u{2053}\u{2055}-\u{205E}\u{2CF9}-\u{2CFC}\u{2CFE}-\u{2CFF}\u{2D70}\u{2E00}-\u{2E01}\u{2E06}-\u{2E08}\u{2E0B}\u{2E0E}-\u{2E16}\u{2E18}-\u{2E19}\u{2E1B}\u{2E1E}-\u{2E1F}\u{2E2A}-\u{2E2E}\u{2E30}-\u{2E39}\u{2E3C}-\u{2E3F}\u{2E41}\u{2E43}-\u{2E4F}\u{2E52}\u{3001}-\u{3003}\u{303D}\u{30FB}\u{A4FE}-\u{A4FF}\u{A60D}-\u{A60F}\u{A673}\u{A67E}\u{A6F2}-\u{A6F7}\u{A874}-\u{A877}\u{A8CE}-\u{A8CF}\u{A8F8}-\u{A8FA}\u{A8FC}\u{A92E}-\u{A92F}\u{A95F}\u{A9C1}-\u{A9CD}\u{A9DE}-\u{A9DF}\u{AA5C}-\u{AA5F}\u{AADE}-\u{AADF}\u{AAF0}-\u{AAF1}\u{ABEB}\u{FE10}-\u{FE16}\u{FE19}\u{FE30}\u{FE45}-\u{FE46}\u{FE49}-\u{FE4C}\u{FE50}-\u{FE52}\u{FE54}-\u{FE57}\u{FE5F}-\u{FE61}\u{FE68}\u{FE6A}-\u{FE6B}\u{FF01}-\u{FF03}\u{FF05}-\u{FF07}\u{FF0A}\u{FF0C}\u{FF0E}-\u{FF0F}\u{FF1A}-\u{FF1B}\u{FF1F}-\u{FF20}\u{FF3C}\u{FF61}\u{FF64}-\u{FF65}\u{10100}-\u{10102}\u{1039F}\u{103D0}\u{1056F}\u{10857}\u{1091F}\u{1093F}\u{10A50}-\u{10A58}\u{10A7F}\u{10AF0}-\u{10AF6}\u{10B39}-\u{10B3F}\u{10B99}-\u{10B9C}\u{10F55}-\u{10F59}\u{11047}-\u{1104D}\u{110BB}-\u{110BC}\u{110BE}-\u{110C1}\u{11140}-\u{11143}\u{11174}-\u{11175}\u{111C5}-\u{111C8}\u{111CD}\u{111DB}\u{111DD}-\u{111DF}\u{11238}-\u{1123D}\u{112A9}\u{1144B}-\u{1144F}\u{1145A}-\u{1145B}\u{1145D}\u{114C6}\u{115C1}-\u{115D7}\u{11641}-\u{11643}\u{11660}-\u{1166C}\u{1173C}-\u{1173E}\u{1183B}\u{11944}-\u{11946}\u{119E2}\u{11A3F}-\u{11A46}\u{11A9A}-\u{11A9C}\u{11A9E}-\u{11AA2}\u{11C41}-\u{11C45}\u{11C70}-\u{11C71}\u{11EF7}-\u{11EF8}\u{11FFF}\u{12470}-\u{12474}\u{16A6E}-\u{16A6F}\u{16AF5}\u{16B37}-\u{16B3B}\u{16B44}\u{16E97}-\u{16E9A}\u{16FE2}\u{1BC9F}\u{1DA87}-\u{1DA8B}\u{1E95E}-\u{1E95F}] Sm [\u{002B}\u{003C}-\u{003E}\u{007C}\u{007E}\u{00AC}\u{00B1}\u{00D7}\u{00F7}\u{03F6}\u{0606}-\u{0608}\u{2044}\u{2052}\u{207A}-\u{207C}\u{208A}-\u{208C}\u{2118}\u{2140}-\u{2144}\u{214B}\u{2190}-\u{2194}\u{219A}-\u{219B}\u{21A0}\u{21A3}\u{21A6}\u{21AE}\u{21CE}-\u{21CF}\u{21D2}\u{21D4}\u{21F4}-\u{22FF}\u{2320}-\u{2321}\u{237C}\u{239B}-\u{23B3}\u{23DC}-\u{23E1}\u{25B7}\u{25C1}\u{25F8}-\u{25FF}\u{266F}\u{27C0}-\u{27C4}\u{27C7}-\u{27E5}\u{27F0}-\u{27FF}\u{2900}-\u{2982}\u{2999}-\u{29D7}\u{29DC}-\u{29FB}\u{29FE}-\u{2AFF}\u{2B30}-\u{2B44}\u{2B47}-\u{2B4C}\u{FB29}\u{FE62}\u{FE64}-\u{FE66}\u{FF0B}\u{FF1C}-\u{FF1E}\u{FF5C}\u{FF5E}\u{FFE2}\u{FFE9}-\u{FFEC}\u{1D6C1}\u{1D6DB}\u{1D6FB}\u{1D715}\u{1D735}\u{1D74F}\u{1D76F}\u{1D789}\u{1D7A9}\u{1D7C3}\u{1EEF0}-\u{1EEF1}] Sc [\u{0024}\u{00A2}-\u{00A5}\u{058F}\u{060B}\u{07FE}-\u{07FF}\u{09F2}-\u{09F3}\u{09FB}\u{0AF1}\u{0BF9}\u{0E3F}\u{17DB}\u{20A0}-\u{20BF}\u{A838}\u{FDFC}\u{FE69}\u{FF04}\u{FFE0}-\u{FFE1}\u{FFE5}-\u{FFE6}\u{11FDD}-\u{11FE0}\u{1E2FF}\u{1ECB0}] Sk [\u{005E}\u{0060}\u{00A8}\u{00AF}\u{00B4}\u{00B8}\u{02C2}-\u{02C5}\u{02D2}-\u{02DF}\u{02E5}-\u{02EB}\u{02ED}\u{02EF}-\u{02FF}\u{0375}\u{0384}-\u{0385}\u{1FBD}\u{1FBF}-\u{1FC1}\u{1FCD}-\u{1FCF}\u{1FDD}-\u{1FDF}\u{1FED}-\u{1FEF}\u{1FFD}-\u{1FFE}\u{309B}-\u{309C}\u{A700}-\u{A716}\u{A720}-\u{A721}\u{A789}-\u{A78A}\u{AB5B}\u{AB6A}-\u{AB6B}\u{FBB2}-\u{FBC1}\u{FF3E}\u{FF40}\u{FFE3}\u{1F3FB}-\u{1F3FF}] So [\u{00A6}\u{00A9}\u{00AE}\u{00B0}\u{0482}\u{058D}-\u{058E}\u{060E}-\u{060F}\u{06DE}\u{06E9}\u{06FD}-\u{06FE}\u{07F6}\u{09FA}\u{0B70}\u{0BF3}-\u{0BF8}\u{0BFA}\u{0C7F}\u{0D4F}\u{0D79}\u{0F01}-\u{0F03}\u{0F13}\u{0F15}-\u{0F17}\u{0F1A}-\u{0F1F}\u{0F34}\u{0F36}\u{0F38}\u{0FBE}-\u{0FC5}\u{0FC7}-\u{0FCC}\u{0FCE}-\u{0FCF}\u{0FD5}-\u{0FD8}\u{109E}-\u{109F}\u{1390}-\u{1399}\u{166D}\u{1940}\u{19DE}-\u{19FF}\u{1B61}-\u{1B6A}\u{1B74}-\u{1B7C}\u{2100}-\u{2101}\u{2103}-\u{2106}\u{2108}-\u{2109}\u{2114}\u{2116}-\u{2117}\u{211E}-\u{2123}\u{2125}\u{2127}\u{2129}\u{212E}\u{213A}-\u{213B}\u{214A}\u{214C}-\u{214D}\u{214F}\u{218A}-\u{218B}\u{2195}-\u{2199}\u{219C}-\u{219F}\u{21A1}-\u{21A2}\u{21A4}-\u{21A5}\u{21A7}-\u{21AD}\u{21AF}-\u{21CD}\u{21D0}-\u{21D1}\u{21D3}\u{21D5}-\u{21F3}\u{2300}-\u{2307}\u{230C}-\u{231F}\u{2322}-\u{2328}\u{232B}-\u{237B}\u{237D}-\u{239A}\u{23B4}-\u{23DB}\u{23E2}-\u{2426}\u{2440}-\u{244A}\u{249C}-\u{24E9}\u{2500}-\u{25B6}\u{25B8}-\u{25C0}\u{25C2}-\u{25F7}\u{2600}-\u{266E}\u{2670}-\u{2767}\u{2794}-\u{27BF}\u{2800}-\u{28FF}\u{2B00}-\u{2B2F}\u{2B45}-\u{2B46}\u{2B4D}-\u{2B73}\u{2B76}-\u{2B95}\u{2B97}-\u{2BFF}\u{2CE5}-\u{2CEA}\u{2E50}-\u{2E51}\u{2E80}-\u{2E99}\u{2E9B}-\u{2EF3}\u{2F00}-\u{2FD5}\u{2FF0}-\u{2FFB}\u{3004}\u{3012}-\u{3013}\u{3020}\u{3036}-\u{3037}\u{303E}-\u{303F}\u{3190}-\u{3191}\u{3196}-\u{319F}\u{31C0}-\u{31E3}\u{3200}-\u{321E}\u{322A}-\u{3247}\u{3250}\u{3260}-\u{327F}\u{328A}-\u{32B0}\u{32C0}-\u{33FF}\u{4DC0}-\u{4DFF}\u{A490}-\u{A4C6}\u{A828}-\u{A82B}\u{A836}-\u{A837}\u{A839}\u{AA77}-\u{AA79}\u{FDFD}\u{FFE4}\u{FFE8}\u{FFED}-\u{FFEE}\u{FFFC}-\u{FFFD}\u{10137}-\u{1013F}\u{10179}-\u{10189}\u{1018C}-\u{1018E}\u{10190}-\u{1019C}\u{101A0}\u{101D0}-\u{101FC}\u{10877}-\u{10878}\u{10AC8}\u{1173F}\u{11FD5}-\u{11FDC}\u{11FE1}-\u{11FF1}\u{16B3C}-\u{16B3F}\u{16B45}\u{1BC9C}\u{1D000}-\u{1D0F5}\u{1D100}-\u{1D126}\u{1D129}-\u{1D164}\u{1D16A}-\u{1D16C}\u{1D183}-\u{1D184}\u{1D18C}-\u{1D1A9}\u{1D1AE}-\u{1D1E8}\u{1D200}-\u{1D241}\u{1D245}\u{1D300}-\u{1D356}\u{1D800}-\u{1D9FF}\u{1DA37}-\u{1DA3A}\u{1DA6D}-\u{1DA74}\u{1DA76}-\u{1DA83}\u{1DA85}-\u{1DA86}\u{1E14F}\u{1ECAC}\u{1ED2E}\u{1F000}-\u{1F02B}\u{1F030}-\u{1F093}\u{1F0A0}-\u{1F0AE}\u{1F0B1}-\u{1F0BF}\u{1F0C1}-\u{1F0CF}\u{1F0D1}-\u{1F0F5}\u{1F10D}-\u{1F1AD}\u{1F1E6}-\u{1F202}\u{1F210}-\u{1F23B}\u{1F240}-\u{1F248}\u{1F250}-\u{1F251}\u{1F260}-\u{1F265}\u{1F300}-\u{1F3FA}\u{1F400}-\u{1F6D7}\u{1F6E0}-\u{1F6EC}\u{1F6F0}-\u{1F6FC}\u{1F700}-\u{1F773}\u{1F780}-\u{1F7D8}\u{1F7E0}-\u{1F7EB}\u{1F800}-\u{1F80B}\u{1F810}-\u{1F847}\u{1F850}-\u{1F859}\u{1F860}-\u{1F887}\u{1F890}-\u{1F8AD}\u{1F8B0}-\u{1F8B1}\u{1F900}-\u{1F978}\u{1F97A}-\u{1F9CB}\u{1F9CD}-\u{1FA53}\u{1FA60}-\u{1FA6D}\u{1FA70}-\u{1FA74}\u{1FA78}-\u{1FA7A}\u{1FA80}-\u{1FA86}\u{1FA90}-\u{1FAA8}\u{1FAB0}-\u{1FAB6}\u{1FAC0}-\u{1FAC2}\u{1FAD0}-\u{1FAD6}\u{1FB00}-\u{1FB92}\u{1FB94}-\u{1FBCA}] Zs [\u{0020}\u{00A0}\u{1680}\u{2000}-\u{200A}\u{202F}\u{205F}\u{3000}] Zl [\u{2028}] Zp [\u{2029}] Cc [\u{0000}-\u{001F}\u{007F}-\u{009F}] Cf [\u{00AD}\u{0600}-\u{0605}\u{061C}\u{06DD}\u{070F}\u{08E2}\u{180E}\u{200B}-\u{200F}\u{202A}-\u{202E}\u{2060}-\u{2064}\u{2066}-\u{206F}\u{FEFF}\u{FFF9}-\u{FFFB}\u{110BD}\u{110CD}\u{13430}-\u{13438}\u{1BCA0}-\u{1BCA3}\u{1D173}-\u{1D17A}\u{E0001}\u{E0020}-\u{E007F}] Cs [\u{D800}\u{DB7F}-\u{DB80}\u{DBFF}-\u{DC00}\u{DFFF}] Co [\u{E000}\u{F8FF}\u{F0000}\u{FFFFD}\u{100000}\u{10FFFD}] Cn [\u{0000}-\u{001F}\u{007F}-\u{009F}] ASCII [\u{0000}-\u{00FF}] SPACE [ \t\u{000B}\f]{+}{Zs} HORIZONAL_BREAK {SPACE}{+}[\r] BREAK {HORIZONAL_BREAK}{+}[\n] SOFT_BREAK "--" -- Take care about real values starting from "." (like ".5") to interpret "-.5" as "- 0.5" rather than "-. 5". OPERATOR_BREAK (\.{D}|{SOFT_BREAK})? SPECIAL_SYMBOL ["$',-./:;=>?~] STANDARD_SYMBOL [*+-/<=>\\^] -- OFOF - old free operator first characters -- OFOM - old free operator middle characters -- OFOL - old free operator last characters -- OFOx1 - old free operators starting from "@" (it excludes previously available operators like "@foo") -- OFOx2 - old free operators startind from "#|&" OFOF1 [@] OFOL1 {ASCII}{-}{Cc}{-}["%A-Za-z]{-}{BREAK} OFOM1 (\-)?({OFOL1}{-}[\-]) OFOF2 [#|&] OFOL2 {ASCII}{-}{Cc}{-}["%]{-}{BREAK} OFOM2 (\-)?({OFOL2}{-}[\-]) FREE_OPERATOR_BASE {Sm}{+}{Sc}{+}{So}{+}{Pc}{+}{Pd}{+}{Po}{-}{BREAK}{-}{SPECIAL_SYMBOL}{+}{STANDARD_SYMBOL}{+}[~]{-}["$%',.:;?] -- FOF - free operator first characters -- FOM - free operator middle characters -- FOL - free operator last characters FOL {FREE_OPERATOR_BASE}{+}{Sk}{+}[.] FOF {FREE_OPERATOR_BASE}{-}[\-]|\-{FOL}{-}[\-] FOM (\-)?{FOL}{-}[\-] %% -- Breaks {BREAK}+ { update_character_locations ast_factory.create_break_as (Current) } {BREAK}*/"--" { update_character_locations save_break_as_data ast_factory.set_buffer (roundtrip_token_buffer, Current) set_start_condition (PRAGMA) } { "--#line".* { update_character_locations ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) last_line_pragma := ast_factory.new_line_pragma (Current) } "--".* { update_character_locations ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) } {BREAK}+ { update_character_locations ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) } . { less (0) create_break_as_with_saved_data set_start_condition (INITIAL) } <> { update_character_locations create_break_as_with_saved_data set_start_condition (INITIAL) } } -- Symbols ";" { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_SEMICOLON, Current) last_token := TE_SEMICOLON } ":" { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_COLON, Current) last_token := TE_COLON } "," { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_COMMA, Current) last_token := TE_COMMA } ".." { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_DOTDOT, Current) last_token := TE_DOTDOT } "?"/{SOFT_BREAK}? { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_QUESTION, Current) last_token := TE_QUESTION } "~"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_TILDE, Current) last_token := TE_TILDE } "." { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_DOT, Current) last_token := TE_DOT } "$" { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_ADDRESS, Current) last_token := TE_ADDRESS } "@"/{SOFT_BREAK}? { update_character_locations if syntax_version = obsolete_syntax then process_id_as last_token := TE_FREE else last_symbol_id_value := ast_factory.new_symbol_id_as (TE_AT, Current) last_token := TE_AT end } ":=" { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_ASSIGNMENT, Current) last_token := TE_ASSIGNMENT } "?=" { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_ACCEPT, Current) last_token := TE_ACCEPT if has_syntax_warning and then syntax_version /= obsolete_syntax then report_one_warning (create {SYNTAX_WARNING}.make (line, column, filename, locale.translation_in_context (once "Assignment attempt symbol %"?=%" is not part of ECMA/ISO Eiffel and will not be supported in the future. Use object test instead.", once "parser.eiffel.warning"))) end } "="/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_EQ, Current) last_token := TE_EQ } "<"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_LT, Current) last_token := TE_LT } ">"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_GT, Current) last_token := TE_GT } "<="/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_LE, Current) last_token := TE_LE } ">="/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_GE, Current) last_token := TE_GE } "/~"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_NOT_TILDE, Current) last_token := TE_NOT_TILDE } "/="/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_NE, Current) last_token := TE_NE } "(" { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_LPARAN, Current) last_token := TE_LPARAN } ")" { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_RPARAN, Current) last_token := TE_RPARAN } "{" { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_LCURLY, Current) last_token := TE_LCURLY } "}" { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_RCURLY, Current) last_token := TE_RCURLY } "[" { update_character_locations last_detachable_symbol_as_value := ast_factory.new_square_symbol_as (TE_LSQURE, Current) last_token := TE_LSQURE } "]" { update_character_locations last_detachable_symbol_as_value := ast_factory.new_square_symbol_as (TE_RSQURE, Current) last_token := TE_RSQURE } "+"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_PLUS, Current) last_token := TE_PLUS } "-"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_MINUS, Current) last_token := TE_MINUS } "*"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_STAR, Current) last_token := TE_STAR } "/"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_SLASH, Current) last_token := TE_SLASH } "^"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_POWER, Current) last_token := TE_POWER } "->"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_CONSTRAIN, Current) last_token := TE_CONSTRAIN } "<<"/("<<"*[+-]?|">>"*){SOFT_BREAK}? { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_LARRAY, Current) last_token := TE_LARRAY } ">>"/">>"*{SOFT_BREAK}? { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_RARRAY, Current) last_token := TE_RARRAY } "//"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_DIV, Current) last_token := TE_DIV } "\\\\"/{OPERATOR_BREAK} { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_MOD, Current) last_token := TE_MOD } -- Free operators "∀"/{SOFT_BREAK}? { update_character_locations if syntax_version = obsolete_syntax then process_id_as last_token := TE_FREE else last_symbol_id_value := ast_factory.new_symbol_id_as (TE_FORALL, Current) last_token := TE_FORALL end } "∃"/{SOFT_BREAK}? { update_character_locations if syntax_version = obsolete_syntax then process_id_as last_token := TE_FREE else last_symbol_id_value := ast_factory.new_symbol_id_as (TE_EXISTS, Current) last_token := TE_EXISTS end } "¦"/{SOFT_BREAK}? { update_character_locations last_detachable_symbol_as_value := ast_factory.new_symbol_as (TE_BAR, Current) last_token := TE_BAR } "⟳"/{SOFT_BREAK}? { update_character_locations if syntax_version = obsolete_syntax then process_id_as last_token := TE_FREE else last_symbol_id_value := ast_factory.new_symbol_id_as (TE_REPEAT_OPEN, Current) last_token := TE_REPEAT_OPEN end } "⟲"/{SOFT_BREAK}? { update_character_locations if syntax_version = obsolete_syntax then process_id_as last_token := TE_FREE else last_symbol_id_value := ast_factory.new_symbol_id_as (TE_REPEAT_CLOSE, Current) last_token := TE_REPEAT_CLOSE end } \u27E6/{SOFT_BREAK}? { update_character_locations if syntax_version = obsolete_syntax then process_id_as last_token := TE_FREE else last_symbol_id_value := ast_factory.new_symbol_id_as (TE_BLOCK_OPEN, Current) last_token := TE_BLOCK_OPEN end } \u27E7/{SOFT_BREAK}? { update_character_locations if syntax_version = obsolete_syntax then process_id_as last_token := TE_FREE else last_symbol_id_value := ast_factory.new_symbol_id_as (TE_BLOCK_CLOSE, Current) last_token := TE_BLOCK_CLOSE end } \u00AC/{SOFT_BREAK}? { update_character_locations process_id_as last_token := if syntax_version = obsolete_syntax then TE_FREE else TE_FREE_NOT end } \u2227/{SOFT_BREAK}? { update_character_locations process_id_as last_token := if syntax_version = obsolete_syntax then TE_FREE else TE_FREE_AND end } \u2227\u2026/{SOFT_BREAK}? { update_character_locations process_id_as last_token := if syntax_version = obsolete_syntax then TE_FREE else TE_FREE_AND_THEN end } \u2228/{SOFT_BREAK}? { update_character_locations process_id_as last_token := if syntax_version = obsolete_syntax then TE_FREE else TE_FREE_OR end } \u2228\u2026/{SOFT_BREAK}? { update_character_locations process_id_as last_token := if syntax_version = obsolete_syntax then TE_FREE else TE_FREE_OR_ELSE end } \u21D2/{SOFT_BREAK}? { update_character_locations process_id_as last_token := if syntax_version = obsolete_syntax then TE_FREE else TE_FREE_IMPLIES end } \u22BB/{SOFT_BREAK}? { update_character_locations process_id_as last_token := if syntax_version = obsolete_syntax then TE_FREE else TE_FREE_XOR end } {FOF}{FOM}*({FOL}{-}[\-])?\-? | {FOF}{FOM}*({FOL}{-}[\-])?\-?/\.{D} | {FOF}{FOM}*({FOL}{-}[\-])?\-/{BREAK} | {FOF}{FOM}*/{SOFT_BREAK} { update_character_locations last_token := TE_FREE process_id_as } {OFOF1}{OFOM1}*({OFOL1}{-}[\-])?\-? | {OFOF1}{OFOM1}*({OFOL1}{-}[\-])?\-/{BREAK} | {OFOF1}{OFOM1}*/{SOFT_BREAK} | {OFOF2}{OFOM2}*({OFOL2}{-}[\-])?\-? | {OFOF2}{OFOM2}*({OFOL2}{-}[\-])?\-/{BREAK} | {OFOF2}{OFOM2}*/{SOFT_BREAK} { update_character_locations last_token := TE_FREE process_id_as if syntax_version /= obsolete_syntax and then has_syntax_warning then report_one_warning (create {SYNTAX_WARNING}.make (line, column, filename, locale.formatted_string (locale.translation_in_context (once "Obsolete operator notation `$1` is used. Replace it with a contemporary operator (if available) or an unfolded feature call.", once "parser.eiffel.warning"), unicode_text))) end } -- Reserved words [aA][cC][rR][oO][sS][sS] { update_character_locations if syntax_version /= obsolete_syntax then last_keyword_id_value := ast_factory.new_keyword_id_as (TE_ACROSS, Current) last_token := TE_ACROSS else process_id_as last_token := TE_ID if has_syntax_warning then report_one_warning (create {SYNTAX_WARNING}.make (line, column, filename, locale.translation_in_context (once "Keyword `across` is used as identifier.", once "parser.eiffel.warning"))) end end } [aA][gG][eE][nN][tT] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_AGENT, Current) last_token := TE_AGENT } [aA][lL][iI][aA][sS] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_ALIAS, Current) last_token := TE_ALIAS } [aA][lL][lL] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_ALL, Current) last_token := TE_ALL } [aA][nN][dD] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_AND, Current) last_token := TE_AND } [aA][sS] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_AS, Current) last_token := TE_AS } [aA][sS][sS][iI][gG][nN] { update_character_locations last_keyword_id_value := ast_factory.new_keyword_id_as (TE_ASSIGN, Current) last_token := TE_ASSIGN } [aA][tT][tT][aA][cC][hH][eE][dD] { update_character_locations if syntax_version /= obsolete_syntax then last_keyword_id_value := ast_factory.new_keyword_id_as (TE_ATTACHED, Current) last_token := TE_ATTACHED else process_id_as last_token := TE_ID if has_syntax_warning then report_one_warning (create {SYNTAX_WARNING}.make (line, column, filename, locale.translation_in_context (once "Keyword `attached` is used as identifier.", once "parser.eiffel.warning"))) end end } [aA][tT][tT][rR][iI][bB][uU][tT][eE] { update_character_locations if syntax_version /= obsolete_syntax then last_keyword_id_value := ast_factory.new_keyword_id_as (TE_ATTRIBUTE, Current) last_token := TE_ATTRIBUTE else process_id_as last_token := TE_ID if has_syntax_warning then report_one_warning (create {SYNTAX_WARNING}.make (line, column, filename, locale.translation_in_context (once "Keyword `attribute` is used as identifier.", once "parser.eiffel.warning"))) end end } [cC][hH][eE][cC][kK] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_CHECK, Current) last_token := TE_CHECK } [cC][lL][aA][sS][sS] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_CLASS, Current) last_token := TE_CLASS } [cC][oO][nN][vV][eE][rR][tT] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_CONVERT, Current) last_token := TE_CONVERT } [cC][rR][eE][aA][tT][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_CREATE, Current) last_token := TE_CREATE } [cC][rR][eE][aA][tT][iI][oO][nN] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_creation_keyword_as (Current) last_token := TE_CREATION } [cC][uU][rR][rR][eE][nN][tT] { update_character_locations last_detachable_current_as_value := ast_factory.new_current_as (Current) last_token := TE_CURRENT } [dD][eE][bB][uU][gG] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_DEBUG, Current) last_token := TE_DEBUG } [dD][eE][fF][eE][rR][rR][eE][dD] { update_character_locations last_detachable_deferred_as_value := ast_factory.new_deferred_as (Current) last_token := TE_DEFERRED } [dD][eE][tT][aA][cC][hH][aA][bB][lL][eE] { update_character_locations if syntax_version /= obsolete_syntax then last_keyword_id_value := ast_factory.new_keyword_id_as (TE_DETACHABLE, Current) last_token := TE_DETACHABLE else process_id_as last_token := TE_ID if has_syntax_warning then report_one_warning (create {SYNTAX_WARNING}.make (line, column, filename, locale.translation_in_context (once "Keyword `detachable` is used as identifier.", once "parser.eiffel.warning"))) end end } [dD][oO] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_DO, Current) last_token := TE_DO } [eE][lL][sS][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_ELSE, Current) last_token := TE_ELSE } [eE][lL][sS][eE][iI][fF] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_ELSEIF, Current) last_token := TE_ELSEIF } [eE][nN][dD] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_end_keyword_as (Current) last_token := TE_END } [eE][nN][sS][uU][rR][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_ENSURE, Current) last_token := TE_ENSURE } [eE][xX][pP][aA][nN][dD][eE][dD] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_EXPANDED, Current) last_token := TE_EXPANDED } [eE][xX][pP][oO][rR][tT] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_EXPORT, Current) last_token := TE_EXPORT } [eE][xX][tT][eE][rR][nN][aA][lL] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_EXTERNAL, Current) last_token := TE_EXTERNAL } [fF][aA][lL][sS][eE] { update_character_locations last_detachable_bool_as_value := ast_factory.new_boolean_as (False, Current) last_token := TE_FALSE } [fF][eE][aA][tT][uU][rR][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_FEATURE, Current) last_token := TE_FEATURE } [fF][rR][oO][mM] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_FROM, Current) last_token := TE_FROM } [fF][rR][oO][zZ][eE][nN] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_frozen_keyword_as (Current) last_token := TE_FROZEN } [iI][fF] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_IF, Current) last_token := TE_IF } [iI][mM][pP][lL][iI][eE][sS] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_IMPLIES, Current) last_token := TE_IMPLIES } [iI][nN][dD][eE][xX][iI][nN][gG] { update_character_locations if syntax_version = ecma_syntax or else syntax_version = provisional_syntax then process_id_as last_token := TE_ID else last_keyword_id_value := ast_factory.new_keyword_id_as (TE_INDEXING, Current) last_token := TE_INDEXING if has_syntax_warning and then syntax_version /= obsolete_syntax then report_one_warning (create {SYNTAX_WARNING}.make (line, column, filename, locale.translation_in_context (once "Usage of `indexing` has been replaced by `note`.", once "parser.eiffel.warning"))) end end } [iI][nN][hH][eE][rR][iI][tT] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_INHERIT, Current) last_token := TE_INHERIT } [iI][nN][sS][pP][eE][cC][tT] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_INSPECT, Current) last_token := TE_INSPECT } [iI][nN][vV][aA][rR][iI][aA][nN][tT] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_INVARIANT, Current) last_token := TE_INVARIANT } [iI][sS] { update_character_locations last_keyword_id_value := ast_factory.new_keyword_id_as (TE_IS, Current) last_token := TE_IS } [lL][iI][kK][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_LIKE, Current) last_token := TE_LIKE } [lL][oO][cC][aA][lL] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_LOCAL, Current) last_token := TE_LOCAL } [lL][oO][oO][pP] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_LOOP, Current) last_token := TE_LOOP } [nN][oO][tT] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_NOT, Current) last_token := TE_NOT } [nN][oO][tT][eE] { update_character_locations if syntax_version /= obsolete_syntax then last_keyword_id_value := ast_factory.new_keyword_id_as (TE_NOTE, Current) last_token := TE_NOTE else process_id_as last_token := TE_ID if has_syntax_warning then report_one_warning (create {SYNTAX_WARNING}.make (line, column, filename, locale.translation_in_context (once "Keyword `note` is used as identifier.", once "parser.eiffel.warning"))) end end } [oO][bB][sS][oO][lL][eE][tT][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_OBSOLETE, Current) last_token := TE_OBSOLETE } [oO][lL][dD] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_OLD, Current) last_token := TE_OLD } -- We need to make the distinction between once keywords followed -- by a manifest string and once keywords introducing a once-routine -- because otherwise we would need to have two look-ahead tokens -- to figure out that the first once keyword in the following example -- in part of a once manifest string expression and the second is -- part of the compound of the once routine: -- f is -- require -- once "foo" /= Void -- once -- do_nothing -- end [oO][nN][cC][eE]/[\"{] { update_character_locations -- '{' is for the typed manifest string. last_detachable_keyword_as_value := ast_factory.new_once_string_keyword_as (utf8_text, line, column, position, 4, character_column, character_position, 4) last_token := TE_ONCE_STRING } [oO][nN][cC][eE]({BREAK}|"--".*\n)+/[\"{] { update_character_locations -- '{' is for the typed manifest string. last_detachable_keyword_as_value := ast_factory.new_once_string_keyword_as (utf8_text_substring (1, 4), line, column, position, 4, character_column, character_position, 4) -- Assume all trailing characters are in the same line (which would be false if '\n' appears). ast_factory.create_break_as_with_data (utf8_text_substring (5, text_count), line, column + 4, position + 4, text_count - 4, character_column + 4, character_position + 4, unicode_text_count - 4) last_token := TE_ONCE_STRING } [oO][nN][cC][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_ONCE, Current) last_token := TE_ONCE } [oO][nN][lL][yY] { update_character_locations last_token := TE_ID process_id_as if has_syntax_warning then report_one_warning (create {SYNTAX_WARNING}.make (line, column, filename, locale.translation_in_context (once "Use of `only`, possibly a new keyword in the future standard of Eiffel.", once "parser.eiffel.warning"))) end } [oO][rR] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_OR, Current) last_token := TE_OR } [pP][aA][rR][tT][iI][aA][lL]{BREAK}*[cC][lL][aA][sS][sS] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_PARTIAL_CLASS, Current) last_token := TE_PARTIAL_CLASS } [pP][rR][eE][cC][uU][rR][sS][oO][rR] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_precursor_keyword_as (Current) last_token := TE_PRECURSOR } [rR][eE][dD][eE][fF][iI][nN][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_REDEFINE, Current) last_token := TE_REDEFINE } [rR][eE][fF][eE][rR][eE][nN][cC][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_REFERENCE, Current) last_token := TE_REFERENCE } [rR][eE][nN][aA][mM][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_RENAME, Current) last_token := TE_RENAME } [rR][eE][qQ][uU][iI][rR][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_REQUIRE, Current) last_token := TE_REQUIRE } [rR][eE][sS][cC][uU][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_RESCUE, Current) last_token := TE_RESCUE } [rR][eE][sS][uU][lL][tT] { update_character_locations last_detachable_result_as_value := ast_factory.new_result_as (Current) last_token := TE_RESULT } [rR][eE][tT][rR][yY] { update_character_locations last_detachable_retry_as_value := ast_factory.new_retry_as (Current) last_token := TE_RETRY } [sS][eE][lL][eE][cC][tT] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_SELECT, Current) last_token := TE_SELECT } [sS][eE][pP][aA][rR][aA][tT][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_SEPARATE, Current) last_token := TE_SEPARATE } [sS][oO][mM][eE] { update_character_locations if syntax_version /= obsolete_syntax then last_keyword_id_value := ast_factory.new_keyword_id_as (TE_SOME, Current) last_token := TE_SOME else process_id_as last_token := TE_ID if has_syntax_warning then report_one_warning (create {SYNTAX_WARNING}.make (line, column, filename, locale.translation_in_context (once "Keyword `some` is used as identifier.", once "parser.eiffel.warning"))) end end } [sS][tT][rR][iI][pP] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_STRIP, Current) last_token := TE_STRIP } [tT][hH][eE][nN] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_THEN, Current) last_token := TE_THEN } [tT][rR][uU][eE] { update_character_locations last_detachable_bool_as_value := ast_factory.new_boolean_as (True, Current) last_token := TE_TRUE } [tT][uU][pP][lL][eE] { update_character_locations last_token := TE_TUPLE process_id_as } [uU][nN][dD][eE][fF][iI][nN][eE] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_UNDEFINE, Current) last_token := TE_UNDEFINE } [uU][nN][iI][qQ][uU][eE] { update_character_locations last_detachable_unique_as_value := ast_factory.new_unique_as (Current) last_token := TE_UNIQUE } [uU][nN][tT][iI][lL] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_UNTIL, Current) last_token := TE_UNTIL } [vV][aA][rR][iI][aA][nN][tT] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_VARIANT, Current) last_token := TE_VARIANT } [vV][oO][iI][dD] { update_character_locations last_detachable_void_as_value := ast_factory.new_void_as (Current) last_token := TE_VOID } [wW][hH][eE][nN] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_WHEN, Current) last_token := TE_WHEN } [xX][oO][rR] { update_character_locations last_detachable_keyword_as_value := ast_factory.new_keyword_as (TE_XOR, Current) last_token := TE_XOR } -- Identifiers {A}{X}* { update_character_locations last_token := TE_ID process_id_as } -- Integers {I} | {I}/".." { -- This a trick to avoid having: -- when 1..2 then -- to be be erroneously recognized as: -- `when` `1.` `.2` `then` -- instead of: -- `when` `1` `..` `2` `then` update_character_locations token_buffer.wipe_out append_utf8_text_to_string (token_buffer) last_token := TE_INTEGER } 0[xX]{H}(({H}|_)*{H})? { -- Recognizes hexadecimal integer numbers. update_character_locations token_buffer.wipe_out append_utf8_text_to_string (token_buffer) last_token := TE_INTEGER } 0[cC]{O}(({O}|_)*{O})? { -- Recognizes octal integer numbers. update_character_locations token_buffer.wipe_out append_utf8_text_to_string (token_buffer) last_token := TE_INTEGER } 0[bB]{B}(({B}|_)*{B})? { -- Recognizes binary integer numbers. update_character_locations token_buffer.wipe_out append_utf8_text_to_string (token_buffer) last_token := TE_INTEGER } 0[bBcC]{H}(({H}|_)*{H})? { -- Recognizes erronous binary and octal numbers. update_character_locations report_invalid_integer_error (token_buffer) } -- Reals ({D}*\.{D}+{E})|({D}+\.{D}*{E})|(({U}(_{T})*)?\.({T}_)*{U}{E})|({U}(_{T})*\.(({T}_)*{U})?{E}) { update_character_locations token_buffer.wipe_out append_utf8_text_to_string (token_buffer) token_buffer.to_lower last_token := TE_REAL } -- Characters \'[^%\n']\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as (char_32_from_source (utf8_text_substring (2, text_count - 1)), line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'\'\' { update_character_locations -- This is not correct Eiffel! ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%'', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%A\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%A', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%B\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%B', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%C\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%C', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%D\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%D', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%F\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%F', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%H\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%H', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%L\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%L', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%N\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%N', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%Q\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%Q', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%R\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%R', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%S\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%S', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%T\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%T', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%U\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%U', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%V\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%V', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%%\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%%', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%\'\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%'', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%\"\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%"', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%\(\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%(', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%\)\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%)', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%<\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%<', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%>\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) last_detachable_char_as_value := ast_factory.new_character_as ('%>', line, column, position, text_count, character_column, character_position, unicode_text_count, roundtrip_token_buffer) last_token := TE_CHAR } \'%\/{I}\/\' | \'%\/0[xX]{H}(({H}|_)*{H})?\/\' | \'%\/0[cC]{O}(({O}|_)*{O})?\/\' | \'%\/0[bB]{B}(({B}|_)*{B})?\/\' { update_character_locations ast_factory.set_buffer (roundtrip_token_buffer, Current) token_buffer.wipe_out -- We discard the '%/ and the final /'. append_utf8_text_substring_to_string (4, text_count - 2, token_buffer) last_detachable_char_as_value := ast_factory.new_character_value_as (Current, token_buffer, roundtrip_token_buffer) last_token := TE_CHAR } \'%\/0[bBcC]{H}(({H}|_)*{H})?\/\' { update_character_locations report_invalid_integer_error (token_buffer) } \'.{0,2} | \'%\/[0-9]+(\/)? { update_character_locations -- Unrecognized character. -- (catch-all rules (no backing up)) report_character_missing_quote_error (utf8_text) } -- Strings \""<"\" { update_character_locations process_simple_string_as (TE_STR_LT) } \"">"\" { update_character_locations process_simple_string_as (TE_STR_GT) } \""<="\" { update_character_locations process_simple_string_as (TE_STR_LE) } \"">="\" { update_character_locations process_simple_string_as (TE_STR_GE) } \""+"\" { update_character_locations process_simple_string_as (TE_STR_PLUS) } \""-"\" { update_character_locations process_simple_string_as (TE_STR_MINUS) } \""*"\" { update_character_locations process_simple_string_as (TE_STR_STAR) } \""/"\" { update_character_locations process_simple_string_as (TE_STR_SLASH) } \""^"\" { update_character_locations process_simple_string_as (TE_STR_POWER) } \""//"\" { update_character_locations process_simple_string_as (TE_STR_DIV) } \""\\\\"\" { update_character_locations process_simple_string_as (TE_STR_MOD) } \""[]"\" { update_character_locations process_simple_string_as (TE_STR_BRACKET) } \""()"\" { update_character_locations process_simple_string_as (TE_STR_PARENTHESES) } \"[aA][nN][dD]\" { update_character_locations process_simple_string_as (TE_STR_AND) } \"[aA][nN][dD]\ [tT][hH][eE][nN]\" { update_character_locations process_simple_string_as (TE_STR_AND_THEN) } \"[iI][mM][pP][lL][iI][eE][sS]\" { update_character_locations process_simple_string_as (TE_STR_IMPLIES) } \"[nN][oO][tT]\" { update_character_locations process_simple_string_as (TE_STR_NOT) } \"[oO][rR]\" { update_character_locations process_simple_string_as (TE_STR_OR) } \"[oO][rR]\ [eE][lL][sS][eE]\" { update_character_locations process_simple_string_as (TE_STR_OR_ELSE) } \"[xX][oO][rR]\" { update_character_locations process_simple_string_as (TE_STR_XOR) } \"{FOF}{FOM}*({FOL}{-}[\-])?\-?\" | \"{OFOF1}{OFOM1}*({OFOL1}{-}[\-])?\-?\" | \"{OFOF2}{OFOM2}*({OFOL2}{-}[\-])?\-?\" { update_character_locations process_simple_string_as (TE_STR_FREE) } \"\" { update_character_locations process_simple_string_as (TE_EMPTY_STRING) } \"[^%\n"]+\" { update_character_locations -- Regular string. process_simple_string_as (TE_STRING) } \"[^\n"]*[\[\{]/{HORIZONAL_BREAK}*\n { update_character_locations -- Verbatim string. token_buffer.wipe_out verbatim_marker.wipe_out if text_item (text_count) = '[' then verbatim_marker.append_character (']') else verbatim_marker.append_character ('}') end ast_factory.set_buffer (roundtrip_token_buffer, Current) append_utf8_text_substring_to_string (2, text_count - 1, verbatim_marker) start_location.set_position (line, column, position, text_count, character_column, character_position, unicode_text_count) set_start_condition (VERBATIM_STR3) } { -- Discard space characters at the -- end of Verbatim_string_opener. {HORIZONAL_BREAK}*\n { update_character_locations ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) set_start_condition (VERBATIM_STR1) } . { update_character_locations -- No final bracket-double-quote. append_utf8_text_to_string (token_buffer) ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) if token_buffer.count > 1 and then token_buffer.item (token_buffer.count - 1) = '%R' then -- Remove \r in \r\n. token_buffer.remove (token_buffer.count - 1) end set_start_condition (INITIAL) report_missing_end_of_verbatim_string_error (token_buffer) } <> { update_character_locations -- No final bracket-double-quote. set_start_condition (INITIAL) report_missing_end_of_verbatim_string_error (token_buffer) } } { -- Read one line of a verbatim string body -- from the beginning of line. {HORIZONAL_BREAK}*[\]\}][^\n"]*\" { update_character_locations ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) if is_verbatim_string_closer then set_start_condition (INITIAL) -- Remove the trailing new-line. if token_buffer.count > 1 then check new_line: token_buffer.item (token_buffer.count) = '%N' end if token_buffer.item (token_buffer.count - 1) = '%R' then -- Under Windows a we have \r\n. -- Remove both characters. token_buffer.set_count (token_buffer.count - 2) else token_buffer.set_count (token_buffer.count - 1) end elseif token_buffer.count = 1 then check new_line: token_buffer.item (1) = '%N' end token_buffer.wipe_out end if verbatim_marker.item (1) = ']' then align_left (token_buffer) else verbatim_common_columns := 0 end if token_buffer.is_empty then -- Empty string. last_detachable_string_as_value := ast_factory.new_verbatim_string_as ("", verbatim_marker.substring (2, verbatim_marker.count), verbatim_marker.item (1) = ']', start_location.line, start_location.column, start_location.position, position + text_count - start_location.position, start_location.character_column, start_location.character_position, character_position + unicode_text_count - start_location.character_position, verbatim_common_columns, roundtrip_token_buffer) last_token := TE_EMPTY_VERBATIM_STRING else last_detachable_string_as_value := ast_factory.new_verbatim_string_as (cloned_string (token_buffer), verbatim_marker.substring (2, verbatim_marker.count), verbatim_marker.item (1) = ']', start_location.line, start_location.column, start_location.position, position + text_count - start_location.position, start_location.character_column, start_location.character_position, character_position + unicode_text_count - start_location.character_position, verbatim_common_columns, roundtrip_token_buffer) last_token := TE_VERBATIM_STRING if token_buffer.count > maximum_string_length then report_too_long_string (token_buffer) end end else append_utf8_text_to_string (token_buffer) set_start_condition (VERBATIM_STR2) end } [^"\n]*\" { update_character_locations ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) append_utf8_text_to_string (token_buffer) set_start_condition (VERBATIM_STR2) } [^"\n]*\n { update_character_locations ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) append_utf8_text_to_string (token_buffer) if token_buffer.count > 1 and then token_buffer.item (token_buffer.count - 1) = '%R' then -- Remove \r in \r\n. token_buffer.remove (token_buffer.count - 1) end } [^"\n]* { update_character_locations -- No final bracket-double-quote. ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) append_utf8_text_to_string (token_buffer) set_start_condition (INITIAL) report_missing_end_of_verbatim_string_error (token_buffer) } <> { update_character_locations -- No final bracket-double-quote. set_start_condition (INITIAL) report_missing_end_of_verbatim_string_error (token_buffer) } } { -- Read remaining characters of a line -- in verbatim string body. .*\n { update_character_locations ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) append_utf8_text_to_string (token_buffer) if token_buffer.count > 1 and then token_buffer.item (token_buffer.count - 1) = '%R' then -- Remove \r in \r\n. token_buffer.remove (token_buffer.count - 1) end set_start_condition (VERBATIM_STR1) } .* { update_character_locations -- No final bracket-double-quote. ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) append_utf8_text_to_string (token_buffer) set_start_condition (INITIAL) report_missing_end_of_verbatim_string_error (token_buffer) } <> { update_character_locations -- No final bracket-double-quote. set_start_condition (INITIAL) report_missing_end_of_verbatim_string_error (token_buffer) } } \"[^%\n"]* { update_character_locations -- String with special characters. ast_factory.set_buffer (roundtrip_token_buffer, Current) token_buffer.wipe_out if text_count > 1 then append_utf8_text_substring_to_string (2, text_count, token_buffer) end start_location.set_position (line, column, position, text_count, character_column, character_position, unicode_text_count) set_start_condition (SPECIAL_STR) } { [^%\n"]+ { update_character_locations ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) append_utf8_text_to_string (token_buffer) } %A { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'A') token_buffer.append_character ('%A') } %B { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'B') token_buffer.append_character ('%B') } %C { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'C') token_buffer.append_character ('%C') } %D { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'D') token_buffer.append_character ('%D') } %F { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'F') token_buffer.append_character ('%F') } %H { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'H') token_buffer.append_character ('%H') } %L { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'L') token_buffer.append_character ('%L') } %N { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'N') token_buffer.append_character ('%N') } %Q { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'Q') token_buffer.append_character ('%Q') } %R { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'R') token_buffer.append_character ('%R') } %S { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'S') token_buffer.append_character ('%S') } %T { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'T') token_buffer.append_character ('%T') } %U { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'U') token_buffer.append_character ('%U') } %V { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', 'V') token_buffer.append_character ('%V') } %% { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', '%%') token_buffer.append_character ('%%') } %\' { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', '%'') token_buffer.append_character ('%'') } %\" { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', '%"') token_buffer.append_character ('%"') } %\( { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', '(') token_buffer.append_character ('%(') } %\) { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', ')') token_buffer.append_character ('%)') } %< { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', '<') token_buffer.append_character ('%<') } %> { update_character_locations ast_factory.append_two_characters_to_buffer (roundtrip_token_buffer, '%%', '>') token_buffer.append_character ('%>') } %\/{I}\/ | %\/0[xX]{H}(({H}|_)*{H})?\/ | %\/0[cC]{O}(({O}|_)*{O})?\/ | %\/0[bB]{B}(({B}|_)*{B})?\/ { update_character_locations ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) process_string_character_as_value (utf8_text_substring (3, text_count - 1)) } %{BREAK}+% { update_character_locations -- This regular expression should actually be: %\n[ \t\r]*% -- Left as-is for compatibility with previous releases. ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) } [^%\n"]*\" { update_character_locations ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) if text_count > 1 then append_utf8_text_substring_to_string (1, text_count - 1, token_buffer) end set_start_condition (INITIAL) if token_buffer.is_empty then -- Empty string. last_detachable_string_as_value := ast_factory.new_string_as ( cloned_string (token_buffer), start_location.line, start_location.column, start_location.position, position + text_count - start_location.position, start_location.character_column, start_location.character_position, character_position + unicode_text_count - start_location.character_position, roundtrip_token_buffer) last_token := TE_EMPTY_STRING else last_detachable_string_as_value := ast_factory.new_string_as ( cloned_string (token_buffer), start_location.line, start_location.column, start_location.position, position + text_count - start_location.position, start_location.character_column, start_location.character_position, character_position + unicode_text_count - start_location.character_position, roundtrip_token_buffer) last_token := TE_STRING if token_buffer.count > maximum_string_length then report_too_long_string (token_buffer) end end } % { update_character_locations -- Bad special character. ast_factory.append_text_to_buffer (roundtrip_token_buffer, Current) set_start_condition (INITIAL) report_string_bad_special_character_error } \n { update_character_locations -- No final double-quote. set_start_condition (INITIAL) report_string_missing_quote_error (token_buffer) } <> { update_character_locations -- No final double-quote. set_start_condition (INITIAL) report_string_missing_quote_error (token_buffer) } } -- Miscellaneous <> { terminate } . { update_character_locations report_unknown_token_error (text_item (1)) } %% note copyright: "Copyright (c) 1984-2021, Eiffel Software" license: "GPL version 2 (see http://www.eiffel.com/licensing/gpl.txt)" licensing_options: "http://www.eiffel.com/licensing" copying: "[ This file is part of Eiffel Software's Eiffel Development Environment. Eiffel Software's Eiffel Development Environment is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2 of the License (available at the URL listed under "license" above). Eiffel Software's Eiffel Development Environment is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Eiffel Software's Eiffel Development Environment; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ]" source: "[ Eiffel Software 5949 Hollister Ave., Goleta, CA 93117 USA Telephone 805-685-1006, Fax 805-685-6869 Website http://www.eiffel.com Customer support http://support.eiffel.com ]" end