7.6 スペル文法チェック
ユーザーエージェントは、フォーム・コントロール(textarea 要素の値など)や編集ホスト内の要素(contenteditable を使って)の中にある編集可能なテキストのスペルや文法をチェックする機能をサポートすることができます。
それぞれの要素に対して、ユーザーエージェントは、デフォルト、または、ユーザーが指定したの設定のいずれかを反映して、デフォルト・ビヘイビアを定めなければいけません。それぞれの要素が取り得るデフォルト・ビヘイビアは 3 つあります:
- true-by-default
- 該当の要素のコンテンツが編集可能であれば、その要素はスペルと文法がチェックされます。
- false-by-default
- 該当の要素は、決してスペルと文法はチェックされません。
- inherit-by-default
- 該当の要素のデフォルト・ビヘイビアは、親要素と同じです。親要素を持たない要素は、デフォルト・ビヘイビアを持つことはできません。
spellcheck 属性は、キーワードが空文字列、true、false となる列挙属性です。空文字列と 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 IDL 属性は、ユーザー設定で spellcheck コンテンツ属性が変更されたとしても、影響を受けることはありません。そのため、これは、実際のスペルチェックの状態を反映しないことになります。
セット時においては、新しい値が true であれば、その要素の spellcheck コンテンツ属性はリテラル文字列 "true" にセットされなければいけません。そうでなければ、リテラル文字列 "false" にセットされなければいけません。
ユーザーエージェントは、この機能の目的においては、次のテキストをチェック可能と見なさなければいけません:
readonly属性を使うことができ、type属性が Password 状態になく、ミュータブルでない(つまり、readonly属性が指定されておらず、disabled でない)input要素の値。readonly属性を持たず、disabled でないtextarea要素の値。- 編集可能な要素の子要素になっているテキスト・ノード内のテキスト。
- 編集可能な要素の属性内のテキスト。
テキスト・ノードの一部となるテキストに対して、そのテキストが関連づけられる要素は、単語、センテンスといったテキストの最初の文字の直近の親要素になります。属性内のテキストの場合は、属性の要素となります。input と textarea 要素の場合は、自身の要素となります。
(前述の定義で)適用可能な要素の中にある単語、センテンスといったテキストがスペルチェックおよび文法チェック有効かどうかを判定するため、ユーザーエージェントは次のアルゴリズムを採用しなければいけません:
- もしユーザーがこのテキストのチェックを無効にしたなら、チェックは無効です。
- そうでなければ、もしユーザーがこのテキストに対して常に有効を強制したなら、チェックは有効です。
- そうでなければ、もしテキストが関連づけられている要素が
spellcheckコンテンツ属性を持ち、その属性が true 状態なら、チェックは有効です。そうではなく、その属性が false 状態にあるなら、チェックは無効です。 - そうでなければ、もし default 状態にない
spellcheck属性をもつ祖先要素があるなら、直近の祖先要素のspellcheck属性が true 状態の場合は、チェックは有効です。そうでない場合はチェックは無効です。 - そうでなければ、もし要素のデフォルト・ビヘイビアが true-by-default なら、チェックは有効です。
- そうでなければ、もし要素のデフォルト・ビヘイビアが false-by-default なら、チェックは無効です。
- そうでなければ、もし要素の親要素がチェック有効であれば、チェックは有効です。
- そうでなければ、チェックは無効です。
もしチェックが単語/センテンス/テキストに対して有効なら、ユーザーエージェントは、スペルおよび文法チェックのエラーを、そのテキストの中に表示すべきです。ユーザーエージェントは、スペルと文法の訂正を指し示す際に、ドキュメントに与えられている他のセマンティクスを考慮に入れるべきです。ユーザーエージェントは、どんなスペルや文法のルールが使われているのか決定するために、要素の言語を適用することができます。もしくは、ユーザー定義の言語セッティングを適用することもできます。ユーザーエージェントは、最終的な値が適正かどうかを確かめるために、可能ならば、pattern などの input 要素の属性を使うべきです。
もしチェックが無効なら、ユーザーエージェントは、そのテキストに対してスペル・文法チェックのエラーを表示すべきではありません。
次の例では、単語 "Hello" がスペルエラーチェックされるかどうかを決定するために使われる要素は、ID が "a" の要素となります。この例では、チェックは有効にならないでしょう。
<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/2011/WD-html5-20110113/editing.html#spelling-and-grammar-checking