Применение
Этот модуль предоставляет функции, которые обращаются к информации о кодовых точках Unicode. Информация извлекается из модулей данных, созданных из базы данных символов Unicode , или выводится по правилам, приведенным в Спецификации Unicode . Он и его подмодули были скопированы из английского Wiktionary, а затем модифицированы; см. там для получения дополнительной информации.
Функции
lookup_name(code point)
- Получает кодовую точку (число) и возвращает ее имя или метку; например, возвращается .
lookup_name(0xA9)
"COPYRIGHT SIGN"
- Например,
{{#invoke:Unicode data|lookup|name|61}}
→ СТРОЧНАЯ ЛАТИНСКАЯ БУКВА A lookup, is
- Вызываемые шаблонами функции, которые позволяют получить доступ к функциям, начинающимся с
lookup
иis
. Замените первое подчеркивание в имени функции вертикальной чертой. Для большинства функций, добавить точку коды в шестнадцатеричных базах в качестве следующего параметра, ноis_Latin
,is_rtl
иis_valid_pagename
добавить текст. Ссылки на символы HTML в тексте декодируются модулем в кодовые точки. - Например,
{{#invoke:Unicode data|is|Latin|àzàhàr̃iyyā̀}}
→ true.
Модули данных
Данные, используемые функциями в этом модуле, находятся в подмодулях . Некоторые из них генерируются сценариями AWK, показанными в User: Kephir / Unicode в английском Wiktionary, другие - сценариями Lua на /make
подстраницах подмодулей.
- Модуль: данные Unicode / псевдонимы : формальные псевдонимы имен для символов (из NameAliases.txt )
- Модуль: Данные / блоки Unicode : список блоков Unicode (из Blocks.txt )
- Модуль: данные Unicode / категория : отображение данных символов в их общую категорию (из DerivedGeneralCategory.txt )
- Модуль: данные / элемент управления Unicode : данные для идентификации символов, принадлежащих к общим категориям разделителей и других (из DerivedGeneralCategory.txt )
- Модуль: данные Unicode / объединение : символы сопоставления данных с их классами объединения (из DerivedCombiningClass.txt )
- Модуль: данные Unicode / хангыль : данные, используемые для генерации названий слогов хангыля (из Jamo.txt )
- Модуль: данные / сценарии Unicode: символы сопоставления данных с их свойствами сценария Unicode (из Scripts.txt ).
Модули данных имен ( Module: Unicode data / names / xxx ) были скомпилированы из UnicodeData.txt . Каждый из них содержит максимум кодовые точки от U + xxx000 до U + xxxFFF.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | А | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
00x | U + 0000– U + 0FFF | U + 1000– U + 1FFF | U + 2000– U + 2FFF | U + 3000– U + 3FFF | U + 4000– U + 4FFF | U + A000– U + AFFF | U + D000– U + DFFF | U + F000– U + FFFF | ||||||||
01x | U + 10000– U + 10FFF | U + 11000– U + 11FFF | U + 12000– U + 12FFF | U + 13000– U + 13FFF | U + 14000– U + 14FFF | U + 16000– U + 16FFF | U + 18000– U + 18FFF | U + 1B000– U + 1BFFF | U + 1D000– U + 1DFFF | U + 1E000– U + 1EFFF | U + 1F000– U + 1FFFF | |||||
0Ex | U + E0000– U + E0FFF |
Авторские права
База данных Unicode выпущена Unicode Inc. на следующих условиях:
Copyright © 1991-2018 Unicode, Inc. Все права защищены. Распространяется в соответствии с Условиями использования на https://www.unicode.org/copyright.html .
Настоящим предоставляется бесплатное разрешение любому лицу, получающему копию файлов данных Unicode и любой связанной документации («Файлы данных») или программного обеспечения Unicode и любой связанной документации («Программное обеспечение») для работы с файлами данных. или Программное обеспечение без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение, публикацию, распространение и / или продажу копий Файлов данных или Программного обеспечения, а также разрешать лицам, которым предоставлены Файлы данных или Программное обеспечение, выполнять таким образом, при условии, что либо (а) это уведомление об авторских правах и разрешениях появляется со всеми копиями файлов данных или программного обеспечения, либо (б) это уведомление об авторских правах и разрешениях появляется в соответствующей документации.
ФАЙЛЫ ДАННЫХ И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЮТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИИ ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛЕВОЙ ЧАСТИ И НЕ ЗАНИМАЮТСЯ НИМИ. ВЛАДЕЛЬЦА АВТОРСКИХ ПРАВ ИЛИ ДЕРЖАТЕЛИ, УКАЗАННЫЕ В ДАННОМ УВЕДОМЛЕНИИ НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПРЕТЕНЗИИ ИЛИ ЛЮБЫЕ ОСОБЫЕ КОСВЕННЫЕ ИЛИ КОСВЕННЫЕ УБЫТКИ ИЛИ ЛЮБЫЕ УБЫТКИ, ПРИЧИНЕННЫЕ В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ДАННЫХ ИЛИ ПРИБЫЛЬНЫХ ДАННЫХ, ИЛИ ДЕЙСТВИЯ ДРУГИЕ НЕЖЕЛАТЕЛЬНЫЕ ДЕЙСТВИЯ, ВОЗНИКАЮЩИЕ В РЕЗУЛЬТАТЕ ИЛИ В СВЯЗИ С ИСПОЛЬЗОВАНИЕМ ИЛИ ВЫПОЛНЕНИЕМ ФАЙЛОВ ДАННЫХ ИЛИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.
За исключением случаев, указанных в этом уведомлении, имя правообладателя не может использоваться в рекламе или иным образом для продвижения продажи, использования или других операций с этими файлами данных или Программным обеспечением без предварительного письменного разрешения правообладателя.
местный p = {}локальный этаж = math.floorлокальная функция errorf ( level , ...)если type ( level ) == "число", товернуть ошибку ( string.format (...), level + 1 )else - level - это фактически строка формата.вернуть ошибку ( string.format ( level , ...), 2 )конецконецлокальная функция binary_range_search ( элемент кода , диапазоны )местный низкий , средний , высокийнизкий , высокий = 1 , диапазоны . length или требуется "Module: TableTools" . длина ( диапазоны )пока низкий <= высокий делатьсередина = пол (( низкий + высокий ) / 2 )локальный диапазон = диапазоны [ середина ]если кодовая точка < диапазон [ 1 ], товысокий = средний - 1elseif кодовая точка <= диапазон [ 2 ], затем диапазон возврата , среднийещенизкий = средний + 1конецконецвозврат ноль , серединаконецстр . binary_range_search = двоичный_диапазон_поиск- [[локальная функция linear_range_search (кодовая точка, диапазоны) для i, диапазон в ipairs (диапазонах) do если диапазон [1] <= кодовая точка и кодовая точка <= диапазон [2], то диапазон возврата конец конецконец-]]- Загрузите модуль, указав "загрузчик" с именем модуля минус- Часть «Модуль: данные Unicode /». Например, loader.blocks возвращает- [[Модуль: данные / блоки Unicode]]. Если модуль не может быть загружен, будет установлено значение false.- вернулся.локальный загрузчик = setmetatable ({}, {__index = функция ( сам , ключ )локальный успех , data = pcall ( mw . loadData , "Module: Unicode data /" .. key )если не успех, тоданные = ложьконецself [ ключ ] = данныевернуть данныеконец})- Для алгоритма, используемого для генерации имен слогов хангыль,- см. «Генерация слоговых имен хангыль» в разделе 3.12.- Спецификация Unicode:- https://www.unicode.org/versions/Unicode11.0.0/ch03.pdflocal name_hooks = {{ 0x00 , 0x1F , "" %> }, - управляющие символы C0{ 0x7F , 0x9F , "" %> }, - управляющие символы DEL и C1{ 0x3400 , 0x4DBF , "CJK UNIFIED IDEOGRAPH-% 04X" }, - CJK Ideograph Extension A{ 0x4E00 , 0x9FFC , "CJK UNIFIED IDEOGRAPH-% 04X" }, - CJK Ideograph{ 0xAC00 , 0xD7A3 , функция ( код ) - слоги хангыльlocal Hangul_data = загрузчик . Хангыльлокальная syllable_index = элемент кода - 0xAC00return ( "HANGUL SYLLABLE% s% s% s" ): формат (Hangul_data . ведет [ этаж ( syllable_index / Hangul_data . final_count )],Hangul_data . гласные [ этаж (( syllable_index % Hangul_data . final_count )/ Hangul_data . trail_count )],Hangul_data . следы [ syllable_index % Hangul_data . trail_count ])конец },- Высокие суррогаты, частные суррогаты, низкие суррогаты{ 0xD800 , 0xDFFF , "" %> },{ 0xE000 , 0xF8FF , "" %> }, - частное использование- Идеографы совместимости CJK{ 0xF900 , 0xFA6D , "ИДЕОГРАФ СОВМЕСТИМОСТИ CJK-% 04X" },{ 0xFA70 , 0xFAD9 , "CJK COMPATIBILITY IDEOGRAPH-% 04X" },{ 0x17000 , 0x187F7 , "TANGUT IDEOGRAPH-% 04X" }, - тангутский идеограф{ 0x18800 , 0x18AFF , функция ( код )return ( "TANGUT COMPONENT-% 03d" ): формат ( код - 0x187FF )конец },{ 0x18D00 , 0x18D08 , "TANGUT IDEOGRAPH-% 04X" }, - Дополнение к тангутскому идеографу{ 0x1B170 , 0x1B2FB , "NUSHU CHARACTER-% 04X" }, - Nushu{ 0x20000 , 0x2A6DD , "CJK UNIFIED IDEOGRAPH-% 04X" }, - CJK Ideograph Extension B{ 0x2A700 , 0x2B734 , "CJK UNIFIED IDEOGRAPH-% 04X" }, - CJK Ideograph Extension C{ 0x2B740 , 0x2B81D , "CJK UNIFIED IDEOGRAPH-% 04X" }, - CJK Ideograph Extension D{ 0x2B820 , 0x2CEA1 , "CJK UNIFIED IDEOGRAPH-% 04X" }, - CJK Ideograph Extension E{ 0x2CEB0 , 0x2EBE0 , "CJK UNIFIED IDEOGRAPH-% 04X" }, - CJK Ideograph Extension F- Приложение к идеографам совместимости CJK (дополнительная идеографическая плоскость){ 0x2F800 , 0x2FA1D , "ИДЕОГРАФ СОВМЕСТИМОСТИ CJK-% 04X" },{ 0xE0100 , 0xE01EF , function ( codepoint ) - Дополнение о селекторах вариантовreturn ( "ВЫБОР ВАРИАЦИИ-% d" ): формат ( код - 0xE0100 + 17 )конец },{ 0x30000 , 0x3134A , "CJK UNIFIED IDEOGRAPH-% 04X" }, - CJK Ideograph Extension G{ 0xF0000 , 0xFFFFD , "" %> }, - частное использование на уровне 15{ 0x100000 , 0x10FFFD , "<частного пользование-% 04X>" } - Plane 16 личных}name_hooks . length = # name_hooksлокальный name_range_cacheлокальная функция generate_name ( данные , код )если type ( data ) == "строка", товозвращаемые данные : формат ( код )ещевернуть данные ( код )конецконец- [[- Проверяет, является ли кодовая точка числом и находится в диапазоне.- Не проверяет, является ли кодовая точка целым числом.-- Не используетсялокальная функция check_codepoint (funcName, argIdx, val) требуется 'libraryUtil'.checkType (funcName, argIdx, val,' number ') если кодовая точка <0 или 0x10FFFF <кодовая точка, то errorf ("Кодовая точка% 04X вне допустимого диапазона", кодовая точка) конецконец-]]- https://www.unicode.org/versions/Unicode11.0.0/ch04.pdf, раздел 4.8функция p . lookup_name ( элемент кода )- U + FDD0-U + FDEF и все кодовые точки, заканчивающиеся на FFFE или FFFF, не назначены- (Cn) и, в частности, несимволы:- https://www.unicode.org/faq/private_use.html#nonchar4если 0xFDD0 <= элемент кода и ( элемент кода <= 0xFDEFили этаж ( код % 0x10000 ) > = 0xFFFE ), тоreturn ( "" %>): формат ( код )конецif name_range_cache - Проверить, применяется ли к этой кодовой точке ранее использовавшийся «перехватчик имени».и элемент кода > = name_range_cache [ 1 ]и элемент кода <= name_range_cache [ 2 ] , тоreturn generate_name ( name_range_cache [ 3 ], код )конецлокальный диапазон = binary_range_search ( элемент кода , name_hooks )если диапазон, тоname_range_cache = диапазонвернуть generate_name ( диапазон [ 3 ], код )конецлокальные данные = погрузчик [( 'имена /% 03X' ): формат ( элемент кода / 0x1000 )]если данные и данные [ код ], товернуть данные [ код ]- Неназначенный (Cn) состоит из несимволов и зарезервированных символов.- Установлено, что персонаж не является нехарактером,- и если бы он был назначен, его имя уже было бы получено,- значит, это нужно резервировать.ещеreturn ( "<зарезервировано-% 04X>" ): формат ( код )конецконец- [[- В Википедии пока нет модулей данных изображений.функция p.lookup_image (кодовая точка) локальные данные = загрузчик [('images /% 03X'): формат (кодовая точка / 0x1000)] если данные то вернуть данные [код] конецконец-]]местные самолеты = {[ 0 ] = "Базовая многоязычная плоскость" ;[ 1 ] = "Дополнительная многоязычная плоскость" ;[ 2 ] = "Дополнительная идеографическая плоскость" ;[ 3 ] = "Третичная идеографическая плоскость" ;[ 14 ] = "Дополнительный самолет специального назначения" ;[ 15 ] = "Дополнительная зона частного использования-A" ;[ 16 ] = "Дополнительная зона частного использования-B" ;}- Загрузите [[Модуль: данные / блоки Unicode]], если необходимо, и назначьте его этой переменной.локальные блокилокальная функция block_iter ( блоки , i )я = я + 1локальные данные = блоки [ i ]если данные то - Распаковка не работает для таблиц, загруженных с помощью mw.loadData.вернуть i , данные [ 1 ], данные [ 2 ], данные [ 3 ]конецконец- Генератор итератора типа ipairs для списка блоков.функция p . enum_blocks ()локальные блоки = загрузчик . блокивернуть block_iter , блоки , 0конецфункция p . lookup_plane ( элемент кода )местный i = этаж ( код / 0x10000 )вернуть самолеты [ i ] или ( "Плоскость% u" ): формат ( i )конецфункция p . lookup_block ( код )локальные блоки = загрузчик . блокилокальный диапазон = binary_range_search ( элемент кода , блоки )если диапазон, то диапазон возврата [ 3 ]ещевернуть "No Block"конецконецфункция p . get_block_info ( имя )для I , блок в ipairs ( загрузчик . блоки ) делаютif block [ 3 ] == name, то блок возвратаконецконецконецфункция p . is_valid_pagename (имя страницы )местный has_nonws = ложьдля cp в mw . ustring . gcodepoint (имя страницы ) делатьесли ( cp == 0x0023 ) - #или ( cp == 0x005B ) - [или ( cp == 0x005D ) -]или ( cp == 0x007B ) - {или ( cp == 0x007C ) - |или ( cp == 0x007D ) -}или ( cp == 0x180E ) - МОНГОЛЬСКИЙ РАЗДЕЛИТЕЛЬ ГЛАВНЫХили (( cp > = 0x2000 ) и ( cp <= 0x200A )) - пробелы в общем блоке пунктуацииили ( cp == 0xFFFD ) - ХАРАКТЕР ЗАМЕНЫтогдавернуть ложьконецместная распечатка , результат = p . is_printable ( cp )если не для печати, товернуть ложьконецесли результат ~ = "пробел-разделитель", тоhas_nonws = правдаконецконецвернуть has_nonwsконецлокальная функция manual_unpack ( что , откуда )если what [ from + 1 ] == nil, товернуть то, что [ из ]конецместный результат = {}from = from или 1для i , элемент в ipairs ( что ) делатьесли я > = от тоtable.insert ( результат , элемент )конецконецвернуть распаковать ( результат )конецлокальная функция compare_ranges ( диапазон1 , диапазон2 )return range1 [ 1 ] < range2 [ 1 ]конец- Создает функцию для поиска данных в модуле, содержащем "одиночные" (- кодовая карта "точка-данные") и "диапазоны" (массив, содержащий массивы, содержащие- нижний и верхний кодовые точки диапазона и данные, связанные с этим-- диапазон).- «загрузчик» загружает и возвращает таблицы «одиночных игр» и «диапазонов».- "match_func" передается кодовая точка и либо данные, либо "точки", и- генерирует окончательный результат функции.- varargs («точки») описывает данные по умолчанию, которые будут возвращены, если их не было.-- матч.- Если функция используется более одного раза, "кеш" сохраняет диапазоны, в которых есть- уже найдено соответствие, или диапазон, данные которого являются значениями по умолчанию, если есть- не было совпадения.локальная функция memo_lookup ( data_module_subpage , match_func , ...)локальные точки = { ... }локальный кеш = {}местные одиночные игры , диапазоны функция возврата ( код )если не одиночные игры, тоlocal data_module = загрузчик [ data_module_subpage ]одиночные игры , диапазоны = data_module . одиночные игры , data_module . диапазоныконецесли синглы [ кодовая точка ], товернуться match_func ( элемент кода , одиночные [ элемент кода ])конецлокальный диапазон = binary_range_search ( элемент кода , кэш )если диапазон, тоВозвращение match_func ( элемент кода , manual_unpack ( диапазон , 3 ))конецлокальный диапазон , индекс = binary_range_search ( элемент кода , диапазоны )если диапазон, тоtable.insert ( кеш , диапазон )table.sort ( кеш , compare_ranges )Возвращение match_func ( элемент кода , manual_unpack ( диапазон , 3 ))конецесли диапазоны [ индекс ], толокальный dots_rangeесли кодовая точка > диапазоны [ индекс ] [ 2 ], тоdots_range = {диапазоны [ индекс ] [ 2 ] + 1 ,диапазоны [ индекс + 1 ] и диапазоны [ индекс + 1 ] [ 1 ] - 1 или 0x10FFFF ,распаковать ( точки )}else - код <диапазон [индекс] [1]dots_range = {диапазоны [ индекс - 1 ] и диапазоны [ индекс - 1 ] [ 2 ] + 1 или 0 ,диапазоны [ индекс ] [ 1 ] - 1 ,распаковать ( точки )}конецtable.sort ( кеш , compare_ranges )конецвернуть match_func ( код )конецконец- Получить значение класса объединения кодовой точки в [[Модуль: данные Unicode / объединение]],- и вернуть, если это значение не равно нулю. По умолчанию используется ноль.- если значение комбинирующего класса не найдено в этом модуле данных.- То есть вернуть истину, если символ комбинируется, или ложь, если нет.- См. Https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values для-- больше информации.стр . is_combining = memo_lookup ("комбинирование" ,функция ( кодовая точка , класс_комбинирования )вернуть combining_class и combining_class ~ = 0 или falseконец ,0 )функция p . add_dotted_circle ( str )return ( mw . ustring . gsub ( str , "." ,функция ( символ )если п . is_combining ( mw . ustring . codepoint ( char )), тогдавернуть '◌' .. символконецконец ))конецлокальный lookup_control = memo_lookup ("контроль" ,функция ( кодовая точка , ccc )вернуть ccc или "назначено"конец ,"назначено" )стр . lookup_control = lookup_controlфункция p . is_assigned ( элемент кода )return lookup_control ( codepoint ) ~ = "не назначено"конецфункция p . is_printable ( код )локальный результат = lookup_control ( элемент кода )return ( результат == "назначено" ) или ( результат == "пробел-разделитель" ), результатконецфункция p . is_whitespace ( элемент кода )локальный результат = lookup_control ( элемент кода )return ( результат == "пробел-разделитель" ), результатконецстр . lookup_category = memo_lookup ("категория" ,функция ( код , категория ) категория возвратаконец ,«Сп» )локальный lookup_script = memo_lookup ("скрипты" ,Функция ( элемент кода , script_code )вернуть script_code или 'Zzzz'конец ,"Zzzz" )стр . lookup_script = lookup_scriptфункция p . get_best_script ( str )- Проверьте тип аргумента, потому что mw.text.decode переводит числа в строки!требуется "libraryUtil" . checkType ( "get_best_script" , 1 , str , "строка" )- Преобразование ссылок на символы HTML (включая ссылки на именованные символы,- или сущности персонажей) в символы.str = mw . текст . декодировать ( str , true )локальные скрипты = {}для кодовой точки в mw . ustring . gcodepoint ( str ) делатьлокальный скрипт = lookup_script ( элемент кода )- Игнорировать сценарии «Унаследованные», «Неопределенные» или «Незакодированные».если нет ( скрипт == "Zyyy" или скрипт == "Zinh" или скрипт == "Zzzz" ), тоскрипты [ скрипт ] = истинаконецконец- Если скрипт не содержит двух и более ключей,- вернуть первый и единственный ключ (код скрипта) в таблице.если не следующий ( скрипты , следующий ( скрипты )), товернуться далее ( скрипты )конец - иначе вернуть сценарий большинства, или "Zzzz"?конецфункция p . is_Latin ( str )требуется "libraryUtil" . checkType ( "get_best_script" , 1 , str , "строка" )str = mw . текст . декодировать ( str , true )- Найдите начальные байты, которые представляют кодировку UTF-8- кодовые точки U + 0340-U + 10FFFF. Если они не найдены и есть хотя бы- один символ латиницы, строка считается латиницей, потому что остальные- из персонажей могут быть только Zyyy, Zinh и Zzzz.- Единственные скрипты, найденные ниже U + 0370 (первая кодовая точка греческого- и коптский блок) - это Latn, Zyyy, Zinh и Zzzz.- См. Кодовую страницу в статье [[UTF-8]].если не str : найти "[ \ 205 - \ 244 ]", тогдадля кодовой точки в mw . ustring . gcodepoint ( str ) делатьесли lookup_script ( codepoint ) == "Latn", товернуть истинуконецконецконецместный Latn = falseдля кодовой точки в mw . ustring . gcodepoint ( str ) делатьлокальный скрипт = lookup_script ( элемент кода )если script == "Latn", тоLatn = истинаиначе, если нет ( скрипт == "Zyyy" или скрипт == "Zinh"или скрипт == "Zzzz" ) тогдавернуть ложьконецконецreturn Latnконец- Проверяет, что строка содержит только символы, принадлежащие справа налево.- сценарии или персонажи игнорируемых сценариев.функция p . is_rtl ( str )требуется "libraryUtil" . checkType ( "get_best_script" , 1 , str , "строка" )str = mw . текст . декодировать ( str , true )- Найдите начальные байты, которые представляют кодировку UTF-8- кодовые точки U + 0580-U + 10FFFF. Если они не найдены, строка может только- иметь символы из сценария слева направо, потому что первая кодовая точка- в письме справа налево U + 0591 в блоке на иврите.если не str : find "[ \ 214 - \ 244 ]", товернуть ложьконецлокальный результат = ложьлокальный rtl = загрузчик . скрипты . RTLдля кодовой точки в mw . ustring . gcodepoint ( str ) делатьлокальный скрипт = lookup_script ( элемент кода )если rtl [ сценарий ], торезультат = правдаиначе, если нет ( скрипт == "Zyyy" или скрипт == "Zinh"или скрипт == "Zzzz" ) тогдавернуть ложьконецконецвернуть результатконецлокальная функция get_codepoint ( args , arg )local codepoint_string = args [ аргумент ]или errorf ( 2 , «Требуется параметр% s» , tostring ( arg ))местный элемент кода = ToNumber ( codepoint_string , 16 )или errorf ( 2 , «Параметр% s не является кодовой точкой в шестнадцатеричной системе счисления» ,tostring ( аргумент ))если не ( 0 <= элемент кода и элемент кода <= 0x10FFFF ) , тоerrorf ( 2 , «код в параметре% s вне допустимого диапазона» , tostring ( arg ))конец код возвратаконецлокальная функция get_func ( аргументы , аргументы , префикс )локальный суффикс = аргумент [ аргумент ]или errorf ( 2 , «Требуется параметр% s» , tostring ( arg ))суффикс = mw . текст . обрезать ( суффикс )локальное имя_функции = префикс .. суффикслокальная функ = р [ func_name ]или errorf ( 2 , «Нет функции '% s'» , func_name ) функция возвратаконец- Эта функция позволяет вызывать любую из функций поиска. Первое- параметр - слово после "lookup_"; второй параметр - это кодовая точка- в шестнадцатеричной системе счисления.функция p . поиск ( кадр )local func = get_func ( frame . args , 1 , "lookup_" )местный элемент кода = get_codepoint ( кадр . арг , 2 )локальный результат = func ( кодовая точка )если func == p . lookup_name тогда- Предотвратить появление меток кодовых точек, таких как . - интерпретируется как HTML-теги.результат = результат : gsub ( "<" , "& lt;" )конецвернуть результатконецфункция p . это ( рамка )local func = get_func ( frame . args , 1 , "is_" )- is_Latin и is_valid_pagename принимают строки.если func == p . is_Latin или func == p . is_valid_pagename или func == p . is_rtl тогдаreturn ( func ( frame . args [ 2 ]))else - Остальные берут кодовые баллы.местный элемент кода = get_codepoint ( кадр . арг , 2 )return ( func ( codepoint )) - настроить на один результат.конецконецвернуть p