Skip to content

IDNドメイン対応

tateisu edited this page Feb 3, 2020 · 15 revisions

Mastodon 3.1.0rc

  • 3.1.0rcからクライアントAPIの Account.acct のホスト名部分にunicode表記のIDNドメインが出現する
  • 投稿中の Mention のacctとurlのホスト名部分はpunycode 表記。
  • 投稿本文HTMLのメンション部分のリンクのテキストは@usernameのみでホスト名表記は含まれない。リンク先URLはpunycode表記。
  • 検索APIにacctを投げる場合、ホスト名部分はpunycodeでもunicodeでも同じ結果になる
  • ドメインブロックAPIは受け取ったホスト名を正規化(punycode化)する。同じ結果になる

SubwayTooter 4.0.3以降での対応

サーバと違ってクライアントの場合は表示の度に毎回変換するとかしたくないのでpunycodeのacctとunicodeのacctを両方保持するようにしたら、変更箇所がめっちゃ多くて大変だった。

  • アカウント追加時のサーバ名入力部分でIDNドメインのunicode表記も入力補完できるようにする
  • SavenAccount は hostAscii,hostPretty, acctAscii,acctPretty を持つ
  • TootAccount は hostAscii, acctAscii,acctPretty を持つ。
  • TootMention は acctAscii,acctPretty を持つ。
  • Hostクラス、Acctクラスを導入。それぞれascii,prettyプロパティを持つ。Host.asciiはtoLowerCase(Locale.JAPAN)される。
  • 古いサーバとの互換性のため、入力データがpunycodeでもunicodeでも上記プロパティが正しい内容になるよう解釈する。
  • 表示にはacct.pretty を使い、それ以外にはacct.asciiを使う。
  • AcctColor (「通称と色」のデータ) は acct.ascii をキーとする。表示はnicknameがnullか空ならacct.prettyを補う。
  • メンションの入力補完時にIDNドメインを許容する。
  • 返信作成時の初期入力のメンションにIDNドメインを使う。 やめた

保留

  • MFMのメンションのパース時にIDNドメインを許容する? Misskey本家のMFMが対応してないので保留。過去の投稿でメンション直後に日本語が使われる場合を考慮すると無理なのでは。なおMisskeyはパースした後にpunycodeならIDNドメインに変換して表示する。 https://github.com/syuilo/misskey/issues/5826
  • 投稿入力時のメンション補完。STでは「補完の候補にIDNドメインも表記するが、選択するとpunycodeに変換して入力する」ことにした。この挙動は直感的ではないが、古いサーバやMisskeyでも問題がでない。 https://mastodon.juggler.jp/@tateisu/103596858400541505