spellcheck 属性

7.6.5 スペルと文法のチェック

ユーザーエージェントは、フォーム・コントロール(textarea 要素の値など)や編集ホスト内の要素(contenteditable を使って)の中にある編集可能なテキストのスペルや文法をチェックする機能をサポートすることができます。

それぞれの要素に対して、ユーザーエージェントは、デフォルトまたはユーザー設定のいずれかを通して、デフォルト・ビヘイビアを定めなければいけません。それぞれの要素が取り得るデフォルト・ビヘイビアは 3 つあります:

true-by-default
該当の要素のコンテンツが編集可能であれば、その要素はスペルと文法がチェックされます。
false-by-default
該当の要素は、決してスペルと文法はチェックされません。
inherit-by-default
該当の要素のデフォルト・ビヘイビアは、親要素と同じです。親要素を持たない要素は、デフォルト・ビヘイビアを持つことはできません。

spellcheck 属性は、キーワードが空文字列、truefalse となる列挙属性です。空文字列と true キーワードは、true 状態に対応付けられます。false キーワードは、false 状態に対応付けられます。さらに 3 つ目の状態があります。それは default 状態といい、値が指定されていない場合のデフォルト(そして不正な値が指定された場合のデフォルト)です。

true 状態とは、該当の要素に対してスペルと文法をチェックすることを意味します。default 状態とは、該当の要素はデフォルト・ビヘイビアによって作用し、下で定義されている通り、親要素の spellcheck 状態に基づく可能性があることを意味します。false 状態とは、該当の要素に対してチェックを行わないことを意味します。


element . spellcheck [ = value ]

要素がスペルおよび文法のチェックを受けることになっていれば true を返し、そうでなければ false を返します。

値をセットして、デフォルトを変更し、spellcheck コンテント属性をセットすることができます。

spellcheck IDL 属性は、取得時においては、次のいずれかの場合に、true を返さなければいけません。まず、要素の spellcheck コンテント属性が true 状態にある場合。次に、要素の spellcheck コンテント属性が default 状態にあり、かつ、要素のデフォルト・ビヘイビアtrue-by-default である場合、最後に、要素の spellcheck コンテント属性が default 状態にあり、かつ、該当要素の親要素の spellcheck IDL 属性が true を返す場合です。以上のいずれでもない場合は、この属性は false を返さなければいけません。

ユーザーが spellcheck コンテント属性を覆す設定をしたとしても、spellcheck IDL 属性は影響を受けることはありません。そのため、これは、実際のスペルチェックの状態を反映しないことになります。

セット時においては、新しい値が true であれば、その要素の spellcheck コンテント属性はリテラル文字列 "true" にセットされなければいけません。そうでなければ、リテラル文字列 "false" にセットされなければいけません。


ユーザーエージェントは、この機能の目的においては、次のテキストのみをチェック可能と見なさなければいけません:

Text ノードの一部となるテキストに対して、そのテキストが関連づけられる要素は、単語、センテンスといったテキストの最初の文字の直近の親要素になります。属性のテキストの場合は、その属性の要素となります。inputtextarea 要素の場合は、その要素自身となります。

(前述の定義で)適用可能な要素の中にある単語、センテンスといったテキストがスペルチェックおよび文法チェック有効かどうかを判定するため、ユーザーエージェントは次のアルゴリズムを採用しなければいけません:

  1. もしユーザーがこのテキストのチェックを無効にしたなら、チェックは無効です。
  2. そうでなければ、もしユーザーがこのテキストに対して常に有効を強制したなら、チェックは有効です。
  3. そうでなければ、もしテキストが関連づけられている要素が spellcheck コンテント属性を持ち、その属性が true 状態なら、チェックは有効です。そうではなく、その属性が false 状態にあるなら、チェックは無効です。
  4. そうでなければ、もし default 状態にない spellcheck コンテント属性をもつ祖先要素があるなら、直近の祖先要素の spellcheck コンテント属性が true 状態の場合は、チェックは有効です。そうでなければチェックは無効です。
  5. そうでなければ、もし要素のデフォルト・ビヘイビアtrue-by-default なら、チェックは有効です。
  6. そうでなければ、もし要素のデフォルト・ビヘイビアfalse-by-default なら、チェックは無効です。
  7. そうでなければ、もし要素の親要素がチェック有効であれば、チェックは有効です。
  8. そうでなければ、チェックは無効です。

もしチェックが単語/センテンス/テキストに対して有効なら、ユーザーエージェントは、スペルおよび文法チェックのエラーを、そのテキストの中に表示すべきです。ユーザーエージェントは、スペルと文法の訂正を指し示す際に、ドキュメントに与えられている他のセマンティクスを考慮に入れるべきです。ユーザーエージェントは、どんなスペルや文法のルールが使われているのか決定するために、要素の言語を適用することができます。もしくは、ユーザー定義の言語セッティングを適用することもできます。ユーザーエージェントは、最終的な値が妥当かどうかを確かめるために、可能ならば、pattern などの input 要素の属性を使うべきです。

もしチェックが無効なら、ユーザーエージェントは、そのテキストに対してスペル・文法チェックのエラーを表示すべきではありません。

チェックが有効なときですら、ユーザーエージェントは、ユーザーがチェックしてほしくないと想定されるなら、そのテキストにスペルや文法のエラーを報告しないことを選択することができます(たとえば、ページがロードされたときにすでに存在するテキストや、ユーザーが入力しなかったテキストや、ユーザーがフォーカスを当てなかったコントロールのテキストや、ユーザーエージェントがスペルミスを確実に判定できないようなメールアドレスなど)。

次の例では、ID が "a" の要素が、単語 "Hello" がスペルエラーかをチェックされるかどうかを決定するために使われる要素になります。この例では、チェックは有効にならないでしょう。

<div contenteditable="true">
 <span spellcheck="false" id="a">Hell</span><em>o!</em>
</div>

次の例にある ID が "b" の要素は、チェックが有効になります。(input 要素の属性値の先頭にスペース文字があるため、その属性は無視されるため、デフォルトがどうであるかに関わらず、親の値が代わりに使われます)。

<p spellcheck="true">
 <label>Name: <input spellcheck=" false" id="b"></label>
</p>

本仕様は、スペルや文法のチェッカーのユーザー・インタフェースを定義しません。ユーザーエージェントは、オン・デマンドのチェックを提供したり、チェックが有効になっているときは、リアルタイムに継続的なチェックを行ったり、それ以外のインタフェースを使うこともできるでしょう。


※ 原文:http://www.w3.org/TR/2014/REC-html5-20141028/editing.html#spelling-and-grammar-checking