Discussion module:sinogramme
Ajouter un sujetApparence
Dernier commentaire : il y a 9 ans par TAKASUGI Shinji dans le sujet Code en perl
Code en perl
[modifier le wikicode]@radicals = ( '一', '丨', '丶', '丿', '乙', '亅', '二', '亠', '人', '儿', '入', '八', '冂', '冖', '冫', '几', '凵', '刀', '力', '勹', '匕', '匚', '匸', '十', '卜', '卩', '厂', '厶', '又', '口', '囗', '土', '士', '夂', '夊', '夕', '大', '女', '子', '宀', '寸', '小', '尢', '尸', '屮', '山', '巛', '工', '己', '巾', '干', '幺', '广', '廴', '廾', '弋', '弓', '彐', '彡', '彳', '心', '戈', '戶', '手', '支', '攴', '文', '斗', '斤', '方', '无', '日', '曰', '月', '木', '欠', '止', '歹', '殳', '毋', '比', '毛', '氏', '气', '水', '火', '爪', '父', '爻', '爿', '片', '牙', '牛', '犬', '玄', '玉', '瓜', '瓦', '甘', '生', '用', '田', '疋', '疒', '癶', '白', '皮', '皿', '目', '矛', '矢', '石', '示', '禸', '禾', '穴', '立', '竹', '米', '糸', '缶', '网', '羊', '羽', '老', '而', '耒', '耳', '聿', '肉', '臣', '自', '至', '臼', '舌', '舛', '舟', '艮', '色', '艸', '虍', '虫', '血', '行', '衣', '襾', '見', '角', '言', '谷', '豆', '豕', '豸', '貝', '赤', '走', '足', '身', '車', '辛', '辰', '辵', '邑', '酉', '釆', '里', '金', '長', '門', '阜', '隶', '隹', '雨', '靑', '非', '面', '革', '韋', '韭', '音', '頁', '風', '飛', '食', '首', '香', '馬', '骨', '高', '髟', '鬥', '鬯', '鬲', '鬼', '魚', '鳥', '鹵', '鹿', '麥', '麻', '黃', '黍', '黑', '黹', '黽', '鼎', '鼓', '鼠', '鼻', '齊', '齒', '龍', '龜', '龠'); open(FILE, 'Unihan_IRGSources.txt') || die 'cannot open file, stopped'; while (<FILE>) { if (/^U\+(.*?)\tkRSUnicode\t(\d+)'?\.(\d+)/) { $char = hex($1); $rad = $2; $stroke = $3; $file_index = int($char / 0x1000); if (!$dest[$file_index]) { $filename = sprintf("stroke_count_0x%x.txt", $file_index * 0x1000); local *DEST; open(DEST, ">$filename") || die "cannot open $filename, stopped"; $dest[$file_index] = *DEST; print STDERR "$filename opened\n"; } printf { $dest[$file_index] } "\t['%s'] = '%s%02d', -- U+%04X\n", &utf8($char), $radicals[$rad - 1], $stroke, $char; } } exit 0; sub utf8 { local($unicode) = @_; $unicode = $unicode + 0; # 0x00000000 - 0x0000007F: # 0xxxxxxx # 0x00000080 - 0x000007FF: # 110xxxxx 10xxxxxx # 0x00000800 - 0x0000FFFF: # 1110xxxx 10xxxxxx 10xxxxxx # 0x00010000 - 0x001FFFFF: # 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx if ($unicode <= 0x7f) { chr($unicode); } elsif ($unicode <= 0x7ff) { pack('CC', 0xc0 | (($unicode >> 6) & 0x1f), 0x80 | ($unicode & 0x3f)); } elsif ($unicode <= 0xffff) { pack('CCC', 0xe0 | (($unicode >> 12) & 0x0f), 0x80 | (($unicode >> 6) & 0x3f), 0x80 | ($unicode & 0x3f)); } elsif ($unicode <= 0x10ffff) # Unicode max { pack('CCCC', 0xf0 | (($unicode >> 18) & 0x07), 0x80 | (($unicode >> 12) & 0x3f), 0x80 | (($unicode >> 6) & 0x3f), 0x80 | ($unicode & 0x3f)); } }