#!/usr/bin/env texlua -- JIS->Unicode->CID ではうまくいかない部分 local nonuni_cid = { -- 鼻濁音 [0x2477] = 16209, [0x2478] = 16210, [0x2479] = 16211, [0x247A] = 16212, [0x247B] = 16213, [0x2577] = 16214, [0x2578] = 16215, [0x2579] = 16216, [0x257A] = 16217, [0x257B] = 16218, [0x257C] = 16219, [0x257D] = 16220, [0x257E] = 16221, [0x2678] = 16246, -- from http://examples.oreilly.de/english_examples/nutshell/cjkv/adobe/jisx0213-all.txt [0x2B44] = 9422, [0x2B48] = 9425, [0x2B49] = 9424, [0x2B4A] = 9440, [0x2B4B] = 9439, [0x2B4C] = 9428, [0x2B4D] = 9427, [0x2B4E] = 9431, [0x2B4F] = 9430, [0x2B65] = 15856, [0x2B66] = 15857, } -- 小塚明朝 Pr6 R の fwid feature による変換テーブル local prop_to_full = { [1]=633, [2]=642, [3]=8007, [4]=716, [5]=712, [6]=715, [7]=717, [8]=8006, [9]=674, [10]=675, [11]=718, [12]=692, [13]=636, [14]=662, [15]=637, [16]=663, [17]=780, [18]=781, [19]=782, [20]=783, [21]=784, [22]=785, [23]=786, [24]=787, [25]=788, [26]=789, [27]=639, [28]=640, [29]=699, [30]=697, [31]=700, [32]=641, [33]=719, [34]=790, [35]=791, [36]=792, [37]=793, [38]=794, [39]=795, [40]=796, [41]=797, [42]=798, [43]=799, [44]=800, [45]=801, [46]=802, [47]=803, [48]=804, [49]=805, [50]=806, [51]=807, [52]=808, [53]=809, [54]=810, [55]=811, [56]=812, [57]=813, [58]=814, [59]=815, [60]=678, [61]=711, [62]=679, [63]=648, [64]=650, [65]=646, [66]=816, [67]=817, [68]=818, [69]=819, [70]=820, [71]=821, [72]=822, [73]=823, [74]=824, [75]=825, [76]=826, [77]=827, [78]=828, [79]=829, [80]=830, [81]=831, [82]=832, [83]=833, [84]=834, [85]=835, [86]=836, [87]=837, [88]=838, [89]=839, [90]=840, [91]=841, [92]=680, [93]=8005, [94]=681, [95]=665, [96]=671, [97]=664, [98]=670, [99]=667, [100]=665, [102]=713, [103]=714, [106]=720, [107]=16280, [108]=672, [109]=684, [110]=682, [111]=683, [114]=16206, [115]=776, [116]=777, [117]=638, [118]=778, [119]=12256, [120]=636, [121]=8280, [122]=673, [123]=685, [124]=668, [125]=772, [127]=645, [128]=648, [129]=649, [132]=647, [138]=661, [151]=693, [152]=8059, [153]=8008, [154]=8060, [155]=707, [156]=694, [159]=12093, [161]=8185, [162]=8184, [163]=9783, [186]=695, [215]=696, [226]=649, [228]=11853, [230]=8228, [231]=633, [232]=642, [233]=673, [234]=716, [235]=712, [236]=715, [237]=717, [238]=671, [239]=674, [240]=675, [241]=718, [242]=692, [243]=636, [244]=662, [245]=637, [246]=663, [247]=780, [248]=781, [249]=782, [250]=783, [251]=784, [252]=785, [253]=786, [254]=787, [255]=788, [256]=789, [257]=639, [258]=640, [259]=699, [260]=697, [261]=700, [262]=641, [263]=719, [264]=790, [265]=791, [266]=792, [267]=793, [268]=794, [269]=795, [270]=796, [271]=797, [272]=798, [273]=799, [274]=800, [275]=801, [276]=802, [277]=803, [278]=804, [279]=805, [280]=806, [281]=807, [282]=808, [283]=809, [284]=810, [285]=811, [286]=812, [287]=813, [288]=814, [289]=815, [290]=678, [291]=711, [292]=679, [293]=648, [294]=650, [295]=670, [296]=816, [297]=817, [298]=818, [299]=819, [300]=820, [301]=821, [302]=822, [303]=823, [304]=824, [305]=825, [306]=826, [307]=827, [308]=828, [309]=829, [310]=830, [311]=831, [312]=832, [313]=833, [314]=834, [315]=835, [316]=836, [317]=837, [318]=838, [319]=839, [320]=840, [321]=841, [322]=680, [323]=8005, [324]=681, [325]=649, [327]=635, [328]=686, [329]=687, [330]=634, [331]=638, [332]=1006, [333]=925, [334]=927, [335]=929, [336]=931, [337]=933, [338]=991, [339]=993, [340]=995, [341]=959, [342]=660, [343]=926, [344]=928, [345]=930, [346]=932, [347]=934, [348]=935, [349]=937, [350]=939, [351]=941, [352]=943, [353]=945, [354]=947, [355]=949, [356]=951, [357]=953, [358]=955, [359]=957, [360]=960, [361]=962, [362]=964, [363]=966, [364]=967, [365]=968, [366]=969, [367]=970, [368]=971, [369]=974, [370]=977, [371]=980, [372]=983, [373]=986, [374]=987, [375]=988, [376]=989, [377]=990, [378]=992, [379]=994, [380]=996, [381]=997, [382]=998, [383]=999, [384]=1000, [385]=1001, [386]=1003, [387]=1007, [388]=643, [389]=644, [390]=646, [391]=1004, [392]=1005, [393]=1002, [394]=1009, [395]=1010, [396]=1008, [397]=936, [398]=938, [399]=940, [400]=942, [401]=944, [402]=946, [403]=948, [404]=950, [405]=952, [406]=954, [407]=956, [408]=958, [409]=961, [410]=963, [411]=965, [412]=972, [413]=973, [414]=975, [415]=976, [416]=978, [417]=979, [418]=981, [419]=982, [420]=984, [421]=985, [423]=7608, [424]=7609, [425]=7479, [426]=7480, [427]=7481, [428]=7482, [429]=7483, [430]=7484, [431]=7485, [432]=7486, [433]=7487, [434]=7488, [435]=7489, [436]=7490, [437]=7491, [438]=7492, [439]=7493, [440]=7494, [441]=7495, [442]=7496, [443]=7497, [444]=7498, [445]=7499, [446]=7500, [447]=7501, [448]=7502, [449]=7503, [450]=7504, [451]=7505, [452]=7506, [453]=7507, [454]=7508, [455]=7509, [456]=7510, [457]=7511, [458]=7512, [459]=7513, [460]=7514, [461]=7515, [462]=7516, [463]=7517, [464]=7518, [465]=7519, [466]=7520, [467]=7521, [468]=7522, [469]=7523, [470]=7524, [471]=7525, [472]=7526, [473]=7527, [474]=7528, [475]=7529, [476]=7530, [477]=7531, [478]=7532, [479]=7533, [480]=7534, [481]=7535, [482]=7536, [483]=7537, [484]=7538, [485]=7539, [486]=7540, [487]=7541, [488]=7542, [489]=7543, [490]=7544, [491]=7545, [492]=7546, [493]=7547, [494]=7548, [495]=7549, [496]=7550, [497]=7551, [498]=7552, [499]=7553, [500]=7554, [501]=645, [502]=647, [503]=672, [504]=676, [505]=677, [506]=682, [507]=683, [508]=684, [509]=685, [510]=688, [511]=689, [512]=690, [513]=691, [514]=693, [516]=923, [517]=842, [518]=844, [519]=846, [520]=848, [521]=850, [522]=908, [523]=910, [524]=912, [525]=876, [526]=843, [527]=845, [528]=847, [529]=849, [530]=851, [531]=852, [532]=854, [533]=856, [534]=858, [535]=860, [536]=862, [537]=864, [538]=866, [539]=868, [540]=870, [541]=872, [542]=874, [543]=877, [544]=879, [545]=881, [546]=883, [547]=884, [548]=885, [549]=886, [550]=887, [551]=888, [552]=891, [553]=894, [554]=897, [555]=900, [556]=903, [557]=904, [558]=905, [559]=906, [560]=907, [561]=909, [562]=911, [563]=913, [564]=914, [565]=915, [566]=916, [567]=917, [568]=918, [569]=920, [570]=924, [571]=921, [572]=922, [573]=919, [574]=853, [575]=855, [576]=857, [577]=859, [578]=861, [579]=863, [580]=865, [581]=867, [582]=869, [583]=871, [584]=873, [585]=875, [586]=878, [587]=880, [588]=882, [589]=889, [590]=890, [591]=892, [592]=893, [593]=895, [594]=896, [595]=898, [596]=899, [597]=901, [598]=902, [608]=713, [609]=714, [614]=9826, [629]=731, [631]=665, [632]=8228, [8718]=8008, [8719]=664, [9354]=9779, [9355]=1034, [9356]=708, [9357]=709, [9371]=9796, [9372]=9797, [9373]=9798, [9374]=9799, [9375]=9781, [9376]=9782, [9442]=769, [12063]=661, [12064]=697, [12065]=710, [12066]=706, [12067]=705, [12068]=740, [12069]=735, [12070]=12123, [12071]=12124, [12072]=12125, [12073]=12126, [12074]=12127, [12075]=12128, [12076]=12129, [12077]=12130, [12078]=12131, [12079]=12132, [12080]=12169, [12081]=12170, [12086]=8006, [12087]=8007, [15449]=651, [15450]=652, [15451]=653, [15452]=654, [15453]=655, [15454]=658, [15455]=660, [15456]=698, [15457]=701, [15458]=702, [15459]=703, [15460]=704, [15461]=710, [15462]=16195, [15463]=12181, [15464]=741, [15465]=742, [15466]=743, [15467]=744, [15468]=745, [15469]=746, [15470]=747, [15471]=748, [15472]=16306, [15473]=16307, [15474]=16308, [15475]=16309, [15476]=16299, [15477]=12184, [15480]=749, [15481]=750, [15482]=752, [15483]=753, [15484]=754, [15485]=755, [15486]=12188, [15487]=12186, [15488]=12189, [15489]=16196, [15490]=16300, [15491]=756, [15492]=757, [15493]=759, [15494]=760, [15495]=761, [15496]=762, [15497]=763, [15498]=764, [15499]=765, [15500]=766, [15501]=767, [15502]=768, [15503]=769, [15504]=770, [15505]=16303, [15506]=12120, [15507]=16301, [15508]=16302, [15509]=16304, [15510]=16305, [15511]=12201, [15512]=12118, [15513]=12089, [15514]=12092, [15515]=16204, [15516]=16205, [15517]=842, [15518]=843, [15519]=844, [15520]=845, [15521]=846, [15522]=847, [15523]=848, [15524]=849, [15525]=850, [15526]=851, [15527]=852, [15528]=853, [15529]=854, [15530]=855, [15531]=856, [15532]=857, [15533]=858, [15534]=859, [15535]=860, [15536]=861, [15537]=862, [15538]=863, [15539]=864, [15540]=865, [15541]=866, [15542]=867, [15543]=868, [15544]=869, [15545]=870, [15546]=871, [15547]=872, [15548]=873, [15549]=874, [15550]=875, [15551]=876, [15552]=877, [15553]=878, [15554]=879, [15555]=880, [15556]=881, [15557]=882, [15558]=883, [15559]=884, [15560]=885, [15561]=886, [15562]=887, [15563]=888, [15564]=889, [15565]=890, [15566]=891, [15567]=892, [15568]=893, [15569]=894, [15570]=895, [15571]=896, [15572]=897, [15573]=898, [15574]=899, [15575]=900, [15576]=901, [15577]=902, [15578]=903, [15579]=904, [15580]=905, [15581]=906, [15582]=907, [15583]=908, [15584]=909, [15585]=910, [15586]=911, [15587]=912, [15588]=913, [15589]=914, [15590]=915, [15591]=916, [15592]=917, [15593]=918, [15594]=919, [15595]=920, [15596]=921, [15597]=922, [15598]=923, [15599]=924, [15600]=7958, [15601]=7959, [15602]=7960, [15603]=16209, [15604]=16210, [15605]=16211, [15606]=16212, [15607]=16213, [15608]=925, [15609]=926, [15610]=927, [15611]=928, [15612]=929, [15613]=930, [15614]=931, [15615]=932, [15616]=933, [15617]=934, [15618]=935, [15619]=936, [15620]=937, [15621]=938, [15622]=939, [15623]=940, [15624]=941, [15625]=942, [15626]=943, [15627]=944, [15628]=945, [15629]=946, [15630]=947, [15631]=948, [15632]=949, [15633]=950, [15634]=951, [15635]=952, [15636]=953, [15637]=954, [15638]=955, [15639]=956, [15640]=957, [15641]=958, [15642]=959, [15643]=960, [15644]=961, [15645]=962, [15646]=963, [15647]=964, [15648]=965, [15649]=966, [15650]=967, [15651]=968, [15652]=969, [15653]=970, [15654]=971, [15655]=972, [15656]=973, [15657]=974, [15658]=975, [15659]=976, [15660]=977, [15661]=978, [15662]=979, [15663]=980, [15664]=981, [15665]=982, [15666]=983, [15667]=984, [15668]=985, [15669]=986, [15670]=987, [15671]=988, [15672]=989, [15673]=990, [15674]=991, [15675]=992, [15676]=993, [15677]=994, [15678]=995, [15679]=996, [15680]=997, [15681]=998, [15682]=999, [15683]=1000, [15684]=1001, [15685]=1002, [15686]=1003, [15687]=1004, [15688]=1005, [15689]=1006, [15690]=1007, [15691]=1008, [15692]=1009, [15693]=1010, [15694]=16214, [15695]=16215, [15696]=16216, [15697]=16217, [15698]=16218, [15699]=16219, [15700]=16220, [15701]=16221, [15702]=16236, [15703]=16237, [15704]=16238, [15705]=16239, [15706]=16240, [15707]=16241, [15708]=16242, [15709]=16243, [15710]=16244, [15711]=16245, [15712]=16246, [15713]=16247, [15714]=16248, [15715]=16249, [15716]=16250, [15717]=16251, [15718]=16252, [15719]=8313, [15720]=8314, [15721]=8315, [15722]=8316, [15723]=12269, [15724]=12271, [15725]=16310, [15726]=16311, [15727]=9784, [15728]=16271, [15880]=7624, [15881]=7629, [15882]=7630, [15900]=12091, [15901]=7625, [15902]=8195, [15903]=12121, [15904]=12122, [15905]=12187, [15906]=12190, [15907]=12185, } -- JIS->Unicode, Unicode->CID のテーブルから JIS->CID のテーブルを作る local function mk_jis_cid_table(jis_uni, uni_cid) local res = {} for jis, uni in pairs(jis_uni) do local c = uni_cid[uni] if c then if ((jis>=0x2900) and (jis<=0x2B7E)) then res[#res+1] = { jis, nonuni_cid[jis] or c} else -- それ以外の場合は全角化する res[#res+1] = { jis, nonuni_cid[jis] or (prop_to_full[c] or c)} end end end table.sort(res, function (a,b) return a[1] <7E7E> endcodespacerange ]] ---------------------------------------------------------------- -- JIS X 0213:2004 => Adobe-Japan1-6 横組 local uni_cid_h04 = cmap_dec.open_cmap_file('UniJIS2004-UTF32-H') local jis_cid_h04 = mk_jis_cid_table(jis04_uni, uni_cid_h04) replace(jis_cid_h04, 0x224C, 751) -- NOT SIGN -- 全角字形があるものは全角化しておく replace(jis_cid_h04, 0x2921, 9779) -- EURO SIGN replace(jis_cid_h04, 0x2924, 16280) -- CURRENCY SIGN replace(jis_cid_h04, 0x2925, 8005) -- BROKEN BAR replace(jis_cid_h04, 0x2926, 8059) -- COPYRIGHT SIGN replace(jis_cid_h04, 0x292A, 8060) -- REGISTERED SIGN replace(jis_cid_h04, 0x2933, 8185) -- VULGAR FRACTION ONE QUARTER replace(jis_cid_h04, 0x2934, 8184) -- VULGAR FRACTION ONE HALF replace(jis_cid_h04, 0x2935, 9783) -- VULGAR FRACTION THREE QUARTERS out_cmap('2004-H', '', jis_cid_h04, '', code_range_04, 0) ---------------------------------------------------------------- -- JIS X 0213:2004 => Adobe-Japan1-6 縦組 local uni_cid_v04 = table.fastcopy(uni_cid_h04) uni_cid_v04 =cmap_dec.open_cmap_file('UniJIS2004-UTF32-V', uni_cid_v04) local jis_cid_v04 = mk_jis_cid_table(jis04_uni, uni_cid_v04) replace(jis_cid_v04, 0x2127, 12101) -- COLON replace(jis_cid_v04, 0x2131, 7889) -- OVERLINE replace(jis_cid_v04, 0x213D, 7892) -- EM DASH replace(jis_cid_v04, 0x2146, 12173) -- replace(jis_cid_v04, 0x2147, 12174) -- replace(jis_cid_v04, 0x2148, 7956) -- replace(jis_cid_v04, 0x2149, 7957) -- replace(jis_cid_v04, 0x224C, 751) -- NOT SIGN replace(jis_cid_v04, 0x2236, 12107) -- HIRAGANA VOICED ITERATION MARK replace(jis_cid_v04, 0x237C, 16332) -- EN DASH replace(jis_cid_v04, 0x2678, 16343) -- KATAKANA LETTER SMALL PU replace(jis_cid_v04, 0x2D5F, 12044) -- SQUARE ERA NAME HEISEI replace(jis_cid_v04, 0x2D6D, 12041) -- SQUARE ERA NAME MEIZI replace(jis_cid_v04, 0x2D6E, 12042) -- SQUARE ERA NAME TAISYOU replace(jis_cid_v04, 0x2D6F, 12043) -- SQUARE ERA NAME SYOUWA replace(jis_cid_v04, 0x2921, 9779) -- EURO SIGN replace(jis_cid_v04, 0x2924, 16280) -- CURRENCY SIGN replace(jis_cid_v04, 0x2925, 8005) -- BROKEN BAR replace(jis_cid_v04, 0x2926, 8059) -- COPYRIGHT SIGN replace(jis_cid_v04, 0x292A, 8060) -- REGISTERED SIGN replace(jis_cid_v04, 0x2933, 8185) -- VULGAR FRACTION ONE QUARTER replace(jis_cid_v04, 0x2934, 8184) -- VULGAR FRACTION ONE HALF replace(jis_cid_v04, 0x2935, 9783) -- VULGAR FRACTION THREE QUARTERS out_cmap('2004-V', '2004-H', cleanup(jis_cid_v04, jis_cid_h04), '', code_range_04, 1) end -- do -- ---------------------------------------------------------------- -- -- JIS0208.txt 読み込み -- local jis90_uni = {} -- f = io.open("JIS0208.TXT", "r") -- for lx in f:lines() do -- l = string.match(lx,"^([^#]*)#.*$") -- if l ~= "" then -- local jis = tonumber(string.match(l, "^0x%x*%s*(0x%x*)%s*0x%x*")) -- local uni = string.match(l, "^0x%x*%s*0x%x*%s*0x(%x*)") -- -- 全角幅優先 -- if jis and uni then -- uni = tonumber(uni,16) -- jis90_uni[jis] = uni -- end -- end -- end -- f:close() -- local code_range_90 = [[ -- 1 begincodespacerange -- <2121> <7E7E> -- endcodespacerange -- ]] -- ---------------------------------------------------------------- -- -- JIS X 0208:1990 => Adobe-Japan1-6 縦組 -- -- とりあえず 横組を load -- local uni_cid_h90 = cmap_dec.open_cmap_file('UniJIS-UTF32-H') -- local jis_cid_h90 = mk_jis_cid_table(jis90_uni, uni_cid_h90) -- replace(jis_cid_h90, 0x224C, 751) -- NOT SIGN -- local uni_cid_v90 = table.fastcopy(uni_cid_h90) -- uni_cid_v90 =cmap_dec.open_cmap_file('UniJIS-UTF32-V', uni_cid_v90) -- local jis_cid_v90 = mk_jis_cid_table(jis90_uni, uni_cid_v90) -- replace(jis_cid_v90, 0x2127, 12101) -- COLON -- replace(jis_cid_v90, 0x2131, 7889) -- OVERLINE -- replace(jis_cid_v90, 0x213D, 7892) -- EM DASH -- replace(jis_cid_v90, 0x2146, 12173) -- -- replace(jis_cid_v90, 0x2147, 12174) -- -- replace(jis_cid_v90, 0x2148, 7956) -- -- replace(jis_cid_v90, 0x2149, 7957) -- -- replace(jis_cid_v90, 0x224C, 751) -- NOT SIGN -- out_cmap('1990N-V', 'H', cleanup(jis_cid_v90, jis_cid_h90), '', code_range_90, 1) -- end