convbkmk Ver.0.05

convbkmk Ver.0.05

- t tk の投稿
返信数: 4
convbkmk Ver.0.05 を出しました。
upTeXのページ からどうぞ。

dvipdfmx の処理時に生成される *.out ファイルの処理に対応しました。
-o オプションでその動作になります。変換後のファイルは同名のファイルを上書きします。-o オプションがない場合は従来の動作と同様です。
upLaTeXのみならず、pLaTeXでも使えます。

角藤さんの out2uni.c と同等の動作を目指しています。out2uni の代替として利用できれば、と思っています。
さらに、以下の点は機能が強化されていると思います。
  • *.out ファイルの文字エンコーディングがutf-8の場合にも対応している
  • \xxx → UTF-16BE の変換にも対応している
out2uni.c のソースに記載されている「日本語文書情報作成法」のdocinfo.outの変換処理も可能です。

本機能を利用してコード変換をする場合には、out2uni 同様、CMapによるコード変換は不要になります。

ZRさんのブログ記事↓に触発され、作成いたしました。
hyperref で日本語しおりに endash を出す件について
pxjahyper パッケージ

t tk への返信

Re: convbkmk Ver.0.05

- Z. R. の投稿

試してみたのですが、Ruby 1.9 で実際に日本語を含む PS ファイルを処理すると

c:/usr/local/share/texmf/scripts/uptex/convbkmk.rb:342:in `conv_string_to_utf16be': incompatible character encodings: UT
F-8 and UTF-16BE (Encoding::CompatibilityError)
        from c:/usr/local/share/texmf/scripts/uptex/convbkmk.rb:384:in `file_treatment'
        from c:/usr/local/share/texmf/scripts/uptex/convbkmk.rb:404:in `<main>'

のエラーになります。

342 行目は以下の文があります。

conv16be = "\xFE\xFF" + conv.utf8_to_utf16be # BOM U+FEFF, UTF-16BE

スクリプトエンコーディングが UTF-8 (encoding: utf-8)の Ruby 1.9 では、右辺の 2 つの文字列のエンコーディングが不一致となって、結合が失敗するようです。

  • "\xFE\xFF" のエンコーディングは UTF-8 (スクリプトエンコーディングに一致する。明らかに UTF-8 としては不正なのだが。)
  • conv.utf8_to_utf16be のエンコーディングは UTF-16BE (String#encode で UTF-16BE に変換した結果なので。)

正常に処理されるようにするには、例えば以下の何れかに修正する必要があります。

  • conv16be = "\xFE\xFF".force_encoding('UTF-16BE') + conv.utf8_to_utf16be
  • conv16be = "\uFEFF".encode('UTF-16BE') + conv.utf8_to_utf16be
    (以上は UTF-16BE 同士で結合。なお \u 表現を含む文字列リテラルは UTF-8 になる。)
  • conv16be = ("\uFEFF" + conv).utf8_to_utf16be
    (これは UTF-8 同士で結合してから変換。)
Z. R. への返信

Re: convbkmk Ver.0.05

- t tk の投稿
convbkmk Ver.0.06 を出しました。
upTeXのページ からどうぞ。

ZRさんご指摘の通り、convbkmk Ver0.05 をRuby1.9で使おうとすると、BOMのあたりで失敗します。ご指摘ありがとうございました。
それを修正しました。

  • conv16be = "\uFEFF".encode('UTF-16BE') + conv.utf8_to_utf16be
    (以上は UTF-16BE 同士で結合。なお \u 表現を含む文字列リテラルは UTF-8 になる。)
  • conv16be = ("\uFEFF" + conv).utf8_to_utf16be
    (これは UTF-8 同士で結合してから変換。)
これらは、今度、Ruby1.8で動かなくなってしまいます笑顔
t tk への返信

convbkmk Ver.0.07

- t tk の投稿
convbkmk Ver.0.07 を出しました。
upTeXのページ からどうぞ。

convbkmk Ver.0.05 と Ver.0.06 は、
文字コードを推測するオプション "-g" とともに使用した際、短い入力行などの理由により推測に失敗すると、無限ループに陥る場合がありました。
今回の修正で直ったと思います。(推測に失敗すると、エラーで停止する。)

upTeX-1.11(準備中)のテストでこのバグが見つかりましたので、取り急ぎリリースした次第です。