DTPの勉強会@東京 第1回

DTPの勉強会@東京 第1回に参加してきました。今回もとても良いセッションばかりでした!(私のは除く)

さて、メインセッション「出力・印刷の現場 ─データを受け取った現場で起こっていること─」の内容は 印刷事故を無くすコミュニケーションの重要性—DTPの勉強会第1回レビュー にスバラシク詳細にまとめられています。「ここに書いてあるから 7/24 は行かなくていいかな」と思っている方がいそうなので言っておきますと、それは大間違いです、なぜならこのセッションは、これだけの内容を網羅しながらある種の「二人漫談」にまとめあげているところに真骨頂があります。もはや「芸」の域です。こればかりは直接観ないとその面白さがわかりません。必見ですよ。(1

しかも今回は、その直後にショートセッション「ネタとしてのアナログ的手法への回帰」が続きまして、それがまたピン芸人乱入の様相を呈し、笑いと拍手喝采で締めくくられました。楽しかった!

芸といえば、えむさんの「アナログ経験者のデジタルの使い方」では、烏口とスプリングで角丸矩形を描いている動画を再生して、往事の職人芸をご披露されていました。そこかしこで「なつかし〜」との声があがりましたが、もちろん目的は手技を見せることではなく、かつては角丸矩形ひとつでもこれだけの手間と時間がかかり、そのため「先に段取りを決めておく」ことがなにより重要だった、デジタル制作の今でもそれは同じではないか、というお話でした。私も版下でしたので、その重要さは身をもって体験しています。段取りを決めて隙なく仕事をすることの快適さを忘れたくないものです。

あ、私がセッションでやった「ターミナルでヘックスダンプする方法」の詳細はいずれまた。

  1. あれだけの内容を数時間のあいだず〜っと楽しく面白く聞かせるなんて想像できないでしょ。それを本当にやっちゃうんです。すげ〜 []

InDesign Glee 1.1.0

InDesign Glee 1.1.0 をちゃんと download ページに追加しました。6/7 に UP したものとまったく同じです。

DTPの勉強会@東京 第1回で「InDesign Glee のバージョン判別方法」をお話させていただくことになりました。実際の業務にはまったく役に立たないマニアックな話題ですが(笑)、前座の余興ということで。そして折角なので、参加される皆さんに「たまさんグッズ」あげます! もれなくあげます! あかつきさんがやめろと言ってもあげます! お楽しみに〜

InDesign Glee の CS5 対応

InDesign Glee を CS5 に対応させられるかどうか確認するために、Adobeの本家サイトから英語版の体験版をダウンロードしてみました。インストールして分かったことは、

.indd のファイルタイプがちゃんと「IDd7」になっていた

これで「バージョン別のアイコン表示」は問題なしです。ホッとしました。

.indd のバージョン情報取得は CS4 と同じ方法で大丈夫だった

コードをいじらなくていいんです。ビルドもしないで、アイコンファイルを追加して、Info.plist を書き替えるだけで CS5 対応完了。ラクチンすぎ。

でもひとつだけ困ったことが…

IDML のバージョン取得はどうする?

.idml は、見た目は普通のファイルのようですが、実際はZIP圧縮されたアーカイブファイルです。解凍してみると複数の XML にバージョン情報があります。
どのファイルを参照したらいいの?
そもそもバージョンを取得する必要があるのかどうかも分かんないです。
どうしようかなあ、これ…

文字コードはなぜ複雑になるのか

プログラマのための文字コード技術入門 の第1章に「文字コードはなぜ複雑になるのか」という節があります。そこには「過去の経験の積み重ね」「文字そのものの難しさ」の2つが挙げられています。もちろんその通りなのですが、私が常々感じている「もうひとつの文字コードの複雑さ」があるのでメモしておきます。
続きを読む →

Unicodeで「漢字」の正規表現

改訂:2017/07/22
Unicode 10.0に合わせて書き直し。正規表現を簡易にしようとしてやりすぎていたのを修正。


正規表現で漢字の範囲指定をする場合、Unicodeではどうするかが悩ましいところです。

Unicodeの漢字の範囲として [一-龠] にしている例を見かけます。しかしこれは旧規格JIS X 0208の漢字が含まれる範囲をUnicodeの中から切り出しているだけです。互換漢字ブロックをまるごと取りこぼしているので、WindowsのシフトJIS(CP932)の拡張漢字に当たるものが含まれていません。現規格JIS X 0213の第3・第4水準漢字も考慮されていません。簡易な範囲指定だとしても、新常用漢字の「𠮟」が含まれておらず、今から見るとあまりに時代遅れです。

Unicodeのすべての漢字の正規表現 その1

環境によってはUnicodeスクリプトの \p{Han} が使えます。対応するコードポイントの一覧はこちらで確認できます。
※リンク先はUnicodeの最新のバージョンではない場合があるので注意してください。
UnicodeSet で \p{Han} の対応コードポイント一覧を表示

Unicodeのすべての漢字の正規表現 その2

\p{Han} が使えない環境は普通にあります。使えたとしてもUnicodeの最新バージョンに対応しているとは限りません。しっかりマッチさせたい場合は、範囲指定をするしかありません。その際、漢字はUnicodeの中であちこちに分散しているので、シンプルな範囲指定は不可能です。

Unicodeの漢字の内訳は以下になります。

※コードポイントの範囲は未定義箇所を含めています。\p{Han} に含まれるハングルの数字(12文字)は除外しています。Unicodeのバージョンが上がっても対応できるようにBMP外はU+2FFFFまで含めています。

2E80..2FDF CJK部首補助+康熙部首
3005 々(漢字の踊り字)
3007 〇(漢数字のゼロ)
303B 〻(漢字の踊り字)
3400..4DBF CJK統合漢字拡張A
4E00..9FFF CJK統合漢字
F900..FAFF CJK互換漢字
20000..2FFFF CJK統合漢字拡張B〜F+CJK互換漢字追加+念のためU+2FFFFまで

これをまとめると、下記になります。いかがでしょうか。

[\x{2E80}-\x{2FDF}々〇〻\x{3400}-\x{4DBF}\x{4E00}-\x{9FFF}\x{F900}-\x{FAFF}\x{20000}-\x{2FFFF}]

InDesign CS3 以降

InDesignの漢字のメタ文字「~K」は、ありえないバグ(U+40B6以降がマッチしない)があるので危険。上記の正規表現を使った方がいいでしょう。

JavaScript

(?:[々〇〻\u2E80-\u2FDF\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD87F][\uDC00-\uDFFF])

※ JSはUTF-16なので、正規表現にサロゲートペア対策が必要です。えむけいさんがコメントで対処方法を教えてくれました。感謝!

※ mashabowさんがコメントで、最近の環境(ES2015 以降)では Unicode フラグ “u” が使えるのでサロゲートペア対策を回避できると教えてくれました。感謝!