htmlを記述する上でURLの「http:」を省略することは問題ないはずなのですが、私のエディタ「atom」ではなぜかうまくURLを認識しません。
ちなみに「atom」は初期設定のまま使用しております。
具体的に言うと途中の「&」でなぜか区切られてしまい、本来なら紫色で表示されるはずのURL部分が緑色で表示されてしまい、その「&」以降すべて色の自動変換が機能していない状態になってしまいます。
リンクとしては正常に機能するのですが、エディタがURLを認識しないせいで、html記述中の色の自動変換が機能しなくて困っています。
なにか良い解決方法はありませんでしょうか。
ご教授よろしくお願い申し上げます。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
この動作はlanguage-htmlとlanguage-hyperlinkという二つのデフォルトで入っているパッケージの相互作用によってこのような動作になっています。
まず、language-hyperlinkですが、テキストの部分にURLらしき物があれば自動的にURLであると判断し、別のスタイルを適用できるという物です。これはHTMLだけではなく、他の言語のソースやプレーンなテキストでも動作しており、もし、下記のようにユーザーのStylesheetを設定すれば、共通の見え方にすることもできます。
LESS
1atom-text-editor::shadow { 2 .markup.underline.link.hyperlink { 3 text-decoration: underline; 4 } 5}
さて、HTMLですが、language-htmlはHTMLを解釈して行くのですが、属性値やタグではない地の部分をただのテキストと判断します(地の部分でもscriptタグの中はJavaScriptとしてに解釈するなど例外が一部あります)。テキストですので、もし、そこにURLらしき物があれば、先ほどのlanguage-hyperlinkがURLであると判断します。つまりです、"http://〜"から始まる場合は、URLをURLとして判断していると言うことになります。しかし、そうではない場合、"/〜/〜"見たいな場合は、それが絶対パスURLであるとか、相対パスURLであるかは判断できません。URLではないただのテキストとして判断します。
ここでただのテキストとして判断する場合、さらに文字参照をわかるように区別するという処理があります。文字参照は&〜;
という形であるため、単純に&〜;
で囲まれた部分を別の色にします。では、&
が単独で使われている場合はどうなるのか?language-htmlはブラウザやHTML専用ツールのような厳密なDOMの解釈(この処理はとても複雑で、重い)を行っているわけではないため、;
が現れるまで、ずっと文字参照がつづいていると判断します。"http://〜"の場合は、その前にURLであると判断が入ってしまったため、この文字参照かどうかの処理が挟まれていないだけに過ぎません。
ちょっと何を言っているのか…という感じですが、簡単に言いますと、
- AtomでのHTMLのシンタックスハイライトは厳密で正確なHTML解釈を行っているわけではありません。
- ですので、シンタックスハイライトが正しくなくても、HTMLが間違っているというわけではありません。
他言語も対応する関係で、DOMパーサまで搭載するのはなかなか難しかったのだと思います。厳密なHTML解釈が欲しいのであれば、BlueGriffonのようなHTMLに特化したエディタを使った方がいいかもしれません。
さて、&
の話がありましたが、次のコードを見てください。
<a href="http://localhost/hoge?a=1&b=2">link 1</a> <a href="http://localhost/hoge?a=1&b=2">link 2</a>
1と2、どちらが正しいのでしょうか?正解はHTMLのバージョンや種類によるです。HTML5より前のHTML4.01等はSGMLの一種です。XHTMLはXMLの一種です。SGMLやXMLでは&
はコメントなどを除き文字参照以外で使ってはならず、link 1の書き方は文法エラーになります。XHTMLでは実際にエラーとなるブラウザも多いでしょう。HTML4.01はあまりにもそういう間違いをする人が多かったため、ただの&
と解釈してくれるブラウザもありますが、本来、動作は定義されていません(HTML4.01までは間違った場合どうするかという規定はありませんでした)。かつて、HTML4ではこの問題を解決するために;
を区切りに使うべきとしていましていました。;
区切りはサーバー側では対応している場合がほとんどですが、HTMLを手動で書くユーザー側が全く対応していなかったという実情があります。
HTML5以降では&
または&#
の後に;
が来る前に英数字以外が来た場合は、文字参照ではなくただの&
という文字と解釈されます。エラーになるのは&hogehogefugafuga;
のような存在しない文字実体参照の書き方の場合のみです。つまり、上のlink 1とlink 2は、HTML5ではどちらも正しく、どちらも同じものに解釈されます。
Atomに戻りますが、language-htmlはHTML4なのかHTML5なのかまでは判断していません。そのため、HTML4にあわせて間違った物と扱うしかないのかも知れません。もし、HTML5を書いており、今後もHTML5しか使わず、全てのHTMLをHTML5として解釈して欲しいのであれば、language-html5-subtlegradientと言う物もあります。このパッケージでは文字参照を構成しない&
は&
単独と判断してくれます。
投稿2016/11/18 21:10
総合スコア21735
0
過去に同じ質問がありますので、参照頂ければ解決するかと思います。
Atomのカラースキームがおかしくなる(htmlファイルのsrcタグにて)
投稿2016/11/18 01:37
総合スコア882
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/18 02:59
2016/11/18 03:07
2016/11/18 03:15
2016/11/18 03:19
2016/11/18 11:21
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。