Show page source of UNICODE #121611

= Unicode化基本方針

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

= 内部Unicode化の進捗状況

 * ソースコード
   * trunk ( https://osdn.net/projects/ttssh2/scm/svn/tree/head/trunk/ )
   * r9502

== 開発環境

 * 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)
 * ログファイル
 * ブロードキャストコマンド
 * コピー&ペースト
 * ウィンドウのリサイズや最大化