모듈:Unicode 데이터/샌드박스

Module
현지의 p = {}  현지의 바닥. = math.floor  현지의 기능. 에러(수평, ...)  한다면 유형(수평) == "숫자" 그리고나서   돌아가다 에러(string.format(...), 수평 + 1)  또 다른 -- level은 실제로는 포맷 문자열입니다.   돌아가다 에러(string.format(수평, ...), 2)  끝. 끝.  현지의 기능. binary_range_search(코드 포인트, 범위)  현지의 낮다, 중앙의, 높은  낮다, 높은 = 1, 범위.길이 또는 요구하다 "모듈:테이블 도구".길이(범위)  하는 동안에 낮다 <=> 높은 하다   중앙의 = 바닥.((낮다 + 높은) / 2)   현지의 범위 = 범위[중앙의]   한다면 코드 포인트 < > 범위[1] 그리고나서    높은 = 중앙의 - 1   그렇지 않으면 코드 포인트 <=> 범위[2] 그리고나서    돌아가다 범위, 중앙의   또 다른    낮다 = 중앙의 + 1   끝.  끝.  돌아가다 제로, 중앙의 끝. p.binary_range_search = binary_range_search  --[[ local 함수 linear_range_search(코드포인트, 범위) i의 경우 ipairs(표준) do의 범위 range[1] <= 코드포인트 및 코드포인트 <= 범위[2]인 경우 리턴 레인지 끝. 끝. 끝. --]]  -- "loader"에서 모듈 이름을 뺀 값을 인덱싱하여 모듈을 로드합니다. -- "모듈:유니코드 데이터/" 부분.예를 들어 로더.반환 블록 -- [[모듈:Unicode 데이터/블록] ] 。모듈을 로드할 수 없는 경우 false는 --가 돌아왔다. 현지의 로더 = 설정 가능한({}, {  __인덱스 = 기능. (자신, 열쇠)   현지의 성공., 데이터. = pcall(.로드 데이터, "모듈:Unicode 데이터/" .. 열쇠)   한다면 것은 아니다. 성공. 그리고나서    데이터. = 거짓의   끝.   자신[열쇠] = 데이터.   돌아가다 데이터.  끝. })  -- 한글 이름 생성에 사용되는 알고리즘의 경우, -- 의 섹션 3.12 의 "한글 음절 이름 생성"을 참조하십시오. -- Unicode 사양: -- https://www.unicode.org/versions/Unicode11.0.0/ch03.pdf 현지의 name_module = {  {     0x00,     0x1F, "< control - %04X >" }, -- C0 제어 문자  {     0x7F,     0x9F, "< control - %04X >" }, -- DEL 및 C1 제어 문자  {   0x3400,   0x4DBF, "CJK 통합 IDEORGATH-%04X" }, -- CJK 한자 내선번호 A  {   0x4E00,   0x9FFF, "CJK 통합 IDEORGATH-%04X" }, -- CJK 한자  {   0xAC00,   0xD7A3, 기능. (코드 포인트) -- 한글 음절   현지의 한글_데이터 = 로더.한글   현지의 음절_색인 = 코드 포인트 - 0xAC00    돌아가다 ("한글 음절 %s%s%s"):포맷(    한글_데이터.리드[바닥.(음절_색인 / 한글_데이터.final_count(최종 카운트))],    한글_데이터.모음.[바닥.((음절_색인 % 한글_데이터.final_count(최종 카운트))     / 한글_데이터.trail_count(트레일 수))],    한글_데이터.흔적[음절_색인 % 한글_데이터.trail_count(트레일 수)]   )  끝. },  - 높은 대리인, 높은 개인사용 대리인, 낮은 대리인  {   0xD800,   0xDFFF, "<대리-%04X>" },  {   0xE000,   0xF8FF, "<프라이빗 사용-%04X>" }, --개인용도  --CJK 호환성 한자  {   0xF900,   0xFA6D, "CJK 호환성 IDEORGATH-%04X" },  {   0xFA70,   0xFAD9, "CJK 호환성 IDEORGATH-%04X" },  {  0x17000,  0x187F7, "TANGUT IDEORGATH-%04X" }, -- 탕구트어 문자  {  0x18800,  0x18AFF, 기능. (코드 포인트)   돌아가다 ("탱굿 구성 요소-%03d"):포맷(코드 포인트 - 0x187FF)  끝. },  {  0x18D00,  0x18D08, "TANGUT IDEORGATH-%04X" }, -- 탕구트 한자 보충서  {  0x1B170,  0x1B2FB, "NUSHU CARTER-%04X" }, - 누슈  {  0x20000,  0x2A6DF, "CJK 통합 IDEORGATH-%04X" }, -- CJK 한자 확장 B  {  0x2A700,  0x2B738, "CJK 통합 IDEORGATH-%04X" }, -- CJK 한자 확장 C  {  0x2B740,  0x2B81D, "CJK 통합 IDEORGATH-%04X" }, -- CJK 한자 확장 D  {  0x2B820,  0x2CEA1, "CJK 통합 IDEORGATH-%04X" }, -- CJK 한자 확장 E  {  0x2CEB0,  0x2EBE0, "CJK 통합 IDEORGATH-%04X" }, --CJK 한자 확장 F  --CJK 호환성 한자 보충판(보조 한자 평면)  {  0x2F800,  0x2FA1D, "CJK 호환성 IDEORGATH-%04X" },  {  0xE0100,  0xE01EF, 기능. (코드 포인트) -- 바리에이션 실렉터 보충   돌아가다 ("변동 선택기-%d"):포맷(코드 포인트 - 0xE0100 + 17)  끝.},  {  0x30000,  0x3134A, "CJK 통합 IDEORGATH-%04X" }, --CJK 한자 확장 G  {  0xF0000,  0xFFFFD, "<프라이빗 사용-%04X>" }, -- 플레인 15 전용  { 0x100000, 0x10FFFD, "<프라이빗 사용-%04X>" }  -- 플레인 16 개인 용도 } name_module.길이 = #name_module  현지의 name_range_cache  현지의 기능. generate_name(데이터., 코드 포인트)  한다면 유형(데이터.) == "문자열' 그리고나서   돌아가다 데이터.:포맷(코드 포인트)  또 다른   돌아가다 데이터.(코드 포인트)  끝. 끝.  --[[ -- 코드 포인트가 숫자이며 범위 내에 있는지 확인합니다. -- 코드 포인트가 정수인지 여부를 확인하지 않습니다. -- 미사용 로컬 함수 check_codepoint(funcName, argIdx, val) libraryUtil.checkType(funcName, argIdx, val, 'number')이 필요합니다. 코드 포인트 < 0 또는 0x10인 경우FFFF < 코드 포인트 errorf("코드포인트 %04X가 범위를 벗어남", 코드포인트) 끝. 끝. --]]  -- https://www.unicode.org/versions/Unicode11.0.0/ch04.pdf, 섹션 4.8 기능. p.lookup_name(코드 포인트)  -- U+FDD0-U+FFEF 및 FFFE 또는 FFF로 끝나는 모든 코드 포인트는 할당 해제됩니다.  -- (Cn) 및 특히 비문자:  -- https://www.unicode.org/faq/private_use.html#nonchar4  한다면 0xFDD0 <=> 코드 포인트 그리고. (코드 포인트 <=> 0xFDEF    또는 바닥.(코드 포인트 % 0x10000) >= 0xFFFE) 그리고나서   돌아가다 ("<비문자-%04X>"):포맷(코드 포인트)  끝.   한다면 name_range_cache -- 이전에 사용한 "이름 후크"가 이 코드 포인트에 적용되는지 확인합니다.    그리고. 코드 포인트 >= name_range_cache[1]    그리고. 코드 포인트 <=> name_range_cache[2] 그리고나서   돌아가다 generate_name(name_range_cache[3], 코드 포인트)  끝.    현지의 범위 = binary_range_search(코드 포인트, name_module)  한다면 범위 그리고나서   name_range_cache = 범위   돌아가다 generate_name(범위[3], 코드 포인트)  끝.   현지의 데이터. = 로더[('이름/%03X'):포맷(코드 포인트 / 0x1000)]    한다면 데이터. 그리고. 데이터.[코드 포인트] 그리고나서   돌아가다 데이터.[코드 포인트]    -- Unassigned ( Cn )는 비문자와 예약된 문자로 구성됩니다.  --캐릭터가 비캐릭터가 되지 않도록 설정되어 있습니다.  -- 할당되어 있으면, 그 이름은 이미 취득되어 있을 것입니다.  --그래서 예약해야 합니다.  또 다른   돌아가다 ("<reserved-%04X>"):포맷(코드 포인트)  끝. 끝.  --[[ Wikipedia에는 아직 이미지 데이터 모듈이 없습니다. 함수 p.syslog_image(코드포인트) 로컬 데이터 = 로더[('images/%03X'): format(코드포인트/0x1000)]   데이터라면 데이터[코드포인트]를 반환하다 끝. 끝. --]]  현지의 평면 = {  [ 0] = "기본 다국어 평면";  [ 1] = "보충 다국어 영역";  [ 2] = "보조 표의 평면";  [ 3] = "테리어 표의 평면";  [14] = "보조 특수 목적 비행기";  [15] = "보충 사적 용도 영역 A";  [16] = "보충 전용 영역 B"; }  -- 로드 [[모듈:필요한 경우 Unicode data/blocks]를 클릭하여 이 변수에 할당합니다. 현지의 블록  현지의 기능. 차단_반복하다(블록, i)  i = i + 1  현지의 데이터. = 블록[i]  한다면 데이터. 그리고나서    -- mw.loadData 로딩된 테이블에서는 언팩이 작동하지 않습니다.   돌아가다 i, 데이터.[1], 데이터.[2], 데이터.[3]  끝. 끝.  -- 블록 목록용 ipairs 유형 반복 생성기. 기능. p.enum_blocks()  현지의 블록 = 로더.블록  돌아가다 차단_반복하다, 블록, 0 끝.  기능. p.lookup_plane(코드 포인트)  현지의 i = 바닥.(코드 포인트 / 0x10000)  돌아가다 평면[i] 또는 ("플레인 %u"):포맷(i) 끝.  기능. p.lookup_block(코드 포인트)  현지의 블록 = 로더.블록  현지의 범위 = binary_range_search(코드 포인트, 블록)  한다면 범위 그리고나서   돌아가다 범위[3]  또 다른   돌아가다 "블록 없음"  끝. 끝.  기능. p.get_block_info(이름.)  위해서 i, 블록  아이페어(로더.블록) 하다   한다면 블록[3] == 이름. 그리고나서    돌아가다 블록   끝.  끝. 끝.  기능. p.is_valid_pagename(pagename)  현지의 has_nonws = 거짓의   위해서 cp  .스트링.코드 포인트(pagename) 하다   한다면 (cp == 0x0023) -- #   또는 (cp == 0x005B) -- [   또는 (cp == 0x005D) -- ]   또는 (cp == 0x007B) -- {   또는 (cp == 0x007C) --   또는 (cp == 0x007D) -- }   또는 (cp == 0x180E) -- 몽골어 모음 구분자   또는 ((cp >= 0x2000) 그리고. (cp <=> 0x200A)) -- 일반 구두점 블록의 공백   또는 (cp == 0xFFFD) -- 치환 문자   그리고나서    돌아가다 거짓의   끝.    현지의 인쇄 가능한, 결과 = p.인쇄 가능(cp)   한다면 것은 아니다. 인쇄 가능한 그리고나서    돌아가다 거짓의   끝.    한다면 결과 ~= "공간 절약" 그리고나서    has_nonws = 진실의   끝.  끝.   돌아가다 has_nonws 끝.  현지의 기능. 수동_실행(, 부터)  한다면 [부터 + 1] == 제로 그리고나서   돌아가다 [부터]  끝.    현지의 결과 = {}  부터 = 부터 또는 1  위해서 i, 아이템  아이페어() 하다   한다면 i >= 부터 그리고나서    table.insert(결과, 아이템)   끝.  끝.  돌아가다 개봉하다(결과) 끝.  현지의 기능. compare_displays(비교_비교)(범위 1, 범위 2)  돌아가다 범위 1[1] < > 범위 2[1] 끝.  -- "싱글"(a)을 포함하는 모듈에서 데이터를 검색하는 함수를 만듭니다. -- code point-to-data map) 및 "code" (다음 어레이를 포함하는 어레이) -- 범위의 낮은 코드 포인트와 높은 코드 포인트 및 그와 관련된 데이터 --range). -- "syslog" 테이블은 "syslog" 테이블과 "syslog" 테이블을 로드하여 반환합니다. -- "match_func"는 코드 포인트와 데이터 또는 "func" 중 하나를 통과합니다. -- 함수의 최종 결과를 생성합니다. -- vararargs ('도트')는 존재하지 않을 경우 반환되는 기본 데이터를 나타냅니다. --성냥. -- 함수가 여러 번 사용되는 경우 "cache"는 다음 값을 가진 범위를 저장합니다. -- 일치하는 데이터가 이미 발견되었거나 데이터가 기본인 범위가 있는 경우 --는 상대가 되지 않았다. 현지의 기능. 메모_메모(data_subpage, match_func, ...)  현지의 도트 = { ... }  현지의 캐시 = {}  현지의 싱글, 범위   돌아가다 기능. (코드 포인트)   한다면 것은 아니다. 싱글 그리고나서    현지의 data_module = 로더[data_subpage]    싱글, 범위 = data_module.싱글, data_module.범위   끝.    한다면 싱글[코드 포인트] 그리고나서    돌아가다 match_func(코드 포인트, 싱글[코드 포인트])   끝.    현지의 범위 = binary_range_search(코드 포인트, 캐시)   한다면 범위 그리고나서    돌아가다 match_func(코드 포인트, 수동_실행(범위, 3))   끝.      현지의 범위, 색인 = binary_range_search(코드 포인트, 범위)   한다면 범위 그리고나서    table.insert(캐시, 범위)    table.displaces(캐시, compare_displays(비교_비교))    돌아가다 match_func(코드 포인트, 수동_실행(범위, 3))   끝.      한다면 범위[색인] 그리고나서    현지의 도트_범위    한다면 코드 포인트 > 범위[색인][2] 그리고나서     도트_범위 = {      범위[색인][2] + 1,      범위[색인 + 1] 그리고. 범위[색인 + 1][1] - 1 또는 0x10FFFF,      개봉하다(도트)     }    또 다른 -- 코드 포인트< range [ index ][ 1 ]     도트_범위 = {      범위[색인 - 1] 그리고. 범위[색인 - 1][2] + 1 또는 0,      범위[색인][1] - 1,      개봉하다(도트)     }    끝.    table.displaces(캐시, compare_displays(비교_비교))   끝.      돌아가다 match_func(코드 포인트)  끝. 끝.  -- [Module]에서 코드 포인트의 결합 클래스 값을 가져옵니다.Unicode 데이터/결합]), -- 이 값이 0이 아닌지 여부를 반환합니다.0이 기본값으로 할당되어 있습니다. -- 이 데이터 모듈에서 결합 클래스 값을 찾을 수 없는 경우. -- 즉, 문자가 결합되어 있으면 true를 반환하고, 결합되어 있지 않으면 false를 반환합니다. -- https://www.unicode.org/reports/tr44/ #Canonical_Combining_Class_Values 를 참조해 주세요. --자세한 것은 이쪽입니다. p.is_filename(이것들) = 메모_메모(  "실패",  기능. (코드 포인트, combining_class(결합 클래스))   돌아가다 combining_class(결합 클래스) 그리고. combining_class(결합 클래스) ~= 0 또는 거짓의  끝.,  0)  -- TEST 1 Jun2022 is_combining과 동일한 데이터이지만 T/F 변환이 아닌 combining_class를 반환합니다. -- 없음에 대해 공백으로 반환 -- https://www.unicode.org/reports/tr44/ #Canonical_Combining_Class_Values 단위 p.lookup_class = 메모_메모(  "실패",  기능. (코드 포인트, combining_class(결합 클래스))   돌아가다 combining_class(결합 클래스)  끝.,  99)  기능. p.add_module_module(스트레이트)  돌아가다 (.스트링.서브(스트레이트, ".",   기능.()    한다면 p.is_filename(이것들)(.스트링.코드 포인트()) 그리고나서     돌아가다 '◌' ..     끝.   끝.)) 끝.  현지의 lookup_control(조회_제어) = 메모_메모(  "제어",  기능. (코드 포인트, ccc)   돌아가다 ccc 또는 "실패"  끝.,  "실패") p.lookup_control(조회_제어) = lookup_control(조회_제어)  기능. p.is_filename(이것들)(코드 포인트)  돌아가다 lookup_control(조회_제어)(코드 포인트) ~= "설계 완료" 끝.  기능. p.인쇄 가능(코드 포인트)  현지의 결과 = lookup_control(조회_제어)(코드 포인트)  돌아가다 (결과 == "실패") 또는 (결과 == "공간 절약"), 결과 끝.  기능. p.is_space(코드 포인트)  현지의 결과 = lookup_control(조회_제어)(코드 포인트)  돌아가다 (결과 == "공간 절약"), 결과 끝.  p.lookup_category(카테고리) = 메모_메모(  "카테고리",  기능. (코드 포인트, 카테고리)   돌아가다 카테고리  끝.,  "Cn")  현지의 lookup_script = 메모_메모(  "실패",  기능. (코드 포인트, 스크립트_코드)   돌아가다 스크립트_코드 또는 '쯔쯔'  끝.,  "ZZZ") p.lookup_script = lookup_script  기능. p.get_best_script(스트레이트)  -- 인수 유형을 확인합니다.mw.text.decode는 숫자를 문자열로 강제하기 때문입니다.  요구하다 "라이브러리 유틸".체크 타입("get_best_script", 1, 스트레이트, "문자열')    -- HTML 문자 참조 변환(이름 있는 문자 참조 포함)  -- 또는 문자 엔티티)에서 문자로 이동합니다.  스트레이트 = .본문.해독하다(스트레이트, 진실의)    현지의 스크립트 = {}  위해서 코드 포인트  .스트링.코드 포인트(스트레이트) 하다   현지의 대본 = lookup_script(코드 포인트)      -- "상속됨", "미결정" 또는 "코드화되지 않음" 스크립트를 무시합니다.   한다면 것은 아니다. (대본 == "Zyy" 또는 대본 == '진' 또는 대본 == "ZZZ") 그리고나서    스크립트[대본] = 진실의   끝.  끝.    -- 스크립트에 2개 이상의 키가 포함되어 있지 않은 경우,  -- 테이블 내의 첫 번째 키(스크립트 코드)를 반환합니다.  한다면 것은 아니다. 다음 분.(스크립트, 다음 분.(스크립트)) 그리고나서   돌아가다 다음 분.(스크립트)  끝. --그렇지 않으면 과반수 스크립트를 반환하고, 그렇지 않으면 "Zzz"를 반환한다. 끝.  기능. p.is_라틴어(스트레이트)  요구하다 "라이브러리 유틸".체크 타입("get_best_script", 1, 스트레이트, "문자열')  스트레이트 = .본문.해독하다(스트레이트, 진실의)    -- UTF-8 인코딩을 도입하는 선두 바이트를 검색합니다.  -- 코드 포인트 U+0340-U+10FFF.찾을 수 없고 적어도 다음 항목이 있는 경우  -- 1개의 라틴 스크립트문자, 문자열은 라틴어로 카운트됩니다.나머지는  -- 문자 중 Zyy, Zinh 및 Zzz만 사용할 수 있습니다.  -- U+0370 아래에 있는 유일한 스크립트(그리스어 첫 번째 코드 포인트)  -- 및 콥트 블록)은 Latn, Zyy, Zinh 및 Zzz입니다.  -- [ UTF - 8 ]기사의 코드 페이지를 참조해 주세요.  한다면 것은 아니다. 스트레이트:발견하다 "[\205-\244]" 그리고나서   위해서 코드 포인트  .스트링.코드 포인트(스트레이트) 하다    한다면 lookup_script(코드 포인트) == "라틴" 그리고나서     돌아가다 진실의    끝.   끝.  끝.    현지의 라튼 = 거짓의    위해서 코드 포인트  .스트링.코드 포인트(스트레이트) 하다   현지의 대본 = lookup_script(코드 포인트)      한다면 대본 == "라틴" 그리고나서    라튼 = 진실의   그렇지 않으면 것은 아니다. (대본 == "Zyy" 또는 대본 == '진'     또는 대본 == "ZZZ") 그리고나서    돌아가다 거짓의   끝.  끝.    돌아가다 라튼 끝.  -- 문자열에 오른쪽에서 왼쪽으로 속하는 문자만 포함되어 있는지 확인합니다. -- 스크립트 또는 무시할 수 없는 스크립트의 문자. 기능. p.is_rtl(스트레이트)  요구하다 "라이브러리 유틸".체크 타입("get_best_script", 1, 스트레이트, "문자열')  스트레이트 = .본문.해독하다(스트레이트, 진실의)    -- UTF-8 인코딩을 도입하는 선두 바이트를 검색합니다.  -- 코드 포인트 U+0580-U+10FFF.찾을 수 없는 경우 문자열은  -- 첫 번째 코드 포인트는 왼쪽에서 오른쪽 스크립트의 문자를 사용합니다.  -- 오른쪽에서 왼쪽으로 스크립트는 히브리어 블록의 U+0591입니다.  한다면 것은 아니다. 스트레이트:발견하다 "[\214-\244]" 그리고나서   돌아가다 거짓의  끝.    현지의 결과 = 거짓의  현지의 rtl = 로더.스크립트.rtl  위해서 코드 포인트  .스트링.코드 포인트(스트레이트) 하다   현지의 대본 = lookup_script(코드 포인트)      한다면 rtl[대본] 그리고나서    결과 = 진실의   그렇지 않으면 것은 아니다. (대본 == "Zyy" 또는 대본 == '진'     또는 대본 == "ZZZ") 그리고나서    돌아가다 거짓의   끝.  끝.    돌아가다 결과 끝.  현지의 기능. get_codepoint(args, arg)  현지의 코드 포인트_문자열 = args[arg]   또는 에러(2, "%s 매개 변수가 필요합니다.", 스트링(arg))  현지의 코드 포인트 = 톤수(코드 포인트_문자열, 16)   또는 에러(2, "%s 매개 변수는 16진수 기준의 코드 포인트가 아닙니다.",    스트링(arg))  한다면 것은 아니다. (0 <=> 코드 포인트 그리고. 코드 포인트 <=> 0x10FFFF) 그리고나서   에러(2, "%s 매개 변수의 코드 포인트가 범위를 벗어남", 스트링(arg))  끝.  돌아가다 코드 포인트 끝.  현지의 기능. get_func(args, arg, 접두사)  현지의 접미사 = args[arg]   또는 에러(2, "%s 매개 변수가 필요합니다.", 스트링(arg))  접미사 = .본문.다듬다(접미사)  현지의 펑크명 = 접두사 .. 접미사  현지의 기능하다 = p[펑크명]   또는 에러(2, "%s 함수는 없습니다", 펑크명)  돌아가다 기능하다 끝.  -- 이 함수는, 임의의 「검색」함수를 호출할 수 있습니다.첫 번째 -- parameter는 "parameter_" 뒤에 있는 단어입니다.두 번째 파라미터는 코드 포인트입니다. -- 16진수 베이스로 지정합니다. 기능. p.찾다()  현지의 기능하다 = get_func(.args, 1, "실행_")  현지의 코드 포인트 = get_codepoint(.args, 2)  현지의 결과 = 기능하다(코드 포인트)  한다면 기능하다 == p.lookup_name 그리고나서   --<control-0000>등의 코드 포인트라벨이 표시되지 않도록 합니다.   -- HTML 태그로 해석됩니다.   결과 = 결과:서브("<", "&lt;")  끝.  돌아가다 결과 끝.  기능. p.()  현지의 기능하다 = get_func(.args, 1, "그것은…")    -- is_Latin 및 is_valid_pagename 문자열 취득.  한다면 기능하다 == p.is_라틴어 또는 기능하다 == p.is_valid_pagename 또는 기능하다 == p.is_rtl 그리고나서   돌아가다 (기능하다(.args[2]))  또 다른 나머지는 코드 포인트를 받는다.   현지의 코드 포인트 = get_codepoint(.args, 2)   돌아가다 (기능하다(코드 포인트)) -- 1개의 결과에 맞추어 조정합니다.  끝. 끝.  돌아가다 p