diff options
Diffstat (limited to 'i18npool/source/textconversion')
-rw-r--r-- | i18npool/source/textconversion/data/hhc_char.dic | 502 | ||||
-rw-r--r-- | i18npool/source/textconversion/data/makefile.mk | 68 | ||||
-rw-r--r-- | i18npool/source/textconversion/data/stc_char.dic | 2835 | ||||
-rw-r--r-- | i18npool/source/textconversion/data/stc_word.dic | 1150 | ||||
-rw-r--r-- | i18npool/source/textconversion/data/textconv_dict.map | 23 | ||||
-rw-r--r-- | i18npool/source/textconversion/genconv_dict.cxx | 485 | ||||
-rw-r--r-- | i18npool/source/textconversion/makefile.mk | 59 | ||||
-rw-r--r-- | i18npool/source/textconversion/textconversion.cxx | 95 | ||||
-rw-r--r-- | i18npool/source/textconversion/textconversionImpl.cxx | 149 | ||||
-rw-r--r-- | i18npool/source/textconversion/textconversion_ko.cxx | 348 | ||||
-rw-r--r-- | i18npool/source/textconversion/textconversion_zh.cxx | 300 |
11 files changed, 6014 insertions, 0 deletions
diff --git a/i18npool/source/textconversion/data/hhc_char.dic b/i18npool/source/textconversion/data/hhc_char.dic new file mode 100644 index 000000000000..5a7a194d2759 --- /dev/null +++ b/i18npool/source/textconversion/data/hhc_char.dic @@ -0,0 +1,502 @@ +가:伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕仮価傢叚咖哿坷宊斝榎檟珈笳耞舸葭謌髂 +각:刻却各恪慤殼珏脚覺角閣傕卻咯埆搉擱桷殻玨覚 +간:乾侃刊墾奸姦干幹懇揀杆柬澗癎看磵稈竿簡肝艮艱諫間倝偘囏慳旰栞榦玕秆茛衎赶迀齦 +갈:乫喝曷渴碣竭葛蝎褐鞨丐噶楬渇秸羯蠍鶡 +감:勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺鑑鑒龕减凵坩埳嵁弇憨撼欿 +갑:匣岬甲胛鉀閘韐 +강:剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇傋僵匟唴壃強忼扛杠橿殭矼穅繈繦罡羗羫茳豇韁 +개:介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋鎧開豈豈个剴匃匄喈嘅揩概槩溉玠磕闓 +객:喀客 +갱:坑粳羹更硜賡鏗 +갹:醵噱 +거:倨去居巨拒据據擧渠炬祛距踞遽鉅鋸車俥凥勮厺呿拠昛秬筥籧胠腒艍苣莒蕖蘧袪裾詎駏 +걱:巪 +건:件健巾建愆楗腱虔蹇鍵騫亁囝揵犍睷褰謇鞬 +걸:乞傑杰桀乬朅榤 +검:儉劍劒檢瞼鈐黔倹剣劎劔撿検歛泔淦澉矙芡轗酣鹻 +겁:劫怯迲刦刧 +것:唟 +게:偈憩揭卟掲 +격:擊格檄激膈覡隔嗝挌撃毄闃骼鬲鴃 +견:堅牽犬甄絹繭肩見譴遣鵑樫狷甽畎筧縳縴繾羂蠲趼鰹 +결:抉決潔結缺訣僪决刔玦觖闋 +겸:兼慊箝謙鉗鎌傔嗛岒拑歉縑蒹黚鼸 +겹:唊郟 +경:京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨亰冂冏剄剠哽囧径惸憼扃檠焭煢熲畊竸経綆罄褧謦軽頚顈駉鯁黥 +계:係啓堺契季屆悸戒桂械棨溪界癸磎稽系繫繼計誡谿階鷄乩启啟堦烓瘈禊筓継綮縘繋罽葪薊雞髻鳮 +고:古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥辜錮雇顧高鼓賈估侤凅刳吿咕嚳塙杲栲槀槹櫜牯皋盬瞽稁箍篙糕罟羖翱翺脵觚詁郜酤鈷靠骷髙鯝鴣鷱 +곡:哭斛曲梏穀谷鵠榖槲縠觳轂 +곤:困坤崑昆梱棍滾琨袞鯤丨堃崐悃捆滚緄衮裍褌錕閫髡鯀鵾鶤齫 +골:骨滑搰榾矻鶻 +공:供公共功孔工恐恭拱控攻珙空蚣貢鞏倥卭崆悾栱槓笻箜蛩蛬贛跫邛釭銎龔 +곶:串串廤 +과:寡戈果瓜科菓誇課跨過鍋顆侉剮堝夥夸撾猓稞窠胯蝌裹踝銙騍髁 +곽:廓槨藿郭椁癨躩霍鞹 +관:冠官寬慣棺款灌琯瓘管罐菅觀貫關館莞丱倌卝寛涫爟盥祼窾筦綰舘覌観輨錧鑵関闗雚顴髖鸛館 +괄:刮恝括适佸劀栝筈聒颳髺鬠鴰 +광:侊光匡壙廣曠洸炚狂珖筐胱鑛俇劻広恇桄框爌獷磺礦絖纊茪誆誑鄺鉱 +괘:卦掛罫叏咼挂罣詿 +괴:乖傀塊壞怪愧拐槐魁儈凷嘳媿廥恠瑰璝蒯襘 +괵:剨嘓馘 +굉:宏紘肱轟厷浤纮觥訇鍠锽閎 +교:交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丂佼儌啋嘂嘄嘐嘺噭嚙姣憍撟撹教晈暞榷磽跤蹺鞽 +구:丘久九仇俱具勾區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜柾鞫丠丩乆佉佝俅倃倶傴冓劬劶勼匓匛匶区厩厹叴呴坸夻姤媾嫗屨岣廄廏彀戵扣捄搆摳旧昫榘漚璆甌疚痀癯窛窶篝糗耇耈胊蒟蚯裘覯詬遘釦鞲韝韭韮颶駆駈鬮鷇鸜鼽 +국:國局菊鞠麴侷匊囗囶国圀掬跼麯麹 +군:君窘群裙軍郡僒捃桾皸 +굴:堀屈掘窟倔崛淈詘 +궁:宮弓穹窮芎躬匑宫躳 +권:倦券勸卷圈拳捲權淃眷劵勌勧圏巻惓棬権睠綣蜷鬈 +궐:厥獗蕨蹶闕亅鱖 +궤:机櫃潰詭軌饋佹几劂匭匱厬憒撅樻氿簋繢跪闠餽麂 +귀:晷歸貴鬼句龜亀劌帰櫷 +규:叫圭奎揆槻珪硅窺竅糾葵規赳逵閨乣刲呌嫢嬀巋暌楏樛潙睽糺虬虯跬邽闚頍馗 +균:勻均畇筠菌鈞龜匀囷麇麏 +귤:橘 +극:克剋劇戟棘極隙丮亟勀尅屐郄郤 +근:僅劤勤懃斤根槿瑾筋芹菫覲謹近饉卺厪堇墐巹廑漌觔跟釿靳 +글:契 +금:今妗擒昑檎琴禁禽芩衾衿襟錦金僸凚唫噤嵚嶔笒黅 +급:伋及急扱汲級給圾岌皀礏笈芨 +긍:亘仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮霰傓墡嫙尟尠屳愃歚熯禅筅綫縇缐羡蝉譔譱躚鏇騸鱓鱔鱻兢矜肯亙殑鹶 +기:企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣朞期杞棄棋機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏起錡錤飢饑騎騏驥麒丌亓倛僛僟刏剞呮唭嘰噐墍屺庋弃忮怾愭掎攲旂既暣暨曁棊歧気炁猉禨綥綦羇肵芪芰蘄虁蜝蟣覉覬跂跽锜隑頎鬐鰭黖 +긴:緊 +길:佶吉拮桔咭姞蛣鮚 +김:金 +끽:喫 +나:儺娜懦拏拿那喇奈懶癩羅蘿螺裸邏哪挐挪梛糥糯 +낙:諾樂洛烙珞落酪駱 +난:暖煖難亂卵欄爛蘭鸞偄煗赧餪 +날:捏捺 +남:南枏楠湳男嵐濫藍襤喃柟 +납:納衲拉臘蠟 +낭:囊娘廊朗浪狼郎嚢曩 +내:乃內奈柰耐來内匂奶嬭廼迺鼐 +냉:冷 +녀:女 +녁:惄 +년:年撚秊碾 +념:念恬拈捻 +녕:寗寧佞儜嚀寕寜濘甯 +노:努奴弩怒瑙駑勞擄櫓爐盧老蘆虜路露魯鷺呶孥峱猱笯臑 +녹:碌祿綠菉錄鹿 +논:論 +농:濃膿農壟弄籠聾儂噥穠醲 +뇌:惱腦牢磊賂雷匘悩脳餒 +뇨:尿啂嫋嬲淖磠裊鐃 +누:壘屢樓淚漏累縷陋耨 +눈:嫩 +눌:訥吶呐肭 +눚:莻 +뉴:杻紐忸靵 +뉵:衄 +늑:勒肋 +늠:凜 +능:能凌稜綾菱陵 +니:尼泥你呢怩柅祢禰膩 +닉:匿溺 +닐:昵暱 +다:多茶爹 +단:丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛澾剬剸勯匰单単団慱担断椴漙癉箪糰耑胆腶蜑踹 +달:撻獺疸達呾噠妲怛闥靼韃 +담:啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟倓儋啗啿嘾噇噉嚪墰壜毯禫罎薝郯黮黵 +답:沓畓答踏遝匒 +당:唐堂塘幢戇撞棠當糖螳黨倘儻党当搪檔溏瑭璫瞠礑蟷襠讜鏜鐺餳餹 +대:代坮垈大對岱帶待戴擡玳臺袋貸隊黛儓对対带帯懟旲枱檯汏碓鐓 +댁:宅 +덕:德悳徳惪 +도:倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃棹櫂淘渡滔濤燾盜睹禱稻萄覩賭蹈逃途道都鍍陶韜纛刂匋叨咷啕嘟図圗壔弢忉慆掏搯擣檮洮涂祷稌稲菟酴闍鞀鞱饕鼗都 +독:毒瀆牘犢獨督禿篤讀匵櫝涜独秃読黷 +돈:墩惇敦旽暾沌焞燉豚頓伅囤弴潡犜獤躉 +돌:乭突咄堗 +동:仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅侗倲偅働僮哃垌峒彤朣橦涷炵艟苳茼蕫蝀錬鮗鼕佟 +두:兜斗杜枓痘竇荳豆逗頭讀亠侸吺抖斁肚脰蚪蠹陡 +둔:屯臀芚遁遯鈍吨窀迍 +득:得 +등:嶝橙燈登等藤謄鄧騰凳墱朩滕磴籐縢腾螣鐙 +라:懶癩羅蘿螺裸邏拏亽倮儸嗠囉曪瘰砢臝蠃鑼陏騾驘 +락:洛烙珞絡落酪駱樂諾犖雒 +란:亂卵欄欒瀾爛蘭鸞丹乱囒圝嬾幱攔灓襴鑾闌 +랄:剌辣喇埒辢 +람:嵐擥攬欖濫籃纜藍襤覽啉嚂婪惏覧 +랍:拉臘蠟蝋鑞 +랑:廊朗浪狼琅瑯螂郞榔硠稂莨蜋郎閬 +래:來崍徠萊儽勑淶莱騋 +랭:冷 +략:掠略畧 +량:亮倆兩凉梁樑粮粱糧良諒輛量両两俍喨悢椋涼踉魎 +려:侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪黎侣儢励勴厉厲吕唳戻攊梠癘砺糲膂臚蠡邌鑢鱺 +력:力曆歷瀝礫轢靂厤嚦櫟櫪癧躒轣酈 +련:憐戀攣漣煉璉練聯蓮輦連鍊僆嗹孌恋挒楝湅聫聮臠鏈鰊鰱 +렬:冽列劣洌烈裂咧哷捩颲 +렴:廉斂殮濂簾亷匲匳奩帘瀲磏 +렵:獵儠躐鬣 +령:令伶囹岺嶺怜玲笭羚翎聆逞鈴零靈領齡寧另呤姈岭昤欞泠灵秢苓蛉軨鴒鹷 +례:例澧禮醴隷豊礼隸鱧礼 +로:勞撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵怒労哰嚕嚧壚滷炉玈癆窂艪艫轤鐪鑪顱髗鱸鸕 +록:碌祿綠菉錄鹿麓圥彔淥渌漉簏緑轆録騄 +론:論 +롱:壟弄朧籠聾儱哢嚨攂攏曨礱篭蘢隴瀧瓏龍竜龒 +뢰:儡瀨牢磊賂賚賴雷瀬礌礧籟纇罍耒蕾誄酹頼顂 +료:了僚寮廖料燎療瞭聊蓼遼鬧寥嘹嫽撩暸潦獠繚膋醪鐐飂飉 +루:壘婁屢樓淚漏瘻累縷蔞褸鏤陋僂嘍嶁慺楼涙耬螻髏 +뤼:厽 +류:劉旒柳榴流溜瀏琉瑠留瘤硫謬類刘嚠橊类縲纍遛鎏鶹 +륙:六戮陸僇剹勠 +륜:侖倫崙淪綸輪潤閏嗧圇掄 +률:律慄栗率嵂溧篥 +륭:隆癃窿 +륵:勒肋仂嘞泐鰳 +름:凜凛廩澟 +릉:凌楞稜綾菱陵倰蔆鯪 +리:俚利厘吏唎履悧李梨浬犁狸理璃痢籬罹羸莉裏裡里釐離鯉異麗俐刕剓剺劙哩嫠涖漓离莅蒞蜊螭貍邐魑黐黧 +린:吝潾燐璘藺躪隣鱗麟厸嶙悋獜磷粦粼繗躙轔鄰鏻驎 +림:林淋琳臨霖痳 +립:砬立笠粒岦 +마:摩瑪痲碼磨馬魔麻亇傌劘哶嗎嘛媽螞蟇麼麽麿 +막:寞幕漠膜莫邈嗼瞙鏌 +만:万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻僈卐墁嫚幔晚縵蛮謾蹣鏋鏝鞔鬘 +말:唜抹末沫茉襪靺帕秣 +망:亡妄忘忙望網罔芒茫莽輞邙亾兦惘汒漭莾蟒魍 +매:埋妹媒寐昧枚梅每煤罵買賣邁魅勱呅呆売楳毎沬玫眛苺莓酶霉霾 +맥:脈貊陌驀麥脉貃貘麦 +맹:孟氓猛盟盲萌儚甍甿虻 +먀:乜 +며:旀 +멱:冪覓汨冖幎 +면:免冕勉棉沔眄眠綿緬面麵丏俛偭湎糆緜麪麺 +멸:滅蔑篾衊 +명:冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴洺 +몌:袂 +모:侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌侔冃冐姥媢嫫恈旄皃眊粍糢耄蝥蟊鉾髦麰 +목:木沐牧目睦穆鶩凩苜 +몰:歿沒殁 +몽:夢朦蒙冡幪懞曚溕濛瞢矇艨雺鸏 +묘:卯墓妙廟描昴杳渺猫竗苗錨吵淼眇緲藐貓 +무:務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡儛嘸廡畮膴袤鍪騖 +묵:墨默嘿嚜 +문:們刎吻問文汶紊紋聞蚊門雯勽匁悗懣抆捫炆璊 +물:勿沕物 +미:味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴亹侎冞咩咪娓媄媺弥弭敉瀰獼糜縻羋芈苿菋蘼麋 +민:岷悶愍憫敏旻旼民泯玟珉緡閔僶勔忞忟暋湣緍罠苠閩鰵黽 +밀:密蜜謐宻樒滵 +박:剝博拍搏撲朴泊珀璞箔粕縛膊舶薄迫雹駁鉑亳剥嚗欂牔趵鎛駮髆 +반:伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯冸媻扳搫攽朌胖螌頖飯 +발:勃拔撥渤潑發跋醱鉢髮魃哱彂抜拨浌浡溌発脖酦醗鈸鵓 +방:倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐仿匚厖哤嗙幚幫徬搒旊梆牓舽螃邡鎊髣魴 +배:俳倍培徘拜排杯湃焙盃背胚裴賠輩配陪偝啡坏坯扒琲蓓裵褙北 +백:伯帛柏栢白百魄兡粨佰 +번:幡樊煩燔番繁蕃藩飜磻噃繙翻膰蘩袢蹯 +벌:伐筏罰閥橃罸 +범:凡帆梵氾汎泛犯範范凢凣笵訉颿 +법:法琺 +벽:僻劈壁擘檗璧癖碧蘗闢霹擗甓疈薜襞鷿鼊 +변:卞弁變辨辯邊便匥变変忭抃籩胼腁賆辮边辺釆駢骿鴘 +별:別瞥鱉鼈憋丿别彆蹩鷩龞 +병:丙倂兵屛昞昺柄棅炳甁病秉竝輧餠騈并並併塀屏摒瓶絣缾軿迸邴鈵鉼鋲餅幷 +보:保堡報寶普步洑湺潽珤甫菩補褓譜輔俌宝寳椺歩盙簠葆靌鴇黼 +복:伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒樸墣幞扑濮箙菔蝠蝮袱蹼鵩福 +본:本 +볼:乶 +봉:俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳丰唪塜夆篷綘菶鳯鴌 +부:不付俯傅剖副否咐埠夫婦孚孵富府扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧復仆俘偩冨哹媍巬巭抔拊掊桴榑涪玞祔筟罘罦胕芣苻蔀蚨蜉袝裒跗踣鈇阝頫鮒鳬麩 +북:北僰 +분:分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰体倴僨坌帉枌棻棼氛湓濆犇畚砏笨肦膹苯蕡轒鱝黺鼢 +불:佛弗彿拂不乀仏冹刜咈堋岪払漰祓紱艴茀韍髴鬅黻 +붕:崩朋棚硼繃鵬倗傰綳 +비:丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸琵痺砒碑秕秘粃緋翡肥脾臂菲蜚裨誹譬費鄙非飛鼻泌俻仳伾俷俾偹剕厞呸啚嚊嚭圮埤妣屁庳悱棐椑榌沘淝淠濞狉狒畀痞痹睥祕篦紕羆腓芘芾萆蓖蚍貔贔轡邳郫閟陴霏鞴騑騛髀鯡鼙 +빈:嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻份儐擯矉繽臏蘋豳賔邠鑌霦顰髕鬂鬢 +빙:憑氷聘騁俜冫冰凭凴娉 +뿐:兺 +사:乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝亊佀佘倳傞傻儩写冩剚卸厶叓咋喳嗄姒查楂榭汜痧皶竢笥簑簔糸缷蜡覗辞駛魦鯊鯋鰤飼 +삭:削朔數索槊爍蒴鑠 +산:傘刪山散汕珊産疝算蒜酸删剷匴姍姗孿橵潸澘狻產繖虄訕跚鏟閊 +살:乷撒殺煞薩 +삼:三杉森芟蔘衫參叁参嘇毿糝釤鬖 +삽:揷澁鈒颯偛卅唼啃插歃翣趿鍤钑霅霎 +상:上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜丄儴响嗓塽尚徜晌殤甞緗鎟顙鬺鮝祥 +새:塞璽賽灑鰓 +색:嗇穡索色塞槭濇瀒賾 +생:牲生甥笙省栍眚鉎 +샤:仒 +서:墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署胥舒薯西誓逝鋤黍鼠叙噬婿庻揟撕敘湑澨紓緒耡芧諝谞鉏閪 +석:夕奭席惜昔晳析汐淅潟石碩蓆釋錫冟晰澙矽腊舃舄蜥釈鉐鼫 +설:卨屑楔泄洩渫舌薛褻設說雪齧偰僁囓媟挈揲暬爇碟稧紲説鱈 +섬:剡暹殲纖蟾贍閃陝孅憸摻睒繊譫銛韱 +섭:攝涉燮葉囁懾摂渉灄聶躞躡鑷顳 +성:城姓宬性惺成星晟猩珹盛省筬聖聲腥誠醒垩声瑆騂 +세:世勢歲洗稅笹細貰說卋帨歳洒税繐蛻蜕 +소:厼召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疎疏瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷涑謖蓀佋俏傃卲咲喿嗉嘨埽塐愬捎掻樔泝焼穌筱筿箾簘繅翛膆艘蛸螦踈酥霄騒魈鮹鰺 +속:俗屬束粟續贖速洬続觫遬 +손:孫巽損遜飡噀巺飧飱 +솔:帥率乺窣蟀 +송:宋悚松淞訟誦送頌凇柗竦鬆 +솨:惢曬 +쇄:刷碎鎖殺嗩瑣砕鏁 +쇠:衰釗 +수:修受嗽囚垂壽嫂守岫峀愁戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚潚琡璹菽倕凁叟售寿廋数溲濉獣痩睟睢瞍祟籔繍脺膄膸誶讎豎鏽陲随颼饈 +숙:叔塾夙孰宿淑熟肅俶倏倐儵婌橚蓿驌骕鷫 +순:巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴侚峋狥盹眴笋紃肫駨鬊鶉 +술:戌術述鉥絉 +숭:崇崧嵩菘 +쉬:伜倅晬殳泅淬焠 +슬:瑟膝蝨厀虱 +습:拾濕習褶襲塍慴湿熠隰 +승:丞乘僧勝升承昇繩蠅陞乗呏鬙 +시:侍匙嘶始媤尸屍屎市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺乨偲兕凘卶厮咶啻塒廝弒枲柹柿澌緦翤茬諟諰豉釃鍉顋鰣 +식:埴寔式息拭植殖湜熄篒蝕識軾食飾喰媳栻 +신:伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛迅辰瀋伩兟卂吲哂噺囟姺汛矧脤贐頣顖駪神 +실:失室實悉実蟋飋 +심:審尋心沁深甚芯諶沈伈吢梣潯燖葚諗鐔鱏鱘 +십:什十拾兙卌辻 +쌍:雙双 +씨:氏 +아:亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝丫亜俹児厊哦唖唲啊娿婀峩疴砑笌迓錏鵞 +악:堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷偓卾咢喔噩悪腭萼覨諤鶚齶 +알:斡謁軋嘎嘠戞揠歹穵訐遏頞鴶 +암:唵安岸按晏案眼雁鞍顔鮟閼侒偐喭桉犴贋顏鴈岩巖庵暗癌菴闇啽媕嵒嵓揜晻腤葊蓭諳頷馣黯 +압:壓押狎鴨儑匎匼压圧 +앙:仰央怏昻殃秧鴦佒卬咉坱昂泱盎鞅 +애:厓哀埃崖愛曖涯碍艾隘靄僾呃哎唉啀嘊噯娭崕挨捱欸漄獃皚睚瞹磑礙薆藹靉騃 +액:厄扼掖液縊腋額呝戹搤阨 +앵:櫻罌鶯鸚嚶嫈桜罃鷪 +야:也倻冶夜惹揶椰爺耶野若亱偌喏埜 +약:弱約若葯蒻藥躍掠略叒喲爚禴篛籥薬鑰鰯鶸龠 +양:佯壤孃恙揚攘敭暘楊樣洋瀁煬痒瘍禳穰羊襄讓釀陽養亮兩凉梁糧良諒量勨勷嚷壌嬢徉漾瀼烊癢眻蘘輰鑲颺驤 +어:圄御於漁瘀禦語馭魚齬唹圉敔淤飫 +억:億憶抑檍臆繶 +언:偃堰彦焉言諺傿匽唁嘕嫣彥讞鄢鼴鼹 +얼:孼蘖乻噦孽臬隉 +엄:俺儼嚴奄掩淹剦厂厱厳噞崦广曮欕罨醃閹 +업:嶪業嶫鄴 +엇:旕 +에:恚曀 +엔:円 +여:予余如歟汝璵礖與艅茹輿轝餘勵呂女廬旅濾礪閭驪麗黎与伃侞玙舁 +역:亦域役易疫繹譯逆驛力曆歷轢伇圛嶧懌淢訳閾駅 +연:嚥堧姸娟宴延挻捐椽沇沿涎涓淵演烟然煙燃燕硏硯筵緣縯衍軟鉛鳶年憐戀撚漣煉璉秊練聯輦蓮連鍊焰兖兗唌嘫噮囦埏妍姢嬿悁掾曣櫞渷焔研縁臙莚蜵讌豣鷰 +열:悅熱閱列劣咽烈裂說噎悦閲涅 +염:厭染炎琰艶苒閻髥鹽廉念捻殮簾冄冉塩懕扊檶檿灎灧灩艷釅饜髯魘黶 +엽:曄燁葉獵偞僷喦曅熀爗靨 +영:塋嶸影映暎楹榮永泳渶潁濚瀛瀯煐營獰瑛瓔盈穎纓英詠迎鍈霙令囹寧嶺怜玲瑩羚聆鈴零靈領咏営嬰嬴栄浧溁濴癭碤縈蠑贏郢锳韺 +예:乂倪刈叡曳汭濊猊睿穢芮藝蘂裔詣譽豫銳霓預例禮醴隸勩医呭囈嫛拽掜枘獩睨瞖繄翳苅蕊蕋薉蚋蜺誉鋭鯢鷖麑 +오:五伍俉傲午吳吾嗚塢墺奧娛寤悟懊敖旿晤梧汚澳烏熬獒筽蜈誤鰲鼇惡迂仵俣吴呉唔啎嗷嗸噁圬奥娯媪嫯忢忤慠捂汙污窹聱茣襖謷迃迕遨鄔鏊鏖隩驁鼯 +옥:屋沃獄玉鈺剭鋈 +온:溫瑥瘟穩縕蘊媼愠慍昷氲氳温熅稳穏緼缊蕰薀藴轀醖醞鞰韞饂鰮 +올:兀乯卼嗢膃阢兀 +옹:壅擁瓮甕翁邕雍饔喁嗈嗡噰廱滃癕禺罋蓊雝顒 +와:渦瓦窩窪臥蛙蝸訛吪哇啝囮婐枙洼猧窊萵譌 +완:婉完宛梡椀浣玩琓琬碗緩翫脘腕豌阮頑刓剜唍园垸妧岏忨惋涴盌 +왈:曰 +왕:往旺枉汪王尫瀇迋迬 +왜:娃矮媧歪 +외:外嵬巍猥畏偎崴嵔渨煨碨磈聵隗隈 +요:僥凹堯夭妖姚嶢拗搖撓擾曜橈燿瑤窈窯繇繞耀腰蟯要謠遙邀饒了僚寮尿料樂燎療蓼遼縟褥么偠傜吆喓嗂坳墝嬈尭峣幺徭徼殀澆瑶祅穾窅蕘遶鰩鷂 +욕:慾欲浴辱嗕溽蓐 +용:俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉鎔鏞龍癰傛宂嵱慵憃槦硧舂蛹踴鱅踊 +우:于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞遇郵釪隅雨雩吘噳嚘竽耦耰謣踽鍝麀麌齲羽 +욱:勖彧旭昱栯煜稶郁頊勗噢燠 +운:云橒殞澐熉耘芸蕓運隕雲韻暈喗囩惲沄篔紜霣韵 +울:亐蔚鬱鬰 +웅:熊雄 +원:元原員園圓垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠院願鴛阮冤厵圎圜杬楥楦猨綩芫薗蜿諢謜逺鋺騵鵷黿 +월:月越鉞刖粤粵 +위:位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏倭偽叞喟噅噕囲幃為煒熨痿葳蒍衞袆諉逶闈韙韡餧 +유:乳侑儒兪唯喩孺宥幼幽庾悠惟愈愉揄攸有柔柚楡楢油洧游濡猶猷瑜由癒維臾萸裕誘諛諭踰蹂逾遊遺酉釉鍮劉杻柳流溜琉留硫紐類綏丣亏亴俁俞偊冘匬卣吁呦唀喻嚅囿堣壝嵎帷庽揉斿杅榆泑牖疣瘉瘐盱窬窳籲糅腴莠蕕蕤蚰蚴蝤褕襦讉逌逰鞣鮪黝鼬龥 +육:堉毓肉育六戮陸儥唷喅 +윤:允奫尹玧胤贇鈗倫崙淪輪昀赟鋆 +율:聿律慄栗率凓噊汩潏矞 +융:戎瀜絨融隆狨 +은:垠恩慇殷誾銀隱听嚚圁垽憖檼溵狺珢癮訔訚鄞隐隠齗 +을:乙鳦 +음:吟淫蔭陰音飮喑婬崟廕愔霪飲 +읍:揖泣邑俋唈悒挹浥 +응:凝應膺鷹応 +의:依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼議醫亄偯儗冝凒劓吚嶷欹漪猗礒螘饐 +읫:夞 +이:二以伊夷姨已弛彛怡爾珥異痍移而耳肄苡貳貽邇飴餌利吏履易李梨泥理痢罹裏裡里離佁佴侇刵匜咡咦咿嗌坨尓尔弍彝彞敡栮洟珆訑詑詒迤迩隶頉頤骪骫鮞黟 +익:瀷益翊翌翼謚匿溺弋熤鷁益 +인:人仁刃印咽因姻寅引忍湮絪茵蚓認靭靷吝燐璘藺隣鱗麟亻仞仭儿刄囙堙夤婣扨氤洇禋籾芢裀魜 +일:一佚佾壹日溢逸鎰馹劮呹壱泆軼驲逸 +임:任壬妊姙恁稔荏賃林淋臨乑絍衽銋飪餁 +입:入卄立笠粒叺廿込 +잉:仍剩孕芿媵 +자:仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌齊兹呰啙嗞嬨孖孳孶柘榨橴泚煑牸眥眦粢耔胾茈茲莿觜訾貲赭趑鎡頿髭鮓鶿鷓 +작:作勺嚼斫昨灼炸爵綽芍酌雀鵲仢妁岝怍斱柞汋焯犳碏 +잔:孱棧殘潺盞僝剗戔残糤饊馓驏 +잘:乲囐 +잠:岑暫潛箴簪蠶兂喒涔潜濳 +잡:雜匝卡咂啑囃眨磼襍雑 +장:丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長障狀傽匞壮奘奨妝嬙将嶂廧戕漳牂状瘴糚羘臓荘萇蒋蔵装賬贜鄣酱醤鏘餦髒麞 +재:再哉在宰才材栽梓渽滓災縡裁財載齋齎喍夈崽扗榟灾纔 +쟁:爭箏諍錚噌崢猙琤鎗 +저:佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟宁岨杼柢氐滁潴瀦牴纻罝羝苴蛆袛褚觝詆豬陼猪 +적:勣吊嫡寂摘敵滴狄的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑炙乇啇戝樀磧糴菂覿逖馰 +전:佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞伝倎傎吮囀填嫥専屇巓巔戦戩揃旃栴槙湔澶牋猠瑱甎畋畠痊癜磚籛羶翦腆膞荃謭躔転輇邅鄽銭鋑錪靛靦顓顛飦餰鬋鱣鸇 +절:切截折浙癤竊節絶卩岊晢窃絕 +점:占岾店漸点粘霑鮎點佔厃唸坫墊奌玷笘簟苫蔪蛅覘阽颭黏 +접:接摺蝶曡椄楪蜨跕蹀鰈 +정:丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖靜頂鼎丼佂侹凈叮婧婷怔掟桯梃棖灯珵甼疔筳莛証遉酲鋥阱靚飣饤靖精 +제:制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題荑亝俤傺儕呧嗁嚌娣擠済猘瑅睇禔稊緹踶蹏躋鍗隄鞮韲骶鮧鯷鱭鵜齏諸 +조:俎兆凋助嘲弔彫措操早晁曹曺朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥跳佻傮刁劋厝唕啁嘈噪嬥徂懆找抓条殂澡皁祧竈笊糙糶絛絩胙臊艚蔦蜩誂譟鈟銚鋽阼鯛鰷鵰鼂 +족:族簇足鏃哫瘯 +존:存尊拵 +졸:卒拙猝卆 +종:倧宗從悰慫棕淙琮種終綜縱腫踪踵鍾鐘从伀喠従慒柊椶樅瑽瘇粽縦螽蹤锺 +좌:佐坐左座挫侳剉痤莝髽 +죄:罪脧 +주:主住侏做周呪嗾奏姝宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢胄舟蛛註誅走躊輳週酎酒鑄駐丟丢丶侜儔冑凑厨咒咮喌噣尌幬拄昼硃籒肘腠蔟蛀裯詋賙赒趎蹰輈遒邾鉒霌霔麈鼄 +죽:竹粥 +준:俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿僎僔凖噂埻墫惷撙皴綧罇踆蹲鐏隼餕鱒鵔 +줄:茁乼 +중:中仲衆重眾 +즉:卽即鯽 +즐:櫛喞騭 +즙:楫葺檝蕺 +증:增憎拯曾烝甑症繒蒸證贈増嶒矰罾 +지:之只咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌贄趾遲識凪厎吱坻墀扺榰泜痣秖秪篪舐踟躓軹逇遅遟阯鮨鷙 +직:直稙稷織職禝 +진:唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侲儘嚍尽珒琎稹蓁螴趁鉁鎮鬒 +질:侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭儨厔垤絰腟蒺郅鑕 +짐:斟朕鴆 +집:執潗緝輯鏶集什汁卙咠戢 +짓:嗭 +징:徵懲澄徴澂瀓癥瞪 +차:且侘借叉嗟嵯差次此磋箚蹉車遮茶仛佽偖剳劄唶嗻奓岔徣扯搓搽槎瑳硨齄齜 +착:捉搾着窄錯鑿齪丵剒戳擉斲諑 +찬:撰澯燦璨瓚竄簒粲纂纘讚贊鑽餐饌丳儧儹劗巑攢欑爨篡繤纉讃賛趲 +찰:刹察擦札紮剎咱哳囋扎拶 +참:僭參塹慘慙懺斬站讒讖渗僣儳劖叄叅噆嶄巉惨慚憯攙槧欃毚滲譖鏨鑱饞驂黲 +창:倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼倀傖凔刅刱剏剙嗆囪悵惝戧搶椙氅瑲窗窻蹌鯧 +채:債埰寀寨彩採砦綵菜蔡采釵囆棌睬茝踩 +책:冊柵策責册厇嘖幘栅磔笧簀蚱 +처:凄妻悽處処淒萋褄覷郪 +척:倜剔尺慽戚拓擲斥滌瘠脊蹠陟隻刺呎坧塉惕惖慼捗摭蜴跖躑齣 +천:仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆俴倩僢儃兛刋囅圌洊浅濺瓩祆粁臶芊荐莤蒨蕆蚕践辿靝韉 +철:凸哲喆徹撤澈綴輟轍鐵剟勶叕啜埑惙掇歠鉄銕錣飻餮 +첨:僉尖沾添甛瞻簽籤詹諂幨忝惉檐櫼瀸甜簷襜 +첩:堞妾帖捷牒疊睫諜貼輒倢呫喋怗褺 +청:廳晴淸聽菁請靑鯖凊圊庁清聴聼蜻鋹錆閶青鬯鶄鶬晴 +체:剃替涕滯締諦逮遞體切嚏嚔彘掣棣殢砌蒂蔕蕞軆靆髰 +초:初剿哨憔抄招梢椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮偢僬劭勦嘮噍嫶岧峭嶕怊悄愀杪燋綃耖誚譙趠軺迢鈔鍫鍬鞘顦髫鷦齠 +촉:促囑燭矗蜀觸亍劚嘱属曯爥矚薥触躅髑 +촌:寸忖村邨刌吋 +총:叢塚寵悤憁摠總聰蔥銃偬傯冢匆囱怱惣総縂葱蓯鏦騘驄塚 +촬:撮 +쵀:啐 +최:催崔最凗嗺嘬摧榱漼璀磪縗 +추:墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍僦僽啾娵帚惆捶揫搥甃瘳穐箒箠簉縋縐蒭陬隹鞦騅魋鯫鰌鵻鶖鶵鹙麄麤龝 +축:丑畜祝竺筑築縮蓄蹙蹴軸逐噈妯柷舳豖蹜閦鼀 +춘:春椿瑃偆萅 +출:出朮黜岀术秫 +충:充忠沖蟲衝衷冲忡珫种 +췌:悴膵萃贅惴 +취:取吹嘴娶就炊翠聚脆臭趣醉驟鷲冣揣橇毳疩瘁顇龡 +측:仄側厠惻測嘁 +츤:儭 +층:層蹭 +치:侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒值偨偫卮哆寘巵廁昃樨歯畤痓絺耻菑薙袳褫觶豸跱錙阤鯔鴙鴟鵄 +칙:則勅飭侙敕 +친:親嚫櫬藽襯齔 +칠:七柒漆 +침:侵寢枕沈浸琛砧針鍼兓唚寖寝忱椹沉郴鋟駸 +칩:蟄 +칭:秤稱偁称 +쾌:快噲夬 +타:他咤唾墮妥惰打拖朶楕舵陀馱駝佗刴吒咜嚲垞堕拕朵柁橢沱詫跎躱駄駘駞鮀鴕鼉 +탁:倬卓啄坼托擢晫柝濁濯琢琸託鐸度拓侂剫啅拆橐沰涿矺籜蘀讬踔踱逴 +탄:呑嘆坦彈憚歎灘炭綻誕僤吞嘽弹弾憻攤殫氽癱驒 +탇:笪 +탈:奪脫侻脱 +탐:探眈耽貪僋嗿忐酖 +탑:塔搭榻撘傝嗒嚃塌搨鰨 +탕:宕帑湯蕩糖偒燙盪碭蘯 +태:兌台太怠態殆汰泰笞胎苔跆邰颱兊兑埭娧孡抬迨鮐 +택:擇澤宅択沢 +탱:撑撐牚 +터:攄 +토:兎吐土討兔 +톤:啍噋噸瓲 +통:慟桶痛筒統通洞恫樋筩 +퇴:堆槌腿褪退頹隤頽 +투:偸套妬投透鬪偷妒渝骰 +툴:乧 +특:慝特忒 +틈:闖 +파:坡婆巴把播擺杷波派爬琶破罷芭跛頗叵吧壩妑岥怕朳汃汴灞爸玻疤皤笆簸耙菠葩鄱靶 +판:判坂板版瓣販辦鈑阪 +팔:八叭捌 +팟:巼 +패:佩唄悖敗沛浿牌狽稗覇貝孛旆珮邶霈霸 +팽:彭澎烹膨伻砰祊蟚蟛 +퍅:愎 +편:便偏扁片篇編翩遍鞭騙匾徧惼緶艑萹蝙褊諞蹁鯿 +폄:貶砭窆 +평:坪平枰萍評匉怦抨拼泙苹蓱鮃 +폐:吠嬖幣廢弊斃肺蔽閉陛廃敝杮狴獘癈 +포:佈包匍匏咆哺圃布怖抛抱捕泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑暴曝儤刨勹庖拋晡曓炮炰舖誧鉋鞄餔鯆齙 +폭:幅暴瀑爆輻 +폿:喸 +표:俵剽彪慓杓標漂瓢票表豹飄飇驃僄儦勡嘌嫖摽殍熛縹膘裱鏢鑣飆髟鰾 +품:品稟禀 +풍:楓諷風馮凨凮瘋葑豐闏 +피:彼披疲皮被避陂佊詖辟鞁髲 +픽:腷 +필:匹弼必泌珌畢疋筆苾馝佖吡咇嗶滭篳罼蓽觱蹕鞸韠駜鵯 +핍:乏逼偪 +하:下何厦夏廈昰河瑕荷蝦賀遐霞鰕丅丷呀哬嘏嚇岈懗煆瘕罅鍜 +학:壑學虐謔鶴嗀嚛学斈狢瘧皬确郝鷽鶴 +한:寒恨悍旱汗漢澣瀚罕翰閑閒限韓桿邯僩嫺嫻扞捍暵邗閈駻鷳鼾 +할:割轄乤劼嗐瞎 +함:函含咸啣喊檻涵緘艦銜陷鹹凾唅圅莟菡諴轞闞陥 +합:合哈盒蛤閤闔匌呷嗑柙榼溘盍郃 +항:亢伉姮嫦巷恒抗杭桁沆港缸肛航項行降佷吭夯恆炕缿頏骯 +해:亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸侅咍嶰廨欬獬瑎痎薤醢陔頦鮭龤 +핵:劾核翮覈 +행:倖幸杏荇行悻 +향:享向嚮珦鄕響餉饗香薌郷鄉 +허:噓墟虛許嘘歔虚 +헌:憲櫶獻軒仚巚幰攇献 +헐:歇 +험:險驗崄嶮獫玁険験 +혁:奕爀赫革侐弈洫焱鬩 +현:俔峴弦懸晛泫炫玄現眩睍絃絢縣舷衒賢鉉顯見伣儇吅呟哯嬛昡琄痃県繯翾蜆誢鋗顕駽 +혈:孑穴血頁吷絜趐 +혐:嫌 +협:俠協夾峽挾浹狹脅脇莢鋏頰陜侠劦勰匧叶嗋埉恊悏愜篋頬 +형:亨兄刑型形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨玹侀哼夐娙荆蛍詗迥陘 +혜:兮彗惠慧蕙蹊醯鞋傒儶匸嘒寭徯恵槥盻謑譿鼷暳 +호:乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號護豪鎬頀顥儫冱冴号唬嘑嘷嚎壼嫮怙户戸沍滈滬犒猢皜皞箎聕醐餬鬍 +혹:惑或酷 +혼:婚昏混渾魂倱圂惛溷焜閽鯇 +홀:忽惚笏唿囫 +홍:哄弘汞泓洪烘紅虹訌鴻嗊晎澒篊鉷閧鬨 +화:化和嬅樺火畵禍禾花華話譁貨靴伙俰划咊嘩婲擭画畫驊龢 +확:擴攫確碻穫廓劐拡矍矡礭鑊 +환:丸喚奐宦幻患換晥桓歡渙煥環紈還驩鰥唤喛嚾寰懽换擐歓涣烉焕瓛皖睆絙讙豢轘鍰鐶鬟 +활:活滑猾豁闊蛞 +황:凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃偟况喤媓怳瑝肓貺鎤鰉黄 +홰:噧 +회:匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄桧会佪劊囬廽栃洄滙烣盔蜖詼迴逥鄶頮鱠 +획:劃獲嚄 +횡:宖橫鐄横澋鈜黌 +효:哮嚆孝效斅曉梟涍淆爻肴酵驍烋俲倄傚効呺嗃嘵嚻囂崤敩斆暁殽熇皛虓餚 +후:侯候厚后吼喉嗅帿後朽煦珝逅蝴冔吽喣垕堠涸猴篌詡譃酗餱鱟 +훈:勛勳塤壎暈焄熏燻薰訓勲曛爋獯纁葷薫鑂 +훌:欻 +훙:薨 +훤:喧暄煊萱咺烜諠諼 +훼:卉喙毁毀燬芔虫虺 +휘:彙徽揮暉煇諱輝麾彚撝翚翬 +휴:休携畦虧倠咻嘼擕貅隳髹鵂 +휵:搐 +휼:恤譎卹 +흉:兇凶洶胸哅忷恟胷 +흑:黑黒 +흔:昕欣炘痕琿俒很忻掀焮衅訢釁 +흘:吃屹紇訖鷸仡汔疙迄齕 +흠:欠欽歆廞 +흡:吸恰洽翕噏歙潝翖 +흥:匈興 +희:僖凞喜噫囍姬嬉希憘憙戱晞曦熙熹熺犧禧稀羲俙咥唏嘻嚱姫悕戯戲暿欷煕熈燹爔誒豨餼凞 +히:呬 +힐:詰犵纈襭頡黠 diff --git a/i18npool/source/textconversion/data/makefile.mk b/i18npool/source/textconversion/data/makefile.mk new file mode 100644 index 000000000000..a93a4045af62 --- /dev/null +++ b/i18npool/source/textconversion/data/makefile.mk @@ -0,0 +1,68 @@ +#************************************************************************* +#* +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org 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 Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************ +PRJ=..$/..$/.. + +PRJNAME=i18npool +TARGET=textconv_dict +LIBTARGET=NO + +# --- Settings ----------------------------------------------------- +.INCLUDE : settings.mk + +# Fix heap limit problem on MSC +.IF "$(OS)" == "WNT" +.IF "$(COMEX)" != "8" +CDEFS+=-Zm300 +.ENDIF +.ENDIF + +# --- Files -------------------------------------------------------- + +# collator data library +SHL1TARGET=$(TARGET) +SHL1IMPLIB=i$(SHL1TARGET) + +SHL1VERSIONMAP=$(SHL1TARGET).map +SHL1DEF=$(MISC)$/$(SHL1TARGET).def +DEF1NAME=$(SHL1TARGET) + +DATA_FILES:=$(shell @ls ./*.dic) +SHL1OBJS=$(subst,./,$(SLO)$/ $(DATA_FILES:s/.dic/.obj/)) + +LIB1TARGET= $(SLB)$/$(SHL1TARGET).lib +LIB1OBJFILES=$(SHL1OBJS) + +# --- Targets ------------------------------------------------------ +.INCLUDE : target.mk + +APP1TARGET = genconv_dict +$(MISC)$/%.cxx : %.dic + $(AUGMENT_LIBRARY_PATH) $(BIN)$/genconv_dict $* $< $@ + +# ugly - is this dependency really required here? +$(foreach,i,$(shell @$(FIND) . -name "*.dic") $(MISC)$/dict_$(i:b).cxx) : $(BIN)$/genconv_dict$(EXECPOST) + diff --git a/i18npool/source/textconversion/data/stc_char.dic b/i18npool/source/textconversion/data/stc_char.dic new file mode 100644 index 000000000000..32c2b3c66502 --- /dev/null +++ b/i18npool/source/textconversion/data/stc_char.dic @@ -0,0 +1,2835 @@ +¨:‥ +≤:≦ +≥:≧ +ˉ:¯ˉ +―:─ +∶:︰ +∧:︿ +∨:﹀ +[:﹝ +]:﹞ +":〝 +″:〞 +`:‵ +≈:≒ +‖:∥ +・:‧· +/:/╱ +\:\╲ +,:,﹐ +、:、﹑ +.:.﹒ +;:;﹔ +:::﹕ +?:?﹖ +!:!﹗ +_:╴_ +(:(﹙ +):)﹚ +{:{﹛ +}:}﹜ +#:#﹟ +&:&﹠ +*:*﹡ ++:+﹢ +-:-﹣ +<:<﹤ +>:>﹥ +=:=﹦ +$:$﹩ +%:%﹪ +@:@﹫ +|:|︱︳ +∏:Π +∑:Σ +万:萬万 +与:與与 +丑:丑醜 +专:專 +丘:丘坵 +业:業 +丛:叢 +东:東 +丝:絲 +丢:丟 +两:兩 +严:嚴 +丧:喪 +个:個箇 +丰:丰豐 +临:臨 +丸:丸汍 +为:為爲 +丽:麗 +举:舉 +乃:乃迺 +么:么麼麽 +义:義 +乌:烏 +乐:樂 +乔:喬 +习:習 +乡:鄉 +书:書 +买:買 +乱:亂 +了:了暸瞭 +争:爭 +亍:亍豖 +于:於 +亏:虧 +云:云雲 +井:井丼 +亘:亙 +亚:亞 +产:產産 +亩:畝 +亲:親 +亵:褻 +亸:嚲 +亿:億 +仂:仂扐 +仄:仄庂 +仅:僅 +仆:仆僕 +从:從 +仑:侖崙 +仓:倉 +他:他祂 +仙:仙僊 +仪:儀 +们:們 +价:價价 +仿:仿倣髣 +众:眾衆 +优:優优 +伙:伙夥 +会:會 +伛:傴 +伞:傘 +伟:偉 +传:傳 +伣:俔 +伤:傷 +伥:倀 +伦:倫 +伧:傖 +伪:偽僞 +伫:佇 +佑:佑祐 +体:體体 +余:余餘 +佛:佛彿 +你:你妳 +佣:佣傭 +佥:僉 +佩:佩珮 +侄:侄姪 +侠:俠 +侣:侶 +侥:僥 +侦:偵 +侧:側 +侨:僑 +侩:儈 +侪:儕 +侬:儂 +俣:俁 +俦:儔 +俨:儼 +俩:倆 +俪:儷 +俫:倈 +俭:儉 +修:修脩 +俯:俯頫 +债:債 +倾:傾 +偬:傯 +偷:偷媮 +偻:僂 +偾:僨 +偿:償 +傥:儻 +傧:儐 +储:儲 +傩:儺 +僭:僭僣 +僵:僵殭 +儿:兒儿 +兀:兀兀 +克:克剋 +兑:兌 +兖:兗 +党:黨党 +兰:蘭 +关:關 +兴:興 +兹:玆茲 +养:養 +兽:獸 +冁:囅 +内:內 +冈:岡 +册:冊 +写:寫 +军:軍 +农:農 +冢:冢塚 +冬:冬鼕 +冯:馮 +冱:沍冱 +冲:沖衝 +决:決 +况:況 +冻:凍 +净:淨凈 +凄:悽淒凄 +准:准準 +凉:涼 +减:減 +凑:湊 +凛:凜 +几:几幾 +凤:鳳 +凫:鳧鳬 +凭:憑 +凯:凱 +凶:凶兇 +出:出齣 +击:擊 +凿:鑿 +刍:芻 +划:划劃畫 +刘:劉 +则:則 +刚:剛 +创:創 +删:刪 +刨:刨鉋鑤 +别:別彆 +刬:剗 +刭:剄 +刮:刮颳 +制:制製 +刹:剎 +刽:劊 +刿:劌 +剀:剴 +剂:劑 +剃:剃薙 +剐:剮 +剑:劍 +剥:剝 +剧:劇 +剩:剩賸 +剿:剿勦 +劝:勸 +办:辦 +务:務 +劢:勱 +动:動 +助:助耡 +励:勵 +劲:勁 +劳:勞 +势:勢 +勋:勛勳 +勖:勗勖 +勤:勤懃 +勚:勩 +匀:勻 +匡:匡劻 +匦:匭 +匮:匱 +区:區 +医:醫 +匾:匾楄 +千:千韆 +升:升昇陞 +华:華 +协:協 +单:單 +卖:賣 +卜:卜蔔 +占:占佔 +卢:盧 +卤:鹵滷 +卧:臥 +卫:衛 +却:卻 +卷:卷捲 +卺:巹 +厂:廠厂 +厄:厄阨 +厅:廳 +历:曆歷 +厉:厲 +压:壓 +厌:厭 +厍:厙 +厐:龎 +厕:廁厠 +厘:釐厘 +厢:廂 +厣:厴 +厦:廈 +厨:廚 +厩:廄 +厮:廝 +县:縣 +叁:叄 +参:參 +双:雙 +发:發髮醱 +变:變 +叙:敘 +叠:疊 +只:只祇衹隻 +台:台臺颱檯 +叶:葉 +号:號 +叹:嘆歎 +叽:嘰 +吁:吁籲 +吃:吃喫 +合:合閤 +吊:弔吊 +同:衕 +后:后後 +向:向嚮曏 +吓:嚇 +吕:呂 +吗:嗎 +吣:唚 +吨:噸吨 +听:聽听 +启:啟啓 +吴:吳 +呆:呆獃騃 +呐:吶 +呒:嘸 +呓:囈 +呕:嘔 +呖:嚦 +呗:唄 +员:員 +呙:咼 +呛:嗆 +呜:嗚 +周:周週賙 +呼:呼虖謼 +和:和龢 +咏:詠 +咙:嚨 +咛:嚀 +咯:咯詻 +咱:咱偺 +咝:噝 +咤:吒 +咸:咸鹹 +咽:咽嚥 +哄:哄鬨 +响:響 +哑:啞 +哒:噠 +哓:嘵 +哔:嗶 +哕:噦 +哗:嘩譁 +哙:噲 +哜:嚌 +哝:噥 +哟:喲 +哺:哺餔 +唇:唇脣 +唉:唉欸 +唛:嘜 +唝:嗊 +唠:嘮 +唡:啢 +唢:嗩 +唤:喚 +啕:啕咷 +啖:啖啗 +啧:嘖 +啬:嗇 +啭:囀 +啮:齧嚙囓 +啴:嘽 +啸:嘯 +喂:喂餵 +喧:喧諠 +喷:噴 +喽:嘍 +喾:嚳 +嗉:嗉膆 +嗫:囁 +嗳:噯 +嘘:噓 +嘤:嚶 +嘱:囑 +嘻:嘻譆 +噜:嚕 +噪:噪譟 +嚣:囂 +回:回迴 +团:團糰 +园:園 +困:困睏 +囱:囪 +围:圍 +囵:圇 +国:國 +图:圖 +圆:圓 +圣:聖圣 +圬:圬杇 +圭:圭珪 +圹:壙 +场:場 +址:址阯 +坂:阪 +坏:壞坏 +坑:坑阬 +块:塊 +坚:堅 +坛:壇罈 +坜:壢 +坝:壩 +坞:塢 +坟:墳 +坠:墜 +垄:壟 +垅:壠 +垆:壚 +垒:壘 +垦:墾 +垩:堊 +垫:墊 +垭:埡 +垱:壋 +垲:塏 +垴:堖 +埘:塒 +埙:壎塤 +埚:堝 +堇:堇菫 +埯:垵 +堑:塹 +堕:墮 +堤:堤隄 +墒:墑 +墙:牆墻 +壮:壯 +声:聲 +壳:殼殻 +壶:壺 +壸:壼 +处:處 +备:備 +复:復複复覆 +够:夠 +夫:夫伕 +夭:夭殀 +头:頭 +夸:夸誇 +夹:夾 +夺:奪 +奁:奩 +奂:奐 +奋:奮 +奖:獎奬 +奥:奧 +奶:奶嬭 +奸:奸姦 +妆:妝粧 +妇:婦 +妈:媽 +妙:妙玅 +妩:嫵 +妪:嫗 +妫:媯嬀 +姗:姍 +姜:姜薑 +姹:奼 +娄:婁 +娅:婭 +娆:嬈 +娇:嬌 +娈:孌 +娘:娘孃 +娱:娛 +娲:媧 +娴:嫻 +婴:嬰 +婵:嬋 +婶:嬸 +媪:媼 +嫒:嬡 +嫔:嬪 +嫱:嬙 +嬷:嬤 +孙:孫 +学:學 +孪:孿 +宁:寧宁甯 +它:它牠 +宝:寶 +实:實 +宠:寵 +审:審 +宪:憲 +宫:宮 +宴:宴讌醼 +家:家傢 +宽:寬 +宾:賓 +寝:寢 +寸:寸吋 +对:對 +寻:尋 +导:導 +寿:壽 +将:將 +尔:爾 +尘:塵 +尝:嘗嚐 +尧:堯 +尴:尷 +尸:尸屍 +尺:尺呎 +尽:盡儘 +局:局侷跼挶 +层:層 +屃:屓 +屉:屜 +届:屆 +属:屬 +屡:屢 +屦:屨 +屿:嶼 +岁:歲 +岂:豈 +岖:嶇 +岗:崗 +岘:峴 +岙:嶴 +岚:嵐 +岛:島 +岩:岩巖嵒 +岭:嶺岭 +岳:岳嶽 +岽:崠崬 +岿:巋 +峄:嶧 +峡:峽 +峤:嶠 +峥:崢 +峦:巒 +崂:嶗 +崃:崍 +崎:崎埼碕 +崭:嶄 +嵘:嶸 +嵛:崳 +嵝:嶁 +巅:巔 +巨:巨鉅 +巩:鞏 +巯:巰 +币:幣 +布:布佈 +帅:帥 +师:師 +帏:幃 +帐:帳 +帘:簾帘 +帜:幟 +带:帶 +帧:幀 +席:席蓆 +帮:幫 +帱:幬 +帻:幘 +帼:幗 +幂:冪 +幡:幡旛 +幢:幢橦 +干:干乾幹榦 +并:并並併 +幸:幸倖 +广:廣 +庄:莊庄 +庆:慶 +庐:廬 +庑:廡 +库:庫 +应:應 +庙:廟 +庞:龐 +废:廢 +庵:庵菴 +廪:廩 +廿:廿卄 +开:開幵 +异:異异 +弃:棄 +弑:弒 +张:張 +弥:彌瀰 +弦:弦絃 +弪:弳 +弯:彎 +弹:彈 +强:強彊 +归:歸 +当:當儅噹 +录:錄録 +彝:彞 +彗:彗篲 +彦:彥 +彩:彩綵 +彻:徹 +征:徵 +径:徑 +徇:徇侚 +徊:徊佪 +徕:徠 +御:御禦 +忆:憶 +忏:懺忏 +志:志誌 +忧:憂 +念:念唸 +忾:愾 +怀:懷怀 +态:態 +怂:慫 +怃:憮 +怄:慪 +怅:悵 +怆:愴 +怜:憐怜 +总:總 +怼:懟 +怿:懌 +恋:戀 +恒:恆恒 +恤:卹恤 +恳:懇 +恶:惡噁 +恸:慟 +恹:懨 +恺:愷 +恻:惻 +恼:惱 +恽:惲 +悦:悅 +悫:愨慤 +悬:懸 +悭:慳 +悯:憫 +惊:驚惊 +惧:懼 +惨:慘 +惩:懲 +惫:憊 +惬:愜 +惭:慚 +惮:憚 +惯:慣 +愈:愈瘉癒 +愠:慍 +愤:憤 +愦:憒 +愧:愧媿 +愿:願愿 +慑:懾 +懑:懣 +懒:懶 +懔:懍 +戆:戇 +戋:戔 +戏:戲 +戗:戧 +战:戰 +戚:戚慼 +戬:戩 +戯:戱 +户:戶 +扁:扁稨 +扉:屝扉 +才:才纔 +扎:扎紮 +扑:撲扑 +打:打搨 +托:托託 +扛:扛摃 +扣:扣釦 +执:執 +扩:擴 +扪:捫 +扫:掃 +扬:揚颺 +扯:扯撦 +扰:擾扰 +抚:撫 +抛:拋 +抟:摶 +抠:摳 +抡:掄 +抢:搶 +护:護 +报:報 +抱:抱抔 +抵:抵牴扺觝 +担:擔 +拐:拐枴柺 +拚:拚抃 +拟:擬 +拢:攏 +拣:揀 +拥:擁 +拦:攔 +拧:擰 +拨:撥 +择:擇 +挂:掛挂 +挜:掗 +挚:摯 +挛:攣 +挝:撾 +挞:撻 +挟:挾 +挠:撓 +挡:擋 +挢:撟 +挣:掙 +挤:擠 +挥:揮 +挦:撏 +挽:挽輓 +捂:捂摀 +捆:捆梱綑 +捍:捍扞 +捞:撈 +损:損 +捡:撿 +换:換 +捣:搗擣 +据:據据 +捶:捶搥 +捻:捻撚 +掏:掏搯 +掳:擄 +掴:摑 +掷:擲 +掸:撣撢 +掺:摻 +掼:摜 +插:插扱 +揽:攬 +揾:搵 +揿:撳 +搀:攙 +搁:擱 +搂:摟 +搅:攪 +搜:搜蒐 +携:攜 +摄:攝 +摅:攄 +摆:擺襬 +摇:搖 +摈:擯 +摊:攤 +撄:攖 +撑:撐 +撰:撰譔 +撵:攆 +撷:擷 +撸:擼 +撺:攛 +擀:搟 +操:操肏 +擞:擻 +攒:攢 +效:效傚 +敌:敵 +敛:斂 +敦:惇敦 +数:數 +斋:齋 +斓:斕 +斗:斗鬥 +斩:斬 +断:斷 +旁:旁徬 +旗:旗旂 +无:無 +旦:旦狚 +旧:舊 +旬:旬栒 +时:時 +旷:曠 +昂:昂卬 +昆:昆崑 +旸:暘 +昙:曇 +昵:暱昵 +昼:晝 +昽:曨 +显:顯 +晋:晉 +晒:曬晒 +晓:曉 +晔:曄 +晕:暈 +晖:暉 +晰:晰晢 +暂:暫 +暖:暖煖 +暗:暗晻闇 +暧:曖 +曦:曦晞 +曳:曳抴 +朐:朐胊 +望:望朢 +札:札劄 +术:朮術 +朱:朱硃 +朴:朴樸 +机:機机 +杀:殺 +杂:雜 +权:權 +杆:杆桿 +杠:杠槓 +条:條 +来:來 +杨:楊 +杩:榪 +杯:杯盃桮 +杰:杰傑 +松:松鬆 +板:板闆 +极:極极 +构:搆構构 +枞:樅 +枢:樞 +枣:棗 +枥:櫪 +枧:梘 +枨:棖 +枪:槍鎗 +枫:楓 +枭:梟 +柜:櫃柜 +柠:檸 +柽:檉 +栀:梔 +栅:柵 +标:標 +栈:棧 +栉:櫛 +栊:櫳 +栋:棟 +栌:櫨 +栎:櫟 +栏:欄 +树:樹 +栖:棲栖 +栗:栗慄 +样:樣 +核:核覈 +格:格挌 +栾:欒 +桠:椏 +桡:橈 +桢:楨 +档:檔 +桤:榿 +桥:橋 +桦:樺 +桧:檜 +桨:槳 +桩:樁 +梁:梁樑 +梦:夢 +梼:檮 +梾:棶 +梿:槤 +检:檢 +棂:櫺欞 +棋:棋碁 +棰:箠棰 +棱:稜棱 +棹:棹櫂 +椁:槨 +椟:櫝 +椠:槧 +椤:欏 +椭:橢 +楼:樓 +榄:欖 +榅:榲 +榇:櫬 +榈:櫚 +榉:櫸 +榨:搾榨 +槚:檟 +槛:檻 +槟:檳 +槠:櫧 +横:橫 +樯:檣 +樱:櫻 +樽:樽墫 +橥:櫫 +橱:櫥 +橹:櫓艣 +橼:櫞 +檐:檐簷 +檩:檁 +欢:歡 +欣:欣訢 +欤:歟 +欧:歐 +欲:欲慾 +歼:殲 +殁:歿 +殇:殤 +残:殘 +殒:殞 +殓:殮 +殚:殫 +殡:殯 +殴:毆 +殷:殷慇 +毁:毀燬譭 +毂:轂 +毋:毋毌 +毕:畢 +毗:毗毘 +毙:斃 +毡:氈 +毵:毿 +氇:氌 +气:氣气 +氢:氫 +氩:氬 +氲:氳 +氽:汆 +汇:匯彙 +汉:漢 +污:污汙 +汤:湯 +汹:洶 +沈:沈瀋 +沟:溝 +没:沒 +沣:灃 +沤:漚 +沥:瀝 +沦:淪 +沧:滄 +沩:溈潙 +沪:滬 +沾:沾霑 +泄:泄洩 +泛:泛氾汎 +泞:濘泞 +注:注註 +泪:淚 +泶:澩 +泷:瀧 +泸:瀘 +泺:濼 +泻:瀉 +泼:潑 +泽:澤 +泾:涇 +洁:潔洁 +洒:灑洒 +洼:窪洼 +浃:浹 +浅:淺 +浆:漿 +浇:澆 +浈:湞 +浊:濁 +测:測 +浍:澮 +济:濟 +浏:瀏 +浐:滻 +浑:渾 +浒:滸 +浓:濃 +浔:潯 +浚:浚濬 +浩:浩澔 +涂:塗涂 +涌:涌湧 +涕:涕洟 +涛:濤 +涝:澇 +涞:淶 +涟:漣 +涠:潿 +涡:渦 +涣:渙 +涤:滌 +润:潤 +涧:澗 +涨:漲 +涩:澀 +涸:涸凅 +淀:澱淀 +淫:淫婬 +渊:淵 +渌:淥 +渍:漬 +渎:瀆 +渐:漸 +渑:澠 +渔:漁 +渗:滲 +温:溫 +游:游遊 +湾:灣 +湿:溼濕 +溃:潰 +溅:濺 +溆:漵 +溜:溜霤 +溪:溪谿 +溯:溯泝 +滗:潷 +滚:滾 +滞:滯 +滟:灩灧 +滠:灄 +满:滿 +滢:瀅 +滤:濾 +滥:濫 +滦:灤 +滨:濱 +滩:灘 +滪:澦 +漓:漓灕 +演:演縯 +漾:漾瀁 +漤:灠 +潆:瀠 +潇:瀟 +潋:瀲 +潍:濰 +潜:潛 +潴:瀦 +澄:澄澂 +澜:瀾 +濑:瀨 +濒:瀕 +灏:灝 +灭:滅 +灯:燈 +灵:靈 +灶:竈 +灾:災 +灿:燦 +炀:煬 +炉:爐鑪 +炖:燉炖 +炜:煒 +炝:熗 +炫:炫衒 +炮:炮砲炰 +点:點 +炼:煉鍊 +炽:熾 +烁:爍 +烂:爛 +烃:烴 +烛:燭 +烟:煙 +烦:煩 +烧:燒 +烨:燁 +烩:燴 +烫:燙 +烬:燼 +热:熱 +焊:焊銲 +焕:煥 +焖:燜 +焘:燾 +焰:焰燄 +照:照炤 +熏:燻熏 +熔:熔鎔 +燕:燕鷰 +爱:愛 +爷:爺 +牍:牘 +牦:犛氂 +牵:牽 +牺:犧 +犊:犢 +状:狀 +犷:獷 +犸:獁 +犹:猶 +狈:狽 +狞:獰 +独:獨 +狭:狹 +狮:獅 +狯:獪 +狰:猙 +狱:獄 +狲:猻 +狸:狸貍 +猃:獫 +猎:獵 +猕:獼 +猡:玀 +猪:豬 +猫:貓 +猬:蝟 +献:獻 +獭:獺 +玑:璣 +玚:瑒 +玛:瑪 +玮:瑋 +环:環鐶 +现:現 +玱:瑲 +玺:璽 +珏:玨 +珐:琺 +珑:瓏 +珰:璫 +珲:琿 +球:球毬 +琅:琅瑯 +琏:璉 +琐:瑣 +琼:瓊 +瑶:瑤 +瑷:璦 +璇:璇璿 +璎:瓔 +瓒:瓚 +瓮:甕瓮 +瓯:甌 +瓶:瓶缾 +电:電 +画:畫 +畅:暢 +畲:畬 +畴:疇 +疖:癤 +疗:療 +疟:瘧 +疠:癘 +疡:瘍 +疬:癧 +疭:瘲 +疮:瘡 +疯:瘋 +疱:皰 +疴:痾 +症:症癥 +痈:廱癰 +痉:痙 +痒:癢痒 +痖:瘂 +痨:癆 +痪:瘓 +痫:癇 +痱:痱疿 +痴:痴癡 +痹:痺痹 +瘅:癉 +瘗:瘞 +瘘:瘺瘻 +瘪:癟 +瘫:癱 +瘾:癮 +瘿:癭 +癞:癩 +癣:癬 +癫:癲 +皂:皂皁 +皑:皚 +皱:皺 +皲:皸 +盏:盞醆 +盐:鹽 +监:監 +盖:蓋 +盗:盜 +盘:槃盤 +眍:瞘 +眦:眥 +眯:瞇眯 +眺:眺覜 +眬:矓 +着:著 +睁:睜 +睐:睞 +睑:瞼 +睾:睪睾 +睿:睿叡 +瞆:瞶 +瞒:瞞 +瞩:矚 +矫:矯 +矶:磯 +矾:礬 +矿:礦 +砀:碭 +码:碼 +砖:磚 +砗:硨 +砚:硯 +砧:砧碪 +砜:碸 +砺:礪 +砻:礱 +砾:礫 +础:礎 +硁:硜 +硕:碩 +硖:硤 +硗:磽 +硙:磑 +确:確确 +硷:鹼礆 +碍:礙 +碛:磧 +碜:磣 +碰:碰踫 +碱:堿 +磷:燐磷 +礴:礡 +礼:禮 +祆:祆祅 +祛:祛袪 +祃:禡 +祎:禕 +祢:禰 +祯:禎 +祷:禱 +祸:禍 +禀:稟 +禄:祿 +禅:禪 +离:離离 +秃:禿 +秆:稈 +秋:秋鞦 +种:種种 +秘:秘祕 +积:積 +称:稱 +秽:穢 +秾:穠 +稆:穭 +税:稅 +稣:穌 +稳:穩 +穑:穡 +穷:窮 +窃:竊 +窍:竅 +窎:窵 +窑:窯 +窜:竄 +窝:窩 +窥:窺 +窦:竇 +窭:窶 +竖:豎竪 +竞:競 +端:端耑 +笃:篤 +笋:筍 +笔:筆 +笕:筧 +笺:箋 +笼:籠 +笾:籩 +筇:筇笻 +筋:筋觔 +筑:筑築 +答:答荅 +策:策筴 +筚:篳 +筛:篩 +筜:簹 +筝:箏 +筱:筱篠 +筹:籌 +筼:篔 +签:簽籤 +简:簡 +箅:箄箅 +箦:簀 +箧:篋 +箨:籜 +箩:籮 +箪:簞 +箫:簫 +箬:篛箬 +篑:簣 +篓:簍 +篮:籃 +篱:籬篱 +簖:籪 +籁:籟 +籴:糴 +类:類 +籼:秈 +粜:糶 +粝:糲 +粤:粵 +粪:糞 +粮:糧 +糁:糝 +糇:餱 +糊:糊餬 +糍:餈 +糟:糟蹧 +系:系係繫 +紧:緊 +累:累櫐纍 +絷:縶 +纟:糹 +纠:糾 +纡:紆 +红:紅 +纣:紂 +纤:縴纖 +纥:紇 +约:約 +级:級 +纨:紈 +纩:纊 +纪:紀 +纫:紉 +纬:緯 +纭:紜 +纮:紘 +纯:純 +纰:紕 +纱:紗 +纲:綱 +纳:納 +纴:紝 +纵:縱 +纶:綸 +纷:紛 +纸:紙 +纹:紋 +纺:紡 +纻:紵 +纼:紖 +纽:紐 +纾:紓 +线:線綫 +绀:紺 +绁:紲 +绂:紱 +练:練 +组:組 +绅:紳 +细:細 +织:織 +终:終 +绉:縐 +绊:絆 +绋:紼 +绌:絀 +绍:紹 +绎:繹 +经:經 +绐:紿 +绑:綁 +绒:絨 +结:結 +绔:絝 +绕:繞 +绖:絰 +绗:絎 +绘:繪 +给:給 +绚:絢 +绛:絳 +络:絡 +绝:絕絶 +绞:絞 +统:統 +绠:綆 +绡:綃 +绢:絹 +绣:繡綉 +绤:綌 +绥:綏 +绦:絛縚縧 +继:繼 +绨:綈 +绩:績勣 +绪:緒 +绫:綾 +绬:緓 +续:續 +绮:綺 +绯:緋 +绰:綽 +绱:緔鞝 +绲:緄 +绳:繩 +维:維 +绵:綿 +绶:綬 +绷:繃綳 +绸:綢 +绹:綯 +绺:綹 +绻:綣 +综:綜 +绽:綻 +绾:綰 +绿:綠緑 +缀:綴 +缁:緇 +缂:緙 +缃:緗 +缄:緘 +缅:緬 +缆:纜 +缇:緹 +缈:緲 +缉:緝 +缊:縕 +缋:繢 +缌:緦 +缍:綞 +缎:緞 +缏:緶 +缑:緱 +缒:縋 +缓:緩 +缔:締 +缕:縷 +编:編 +缗:緡 +缘:緣 +缙:縉 +缚:縛縳 +缛:縟 +缜:縝 +缝:縫 +缞:縗 +缟:縞 +缠:纏 +缡:縭 +缢:縊 +缣:縑 +缤:繽 +缥:縹 +缦:縵 +缧:縲 +缨:纓 +缩:縮 +缪:繆 +缫:繅 +缬:纈 +缭:繚 +缮:繕 +缯:繒 +缰:韁繮 +缱:繾 +缲:繰 +缳:繯 +缴:繳 +缵:纘 +罂:罌 +罐:罐鑵 +网:網网 +罗:羅儸囉 +罘:罘罦 +罚:罰 +罢:罷 +置:置寘 +罴:羆 +羁:羈 +羟:羥 +羡:羨羡 +翘:翹 +翻:翻繙 +耀:耀燿 +考:考攷 +耗:耗秏 +耢:耮 +耧:耬 +耸:聳 +耻:恥 +聂:聶 +聋:聾 +职:職 +聍:聹 +联:聯 +聩:聵 +聪:聰 +肃:肅 +肠:腸 +肤:膚 +肮:骯肮 +肴:肴餚殽 +肺:肺胇 +肾:腎 +肿:腫 +胀:脹 +胁:脅 +胄:冑胄 +胆:膽 +背:背揹 +胜:勝胜 +胡:胡鬍楜衚 +胧:朧矓 +胨:腖 +胪:臚 +胫:脛 +胭:胭臙 +胳:胳肐 +胶:膠 +脉:脈 +脍:膾 +脏:臟髒 +脐:臍 +脑:腦 +脓:膿 +脔:臠 +脚:腳 +脱:脫 +脶:腡 +脸:臉 +腊:臘腊 +腌:腌醃 +腭:齶 +腻:膩 +腼:靦 +腽:膃 +腾:騰 +膑:臏 +膘:膘臕 +膻:羶膻 +臜:臢 +致:致緻 +舄:舄潟 +舆:輿 +舍:舍捨 +舣:艤 +舰:艦 +舱:艙 +舻:艫 +艰:艱 +艳:艷豔 +艹:艸 +艺:藝 +节:節 +芈:羋 +芗:薌 +芜:蕪 +芦:蘆 +芸:芸蕓 +苁:蓯 +苇:葦 +苈:藶 +苋:莧 +苌:萇 +苍:蒼 +苎:苧 +苏:蘇甦囌 +苧:薴 +苟:苟茍 +苹:蘋苹 +茂:茂楙 +范:范範 +茎:莖 +茏:蘢 +茑:蔦 +茔:塋 +茕:煢 +茧:繭茧 +荆:荊 +荐:荐薦 +荙:薘 +荚:莢 +荛:蕘 +荜:蓽 +荞:蕎 +荟:薈 +荠:薺 +荡:蕩盪 +荣:榮 +荤:葷 +荥:滎 +荦:犖 +荧:熒 +荨:蕁 +荩:藎 +荪:蓀 +荫:蔭 +荬:藚蕒 +荭:葒 +荮:葤 +药:藥葯 +莅:蒞 +莓:莓苺 +莱:萊 +莲:蓮 +莳:蒔 +莴:萵 +莶:薟 +获:獲穫 +莸:蕕 +莹:瑩 +莺:鶯 +莼:蓴蒓 +菱:菱蔆 +萝:蘿 +萤:螢 +营:營 +萦:縈 +萧:蕭 +萨:薩 +葱:蔥 +蒇:蕆 +蒉:蕢 +蒋:蔣 +蒌:蔞 +蒙:蒙濛矇懞 +蓑:蓑簑 +蓝:藍 +蓟:薊 +蓠:蘺 +蓣:蕷 +蓥:鎣 +蓦:驀 +蔑:蔑衊 +蔂:虆 +蔷:薔 +蔹:蘞 +蔺:藺 +蔼:藹 +蕰:薀 +蕲:蘄 +蕴:蘊 +薮:藪 +薯:薯藷 +藉:藉耤 +藓:蘚 +藤:藤籐 +蘖:蘗櫱 +虏:虜 +虑:慮 +虚:虛 +虫:蟲虫 +虬:虯 +虮:蟣虮 +虱:虱蝨 +虽:雖 +虾:蝦 +虿:蠆 +蚀:蝕 +蚁:蟻 +蚂:螞 +蚕:蠶蚕 +蚝:蠔蚝 +蚬:蜆 +蛊:蠱 +蛎:蠣 +蛏:蟶 +蛮:蠻 +蛰:蟄 +蛱:蛺 +蛲:蟯 +蛳:螄 +蛴:蠐 +蜕:蛻 +蜗:蝸 +蜡:蠟蜡 +蜷:蜷踡 +蝇:蠅 +蝈:蟈 +蝉:蟬 +蝎:蠍蝎 +蝼:螻 +蝾:蠑 +蟮:蟺 +螀:螿 +螨:蟎 +蠢:蠢惷 +蠼:蠷蠼 +蟏:蠨 +衅:釁舋 +衔:銜啣 +补:補 +表:表錶 +衬:襯 +衮:袞 +袄:襖 +袅:裊嬝嫋 +袖:袖褎 +袆:褘 +袜:襪 +袭:襲 +袯:襏 +装:裝 +裆:襠 +裈:褌 +裢:褳 +裣:襝 +裤:褲 +裥:襉襇 +裸:裸祼 +褛:褸 +褴:襤 +襁:襁繈 +西:西襾 +见:見 +观:觀 +规:規 +觅:覓 +视:視 +觇:覘 +览:覽 +觉:覺 +觊:覬 +觋:覡 +觌:覿 +觍:覥 +觎:覦 +觏:覯 +觐:覲 +觑:覷 +角:角甪 +觞:觴 +触:觸触 +觯:觶 +訚:誾 +誉:譽 +誊:謄 +讠:訁 +计:計 +订:訂 +讣:訃 +认:認 +讥:譏 +讦:訐 +讧:訌 +讨:討 +让:讓 +讪:訕 +讫:訖 +讬:託 +训:訓 +议:議 +讯:訊 +记:記 +讱:訒 +讲:講 +讳:諱 +讴:謳 +讵:詎 +讶:訝 +讷:訥 +许:許 +讹:訛 +论:論 +讻:訩 +讼:訟 +讽:諷 +设:設 +访:訪 +诀:訣 +证:證証 +诂:詁 +诃:訶 +评:評 +诅:詛 +识:識 +诇:詗 +诈:詐 +诉:訴 +诊:診 +诋:詆 +诌:謅 +词:詞 +诎:詘 +诏:詔 +诐:詖 +译:譯 +诒:詒 +诓:誆 +诔:誄 +试:試 +诖:詿 +诗:詩 +诘:詰 +诙:詼 +诚:誠 +诛:誅 +诜:詵 +话:話 +诞:誕 +诟:詬 +诠:詮 +诡:詭 +询:詢 +诣:詣 +诤:諍 +该:該 +详:詳 +诧:詫 +诨:諢 +诩:詡 +诪:譸 +诫:誡 +诬:誣 +语:語 +诮:誚 +误:誤 +诰:誥 +诱:誘 +诲:誨 +诳:誑 +说:說説 +诵:誦 +诶:誒 +请:請 +诸:諸 +诹:諏 +诺:諾 +读:讀 +诼:諑 +诽:誹 +课:課 +诿:諉 +谀:諛 +谁:誰 +谂:諗 +调:調 +谄:諂 +谅:諒 +谆:諄 +谇:誶 +谈:談 +谊:誼 +谋:謀 +谌:諶 +谍:諜 +谎:謊 +谏:諫 +谐:諧 +谑:謔 +谒:謁 +谓:謂 +谔:諤 +谕:諭 +谖:諼 +谗:讒 +谘:諮 +谙:諳 +谚:諺 +谛:諦 +谜:謎 +谝:諞 +谞:諝 +谟:謨 +谠:讜 +谡:謖 +谢:謝 +谣:謠謡 +谤:謗 +谥:謚 +谦:謙 +谧:謐 +谨:謹 +谩:謾 +谪:謫 +谫:譾謭 +谬:謬 +谭:譚 +谮:譖 +谯:譙 +谰:讕 +谱:譜 +谲:譎 +谳:讞 +谴:譴 +谵:譫 +谶:讖 +谷:谷穀 +豆:豆荳 +豚:豚魨 +豮:豶 +贝:貝 +贞:貞 +负:負 +贠:貟 +贡:貢 +财:財 +责:責 +贤:賢 +败:敗 +账:賬 +货:貨 +质:質 +贩:販 +贪:貪 +贫:貧 +贬:貶 +购:購 +贮:貯 +贯:貫 +贰:貳 +贱:賤 +贲:賁 +贳:貰 +贴:貼 +贵:貴 +贶:貺 +贷:貸 +贸:貿 +费:費 +贺:賀 +贻:貽 +贼:賊 +贽:贄 +贾:賈 +贿:賄 +赀:貲 +赁:賃 +赂:賂 +赃:贓贜 +资:資 +赅:賅 +赆:贐 +赇:賕 +赈:賑 +赉:賚 +赊:賒 +赋:賦 +赌:賭 +赍:齎賫 +赎:贖 +赏:賞 +赐:賜 +赑:贔 +赒:賙 +赓:賡 +赔:賠 +赕:賧 +赖:賴 +赗:賵 +赘:贅 +赙:賻 +赚:賺 +赛:賽 +赜:賾 +赝:贗贋 +赞:贊讚 +赟:贇 +赠:贈 +赡:贍 +赢:贏 +赣:贛 +赪:赬 +赵:趙 +赶:趕赶 +趋:趨 +趱:趲 +趸:躉 +跃:躍 +跄:蹌 +跖:跖蹠 +跞:躒 +践:踐 +跶:躂 +跷:蹺 +跸:蹕 +跹:躚 +跻:躋 +踊:踴踊 +踌:躊 +踪:蹤 +踬:躓 +踯:躑 +蹑:躡 +蹒:蹣 +蹰:躕 +蹿:躥 +躏:躪 +躜:躦 +躯:軀 +车:車 +轧:軋 +轨:軌 +轩:軒 +轪:軑 +轫:軔 +转:轉 +轭:軛 +轮:輪 +软:軟 +轰:轟 +轱:軲 +轲:軻 +轳:轤 +轴:軸 +轵:軹 +轶:軼 +轷:軤 +轸:軫 +轹:轢 +轺:軺 +轻:輕 +轼:軾 +载:載 +轾:輊 +轿:轎 +辀:輈 +辁:輇 +辂:輅 +较:較 +辄:輒 +辅:輔 +辆:輛 +辇:輦 +辈:輩 +辉:輝 +辊:輥 +辋:輞 +辌:輬 +辍:輟 +辎:輜 +辏:輳 +辐:輻 +辑:輯 +辒:轀 +输:輸 +辔:轡 +辕:轅 +辖:轄 +辗:輾 +辘:轆 +辙:轍 +辚:轔 +辞:辭 +辟:辟闢 +辩:辯 +辫:辮 +边:邊 +辽:遼 +达:達 +迁:遷 +过:過 +迈:邁 +运:運 +还:還 +这:這 +进:進 +远:遠 +违:違 +连:連 +迟:遲 +迤:迆迤 +迩:邇 +迳:逕 +迹:跡蹟 +适:適适 +选:選 +逊:遜 +递:遞 +逦:邐 +逻:邏 +逼:逼偪 +逾:逾踰 +遗:遺 +遥:遙 +邓:鄧 +邝:鄺 +邬:鄔 +邮:郵 +邹:鄒 +邺:鄴 +邻:鄰 +郁:郁鬱 +郏:郟 +郐:鄶 +郑:鄭 +郓:鄆 +郦:酈 +郧:鄖 +郸:鄲 +酂:酇 +酝:醞 +酬:酬詶 +酦:醱 +酱:醬 +酸:酸痠 +酽:釅 +酾:釃 +酿:釀 +采:釆采採埰 +释:釋 +里:里浬裡裏 +野:野埜 +鉴:鑒鋻鑑 +銮:鑾 +錾:鏨 +钅:釒 +钆:釓 +钇:釔 +针:針鍼 +钉:釘 +钊:釗 +钋:釙 +钌:釕 +钍:釷 +钎:釬釺 +钏:釧 +钐:釤 +钑:鈒 +钒:釩 +钓:釣 +钔:鍆 +钕:釹 +钖:鍚 +钗:釵 +钘:鈃 +钙:鈣 +钚:鈈 +钛:鈦 +钜:鉅 +钝:鈍 +钞:鈔 +钟:鐘鍾 +钠:鈉 +钡:鋇 +钢:鋼 +钣:鈑 +钤:鈐 +钥:鑰 +钦:欽 +钧:鈞 +钨:鎢 +钩:鈎鉤 +钪:鈧 +钫:鈁 +钬:鈥 +钭:鈄 +钮:鈕 +钯:鈀 +钰:鈺 +钱:錢 +钲:鉦 +钳:鉗拑 +钴:鈷 +钵:缽鉢 +钶:鈳 +钷:鉕 +钸:鈽 +钹:鈸 +钺:鉞戉 +钻:鑽鉆 +钼:鉬 +钽:鉭 +钾:鉀 +钿:鈿 +铀:鈾 +铁:鐵 +铂:鉑 +铃:鈴 +铄:鑠 +铅:鉛 +铆:鉚 +铇:鉋 +铈:鈰 +铉:鉉 +铊:鉈 +铋:鉍 +铌:鈮 +铍:鈹 +铎:鐸 +铏:鉶 +铐:銬 +铑:銠 +铒:鉺 +铓:鋩 +铔:錏 +铕:銪 +铖:鋮 +铗:鋏 +铘:鋣 +铙:鐃 +铚:銍 +铛:鐺 +铜:銅 +铝:鋁 +铞:銱 +铟:銦 +铠:鎧 +铡:鍘 +铢:銖 +铣:銑鐉 +铤:鋌 +铥:銩 +铦:銛 +铧:鏵 +铨:銓 +铩:鎩 +铪:鉿 +铫:銚 +铬:鉻 +铭:銘 +铮:錚 +铯:銫 +铰:鉸 +铱:銥 +铲:鏟剷 +铳:銃 +铴:鐋 +铵:銨 +银:銀 +铷:銣 +铸:鑄 +铹:鐒 +铺:鋪舖 +铻:鋙 +铼:錸 +铽:鋱 +链:鏈 +铿:鏗 +销:銷 +锁:鎖 +锂:鋰 +锃:鋥 +锄:鋤 +锅:鍋 +锆:鋯 +锇:鋨 +锈:鏽銹 +锉:銼剉 +锊:鋝 +锋:鋒 +锌:鋅 +锍:鋶 +锎:鐦 +锏:鐧 +锐:銳鋭 +锑:銻 +锒:鋃 +锓:鋟 +锔:鋦 +锕:錒 +锖:錆 +锗:鍺 +锘:鍩 +错:錯 +锚:錨 +锛:錛 +锜:錡 +锝:鍀 +锞:錁 +锟:錕 +锠:錩 +锡:錫 +锢:錮 +锣:鑼 +锤:錘鎚 +锥:錐 +锦:錦 +锧:鑕 +锨:杴鍁 +锩:錈 +锪:鍃 +锫:錇 +锬:錟 +锭:錠 +键:鍵 +锯:鋸 +锰:錳 +锱:錙 +锲:鍥 +锳:鍈 +锴:鍇 +锵:鏘 +锶:鍶 +锷:鍔 +锸:鍤 +锹:鍬 +锻:鍛 +锼:鎪 +锽:鍠 +锾:鍰 +锿:鎄 +镀:鍍 +镁:鎂 +镂:鏤 +镃:鎡 +镄:鐨 +镅:鎇 +镆:鏌 +镇:鎮 +镈:鎛 +镉:鎘 +镊:鑷 +镋:鎲 +镌:鐫鎸 +镍:鎳 +镎:鎿 +镏:鎦 +镐:鎬 +镑:鎊 +镒:鎰 +镓:鎵 +镔:鑌 +镕:鎔 +镖:鏢 +镗:鏜 +镘:鏝 +镙:鏍 +镚:鏰 +镛:鏞 +镜:鏡 +镝:鏑 +镞:鏃 +镟:鏇 +镠:鏐 +镡:鐔 +镢:鐝钁 +镣:鐐 +镤:鏷 +镥:鑥 +镦:鐓 +镧:鑭 +镨:鐠 +镩:鑹 +镪:鏹 +镫:鐙 +镬:鑊 +镭:鐳 +镮:鐶 +镯:鐲 +镰:鐮鎌 +镱:鐿 +镲:鑔 +镳:鑣 +镴:鑞 +镵:鑱 +镶:鑲瓖 +长:長 +门:門 +闩:閂 +闪:閃 +闫:閆 +闬:閈 +闭:閉 +问:問 +闯:闖 +闰:閏 +闱:闈 +闲:閑閒 +闳:閎 +间:間 +闵:閔湣 +闶:閌 +闷:悶 +闸:閘 +闹:鬧 +闺:閨 +闻:聞 +闼:闥 +闽:閩 +闾:閭 +闿:闓 +阀:閥 +阁:閣 +阂:閡 +阃:閫 +阄:鬮 +阅:閱閲 +阆:閬 +阇:闍 +阈:閾 +阉:閹 +阊:閶 +阋:鬩 +阌:閿 +阍:閽 +阎:閻 +阏:閼 +阐:闡 +阑:闌 +阒:闃 +阓:闠 +阔:闊 +阕:闋 +阖:闔 +阗:闐 +阘:闒 +阙:闕 +阚:闞 +阛:闤 +队:隊 +阳:陽暘 +阴:陰 +阵:陣 +阶:階 +际:際 +陆:陸 +陇:隴 +陈:陳 +陉:陘 +陕:陝 +陧:隉 +陨:隕 +险:險 +陶:陶匋 +隋:隋陏 +随:隨 +隐:隱 +隶:隸 +隽:雋 +难:難 +雁:雁鴈 +雇:雇僱 +雏:雛 +雕:雕琱鵰彫 +雠:讎 +雳:靂 +雾:霧 +霁:霽 +霉:霉黴 +霓:霓蜺 +霡:霢 +霭:靄 +靓:靚 +静:靜 +面:面麵 +靥:靨 +鞑:韃 +鞒:鞽 +鞯:韉 +韦:韋 +韧:韌 +韨:韍 +韩:韓 +韪:韙 +韫:韞 +韬:韜 +韵:韻 +页:頁 +顶:頂 +顷:頃 +顸:頇 +项:項 +顺:順 +须:須鬚 +顼:頊 +顽:頑 +顾:顧 +顿:頓 +颀:頎 +颁:頒 +颂:頌 +颃:頏 +预:預 +颅:顱 +领:領 +颇:頗 +颈:頸 +颉:頡 +颊:頰 +颋:頲 +颌:頜 +颍:潁 +颎:熲 +颏:頦 +颐:頤 +频:頻 +颓:頹隤穨頽 +颔:頷 +颕:頴 +颖:穎 +颗:顆 +题:題 +颙:顒 +颚:顎 +颛:顓 +颜:顏顔 +额:額 +颞:顳 +颟:顢 +颠:顛 +颡:顙 +颢:顥 +颤:顫 +颥:顬 +颦:顰 +颧:顴 +风:風 +飏:颺 +飐:颭 +飑:颮 +飒:颯 +飓:颶 +飔:颸 +飕:颼 +飖:颻 +飗:飀 +飘:飄 +飙:飆 +飚:飈 +飞:飛 +飨:饗 +餍:饜 +饣:飠 +饤:飣 +饥:飢饑 +饦:飥 +饧:餳 +饨:飩 +饩:餼 +饪:飪 +饫:飫 +饬:飭 +饭:飯 +饮:飲 +饯:餞 +饰:飾 +饱:飽 +饲:飼 +饴:飴 +饵:餌 +饶:饒 +饷:餉饟 +饹:餎 +饺:餃 +饻:餏 +饼:餅 +饽:餑 +饾:餖 +饿:餓 +馀:余 +馁:餒 +馂:餕 +馃:餜 +馄:餛 +馅:餡 +馆:館 +馇:餷 +馈:饋餽 +馊:餿 +馋:饞 +馌:饁 +馍:饃糢 +馎:餺 +馏:餾 +馐:饈 +馑:饉 +馒:饅 +馓:饊 +馔:饌 +馕:饢 +马:馬 +驭:馭 +驮:馱 +驯:馴 +驰:馳 +驱:驅 +驲:馹 +驳:駁駮 +驴:驢 +驵:駔 +驶:駛 +驷:駟 +驸:駙 +驹:駒 +驺:騶 +驻:駐 +驼:駝 +驽:駑 +驾:駕 +驿:驛 +骀:駘 +骁:驍 +骂:罵駡 +骃:駰 +骄:驕 +骅:驊 +骆:駱 +骇:駭 +骈:駢 +骉:驫 +骊:驪 +骋:騁 +验:驗 +骍:騂 +骎:駸 +骏:駿 +骐:騏 +骑:騎 +骒:騍 +骓:騅 +骔:騌 +骕:驌 +骖:驂 +骗:騙 +骘:騭 +骙:騤 +骚:騷 +骛:騖 +骜:驁 +骝:騮 +骞:騫鶱 +骟:騸 +骠:驃 +骡:騾 +骢:驄 +骣:驏 +骤:驟 +骥:驥 +骦:驦 +骧:驤 +髅:髏 +髋:髖 +髌:髕 +鬃:鬃騣 +鬓:鬢 +魇:魘 +魉:魎 +鱼:魚 +鱽:魛 +鱿:魷 +鲀:魨 +鲁:魯 +鲂:魴 +鲃:䰾 +鲄:魺 +鲅:鮁 +鲆:鮃 +鲇:鯰鮎 +鲈:鱸 +鲉:鮋 +鲊:鮓 +鲋:鮒 +鲌:鮊 +鲍:鮑 +鲎:鱟 +鲏:鮍 +鲐:鮐 +鲑:鮭 +鲒:鮚 +鲔:鮪 +鲕:鮞 +鲖:鮦 +鲗:鰂 +鲘:鮜 +鲙:鱠 +鲚:鱭 +鲛:鮫 +鲜:鮮 +鲞:鯗鮝 +鲟:鱘 +鲠:鯁 +鲡:鱺 +鲢:鰱 +鲣:鰹 +鲤:鯉 +鲥:鰣 +鲦:鰷 +鲧:鯀 +鲨:鯊 +鲩:鯇 +鲪:鮶 +鲫:鯽 +鲬:鯒 +鲭:鯖 +鲮:鯪 +鲯:鯕 +鲰:鯫 +鲱:鯡 +鲲:鯤 +鲳:鯧 +鲴:鯝 +鲵:鯢 +鲷:鯛 +鲸:鯨 +鲹:鰺 +鲺:鯴 +鲻:鯔 +鲼:鱝 +鲽:鰈 +鲾:鰏 +鲿:鱨 +鳀:鯷 +鳁:鰮 +鳃:鰓 +鳄:鱷鰐 +鳅:鰍 +鳆:鰒 +鳇:鰉 +鳊:鯿 +鳋:鰠 +鳌:鰲鼇 +鳍:鰭 +鳎:鰨 +鳏:鰥 +鳐:鰩 +鳑:鰟 +鳒:鰜 +鳓:鰳 +鳔:鰾 +鳕:鱈 +鳖:鱉 +鳗:鰻 +鳘:鰵 +鳙:鱅 +鳚:䲁 +鳛:鰼 +鳜:鱖 +鳝:鱔 +鳞:鱗 +鳟:鱒 +鳢:鱧 +鳣:鱣 +鸟:鳥 +鸠:鳩 +鸡:雞鷄 +鸢:鳶 +鸣:鳴 +鸤:鳲 +鸥:鷗 +鸦:鴉 +鸧:鶬 +鸨:鴇 +鸩:鴆酖 +鸪:鴣 +鸫:鶇 +鸬:鸕 +鸭:鴨 +鸮:鴞 +鸯:鴦 +鸰:鴒 +鸱:鴟 +鸲:鴝 +鸳:鴛 +鸴:鷽 +鸵:鴕 +鸶:鷥 +鸷:鷙 +鸸:鴯 +鸹:鴰 +鸺:鵂 +鸻:鴴 +鸼:鵃 +鸽:鴿 +鸾:鸞 +鸿:鴻 +鹀:鵐 +鹁:鵓 +鹂:鸝 +鹃:鵑 +鹄:鵠 +鹅:鵝 +鹆:鵒 +鹇:鷴鷳 +鹈:鵜 +鹉:鵡 +鹊:鵲 +鹋:鶓 +鹌:鵪 +鹍:鵾 +鹎:鵯 +鹏:鵬 +鹐:鵮 +鹑:鶉 +鹒:鶊 +鹓:鵷 +鹔:鷫 +鹕:鶘 +鹖:鶡 +鹗:鶚 +鹘:鶻 +鹙:鶖 +鹚:鶿鷀 +鹛:鶥 +鹜:鶩 +鹝:鷊 +鹞:鷂 +鹟:鶲 +鹠:鶹 +鹡:鶺 +鹢:鷁 +鹣:鶼 +鹤:鶴 +鹥:鷖 +鹦:鸚 +鹧:鷓 +鹨:鷚 +鹩:鷯 +鹪:鷦 +鹫:鷲 +鹬:鷸 +鹭:鷺 +鹯:鸇 +鹰:鷹 +鹱:鸌 +鹲:鸏 +鹳:鸛 +鹴:鸘 +鹾:鹺 +麦:麥 +麸:麩 +麻:麻痲痳 +黄:黃 +黉:黌 +黡:黶 +黩:黷 +黪:黲 +黾:黽 +鼋:黿 +鼍:鼉 +鼗:鞀 +鼹:鼴 +齐:齊 +齑:齏 +齿:齒 +龀:齔 +龁:齕 +龂:齗 +龃:齟 +龄:齡 +龅:齙 +龆:齠 +龇:齜 +龈:齦 +龉:齬 +龊:齪 +龋:齲 +龌:齷 +龙:龍 +龚:龔 +龛:龕 +龟:龜 +龠:龠籥 diff --git a/i18npool/source/textconversion/data/stc_word.dic b/i18npool/source/textconversion/data/stc_word.dic new file mode 100644 index 000000000000..4ae42366888d --- /dev/null +++ b/i18npool/source/textconversion/data/stc_word.dic @@ -0,0 +1,1150 @@ +一发>一髮 +万历>萬曆 +万年历>萬年曆 +三复>三複 +不干>不幹 +严复>嚴複 +中干>中幹 +主干>主幹 +乌发>烏髮 +乱发>亂髮 +人赃俱获>人贓俱獲 +佛历>佛曆 +假发>假髮 +偷偷干>偷偷幹 +傻干>傻幹 +光纤>光纖 +公历>西曆 +公干>公幹 +兴复>興復 +冒险干>冒險幹 +农历年>農曆年 +农历>農曆 +创历>創曆 +削发>削髮 +化纤>化纖 +匡复>匡復 +千纤>千纖 +华发>華髮 +单干>單幹 +卤味>滷味 +卷发>捲髮 +历书>曆書 +历月>曆月 +历法>曆法 +历象>曆象 +发乳>髮乳 +发卡>髮卡 +发型>髮型 +发夹>髮夾 +发廊>髮廊 +发式>髮式 +发指>髮指 +发油>髮油 +发粉>髮粉 +发菜>髮菜 +发蜡>髮蠟 +发辫>髮辮 +发露>髮露 +发髻>髮髻 +变脏>變髒 +叮叮当当>叮叮噹噹 +叮当>叮噹 +台历=桌曆 +台球=撞球 +台风>颱風 +响当当>響噹噹 +四复>四複 +团粒>糰粒 +国历>國曆 +坛坛罐罐>壇壇罐罐 +坛子>壇子 +垦复>墾復 +基干>基幹 +复业>復業 +复交>復交 +复任>復任 +复值>復值 +复健>復健 +复元>復元 +复关>複關 +复写>複寫 +复决>複決 +复出>複出 +复击>複擊 +复分数>複分數 +复利>複利 +复制>複製 +复加>複加 +复印>複印 +复变数>複變數 +复句>複句 +复叶>複葉 +复合>復合 +复名数>複名數 +复名词>複名詞 +复唱句>複唱句 +复国>復國 +复圆>複圓 +复地>複地 +复始>複始 +复姓>複姓 +复子明辟>複子明辟 +复学>復學 +复对数>複對數 +复州湾>複州灣 +复建>複建 +复式>複式 +复归>複歸 +复得>複得 +复打孔机>複打孔機 +复折>複折 +复摆>複擺 +复数>複數 +复新率>複新率 +复方>複方 +复明>複明 +复本>複本 +复杂>複雜 +复权>複權 +复染>複染 +复根>複根 +复框>複框 +复检>複檢 +复次>複次 +复比>複比 +复燃>複燃 +复燎>複燎 +复现>複現 +复生>複生 +复用>複用 +复电>複電 +复白>複白 +复盐>複鹽 +复眼>複眼 +复矩阵>複矩陣 +复礼>複禮 +复算>複算 +复籍>複籍 +复线>複綫 +复置>複置 +复耕>複耕 +复职>複職 +复萌>複萌 +复衍>複衍 +复视>複視 +复讼>複訟 +复评>複評 +复词>複詞 +复读>複讀 +复课>複課 +复起>複起 +复蹈>複蹈 +复转>複轉 +复选>複選 +复醒>複醒 +复长>複長 +复阅>複閱 +复雠>複讎 +复音>複音 +复频>複頻 +复驳>複駁 +夏历>夏曆 +大历>大曆 +大干>大幹 +太阳历>太陽曆 +太阴历>太陰曆 +头发>頭髮 +字汇>字彙 +实干>實幹 +审干>審幹 +小干>小幹 +尽先>儘先 +尽快>儘快 +尽早>儘早 +尽是>儘是 +尽然>儘然 +尽管>儘管 +尽自>儘自 +尽量>儘量 +巧干>巧幹 +巴尔干>巴爾幹 +干下>幹下 +干了>幹了 +干事>幹事 +干什么>幹什麼 +干休>幹休 +干休所>幹休所 +干制>幹制 +干劲>幹勁 +干卿何事>干卿何事 +干县>幹縣 +干名采誉>幹名采譽 +干吗>幹嗎 +干吧>幹吧 +干员>幹員 +干嘛>幹嘛 +干好>幹好 +干完>幹完 +干将>幹將 +干干脆脆>乾乾脆脆 +干得>幹得 +干才>幹才 +干掉>幹掉 +干政>幹政 +干校>幹校 +干活>幹活 +干流>幹流 +干渠>幹渠 +干着>幹著 +干线>幹線 +干练>幹練 +干群>幹群 +干蠢事>幹蠢事 +干警>幹警 +干起>幹起 +干过>幹過 +干道>幹道 +干部>幹部 +年历>年曆 +弄脏>弄髒 +强干弱枝>強幹弱枝 +当啷>噹啷 +很脏>很髒 +德干高原>德幹高原 +心长发短>心長髮短 +快干>快幹 +怒发>怒髮 +性历>性曆 +恶心>噁心 +才干>才幹 +找点事干>找點事幹 +找点活干>找點活幹 +护发>護髮 +拉纤>拉纖 +拖脏>拖髒 +招干>招幹 +拭干>拭幹 +挂历>掛曆 +提干>提幹 +收获>收穫 +敢干>敢幹 +散发>散髮 +新干>新幹 +无复孑遗>無複孑遺 +日历>日曆 +旧历>舊曆 +月历>月曆 +朝干夕惕>朝幹夕惕 +来复>來複 +枝干>枝幹 +柜台>櫃檯 +查干乌苏>查幹烏蘇 +树干>樹幹 +梳妆台>梳粧檯 +棉纤维>棉纖維 +榨干>榨幹 +此复>此複 +毛发>毛髮 +毫发>毫髮 +汇报>彙報 +汇编>彙編 +汇聚>彙聚 +汇集>彙集 +汤团>湯糰 +泼脏>潑髒 +洗发>洗髮 +洗头发>洗頭髮 +灯台>燈檯 +灰蒙蒙>灰濛濛 +烫发>燙髮 +犹太历>猶太曆 +猛干>猛幹 +珠干玉戚>珠幹玉戚 +理发>理髮 +生发>生髮 +白发>白髮 +皇历>皇曆 +盲干>盲幹 +矫情干誉>矯情幹譽 +短发>短髮 +硬干>硬幹 +秀发>秀髮 +穷纤入微>窮纖入微 +童颜鹤发>童顏鶴髮 +简复>簡複 +精干>精幹 +精明强干>精明強幹 +精明能干>精明能幹 +系念>繫念 +繁复>繁複 +纤小>纖小 +纤尘>纖塵 +纤巧>纖巧 +纤弱>纖弱 +纤悉不遗>纖悉不遺 +纤手>纖手 +纤指>纖指 +纤毛>纖毛 +纤纤>纖纖 +纤细>纖細 +纤绳>纖繩 +纤维>纖維 +纤腰>纖腰 +纤芥>纖芥 +纤道>纖道 +纪历>紀曆 +细蒙蒙>細濛濛 +结发>結髮 +维系>維繫 +老态龙钟>老態龍鍾 +老迈龙钟>老邁龍鍾 +联系>聯繫 +肮肮脏脏>骯骯髒髒 +肮脏>骯髒 +肯干>肯幹 +胎发>胎髮 +能干>能幹 +脏东西>髒東西 +脏乱>髒亂 +脏了>髒了 +脏兮兮>髒兮兮 +脏土>髒土 +脏字>髒字 +脏手>髒手 +脏水>髒水 +脏污>髒污 +脏物>髒物 +脏话>髒話 +脏钱>髒錢 +脱发>脫髮 +腐干>腐幹 +苦干>苦幹 +蒙蒙>濛濛 +藏历>藏曆 +蛮干>蠻幹 +行事历>行事曆 +西历>西曆 +词干>詞幹 +词汇>辭彙 +语汇>語彙 +调复机>調複機 +贵干>貴幹 +起伏=起復 +躯干>軀幹 +转干>轉幹 +边干>邊幹 +重复>重複 +金发>金髮 +钟情>鍾情 +钟爱>鍾愛 +钟馗>鍾馗 +钱复>錢複 +银发>銀髮 +锺县>鍾縣 +锺离>鍾離 +长发>長髮 +间不容发>間不容髮 +阳历>陽曆 +阴历>陰曆 +亚历山大>亞歷山大 +随干>隨幹 +须发>鬚髮 +顾复>顧複 +颠复>顛複 +颠干倒坤>顛幹倒坤 +驱干>驅幹 +骨干>骨幹 +骯脏>骯髒 +高干>高幹 +鬓发>鬢髮 +魂牵梦系>魂牽夢繫 +鹤发>鶴髮 +黄历>黃曆 +黑发>黑髮 +龙钟>龍鍾 +循环>迴圈 +万维网=全球資訊網 +三击=按三下 +上下文=內文 +下划线=底線 +下溢=超下限 +不区分大小写=大小寫不須相符 +不能=無法 +与元件=交集元件 +与操作=交集運算 +与设备无关=不依賴裝置 +与设备有关=裝置相依的 +与门=且閘 +专用=專屬 +专用线路>專屬電路 +中规模=中型 +串行=串列 +临时文件=暫存檔 +主从式=主從式 +主存=主記憶體 +主页=首頁 +主驱动器=主磁碟機 +书写=書寫 +书签>書籤 +二叉树=二元樹 +二极管=二極體 +交换区=置換 +仅文本>純文字 +介质密度=媒體密度 +仓库=倉儲 +代码=程式碼 +代码集=字元集 +令牌>記號 +以太网=乙太網路 +任务>工作 +仿真=模擬 +仿真器>模擬器 +休假=自動回信 +优质彩色显示器=高級彩色顯示器 +优选>偏好 +会话=階段作業 +传感器=感應器 +传播>傳遞 +传输>傳送 +传输层=傳送層 +传送>傳輸 +伪>虛擬 +伪类=虛擬類別 +伪随机数=虛擬亂數 +位图=點陣圖 +位映射>點陣 +低层次=低階 +体系结构>架構 +余弦=餘弦 +作用域>範圍 +使缺省=變成預設值 +例行程序=常式 +供电=電源供應 +依赖平台的=平台相依 +依赖性=相依性 +保修期=保證期 +保存>儲存 +保密性=私密性 +信件>郵件 +信号=訊號 +信息=資訊 +信箱=郵箱 +倒置=反轉 +假脱机>同時周邊線上作業 +兆=百萬 +光栅=光域 +光标>游標 +光电产品=光學產品 +光盘=光碟 +光笔=光筆 +克隆>複製 +入口=進入點 +入口级=初階 +全局=全域 +全息照相=全像術 +全路径=完整路徑 +公共=公用 +共享=共用 +关系>關係 +其它=其他 +兼容=相容 +内存=記憶體 +内核>核心 +内置=內建 +内置宏=內建巨集 +内部网=企業網路 +冗余>多餘 +冗余模式>冗長模式 +写作>撰寫 +冲突>衝突 +减震=避震裝置 +击键>按鍵 +分区=分割區 +分发>分配 +分层=階層式 +分布=分散 +分析>解析 +分辨率=解析度 +分配=配置 +列数=欄數 +列表>清單 +刚好及时编译器=即時編譯程式 +创建=建立 +初始化=起始 +初级功能=初階功能 +删除=移除 +别名=代號 +制表符=跳格 +制表键>跳格 +刷新>清除 +前台=前景 +前沿=前廊 +前缀=前置 +剩下=剩餘 +剩余>剩餘 +剪切=剪下 +剪贴板=剪貼簿 +助记=助憶 +包交换=分封交換 +包语句=套裝模組敘述 +匹配>符合 +区分大小写=區分大小寫 +千字节=千位元組 +协处理器=輔助處理器 +协议=協定 +单击=按一下 +单列内置内存模块=單一線內記憶體模組 +单精度=單精準度 +占用>使用 +卸载=卸載 +压缩=壓縮 +厘米=公分 +原始>初始 +去磁>消磁 +参数=參數 +参考>參照 +双击=按兩下 +反斜杠=反斜線 +反汇编=反向組譯 +反汇编程序=反組譯程式 +反馈=回饋 +发信=發信 +发送>傳送 +变元=自變數 +变量=變數 +口令=密碼 +句柄=控點 +另存为=另存新檔 +只读=唯讀 +可抢先的=可先佔的 +可移植=可攜式 +可编程=可程式化 +可装=可載入 +可视图象=視覺影像 +台式系统=桌面系統 +合并>合併 +名称字段=名稱欄位 +后台=背景 +后缀=字尾 +周视图>周查看 +命令>指令 +响应=回應 +响铃=嗶聲 +哑终端=無智型終端機 +噪声=聲音雜訊 +噪音=雜訊 +四击=連按四下 +回复=回覆 +回应=因應 +回放=重播 +回溯=反向搜尋 +回绕>換行 +回路切换=電路交換 +回车=回轉鍵 +因特网>網際網路 +固件=韌體 +国际互联网=網際網路 +国际无线电委员会=國際無線電諮詢委員會 +国际标准化组织=國際標準組織 +图像>影像 +图标>圖像 +图象>影像 +地址=位址 +坐标=座標 +块校验字符=區塊檢查字元 +基准程序=基準程式 +基准线=基線 +基带=基頻 +基本类=基礎類別 +堆栈=堆疊 +塞尔维亚=賽爾維亞 +填充=填補 +增量式=遞增 +声卡=音效卡 +声音>音響 +声频>聲訊 +备份=復本 +复位=重設 +复制>複製 +复合>複合 +复选=核取 +外围>周邊 +外设>周邊設備 +多字节=多位元組 +多屏=多重螢幕 +多总线=多重匯流排 +多用户=多重使用者 +多线程=多重執行緒 +多路复用=多工 +头文件=標頭檔案 +奇偶校验=同位檢查 +威尔士=威爾斯 +子域=子網域 +子数组=子陣列 +子网掩码=子網路遮罩 +子题目=次層題目 +字体=字型 +字段=欄位 +字母数字=文數字 +字符=字元 +字符串=字串 +字符集=字集 +字节=位元組 +存储=儲存 +存储器>記憶體 +守护=常駐 +守护程序=常駐程式 +安装=裝載 +宏=巨集 +定制>自訂 +审计=稽核 +客户>用戶 +客户机服务器>主從式 +宽字符=寬字元 +宿主机>主機 +寄存器=暫存器 +密钥=加密鍵 +对准=調校 +对分查找树=二元搜尋樹 +对话框=對話方塊 +对象=物件 +寻址=定址 +寻找=搜尋 +小型计算机=迷你電腦 +小规模=小型 +小键盘=數字鍵盤 +就绪=備妥 +尺寸=大小 +局域网=區域網路 +屏幕=螢幕 +属主=所有者 +嵌入=內嵌 +工具栏=工具軸 +左侧=左手邊 +左撇子=慣用左手 +布告=告示 +布尔=布林 +布局>佈局 +带宽=頻寬 +帧菜单=框架功能表 +帮助=輔助說明 +常量=常數 +常驻字体=內建字型 +干扰>干擾 +平均故障时间=平均故障間隔時間 +平铺式=非重疊 +年视图=年查看 +并行=並列 +并行口=並列埠 +并行打印机=並列印表機 +并行接口=平行介面 +广域网=廣域網路 +序列>串列 +库=程式庫 +应用程序=應用程式 +应用程序包=應用程序集 +应答>回應 +应答符=回應字元 +底座=基本框架 +废纸篓=垃圾桶 +开发环境=設計環境 +异常>不規則 +异常终止=異常終結 +异步=非同步 +式样=樣式 +引导=啟動 +引用=參照 +弹出=即現 +归档文件>檔案 +当前=目前 +彩色>色彩 +循环>迴圈 +微分=差動 +快捷图形=圖形加速 +快捷键=捷徑鍵 +忽略=舍棄 +性能=效能 +总线=匯流排 +恢复=回復 +意大利=義大利 +或非=非或 +或非门=非或閘 +扇区=磁區 +手册集=手冊叢書 +手册页=線上援助頁 +打印=列印 +打印机=印表機 +打开=開啟 +扩展=延伸 +扩展名=副檔名 +抢先=先佔 +报文>訊息 +报警=警示 +抽样=取樣 +抽象窗口工具箱=虛擬視窗工具組 +拖动=拖曳 +括号=括弧 +拼写=拼字 +拼接=銜接 +指针>指標 +挑选=挑揀 +捕获=擷取 +换名=改名 +换码=逸出 +换码符>逸出字元 +接口>介面 +控制台>主控台 +推动器>磁碟機 +推荐=建議 +掩码=遮罩 +描述>說明 +提取>擷取 +提条件>先決條件 +提示>輔助說明 +提醒器=通告程式 +插值=內插 +撤消=還原 +操作>作業 +操作数=運算元 +操作符>運算子 +支持=支援 +收听=偵聽 +放入=擺入 +散列=雜湊 +数据=資料 +数据报=資料封包 +数模=數位/類比 +数组=陣列 +文件=檔案 +文件句柄=檔案標示元 +文件名=檔名 +文件头=檔頭 +文件尾>檔案結尾 +文本=文字檔 +文本编辑器=文字編輯程式 +文档>文件 +断电=電源切斷 +断言>假設 +斯洛伐克=斯洛法克 +无噪声>靜音 +无盘=無磁碟 +日历>行事曆 +日志>日誌 +日程=約會 +日视图=日查看 +日边界=日期界限 +时延=延時 +易失性=揮發性 +星号=星狀圖形 +映射=對映 +显示=察看 +晕影=光暈 +晶体管=電晶體 +智能卡=智慧卡 +智能卡片>智慧卡 +智能终端=智慧型終端機 +更改=變更 +替代=交替 +替换=替代 +最后清除=最終清除 +最终用户=一般使用者 +月视图=月查看 +有限并行性=有限同作 +服务器=伺服器 +末端=尾端 +本地=區域 +本地化=本土化 +本机接口=原生介面 +本机方法=原生方法 +权限=許可權 +条目>項目 +构造函数=建構元 +枚举=列舉 +查准率=精度率 +查找>尋找 +查看=檢視 +查色表=色彩查詢表 +柱面=磁柱 +标号>標籤 +标志=旗標 +标志位>旗標 +标记>記號 +标识=識別 +标识符>旗標 +标量=純量 +栈>堆疊 +样例=範例 +核心反射>核心映像 +根访问=根存取 +格式化磁盘>製作磁碟格式 +桌上环境>桌上管理系統環境 +桌面=桌上管理系統 +桌面环境=桌上管理系統環境 +检修>修復 +检测=偵測 +检验器=檢查程式 +概览=概觀 +概述=簡介 +模块=模組 +模式=型態 +模式识别=圖形辨識 +模数转换器=類比/數位轉換器 +模板=樣板 +正文>手稿 +死锁=死結 +死锁条件=死結狀況 +毁坏=損毀 +比特>位元 +比较=比對 +汇入方法>輸入法 +汇总行=摘要行 +汇编程序=組譯器 +汇编语言=組合語言 +波特率=鮑率 +注册>註冊 +注释>註釋 +注销=登出 +活动=現行 +流水线=管線 +浮点部件=浮點單元 +消息=訊息 +源代码=來源碼 +源文件=來源檔 +溢出=外溢 +滑块=調整器 +滚动>捲動 +滚动条>捲動軸 +滚动框>捲動方塊 +满屏=全螢幕 +演示程序=示範程式 +激光=雷射 +激活>啟動 +灰度=灰階 +灰度等级>灰階 +灰度级>灰階 +灵活性=彈性 +父节点=母項 +版本标记=版本戳記 +版权声明=版權宣告 +物理位元=實體位元 +物理地址=實體位址 +物理柱面=實際磁柱 +物理滚动>實體捲動 +物理线路=實體線路 +物理终端=實體終端 +特性>特徴 +环绕=自動換行 +环路检测>迴圈檢測 +生产商>製造商 +生成器=建構程式 +用户支持=客戶支援 +界面=介面 +登录=登入 +登记>註冊 +监视器=監控器 +盒式=卡匣 +盘托>托盤 +目录文件=目錄檔 +目标程序=目的程式 +目标语言=目的語言 +目次>目錄 +相关文件=相依檔案 +相关类型=相依類型 +瞬态=暫態 +短整数=短式 +硅=矽 +硬件=硬體 +硬盘=硬碟 +磁盘=磁碟 +磁盘托=磁碟盒 +磁芯映像>核心影像 +程序=程式 +程序包>套裝軟體 +程序员=程式設計師 +空字符=空字元 +空操作=無作業 +空文档=空白文件 +空格=空白字元 +空闲>閒置 +窗口=視窗 +窗口脚注>視窗註腳 +站点>網站 +端口=通訊埠 +端接器=終止器 +笔记本=筆記型電腦 +笛卡尔=卡氏 +符号=象徵式 +等宽字型=單距字型 +算法语言=演算語言 +算符=算子 +管理器=管理者 +管道=導管 +箭头=箭號 +类型=類別 +类路径=類別路徑 +粘贴=黏貼 +系列=家族 +系统调用=系統呼叫 +素数=質數 +级转储=階傾印 +纵向=垂直 +纹理=材質 +线程=執行緒 +组件=套件 +终端=終端機 +绑定>連結 +结构=架構 +结构注释>結構註解 +综合业务数字网络=整體服務數位網路 +缓冲>緩衝 +缓存>緩衝區 +编程=程式設計 +编辑器=編輯程式 +缩进=內縮 +缺省=預設 +缺省值>預設值 +网关=閘道 +网桥=橋接器 +网络=網路 +网络互联>網際網路 +置标=標示 +美国国家标准学会=美國國家標準局 +群集=叢集 +联机=線上 +联机文档>線上文件 +联系>聯繫 +脉冲>脈衝 +脚本=程式檔 +脱机=離線 +自动应答=自動回應 +自动清屏=螢幕自動轉空白 +自变量>自變數 +自定=自訂 +自定义>自訂 +自由表=自由清單 +自述文件=讀我檔案 +致命错误>嚴重錯誤 +舍入>捨入 +芯片=晶片 +花括号=大括弧 +英寸>英吋 +范围>範圍 +获取=抓取 +菜单=功能表 +菜单组=功能表群組 +虚存=虛擬記憶體 +行业>工業 +行回绕>換行 +补码=補數 +表达式=表示式 +装入=載入 +覆盖=覆寫 +规范=規格 +视图>檢視 +视频=視訊 +解释=解譯 +解释器=解譯程式 +触发器=正反器 +计算器=計算機 +计算机=電腦 +认证>認證 +许可方=授權者 +设备=裝置 +设置=設定 +访问=存取 +词汇>辭彙 +词法域=詞法範圍 +试图>嘗試 +试探性=啟發式 +语句=敘述 +语言包=語言套裝模組 +语言预处理程序=語言前處理器 +语言预处理程序宏=語言前處理巨集 +请求>要求 +读入=讀取 +调制解调器=數據機 +调度=排程 +调用=呼叫 +调色板=選盤 +调试=除錯 +调试器=除錯程式 +象素>像素 +贝赛儿曲线=貝茲曲線 +质量=品質 +赞助>贊助 +超时=逾時 +超级用户=高階使用者 +跟踪=追蹤 +路由>路線 +跳线=跳躍 +跳过>略過 +转储=傾印 +转发=轉寄 +转接器=變性接頭 +转移>移轉 +转至=前往 +轮廓=外框 +软件=軟體 +软件包=套裝軟體 +软盘=軟碟 +软驱=軟碟機 +轻量=輕型 +输入=匯入 +输出=匯出 +边框=邊線方塊 +边界=邊線 +过载=超載 +运算符=運算子 +运行>執行 +返回=傳回 +进制=進位 +进程>程式 +远程=遠端 +连接=連線 +退出>結束 +适配卡>配接卡 +适配器=配接卡 +选定>選取 +选择=選取 +透明=透通 +递归>遞迴 +逗号=逗點 +通信>通訊 +通电自检=開機自我測試 +通配符=萬用字元 +邮寄程序=電子信件 +采样>取樣 +里>裡 +里程碑>里程碑 +重复>重複 +重定向=重導 +鉴别>認證 +链接=鏈結 +链结>連結 +错误标记=錯誤旗號 +锚定=定控點 +锚点>控點 +键绑定>按鍵組合 +长整数=長整數 +闭路控制系统>迴圈系統 +阈值>臨界值 +队列=佇列 +写保护 =複製保護 +阶乘>階乘 +附件=附屬裝置 +随机数=亂數 +隐含=隱藏式 +集成电路=積體電路 +非局部转移=非本機跳越 +非易失性存储器=非揮發性記憶體 +非电路>非電路 +面向作业=作業導向 +面向对象=物件導向 +面向进程=程序導向 +音箱=揚聲器 +音频=聲訊 +页脚=頁腳 +页面交换=分頁交換 +页面寻址=分頁定址 +预处理=前處理 +预置>預設 +领域>網域 +题目>主題 +颜色>色彩 +额外=其餘 +颠倒>復原 +首选=偏好 +首选语言=語言偏好 +首选项=個人偏好 +驱动器>磁碟機 +验证>驗證 +高宽比=縱橫比 +高级=進階 +高速缓冲=快取 +黑体=粗體 +默认>預設 +鼠标=滑鼠 +流<串流 +串口<串行埠 +交互=互動 +位<位元 +操作环境=作業環境 +用户<使用者 +组件<元件 +配置<分配 +格式化磁盘<製作磁碟格式 +生产商<製造商 +分析<剖析 +块<區塊 +滚动<捲動 +滚动框<捲動方塊 +滚动条<捲動軸 +高亮<反白 +可执行文件<可執行檔 +假脱机<同時週邊線上作業 +首选<喜好 +循环<回圈 +环路检测<回圈檢測 +闭路控制系统<回圈系統 +回放口<回放埠 +端口<埠 +前缀<字首 +物理滚动<實體捲動 +干扰<幹擾 +串口=序列埠 +写保护<復制保護 +恢复<復原 +复合<復合 +供应商<供應商 +命令行<指令行 +获取<捕獲 +收件箱<收件匣 +完整性<整合性 +数字信号<數位信號 +文本文件<文字文件 +书签<書簽 +标记<標簽 +破坏<毀損 +注释<注釋 +谘询<洽詢 +用户机<用戶端 +转到<移至 +脚本<程序檔 +窗口<窗格 +向导<精靈 +纯文本<純文字 +标签<索引標號 +组合框<組合方塊 +结构注释<結構注解 +通过<經由 +直插式<線內 +校验和<總和檢查 +原因<肇因 +字母数字终端<英數終端 +日历<行事歷 +里程碑<裡程碑 +窗口脚注<視窗注腳 +卸装<解除安裝 +计算机<計算器 +盘托<託盤 +配置文件<設定檔 +概述文件<設置檔 +试着<試著 +输入口<輸入埠 +输出口<輸出埠 +词汇<辭匯 +通过<透過 +端口<連接埠 +双击<連雙擊 +周视图<週查看 +外围<週邊 +外设<週邊設備 +光标<游標 +递归<遞回 +快捷键<快捷鍵 +音频口<音頻埠 +音频文件<音頻檔 +模拟信号<類比信號 +驱动程序<驅動程式 +什么<甚麼 diff --git a/i18npool/source/textconversion/data/textconv_dict.map b/i18npool/source/textconversion/data/textconv_dict.map new file mode 100644 index 000000000000..afd873b6f38e --- /dev/null +++ b/i18npool/source/textconversion/data/textconv_dict.map @@ -0,0 +1,23 @@ +UDK_3_0_0 { +global: + GetVersionInfo; + getHangul2HanjaData; + getHangul2HanjaIndex; + getHangul2HanjaIndexCount; + getHanja2HangulIndex; + getHanja2HangulData; + getSTC_CharIndex_S2T; + getSTC_CharData_S2T; + getSTC_CharIndex_S2V; + getSTC_CharData_S2V; + getSTC_CharIndex_T2S; + getSTC_CharData_T2S; + getSTC_WordData; + getSTC_WordEntry_S2T; + getSTC_WordIndex_S2T; + getSTC_WordEntry_T2S; + getSTC_WordIndex_T2S; + +local: + *; +}; diff --git a/i18npool/source/textconversion/genconv_dict.cxx b/i18npool/source/textconversion/genconv_dict.cxx new file mode 100644 index 000000000000..50c9fcffbe32 --- /dev/null +++ b/i18npool/source/textconversion/genconv_dict.cxx @@ -0,0 +1,485 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_i18npool.hxx" + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <sal/main.h> +#include <sal/types.h> +#include <rtl/strbuf.hxx> +#include <rtl/ustring.hxx> + +#include <vector> + +using namespace ::rtl; + +void make_hhc_char(FILE *sfp, FILE *cfp); +void make_stc_char(FILE *sfp, FILE *cfp); +void make_stc_word(FILE *sfp, FILE *cfp); + +/* Main Procedure */ + +SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv) +{ + FILE *sfp, *cfp; + + if (argc < 4) exit(-1); + + + sfp = fopen(argv[2], "rb"); // open the source file for read; + if (sfp == NULL) + { + printf("Open the dictionary source file failed."); + return -1; + } + + // create the C source file to write + cfp = fopen(argv[3], "wb"); + if (cfp == NULL) { + fclose(sfp); + printf("Can't create the C source file."); + return -1; + } + + fprintf(cfp, "/*\n"); + fprintf(cfp, " * Copyright(c) 1999 - 2000, Sun Microsystems, Inc.\n"); + fprintf(cfp, " * All Rights Reserved.\n"); + fprintf(cfp, " */\n\n"); + fprintf(cfp, "/* !!!The file is generated automatically. DONOT edit the file manually!!! */\n\n"); + fprintf(cfp, "#include <sal/types.h>\n"); + fprintf(cfp, "#include <textconversion.hxx>\n"); + fprintf(cfp, "\nextern \"C\" {\n"); + + if (strcmp(argv[1], "hhc_char") == 0) + make_hhc_char(sfp, cfp); + else if (strcmp(argv[1], "stc_char") == 0) + make_stc_char(sfp, cfp); + else if (strcmp(argv[1], "stc_word") == 0) + make_stc_word(sfp, cfp); + + fprintf (cfp, "}\n"); + + fclose(sfp); + fclose(cfp); + + return 0; +} // end of main + +// Hangul/Hanja character conversion +void make_hhc_char(FILE *sfp, FILE *cfp) +{ + sal_Int32 count, address, i, j, k; + sal_Unicode Hanja2HangulData[0x10000]; + for (i = 0; i < 0x10000; i++) { + Hanja2HangulData[i] = 0; + } + sal_uInt16 Hangul2HanjaData[10000][3]; + + // generate main dict. data array + fprintf(cfp, "\nstatic const sal_Unicode Hangul2HanjaData[] = {"); + + sal_Char Cstr[1024]; + count = 0; + address = 0; + while (fgets(Cstr, 1024, sfp)) { + // input file is in UTF-8 encoding (Hangul:Hanja) + // don't convert last new line character to Ostr. + OUString Ostr((const sal_Char *)Cstr, strlen(Cstr) - 1, RTL_TEXTENCODING_UTF8); + const sal_Unicode *Ustr = Ostr.getStr(); + sal_Int32 len = Ostr.getLength(); + + Hangul2HanjaData[count][0] = Ustr[0]; + Hangul2HanjaData[count][1] = sal::static_int_cast<sal_uInt16>( address ); + Hangul2HanjaData[count][2] = sal::static_int_cast<sal_uInt16>( len - 2 ); + count++; + + for (i = 2; i < len; i++) { + Hanja2HangulData[Ustr[i]] = Ustr[0]; + if (address++ % 16 == 0) + fprintf(cfp, "\n\t"); + fprintf(cfp, "0x%04x, ", Ustr[i]); + } + } + fprintf(cfp, "\n};\n"); + + fprintf(cfp, "\nstatic const com::sun::star::i18n::Hangul_Index Hangul2HanjaIndex[] = {\n"); + for (i = 0; i < count; i++) + fprintf(cfp, "\t{ 0x%04x, 0x%04x, 0x%02x },\n", + Hangul2HanjaData[i][0], + Hangul2HanjaData[i][1], + Hangul2HanjaData[i][2]); + fprintf(cfp, "};\n"); + + fprintf(cfp, "\nstatic const sal_uInt16 Hanja2HangulIndex[] = {"); + + address=0; + for (i = 0; i < 0x10; i++) { + fprintf(cfp, "\n\t"); + for (j = 0; j < 0x10; j++) { + for (k = 0; k < 0x100; k++) { + if (Hanja2HangulData[((i*0x10)+j)*0x100+k] != 0) + break; + } + fprintf( + cfp, "0x%04lx, ", + sal::static_int_cast< unsigned long >( + k < 0x100 ? (address++)*0x100 : 0xFFFF)); + } + } + fprintf(cfp, "\n};\n"); + + fprintf(cfp, "\nstatic const sal_Unicode Hanja2HangulData[] = {"); + + for (i = 0; i < 0x100; i++) { + for (j = 0; j < 0x100; j++) { + if (Hanja2HangulData[i*0x100+j] != 0) + break; + } + if (j < 0x100) { + for (j = 0; j < 0x10; j++) { + fprintf(cfp, "\n\t"); + for (k = 0; k < 0x10; k++) { + sal_Unicode c = Hanja2HangulData[((i*0x10+j)*0x10)+k]; + fprintf(cfp, "0x%04x, ", c ? c : 0xFFFF); + } + } + } + } + fprintf(cfp, "\n};\n"); + + // create function to return arrays + fprintf (cfp, "\tconst sal_Unicode* getHangul2HanjaData() { return Hangul2HanjaData; }\n"); + fprintf (cfp, "\tconst com::sun::star::i18n::Hangul_Index* getHangul2HanjaIndex() { return Hangul2HanjaIndex; }\n"); + fprintf (cfp, "\tsal_Int16 getHangul2HanjaIndexCount() { return sizeof(Hangul2HanjaIndex) / sizeof(com::sun::star::i18n::Hangul_Index); }\n"); + fprintf (cfp, "\tconst sal_uInt16* getHanja2HangulIndex() { return Hanja2HangulIndex; }\n"); + fprintf (cfp, "\tconst sal_Unicode* getHanja2HangulData() { return Hanja2HangulData; }\n"); +} + +// Simplified/Traditional Chinese character conversion +void make_stc_char(FILE *sfp, FILE *cfp) +{ + sal_Int32 address, i, j, k; + sal_Unicode SChinese2TChineseData[0x10000]; + sal_Unicode SChinese2VChineseData[0x10000]; + sal_Unicode TChinese2SChineseData[0x10000]; + for (i = 0; i < 0x10000; i++) { + SChinese2TChineseData[i] = 0; + SChinese2VChineseData[i] = 0; + TChinese2SChineseData[i] = 0; + } + + sal_Char Cstr[1024]; + while (fgets(Cstr, 1024, sfp)) { + // input file is in UTF-8 encoding (SChinese:TChinese) + // don't convert last new line character to Ostr. + OUString Ostr((const sal_Char *)Cstr, strlen(Cstr) - 1, RTL_TEXTENCODING_UTF8); + const sal_Unicode *Ustr = Ostr.getStr(); + sal_Int32 len = Ostr.getLength(); + if (Ustr[1] == sal_Unicode('v')) + SChinese2VChineseData[Ustr[0]] = Ustr[2]; + else { + SChinese2TChineseData[Ustr[0]] = Ustr[2]; + if (SChinese2VChineseData[Ustr[0]] == 0) + SChinese2VChineseData[Ustr[0]] = Ustr[2]; + } + for (i = 2; i < len; i++) + TChinese2SChineseData[Ustr[i]] = Ustr[0]; + } + + fprintf(cfp, "\nstatic const sal_uInt16 STC_CharIndex_S2T[] = {"); + + address=0; + for (i = 0; i < 0x10; i++) { + fprintf(cfp, "\n\t"); + for (j = 0; j < 0x10; j++) { + for (k = 0; k < 0x100; k++) { + if (SChinese2TChineseData[((i*0x10)+j)*0x100+k] != 0) + break; + } + fprintf( + cfp, "0x%04lx, ", + sal::static_int_cast< unsigned long >( + k < 0x100 ? (address++)*0x100 : 0xFFFF)); + } + } + fprintf(cfp, "\n};\n"); + + fprintf(cfp, "\nstatic const sal_Unicode STC_CharData_S2T[] = {"); + + for (i = 0; i < 0x100; i++) { + for (j = 0; j < 0x100; j++) { + if (SChinese2TChineseData[i*0x100+j] != 0) + break; + } + if (j < 0x100) { + for (j = 0; j < 0x10; j++) { + fprintf(cfp, "\n\t"); + for (k = 0; k < 0x10; k++) { + sal_Unicode c = SChinese2TChineseData[((i*0x10+j)*0x10)+k]; + fprintf(cfp, "0x%04x, ", c ? c : 0xFFFF); + } + } + } + } + fprintf(cfp, "\n};\n"); + + fprintf(cfp, "\nstatic const sal_uInt16 STC_CharIndex_S2V[] = {"); + + address=0; + for (i = 0; i < 0x10; i++) { + fprintf(cfp, "\n\t"); + for (j = 0; j < 0x10; j++) { + for (k = 0; k < 0x100; k++) { + if (SChinese2VChineseData[((i*0x10)+j)*0x100+k] != 0) + break; + } + fprintf( + cfp, "0x%04lx, ", + sal::static_int_cast< unsigned long >( + k < 0x100 ? (address++)*0x100 : 0xFFFF)); + } + } + fprintf(cfp, "\n};\n"); + + fprintf(cfp, "\nstatic const sal_Unicode STC_CharData_S2V[] = {"); + + for (i = 0; i < 0x100; i++) { + for (j = 0; j < 0x100; j++) { + if (SChinese2VChineseData[i*0x100+j] != 0) + break; + } + if (j < 0x100) { + for (j = 0; j < 0x10; j++) { + fprintf(cfp, "\n\t"); + for (k = 0; k < 0x10; k++) { + sal_Unicode c = SChinese2VChineseData[((i*0x10+j)*0x10)+k]; + fprintf(cfp, "0x%04x, ", c ? c : 0xFFFF); + } + } + } + } + fprintf(cfp, "\n};\n"); + + fprintf(cfp, "\nstatic const sal_uInt16 STC_CharIndex_T2S[] = {"); + + address=0; + for (i = 0; i < 0x10; i++) { + fprintf(cfp, "\n\t"); + for (j = 0; j < 0x10; j++) { + for (k = 0; k < 0x100; k++) { + if (TChinese2SChineseData[((i*0x10)+j)*0x100+k] != 0) + break; + } + fprintf( + cfp, "0x%04lx, ", + sal::static_int_cast< unsigned long >( + k < 0x100 ? (address++)*0x100 : 0xFFFF)); + } + } + fprintf(cfp, "\n};\n"); + + fprintf(cfp, "\nstatic const sal_Unicode STC_CharData_T2S[] = {"); + + for (i = 0; i < 0x100; i++) { + for (j = 0; j < 0x100; j++) { + if (TChinese2SChineseData[i*0x100+j] != 0) + break; + } + if (j < 0x100) { + for (j = 0; j < 0x10; j++) { + fprintf(cfp, "\n\t"); + for (k = 0; k < 0x10; k++) { + sal_Unicode c = TChinese2SChineseData[((i*0x10+j)*0x10)+k]; + fprintf(cfp, "0x%04x, ", c ? c : 0xFFFF); + } + } + } + } + fprintf(cfp, "\n};\n"); + + // create function to return arrays + fprintf (cfp, "\tconst sal_uInt16* getSTC_CharIndex_S2T() { return STC_CharIndex_S2T; }\n"); + fprintf (cfp, "\tconst sal_Unicode* getSTC_CharData_S2T() { return STC_CharData_S2T; }\n"); + fprintf (cfp, "\tconst sal_uInt16* getSTC_CharIndex_S2V() { return STC_CharIndex_S2V; }\n"); + fprintf (cfp, "\tconst sal_Unicode* getSTC_CharData_S2V() { return STC_CharData_S2V; }\n"); + fprintf (cfp, "\tconst sal_uInt16* getSTC_CharIndex_T2S() { return STC_CharIndex_T2S; }\n"); + fprintf (cfp, "\tconst sal_Unicode* getSTC_CharData_T2S() { return STC_CharData_T2S; }\n"); +} + + +typedef struct { + sal_uInt16 address; + sal_Int32 len; + sal_Unicode *data; +} Index; + +extern "C" { +int Index_comp(const void* s1, const void* s2) +{ + Index *p1 = (Index*)s1, *p2 = (Index*)s2; + int result = p1->len - p2->len; + for (int i = 0; result == 0 && i < p1->len; i++) + result = *(p1->data+i) - *(p2->data+i); + return result; +} +} + +// Simplified/Traditional Chinese word conversion +void make_stc_word(FILE *sfp, FILE *cfp) +{ + sal_Int32 count, i, length; + sal_Unicode STC_WordData[0x10000]; + std::vector<Index> STC_WordEntry_S2T(0x10000); + std::vector<Index> STC_WordEntry_T2S(0x10000); + sal_Int32 count_S2T = 0, count_T2S = 0; + sal_Int32 line = 0, char_total = 0; + sal_Char Cstr[1024]; + + while (fgets(Cstr, 1024, sfp)) { + // input file is in UTF-8 encoding (SChinese:TChinese) + // don't convert last new line character to Ostr. + OUString Ostr((const sal_Char *)Cstr, strlen(Cstr) - 1, RTL_TEXTENCODING_UTF8); + sal_Int32 len = Ostr.getLength(); + if (char_total + len + 1 > 0xFFFF) { + fprintf(stderr, "Word Dictionary stc_word.dic is too big (line %ld)", sal::static_int_cast< long >(line)); + return; + } + sal_Int32 sep=-1, eq=-1, gt=-1, lt=-1; + if (((sep = eq = Ostr.indexOf(sal_Unicode('='))) > 0) || + ((sep = gt = Ostr.indexOf(sal_Unicode('>'))) > 0) || + ((sep = lt = Ostr.indexOf(sal_Unicode('<'))) > 0)) { + + if (eq > 0 || gt > 0) { + STC_WordEntry_S2T[count_S2T].address = sal::static_int_cast<sal_uInt16>( char_total ); + STC_WordEntry_S2T[count_S2T].len = sep; + STC_WordEntry_S2T[count_S2T++].data = &STC_WordData[char_total]; + } + if (eq > 0 || lt > 0) { + STC_WordEntry_T2S[count_T2S].address = sal::static_int_cast<sal_uInt16>( char_total + sep + 1 ); + STC_WordEntry_T2S[count_T2S].len = len - sep - 1; + STC_WordEntry_T2S[count_T2S++].data = &STC_WordData[char_total + sep + 1]; + } + for (i = 0; i < len; i++) + STC_WordData[char_total++] = (i == sep) ? 0 : Ostr[i]; + STC_WordData[char_total++] = 0; + } else { + fprintf(stderr, "Invalid entry in stc_word.dic (line %ld)", sal::static_int_cast< long >(line)); + return; + } + line++; + } + + if (char_total > 0) { + fprintf(cfp, "\nstatic const sal_Unicode STC_WordData[] = {"); + for (i = 0; i < char_total; i++) { + if (i % 32 == 0) fprintf(cfp, "\n\t"); + fprintf(cfp, "0x%04x, ", STC_WordData[i]); + } + fprintf(cfp, "\n};\n"); + + fprintf(cfp, "\nstatic sal_Int32 STC_WordData_Count = %ld;\n", sal::static_int_cast< long >(char_total)); + + // create function to return arrays + fprintf (cfp, "\tconst sal_Unicode* getSTC_WordData(sal_Int32& count) { count = STC_WordData_Count; return STC_WordData; }\n"); + } else { + fprintf (cfp, "\tconst sal_Unicode* getSTC_WordData(sal_Int32& count) { count = 0; return NULL; }\n"); + } + + sal_uInt16 STC_WordIndex[0x100]; + + if (count_S2T > 0) { + qsort(&STC_WordEntry_S2T[0], count_S2T, sizeof(Index), Index_comp); + + fprintf(cfp, "\nstatic const sal_uInt16 STC_WordEntry_S2T[] = {"); + count = 0; + length = 0; + for (i = 0; i < count_S2T; i++) { + if (i % 32 == 0) fprintf(cfp, "\n\t"); + fprintf(cfp, "0x%04x, ", STC_WordEntry_S2T[i].address); + if (STC_WordEntry_S2T[i].len != length) { + length = STC_WordEntry_S2T[i].len; + while (count <= length) + STC_WordIndex[count++] = sal::static_int_cast<sal_uInt16>(i); + } + } + fprintf(cfp, "\n};\n"); + STC_WordIndex[count++] = sal::static_int_cast<sal_uInt16>(i); + + fprintf(cfp, "\nstatic const sal_uInt16 STC_WordIndex_S2T[] = {"); + for (i = 0; i < count; i++) { + if (i % 16 == 0) fprintf(cfp, "\n\t"); + fprintf(cfp, "0x%04x, ", STC_WordIndex[i]); + } + fprintf(cfp, "\n};\n"); + + fprintf(cfp, "\nstatic sal_Int32 STC_WordIndex_S2T_Count = %ld;\n", sal::static_int_cast< long >(length)); + fprintf (cfp, "\tconst sal_uInt16* getSTC_WordEntry_S2T() { return STC_WordEntry_S2T; }\n"); + fprintf (cfp, "\tconst sal_uInt16* getSTC_WordIndex_S2T(sal_Int32& count) { count = STC_WordIndex_S2T_Count; return STC_WordIndex_S2T; }\n"); + } else { + fprintf (cfp, "\tconst sal_uInt16* getSTC_WordEntry_S2T() { return NULL; }\n"); + fprintf (cfp, "\tconst sal_uInt16* getSTC_WordIndex_S2T(sal_Int32& count) { count = 0; return NULL; }\n"); + } + + if (count_T2S > 0) { + qsort(&STC_WordEntry_T2S[0], count_T2S, sizeof(Index), Index_comp); + + fprintf(cfp, "\nstatic const sal_uInt16 STC_WordEntry_T2S[] = {"); + count = 0; + length = 0; + for (i = 0; i < count_T2S; i++) { + if (i % 32 == 0) fprintf(cfp, "\n\t"); + fprintf(cfp, "0x%04x, ", STC_WordEntry_T2S[i].address); + if (STC_WordEntry_T2S[i].len != length) { + length = STC_WordEntry_T2S[i].len; + while (count <= length) + STC_WordIndex[count++] = sal::static_int_cast<sal_uInt16>(i); + } + } + STC_WordIndex[count++] = sal::static_int_cast<sal_uInt16>(i); + fprintf(cfp, "\n};\n"); + + fprintf(cfp, "\nstatic const sal_uInt16 STC_WordIndex_T2S[] = {"); + for (i = 0; i < count; i++) { + if (i % 16 == 0) fprintf(cfp, "\n\t"); + fprintf(cfp, "0x%04x, ", STC_WordIndex[i]); + } + fprintf(cfp, "\n};\n"); + + fprintf(cfp, "\nstatic sal_Int32 STC_WordIndex_T2S_Count = %ld;\n\n", sal::static_int_cast< long >(length)); + fprintf (cfp, "\tconst sal_uInt16* getSTC_WordEntry_T2S() { return STC_WordEntry_T2S; }\n"); + fprintf (cfp, "\tconst sal_uInt16* getSTC_WordIndex_T2S(sal_Int32& count) { count = STC_WordIndex_T2S_Count; return STC_WordIndex_T2S; }\n"); + } else { + fprintf (cfp, "\tconst sal_uInt16* getSTC_WordEntry_T2S() { return NULL; }\n"); + fprintf (cfp, "\tconst sal_uInt16* getSTC_WordIndex_T2S(sal_Int32& count) { count = 0; return NULL; }\n"); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/i18npool/source/textconversion/makefile.mk b/i18npool/source/textconversion/makefile.mk new file mode 100644 index 000000000000..2b91d964b2ad --- /dev/null +++ b/i18npool/source/textconversion/makefile.mk @@ -0,0 +1,59 @@ +#************************************************************************* +#* +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2000, 2010 Oracle and/or its affiliates. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org 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 Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************/ + +PRJ=..$/.. + +PRJNAME=i18npool +TARGET=textconversion + +ENABLE_EXCEPTIONS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +# --- Files -------------------------------------------------------- + +SLOFILES= \ + $(SLO)$/textconversionImpl.obj \ + $(SLO)$/textconversion.obj \ + $(SLO)$/textconversion_ko.obj \ + $(SLO)$/textconversion_zh.obj + +OBJFILES = $(OBJ)$/genconv_dict.obj + +APP1TARGET = genconv_dict +APP1RPATH = NONE + +APP1OBJS = $(OBJ)$/genconv_dict.obj + +APP1STDLIBS = $(SALLIB) + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + diff --git a/i18npool/source/textconversion/textconversion.cxx b/i18npool/source/textconversion/textconversion.cxx new file mode 100644 index 000000000000..291b8df2f055 --- /dev/null +++ b/i18npool/source/textconversion/textconversion.cxx @@ -0,0 +1,95 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_i18npool.hxx" + +#include <assert.h> +#include <textconversion.hxx> + +using namespace com::sun::star::uno; + +using ::rtl::OUString; + +namespace com { namespace sun { namespace star { namespace i18n { + +extern "C" { static void SAL_CALL thisModule() {} } + +TextConversion::TextConversion() +{ +#ifdef SAL_DLLPREFIX + OUString lib(RTL_CONSTASCII_USTRINGPARAM(SAL_DLLPREFIX"textconv_dict"SAL_DLLEXTENSION)); +#else + OUString lib(RTL_CONSTASCII_USTRINGPARAM("textconv_dict"SAL_DLLEXTENSION)); +#endif + hModule = osl_loadModuleRelative( + &thisModule, lib.pData, SAL_LOADMODULE_DEFAULT ); +} + +TextConversion::~TextConversion() +{ + if (hModule) osl_unloadModule(hModule); +} + +static void* nullFunc() +{ + return NULL; +} + +oslGenericFunction SAL_CALL +TextConversion::getFunctionBySymbol(const sal_Char* func) +{ + if (hModule) + return osl_getFunctionSymbol(hModule, OUString::createFromAscii(func).pData); + else + return reinterpret_cast< oslGenericFunction >(nullFunc); +} + +OUString SAL_CALL +TextConversion::getImplementationName() throw( RuntimeException ) +{ + return OUString::createFromAscii(implementationName); +} + +sal_Bool SAL_CALL +TextConversion::supportsService(const OUString& rServiceName) throw( RuntimeException ) +{ + return rServiceName.equalsAscii(implementationName); +} + +Sequence< OUString > SAL_CALL +TextConversion::getSupportedServiceNames() throw( RuntimeException ) +{ + Sequence< OUString > aRet(1); + aRet[0] = OUString::createFromAscii(implementationName); + return aRet; +} + +} } } } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/i18npool/source/textconversion/textconversionImpl.cxx b/i18npool/source/textconversion/textconversionImpl.cxx new file mode 100644 index 000000000000..61eabe4199c3 --- /dev/null +++ b/i18npool/source/textconversion/textconversionImpl.cxx @@ -0,0 +1,149 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_i18npool.hxx" + +#include <assert.h> +#include <textconversionImpl.hxx> + +using namespace com::sun::star::lang; +using namespace com::sun::star::uno; + +using ::rtl::OUString; + +namespace com { namespace sun { namespace star { namespace i18n { + +TextConversionResult SAL_CALL +TextConversionImpl::getConversions( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, + const Locale& rLocale, sal_Int16 nConversionType, sal_Int32 nConversionOptions) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + getLocaleSpecificTextConversion(rLocale); + + sal_Int32 len = aText.getLength() - nStartPos; + if (nLength > len) + nLength = len > 0 ? len : 0; + return xTC->getConversions(aText, nStartPos, nLength, rLocale, nConversionType, nConversionOptions); +} + +OUString SAL_CALL +TextConversionImpl::getConversion( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, + const Locale& rLocale, sal_Int16 nConversionType, sal_Int32 nConversionOptions) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + getLocaleSpecificTextConversion(rLocale); + + sal_Int32 len = aText.getLength() - nStartPos; + if (nLength > len) + nLength = len > 0 ? len : 0; + return xTC->getConversion(aText, nStartPos, nLength, rLocale, nConversionType, nConversionOptions); +} + +OUString SAL_CALL +TextConversionImpl::getConversionWithOffset( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, + const Locale& rLocale, sal_Int16 nConversionType, sal_Int32 nConversionOptions, Sequence< sal_Int32>& offset) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + getLocaleSpecificTextConversion(rLocale); + + sal_Int32 len = aText.getLength() - nStartPos; + if (nLength > len) + nLength = len > 0 ? len : 0; + return xTC->getConversionWithOffset(aText, nStartPos, nLength, rLocale, nConversionType, nConversionOptions, offset); +} + +sal_Bool SAL_CALL +TextConversionImpl::interactiveConversion( const Locale& rLocale, sal_Int16 nTextConversionType, sal_Int32 nTextConversionOptions ) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + getLocaleSpecificTextConversion(rLocale); + + return xTC->interactiveConversion(rLocale, nTextConversionType, nTextConversionOptions); +} + +static inline sal_Bool operator != (const Locale& l1, const Locale& l2) { + return l1.Language != l2.Language || l1.Country != l2.Country || l1.Variant != l2.Variant; +} + +void SAL_CALL +TextConversionImpl::getLocaleSpecificTextConversion(const Locale& rLocale) throw( NoSupportException ) +{ + if (xMSF.is() && rLocale != aLocale) { + aLocale = rLocale; + + Reference < XInterface > xI; + + xI = xMSF->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.i18n.TextConversion_")) + aLocale.Language); + + if ( ! xI.is() ) + xI = xMSF->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.i18n.TextConversion_")) + aLocale.Language + + OUString(RTL_CONSTASCII_USTRINGPARAM("_")) + aLocale.Country); + if ( ! xI.is() ) + xI = xMSF->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.i18n.TextConversion_")) + aLocale.Language + + OUString(RTL_CONSTASCII_USTRINGPARAM("_")) + aLocale.Country + + OUString(RTL_CONSTASCII_USTRINGPARAM("_")) + aLocale.Variant); + + if (xI.is()) + xI->queryInterface( getCppuType((const Reference< XTextConversion>*)0) ) >>= xTC; + else if (xTC.is()) + xTC.clear(); + } + if (! xTC.is()) + throw NoSupportException(); // aLocale is not supported +} + +const sal_Char cTextConversion[] = "com.sun.star.i18n.TextConversion"; + +OUString SAL_CALL +TextConversionImpl::getImplementationName() throw( RuntimeException ) +{ + return OUString::createFromAscii(cTextConversion); +} + +sal_Bool SAL_CALL +TextConversionImpl::supportsService(const OUString& rServiceName) + throw( RuntimeException ) +{ + return rServiceName.equalsAscii(cTextConversion); +} + +Sequence< OUString > SAL_CALL +TextConversionImpl::getSupportedServiceNames() throw( RuntimeException ) +{ + Sequence< OUString > aRet(1); + aRet[0] = OUString::createFromAscii(cTextConversion); + return aRet; +} + +} } } } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/i18npool/source/textconversion/textconversion_ko.cxx b/i18npool/source/textconversion/textconversion_ko.cxx new file mode 100644 index 000000000000..8ebda8005220 --- /dev/null +++ b/i18npool/source/textconversion/textconversion_ko.cxx @@ -0,0 +1,348 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_i18npool.hxx" +#include <assert.h> +#include <textconversion.hxx> +#include <com/sun/star/i18n/TextConversionType.hpp> +#include <com/sun/star/i18n/TextConversionOption.hpp> +#include <com/sun/star/linguistic2/ConversionDirection.hpp> +#include <com/sun/star/linguistic2/ConversionDictionaryType.hpp> +#include <rtl/ustrbuf.hxx> +#include <i18nutil/x_rtl_ustring.h> +#include <unicode/uchar.h> + +using namespace com::sun::star::lang; +using namespace com::sun::star::i18n; +using namespace com::sun::star::linguistic2; +using namespace com::sun::star::uno; + +using ::rtl::OUString; +using ::rtl::OUStringBuffer; + +namespace com { namespace sun { namespace star { namespace i18n { + +#define SCRIPT_OTHERS 0 +#define SCRIPT_HANJA 1 +#define SCRIPT_HANGUL 2 + +TextConversion_ko::TextConversion_ko( const Reference < XMultiServiceFactory >& xMSF ) +{ + Reference < XInterface > xI; + + xI = xMSF->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.i18n.ConversionDictionary_ko"))); + + if ( xI.is() ) + xI->queryInterface( getCppuType((const Reference< XConversionDictionary>*)0) ) >>= xCD; + + xI = xMSF->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.linguistic2.ConversionDictionaryList"))); + + if ( xI.is() ) + xI->queryInterface( getCppuType((const Reference< XConversionDictionaryList>*)0) ) >>= xCDL; + + maxLeftLength = maxRightLength = 1; + + // get maximum length of word in dictionary + if (xCDL.is()) { + Locale loc(OUString(RTL_CONSTASCII_USTRINGPARAM("ko")), + OUString(RTL_CONSTASCII_USTRINGPARAM("KR")), + OUString()); + maxLeftLength = xCDL->queryMaxCharCount(loc, + ConversionDictionaryType::HANGUL_HANJA, + ConversionDirection_FROM_LEFT); + maxRightLength = xCDL->queryMaxCharCount(loc, + ConversionDictionaryType::HANGUL_HANJA, + ConversionDirection_FROM_RIGHT); + if (xCD.is()) { + sal_Int32 tmp = xCD->getMaxCharCount(ConversionDirection_FROM_LEFT); + if (tmp > maxLeftLength) + maxLeftLength = tmp; + tmp = xCD->getMaxCharCount(ConversionDirection_FROM_RIGHT); + if (tmp > maxRightLength) + maxRightLength = tmp; + } + } else if (xCD.is()) { + maxLeftLength = xCD->getMaxCharCount(ConversionDirection_FROM_LEFT); + maxRightLength = xCD->getMaxCharCount(ConversionDirection_FROM_RIGHT); + } + + implementationName = "com.sun.star.i18n.TextConversion_ko"; +} + +sal_Int16 SAL_CALL checkScriptType(sal_Unicode c) +{ + typedef struct { + UBlockCode from; + UBlockCode to; + sal_Int16 script; + } UBlock2Script; + + static UBlock2Script scriptList[] = { + {UBLOCK_HANGUL_JAMO, UBLOCK_HANGUL_JAMO, SCRIPT_HANGUL}, + {UBLOCK_CJK_RADICALS_SUPPLEMENT, UBLOCK_BOPOMOFO, SCRIPT_HANJA}, + {UBLOCK_HANGUL_COMPATIBILITY_JAMO, UBLOCK_HANGUL_COMPATIBILITY_JAMO, SCRIPT_HANGUL}, + {UBLOCK_KANBUN, UBLOCK_YI_RADICALS, SCRIPT_HANJA}, + {UBLOCK_HANGUL_SYLLABLES, UBLOCK_HANGUL_SYLLABLES, SCRIPT_HANGUL}, + {UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS, UBLOCK_CJK_COMPATIBILITY_IDEOGRAPHS, SCRIPT_HANJA}, + {UBLOCK_COMBINING_HALF_MARKS, UBLOCK_SMALL_FORM_VARIANTS, SCRIPT_HANJA}, + {UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS, UBLOCK_HALFWIDTH_AND_FULLWIDTH_FORMS, SCRIPT_HANJA}, + }; + +#define scriptListCount sizeof (scriptList) / sizeof (UBlock2Script) + + UBlockCode block=ublock_getCode((sal_uInt32) c); + sal_uInt16 i; + for ( i = 0; i < scriptListCount; i++) { + if (block <= scriptList[i].to) break; + } + return (i < scriptListCount && block >= scriptList[i].from) ? scriptList[i].script : SCRIPT_OTHERS; +} + +Sequence< OUString > SAL_CALL +TextConversion_ko::getCharConversions(const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, sal_Bool toHanja) +{ + sal_Unicode ch; + Sequence< OUString > output; + const sal_Unicode* (*getHangul2HanjaData)() = (const sal_Unicode* (*)())getFunctionBySymbol("getHangul2HanjaData"); + const Hangul_Index* (*getHangul2HanjaIndex)() = (const Hangul_Index* (*)()) getFunctionBySymbol("getHangul2HanjaIndex"); + sal_Int16 (*getHangul2HanjaIndexCount)() = (sal_Int16 (*)()) getFunctionBySymbol("getHangul2HanjaIndexCount"); + const sal_uInt16* (*getHanja2HangulIndex)() = (const sal_uInt16* (*)()) getFunctionBySymbol("getHanja2HangulIndex"); + const sal_Unicode* (*getHanja2HangulData)() = (const sal_Unicode* (*)()) getFunctionBySymbol("getHanja2HangulData"); + if (toHanja && getHangul2HanjaIndex && getHangul2HanjaIndexCount && getHangul2HanjaData) { + ch = aText[nStartPos]; + const Hangul_Index *Hangul_ko = getHangul2HanjaIndex(); + sal_Int16 top = getHangul2HanjaIndexCount(); + --top; + sal_Int16 bottom = 0; + + while (bottom <= top) { + sal_Int16 current = (top + bottom) / 2; + sal_Unicode current_ch = Hangul_ko[current].code; + if (ch < current_ch) + top = current - 1; + else if (ch > current_ch) + bottom = current + 1; + else { + const sal_Unicode *ptr = getHangul2HanjaData() + Hangul_ko[current].address; + sal_Int16 count = Hangul_ko[current].count; + output.realloc(count); + for (sal_Int16 i = 0; i < count; i++) + output[i] = OUString(ptr + i, 1); + break; + } + } + } else if (! toHanja && getHanja2HangulIndex && getHanja2HangulData) { + rtl_uString * newStr = x_rtl_uString_new_WithLength( nLength ); // defined in x_rtl_ustring.h + sal_Int32 count = 0; + while (count < nLength) { + ch = aText[nStartPos + count]; + sal_Unicode address = getHanja2HangulIndex()[ch>>8]; + if (address != 0xFFFF) + address = getHanja2HangulData()[address + (ch & 0xFF)]; + + if (address != 0xFFFF) + newStr->buffer[count++] = address; + else + break; + } + if (count > 0) { + output.realloc(1); + output[0] = OUString( newStr->buffer, count); + } + } + return output; +} + +static Sequence< OUString >& operator += (Sequence< OUString > &rSeq1, Sequence< OUString > &rSeq2 ) +{ + if (! rSeq1.hasElements() && rSeq2.hasElements()) + rSeq1 = rSeq2; + else if (rSeq2.hasElements()) { + sal_Int32 i, j, k, l; + k = l = rSeq1.getLength(); + rSeq1.realloc(l + rSeq2.getLength()); + + for (i = 0; i < rSeq2.getLength(); i++) { + for (j = 0; j < l; j++) + if (rSeq1[j] == rSeq2[i]) + break; + if (j == l) + rSeq1[k++] = rSeq2[i]; + } + if (rSeq1.getLength() > k) + rSeq1.realloc(k); + } + return rSeq1; +} + +TextConversionResult SAL_CALL +TextConversion_ko::getConversions( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, + const Locale& aLocale, sal_Int16 nConversionType, sal_Int32 nConversionOptions) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + TextConversionResult result; + Sequence <OUString> candidates; + result.Boundary.startPos = result.Boundary.endPos = 0; + + // do conversion only when there are right conversion type and dictionary services. + if (nConversionType == TextConversionType::TO_HANGUL || + nConversionType == TextConversionType::TO_HANJA) { + sal_Int32 start, end, length = aText.getLength() - nStartPos; + + if (length < 0 || nStartPos < 0) + length = 0; + else if (length > nLength) + length = nLength; + + sal_Int16 scriptType = SCRIPT_OTHERS; + sal_Int32 len = 1; + sal_Bool toHanja = (nConversionType == TextConversionType::TO_HANJA); + // FROM_LEFT: Hangul -> Hanja + // FROM_RIGHT: Hanja -> Hangul + ConversionDirection eDirection = toHanja ? ConversionDirection_FROM_LEFT : ConversionDirection_FROM_RIGHT; + sal_Int32 maxLength = toHanja ? maxLeftLength : maxRightLength; + if (maxLength == 0) maxLength = 1; + + // search for a max length of convertible text + for (start = 0, end = 0; start < length; start++) { + if (end <= start) { + scriptType = checkScriptType(aText[nStartPos + start]); + if (nConversionType == TextConversionType::TO_HANJA) { + if (scriptType != SCRIPT_HANGUL) // skip non-Hangul characters + continue; + } else { + if (scriptType != SCRIPT_HANJA) // skip non-Hanja characters + continue; + } + end = start + 1; + } + if (nConversionOptions & TextConversionOption::CHARACTER_BY_CHARACTER) { + result.Candidates = getCharConversions(aText, nStartPos + start, len, toHanja); // char2char conversion + } else { + for (; end < length && end - start < maxLength; end++) + if (checkScriptType(aText[nStartPos + end]) != scriptType) + break; + + for (len = end - start; len > 0; len--) { + if (len > 1) { + try { + if (xCDL.is()) + result.Candidates = xCDL->queryConversions(aText, start + nStartPos, len, + aLocale, ConversionDictionaryType::HANGUL_HANJA, eDirection, nConversionOptions); // user dictionary + } + catch ( NoSupportException & ) { + // clear reference (when there is no user dictionary) in order + // to not always have to catch this exception again + // in further calls. (save time) + xCDL = 0; + } + catch (...) { + // catch all other exceptions to allow + // querying the system dictionary in the next line + } + if (xCD.is() && toHanja) { // System dictionary would not do Hanja_to_Hangul conversion. + candidates = xCD->getConversions(aText, start + nStartPos, len, eDirection, nConversionOptions); + result.Candidates += candidates; + } + } else if (! toHanja) { // do whole word character 2 character conversion for Hanja to Hangul conversion + result.Candidates = getCharConversions(aText, nStartPos + start, length - start, toHanja); + if (result.Candidates.hasElements()) + len = result.Candidates[0].getLength(); + } + if (result.Candidates.hasElements()) + break; + } + } + // found match + if (result.Candidates.hasElements()) { + result.Boundary.startPos = start + nStartPos;; + result.Boundary.endPos = start + len + nStartPos; + return result; + } + } + } else + throw NoSupportException(); // Conversion type is not supported in this service. + return result; +} + +OUString SAL_CALL +TextConversion_ko::getConversion( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, + const Locale& aLocale, sal_Int16 nConversionType, sal_Int32 nConversionOptions) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + sal_Int32 length = aText.getLength() - nStartPos; + + if (length <= 0 || nStartPos < 0) + return OUString(); + else if (length > nLength) + length = nLength; + + OUStringBuffer aBuf(length + 1); + TextConversionResult result; + const sal_Unicode *str = aText.getStr(); + + for (sal_Int32 start = nStartPos; length + nStartPos > start; start = result.Boundary.endPos) { + + result = getConversions(aText, start, length + nStartPos - start, aLocale, nConversionType, nConversionOptions); + + if (result.Boundary.endPos > 0) { + if (result.Boundary.startPos > start) + aBuf.append(str + start, result.Boundary.startPos - start); // append skip portion + aBuf.append(result.Candidates[0]); // append converted portion + } else { + if (length + nStartPos > start) + aBuf.append(str + start, length + nStartPos - start); // append last portion + break; + } + } + + return aBuf.makeStringAndClear(); +} + +OUString SAL_CALL +TextConversion_ko::getConversionWithOffset( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, + const Locale& rLocale, sal_Int16 nConversionType, sal_Int32 nConversionOptions, Sequence<sal_Int32>& offset) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + offset.realloc(0); + return getConversion(aText, nStartPos, nLength, rLocale, nConversionType, nConversionOptions); +} + +sal_Bool SAL_CALL +TextConversion_ko::interactiveConversion( const Locale& /*rLocale*/, sal_Int16 /*nTextConversionType*/, sal_Int32 /*nTextConversionOptions*/ ) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + return sal_True; +} + +} } } } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/i18npool/source/textconversion/textconversion_zh.cxx b/i18npool/source/textconversion/textconversion_zh.cxx new file mode 100644 index 000000000000..ddb8a02283fd --- /dev/null +++ b/i18npool/source/textconversion/textconversion_zh.cxx @@ -0,0 +1,300 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_i18npool.hxx" + +#include <assert.h> +#include <textconversion.hxx> +#include <com/sun/star/i18n/TextConversionType.hpp> +#include <com/sun/star/i18n/TextConversionOption.hpp> +#include <com/sun/star/linguistic2/ConversionDirection.hpp> +#include <com/sun/star/linguistic2/ConversionDictionaryType.hpp> +#include <i18nutil/x_rtl_ustring.h> + +using namespace com::sun::star::lang; +using namespace com::sun::star::i18n; +using namespace com::sun::star::linguistic2; +using namespace com::sun::star::uno; + +using ::rtl::OUString; + +namespace com { namespace sun { namespace star { namespace i18n { + +TextConversion_zh::TextConversion_zh( const Reference < XMultiServiceFactory >& xMSF ) +{ + Reference < XInterface > xI; + xI = xMSF->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.linguistic2.ConversionDictionaryList"))); + if ( xI.is() ) + xI->queryInterface( getCppuType((const Reference< XConversionDictionaryList>*)0) ) >>= xCDL; + + implementationName = "com.sun.star.i18n.TextConversion_zh"; +} + +sal_Unicode SAL_CALL getOneCharConversion(sal_Unicode ch, const sal_Unicode* Data, const sal_uInt16* Index) +{ + if (Data && Index) { + sal_Unicode address = Index[ch>>8]; + if (address != 0xFFFF) + address = Data[address + (ch & 0xFF)]; + return (address != 0xFFFF) ? address : ch; + } else { + return ch; + } +} + +OUString SAL_CALL +TextConversion_zh::getCharConversion(const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, sal_Bool toSChinese, sal_Int32 nConversionOptions) +{ + const sal_Unicode *Data; + const sal_uInt16 *Index; + + if (toSChinese) { + Data = ((const sal_Unicode* (*)())getFunctionBySymbol("getSTC_CharData_T2S"))(); + Index = ((const sal_uInt16* (*)())getFunctionBySymbol("getSTC_CharIndex_T2S"))(); + } else if (nConversionOptions & TextConversionOption::USE_CHARACTER_VARIANTS) { + Data = ((const sal_Unicode* (*)())getFunctionBySymbol("getSTC_CharData_S2V"))(); + Index = ((const sal_uInt16* (*)())getFunctionBySymbol("getSTC_CharIndex_S2V"))(); + } else { + Data = ((const sal_Unicode* (*)())getFunctionBySymbol("getSTC_CharData_S2T"))(); + Index = ((const sal_uInt16* (*)())getFunctionBySymbol("getSTC_CharIndex_S2T"))(); + } + + rtl_uString * newStr = x_rtl_uString_new_WithLength( nLength ); // defined in x_rtl_ustring.h + for (sal_Int32 i = 0; i < nLength; i++) + newStr->buffer[i] = + getOneCharConversion(aText[nStartPos+i], Data, Index); + return OUString( newStr->buffer, nLength); +} + +OUString SAL_CALL +TextConversion_zh::getWordConversion(const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, sal_Bool toSChinese, sal_Int32 nConversionOptions, Sequence<sal_Int32>& offset) +{ + sal_Int32 dictLen = 0; + sal_Int32 maxLen = 0; + const sal_uInt16 *index; + const sal_uInt16 *entry; + const sal_Unicode *charData; + const sal_uInt16 *charIndex; + sal_Bool one2one=sal_True; + + const sal_Unicode *wordData = ((const sal_Unicode* (*)(sal_Int32&)) getFunctionBySymbol("getSTC_WordData"))(dictLen); + if (toSChinese) { + index = ((const sal_uInt16* (*)(sal_Int32&)) getFunctionBySymbol("getSTC_WordIndex_T2S"))(maxLen); + entry = ((const sal_uInt16* (*)()) getFunctionBySymbol("getSTC_WordEntry_T2S"))(); + charData = ((const sal_Unicode* (*)()) getFunctionBySymbol("getSTC_CharData_T2S"))(); + charIndex = ((const sal_uInt16* (*)()) getFunctionBySymbol("getSTC_CharIndex_T2S"))(); + } else { + index = ((const sal_uInt16* (*)(sal_Int32&)) getFunctionBySymbol("getSTC_WordIndex_S2T"))(maxLen); + entry = ((const sal_uInt16* (*)()) getFunctionBySymbol("getSTC_WordEntry_S2T"))(); + if (nConversionOptions & TextConversionOption::USE_CHARACTER_VARIANTS) { + charData = ((const sal_Unicode* (*)()) getFunctionBySymbol("getSTC_CharData_S2V"))(); + charIndex = ((const sal_uInt16* (*)()) getFunctionBySymbol("getSTC_CharIndex_S2V"))(); + } else { + charData = ((const sal_Unicode* (*)()) getFunctionBySymbol("getSTC_CharData_S2T"))(); + charIndex = ((const sal_uInt16* (*)()) getFunctionBySymbol("getSTC_CharIndex_S2T"))(); + } + } + + if ((!wordData || !index || !entry) && !xCDL.is()) // no word mapping defined, do char2char conversion. + return getCharConversion(aText, nStartPos, nLength, toSChinese, nConversionOptions); + + rtl_uString * newStr = x_rtl_uString_new_WithLength( nLength * 2 ); // defined in x_rtl_ustring.h + sal_Int32 currPos = 0, count = 0; + while (currPos < nLength) { + sal_Int32 len = nLength - currPos; + sal_Bool found = sal_False; + if (len > maxLen) + len = maxLen; + for (; len > 0 && ! found; len--) { + OUString word = aText.copy(nStartPos + currPos, len); + sal_Int32 current = 0; + // user dictionary + if (xCDL.is()) { + Sequence < OUString > conversions; + try { + conversions = xCDL->queryConversions(word, 0, len, + aLocale, ConversionDictionaryType::SCHINESE_TCHINESE, + /*toSChinese ?*/ ConversionDirection_FROM_LEFT /*: ConversionDirection_FROM_RIGHT*/, + nConversionOptions); + } + catch ( NoSupportException & ) { + // clear reference (when there is no user dictionary) in order + // to not always have to catch this exception again + // in further calls. (save time) + xCDL = 0; + } + catch (...) { + // catch all other exceptions to allow + // querying the system dictionary in the next line + } + if (conversions.getLength() > 0) { + if (offset.getLength() > 0) { + if (word.getLength() != conversions[0].getLength()) + one2one=sal_False; + while (current < conversions[0].getLength()) { + offset[count] = nStartPos + currPos + (current * + word.getLength() / conversions[0].getLength()); + newStr->buffer[count++] = conversions[0][current++]; + } + // offset[count-1] = nStartPos + currPos + word.getLength() - 1; + } else { + while (current < conversions[0].getLength()) + newStr->buffer[count++] = conversions[0][current++]; + } + currPos += word.getLength(); + found = sal_True; + } + } + + if (!found && index[len+1] - index[len] > 0) { + sal_Int32 bottom = (sal_Int32) index[len]; + sal_Int32 top = (sal_Int32) index[len+1] - 1; + + while (bottom <= top && !found) { + current = (top + bottom) / 2; + const sal_Int32 result = word.compareTo(wordData + entry[current]); + if (result < 0) + top = current - 1; + else if (result > 0) + bottom = current + 1; + else { + if (toSChinese) // Traditionary/Simplified conversion, + for (current = entry[current]-1; current > 0 && wordData[current-1]; current--) ; + else // Simplified/Traditionary conversion, forwards search for next word + current = entry[current] + word.getLength() + 1; + sal_Int32 start=current; + if (offset.getLength() > 0) { + if (word.getLength() != OUString(&wordData[current]).getLength()) + one2one=sal_False; + sal_Int32 convertedLength=OUString(&wordData[current]).getLength(); + while (wordData[current]) { + offset[count]=nStartPos + currPos + ((current-start) * + word.getLength() / convertedLength); + newStr->buffer[count++] = wordData[current++]; + } + // offset[count-1]=nStartPos + currPos + word.getLength() - 1; + } else { + while (wordData[current]) + newStr->buffer[count++] = wordData[current++]; + } + currPos += word.getLength(); + found = sal_True; + } + } + } + } + if (!found) { + if (offset.getLength() > 0) + offset[count]=nStartPos+currPos; + newStr->buffer[count++] = + getOneCharConversion(aText[nStartPos+currPos], charData, charIndex); + currPos++; + } + } + if (offset.getLength() > 0) + offset.realloc(one2one ? 0 : count); + return OUString( newStr->buffer, count); +} + +TextConversionResult SAL_CALL +TextConversion_zh::getConversions( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, + const Locale& rLocale, sal_Int16 nConversionType, sal_Int32 nConversionOptions) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + TextConversionResult result; + + result.Candidates.realloc(1); + result.Candidates[0] = getConversion( aText, nStartPos, nLength, rLocale, nConversionType, nConversionOptions); + result.Boundary.startPos = nStartPos; + result.Boundary.endPos = nStartPos + nLength; + + return result; +} + +OUString SAL_CALL +TextConversion_zh::getConversion( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, + const Locale& rLocale, sal_Int16 nConversionType, sal_Int32 nConversionOptions) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + if (rLocale.Language.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("zh")) && + ( nConversionType == TextConversionType::TO_SCHINESE || + nConversionType == TextConversionType::TO_TCHINESE) ) { + + aLocale=rLocale; + sal_Bool toSChinese = nConversionType == TextConversionType::TO_SCHINESE; + + if (nConversionOptions & TextConversionOption::CHARACTER_BY_CHARACTER) + // char to char dictionary + return getCharConversion(aText, nStartPos, nLength, toSChinese, nConversionOptions); + else { + Sequence <sal_Int32> offset; + // word to word dictionary + return getWordConversion(aText, nStartPos, nLength, toSChinese, nConversionOptions, offset); + } + } else + throw NoSupportException(); // Conversion type is not supported in this service. +} + +OUString SAL_CALL +TextConversion_zh::getConversionWithOffset( const OUString& aText, sal_Int32 nStartPos, sal_Int32 nLength, + const Locale& rLocale, sal_Int16 nConversionType, sal_Int32 nConversionOptions, Sequence<sal_Int32>& offset) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + if (rLocale.Language.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("zh")) && + ( nConversionType == TextConversionType::TO_SCHINESE || + nConversionType == TextConversionType::TO_TCHINESE) ) { + + aLocale=rLocale; + sal_Bool toSChinese = nConversionType == TextConversionType::TO_SCHINESE; + + if (nConversionOptions & TextConversionOption::CHARACTER_BY_CHARACTER) { + offset.realloc(0); + // char to char dictionary + return getCharConversion(aText, nStartPos, nLength, toSChinese, nConversionOptions); + } else { + if (offset.getLength() < 2*nLength) + offset.realloc(2*nLength); + // word to word dictionary + return getWordConversion(aText, nStartPos, nLength, toSChinese, nConversionOptions, offset); + } + } else + throw NoSupportException(); // Conversion type is not supported in this service. +} + +sal_Bool SAL_CALL +TextConversion_zh::interactiveConversion( const Locale& /*rLocale*/, sal_Int16 /*nTextConversionType*/, sal_Int32 /*nTextConversionOptions*/ ) + throw( RuntimeException, IllegalArgumentException, NoSupportException ) +{ + return sal_False; +} + +} } } } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |