Discussion module:sinogramme

Le contenu de la page n’est pas pris en charge dans d’autres langues.
Définition, traduction, prononciation, anagramme et synonyme sur le dictionnaire libre Wiktionnaire.

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));
   }
}

TAKASUGI Shinji (d) 3 novembre 2015 à 14:35 (UTC)[répondre]