スキップしてメイン コンテンツに移動

ActionScript 3.0で使う文字だけを埋め込む

てっく煮ブログAS3で埋め込みフォントを使うテクニックで使う文字だけを埋め込む便利なスクリプトがPerlのワンライナーで書かれていたので、連続する文字に対応させてPythonで実装。

#!/usr/bin/env python # -*- coding: utf-8 -*- import sys def main(args): # 引数がなければ標準入力、あればそのファイル名から読み込み. f = file(args[1]) if len(args) > 1 else sys.stdin # 文字を読み込み、重複しないようにソートして配列に格納. letters = sorted(set([ord(s) for l in f for s in unicode(l.rstrip("\n"))])) # 小さい順に標準出力に表示. 文字コードが連続している場合は - で繋げて出力. sys.stdout.write("U+%04X" % letters[0]) pre_s = letters[0] is_seq = False for s in letters[1:]: if s - pre_s == 1: is_seq = True elif is_seq: sys.stdout.write("-U+%04X,U+%04X" % (pre_s, s)) is_seq = False else: sys.stdout.write(",U+%04X" % s) pre_s = s if is_seq: sys.stdout.write("-U+%04X" % pre_s) if __name__ == "__main__": main(sys.argv)

例えば、以下の文字を使いたい場合、

ぁぃぅぇぉ あいうえお かきくけこ abcdefg xyz

これを上記のスクリプトに通すと、

U+0061-U+0067,U+0078-U+007A,U+3041-U+304B,U+304D,U+304F,U+3051,U+3053

のように出力されるので、以下のように埋め込めばいい。

[Embed(systemFont='MS 明朝', fontName='myFont', mimeType='application/x-font', unicodeRange='U+0061-U+0067,U+0078-U+007A,U+3041-U+304B,U+304D,U+304F,U+3051,U+3053' )] private static const myFont:Class;

コメント