たまりば

パソコン・インターネット パソコン・インターネット三鷹市 三鷹市

謎の色名「honeydewtab」とlegacy color valueパース手順
2018年03月24日 12:45

HTMLやCSSで使うために140個の色名が定義されている。個人ホームページ全盛期のHowTo本にはよく載っていたものだが思えば最近あまり見ない気がする。
HTMLを書いていてなんでもいいからとりあえず色を付けたい時一々カラーコードを書くよりredとかblueとか書くと楽なので便利だ。(cyanmagentayellowもあるがgreenは罠だ。緑100%はlimeだ。)

ここで、謎の色名「honeydewtab」というものがある。
詳しくはこちらのページを読んでほしいが、かいつまんで言うと
・なぜか色名として「honeydewtab」が載っている本やサイトがあった
・何らかの色が出るが、ブラウザにより異なる
・著者から連絡があり間違いだったと確認された
ということだ。

ここで不思議なのが何らかの色は出ること。
存在しないのならなぜ無視されるのでなく何か出るのか。どういう解釈をされているのか。
調べていると別のサイトで様々な文字列が実験されているのを見つけた。
ここの「coffee」で見覚えのある色があって気づいた。これは#C0FFEE色だ。英単語として読める16進数は色々あり、中でもちょうど6文字でいい感じの色が出るC0FFEEは自サイトでもよく使うお気に入りだったのである。

すると#を付けなくとも16進数として解釈されるのか。試してみると6文字の時は16進数字以外を"0"として解釈した値と一致している。
謎はほぼ解けたもののhoneydewtabなど6文字以外の場合の規則は分からずじまいだった。

その後HTMLの仕様を見ていた所「legacy color value」としてパース方法が定義されているのを見つけた。
https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#rules-for-parsing-a-legacy-colour-value
簡単に説明すると、
16進数字以外を'0'に置き換え、文字数が3の倍数になるよう末尾に'0'を足し、3分割。3つの要素それぞれの先頭から等しい数の'0'を、最低2桁は残して、除ける限り除く。各要素の先頭2桁を1バイトのRGBと解釈する。
というものだ。(簡単に説明できなかった。)
正式な簡略表記だと思っていた3桁表記(#369=#336699みたいなやつ)もlegacyだったのは意外だ。

honeydewtabを例にパースしてみよう。
honeydewtab
000e0de00ab     16進数字以外は"0"に置き換える
000e0de00ab0    3の倍数文字になるよう"0"を補う
000e,0de0,0ab0  3等分する
 00e  de0  ab0  各部分において先頭から同数の"0"を消す
 00   de   ab   各部分の先頭2文字を取る
#00deab         できあがり

さて、この複雑なパース手順は何を意図したものだろうか。
桁数が多い場合を考慮している点と、先頭2文字を取るところは、将来的に各色要素が3桁以上になった場合でも対応できるようにしつつその場合に各色8bitの環境でも適切な色を出せるように考えられているように見える。
しかし、そう考えると3桁以上で頭が0の時は破綻する。
例えば(000,012,0AB)という3桁の色表現があったとして、2桁に変換するなら(00,01,0A)となってほしいところだが、この手順では(00,12,AB)になる。
してみるとこの仕様はまともに使えることを意図したものではなく、各ブラウザでまちまちだった挙動をなるべく保持しつつ矛盾のない1つの仕様にまとめたものなのではないだろうか。

  • 同じカテゴリー(プログラム・アルゴリズム)の記事画像
    6段のカレンダーが好きだ
    ファミコンで9×9ドット文字表示(ほか)
    JPEG圧縮を繰り返しても際限なく劣化するわけではない
    ゲームボーイの吸い出し機を作った (後編)
    ファミコンで全画面に任意の画像(ただしモノクロ)を表示
    最近のWindowsのビットマップフォントの太字
    同じカテゴリー(プログラム・アルゴリズム)の記事
     CDのピットの数 (2021-03-05 23:32)
     6段のカレンダーが好きだ (2020-11-15 04:06)
     PIC16のDhrystone MIPSを測ろうとしてみた (2020-04-29 02:23)
     Twitterの画像の扱いがやっとまともになって嬉しい (2019-06-23 00:23)
     ファミコンで9×9ドット文字表示(ほか) (2019-04-08 02:02)
     JPEG圧縮を繰り返しても際限なく劣化するわけではない (2017-02-10 01:47)
    URL欄を実験的に消してる間に廃止されてしまいました。まあいいか。
     
    <ご注意>
    書き込まれた内容は公開され、ブログの持ち主だけが削除できます。
    削除
    謎の色名「honeydewtab」とlegacy color valueパース手順
      コメント(0)