Skip to content

TODO Unicode

nmaya edited this page Oct 29, 2023 · 1 revision

Unicode化基本方針

  • 基本方針
    • 最新環境で動くものを目指す
      • 最新以外のためのコミットすることを禁止することはない
    • サポートOS,サポート開発ツールは今後検討する
  • 開発ツール
    • 最新の Visual Studio
    • 最新の Windows SDK
  • 使用ライブラリ
    • 最新のものを使用する
      • 古いOSをサポートするためにパッチすることはしない方向

内部Unicode化の進捗状況

開発環境

  • Visual Studio 2019
    • 開発で主に使用
    • ソースツリー内の2019用ソリューションファイルは更新している
    • Tera Term 4 系に反映することもあるので2005でもビルドできるようにしておきたい
  • 95をサポートするためにVisual Studio 2005を使用する必要があるがプライオリティは低い
    • 2005,2019以外のソリューションファイルは更新していない状態
  • cmakeビルド(試験的)
    • Visual Studio 2005~2019, MinGW でビルド可能

サポートWindowsのバージョン

r9153 ぐらいの状況、現在はWindows 10,11(最新)に注力している。

  • ○ Windows 10
  • ○ Windows 8
  • ○ Windows 7
  • ○ Windows Vista
  • ○ Windows XP
  • ○ Windows 2000
  • ○ Windows NT4.0
  • ○ Windows Me
  • ○ Windows 98
  • ○ Windows 95

注:

  • VS2019でビルドしたものはVista/7/10で動作した。XPでは起動できない。
  • 10では動作。(開発は主にWindows10上で行っているため)
  • 7: クーリエフォントでは絵文字が豆腐になる。和田研中丸ゴシック2004絵文字フォントでは問題なし。
  • Vista/XP: クーリエフォントでは韓国語と絵文字が豆腐になる。和田研中丸ゴシック2004絵文字フォントでは韓国語が・になる。
  • 2000: クーリエフォントでは日本語、中国語、韓国語、絵文字、たすけてが豆腐になる。和田研中丸ゴシック2004絵文字フォントでは中国語、韓国語、絵文字が・になる。
  • NT4.0: クーリエフォントでは日本語、中国語、韓国語、絵文字、たすけてが豆腐になる。和田研中丸ゴシック2004絵文字フォントでは中国語、韓国語、絵文字が・になる。
  • Me/98: クーリエフォントでは日本語、中国語、韓国語、絵文字、たすけてが豆腐になる。和田研中丸ゴシック2004絵文字フォントでは多少マシになるが、実用は難しい。ダイアログ表示がおかしい(r8299で解決)。
  • 95: ドイツ語だけまともに表示される。クーリエフォントでも和田研中丸ゴシック2004絵文字フォントでも大差ない。ダイアログ表示がおかしい(r8299で解決)。

使用しているライブラリ、ツールの状況

  • OpenSSL 1.1系
    • XP より古いOSでのサポートが終了
    • ttssh が XP より古いOSで使えなくなる
  • Visual Studio 2005
    • EOL
    • 入手性が悪い
    • Windows 95 対応バイナリが作れる
      • 対応できるようソース側で工夫している
  • Visual Studio 2019,2022
    • 最新開発環境
    • 古いOSで動かないバイナリとなる
  • MinGW
    • 新しいOSで起動するバイナリは作れる
    • 調査中
      • 95で起動するバイナリは作れた
      • 安定して動作するかは未検証

実装状況

Unicode(内部文字コード)

  • (△) 全角の行末処理
  • 文字幅(1/2cell)
    • [http://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt EastAsianWidth.txt]をもとに決定
      • Ambiguous chalacter 文字幅の設定可
    • 絵文字
      • 絵文字幅上書き設定OFF時
        • Unicode文字幅で描画
      • 絵文字幅上書き設定ON時
        • [https://unicode.org/Public/emoji/12.0/emoji-data.txt emoji-data.txt]をもとに絵文字を判定
        • 2cell設定の時
          • すべてを2cellとする
        • 1cell設定時
          • U+1f000未満は1cell
          • U+1f000以上は2cell
  • 結合文字
    • [https://unicode.org/Public/UNIDATA/NamesList.txt NamesList.txt]をもとに決定
    • Bengali, Khmer, Tibetan など
  • VariationSelector(異体字セレクタ)
  • EMOJI MODIFIER
  • Zero Width Joiner(ZWJ,ゼロ幅接合子)
  • Zero Width non-joiner(ZWNJ, ゼロ幅非接合子)

画面描画

  • OSの機能を利用して描画
  • Unicode系APIと非Unicode系APIのどちらでも利用可能
    • UIで選べる
    • ExtTextOutW() と ExtTextOutA()
    • 9x系のExtTextOutW() について
      • 存在する([http://seclan.dll.jp/dtdiary/2010/dt20100310.htm 参考])
      • 動作がNT系と異なるようだ
  • (×)カラー絵文字 (あとまわし)
    • DirectWrite というDirect Xの機能を使う
    • Windows8以降のサポートとなる

表示,機能

  • URL
    • 強調表示
    • クリッカブルURL
      • クリックでブラウザなど実行
      • (△) おかしいことが残っている
  • クリップボード
    • セット
      • [https://docs.microsoft.com/en-us/windows/win32/dataxchg/clipboard-formats Synthesized Clipboard Formats]を利用
      • (未) 9x系でのサポートがどうなっているか未検証
    • ゲット
  • ファイルドロップ
    • ファイル名のペースト
    • ファイルの送信
      • バイナリ
      • テキスト
      • ファイルの文字コードの判定
      • [https://ttssh2.osdn.jp/manual/ja/macro/syntax/file.html ttlファイルのエンコード]と同じようにする
    • scp
      • ファイル名は UTF-8でホストに送る
  • ファイル送信
    • バイナリ
    • テキスト
      • ファイルの文字コードの判定
      • [https://ttssh2.osdn.jp/manual/ja/macro/syntax/file.html ttlファイルのエンコード]と同じようにする
  • ファイル転送
    • ローカルのファイル名は Unicodeに対応
    • 送信するファイル名は ANSIで送る(UTF-8/ANSI切り替えUIがほしい)
  • ファイル受信(ログ)
    • 文字コード選択できるUIを追加
  • 印字
    • [ファイル]/[印刷] Unicode対応
    • エスケープシーケンスによる印刷
      • 印刷
        • (△) 難しそう、ANSIで実装しておく
      • パススルー印字
        • 文字コードを何で送るか設定が必要
  • duplicate session
  • (作業中)パス、ファイル名などのUnicode化
  • (作業中)iniファイルのパースなどのUnicode化
  • 設定ファイル(iniファイル)のデフォルト保存場所の変更
    • %APPDATA%\teraterm5\
    • (未)theme\
  • (作業中)pluginの互換性
    • Tera Term 4 以前とのバイナリ互換性は失われる
    • 新しい機能は入れず、なるべく変更なくソース再コンパイル(ソース互換)で使えるようにする方針

追加設定

  • Debug設定
    • 文字情報ポップアップ
      • on/off
      • キー設定
  • 設定のダイアログ

OS対応

  • 非Unicode系APIしかない場合は、Unicode APIの動作を内部でエミュレートする
    • ある程度は9xでも動作
    • プライオリティは低い

マクロ

  • 内部文字コードをUTF-8に変更
    • 従来はANSIだった

実装未検討

Unicode

  • アラビア語など
    • 左横書き

テスト

テストの観点

レグレッション

  • 従来バージョン(v4.103)でサポートしている機能が、漏れなく動作するか。

言語全般

  • 日本語
    • UTF-8だけではなく EUC-JP/JIS/Shift_JIS に関しても検証する。
  • 多言語(UTF-8)
    • 中国語、韓国語、ドイツ語、フランス語、ロシア語、ほか。
  • Unicodeで実装が難しいもの
    • ゼロ幅接合子、Emoji_Modifier、ほか。

レガシーWindows

  • Windows95/98/Me
  • WindowsNT4.0/2000/XP/Vista/7/8/10
  • 英語版Windows

操作全般

  • 端末上で多言語を使った操作を行う
    • man
    • vim, emacs
    • TUI (Text User Interface)
  • ログファイル
  • ブロードキャストコマンド
  • コピー&ペースト
  • ウィンドウのリサイズや最大化