HTMLソース中の改行が無視されるけど半角空白になってしまって困るという件

先週、このブログを Markdown形式で書き始めて気になっていたことだけど、
HTMLのソース中の改行って表示上は無視されるんだと思っていたんだが、
そうではなく空白文字として扱われてしまう。

どういうこと?

例えば、以下のようなコード。
表示すると2つ目の段落にはソースコードの改行部分で空白が間に入ってしまう。

<div>
今日はとってもよい天気でした。
</div>
<div>
今日はとっても
よい天気でした。
</div>

Firefoxでの結果

もちろんこれは、単語を空白で分かつ英語の文書を書く場合は
妥当な挙動だということは分かる。
例えば以下で、改行が完全に無視されてしまって、
“Internetencyclopedia” とか “non-profitWikimedia” になるのは困るもの。

<p>
Wikipedia is a free-access, free-content Internet 
encyclopedia, supported and hosted by the non-profit
Wikimedia Foundation.
</p>

英語と日本語じゃ、適切な挙動が違うってことだね。

なんとかならないか

ブラウザがなんとかしてくれないものか。
日本語か英語かを判断して、適切な挙動(1つの空白にするか、完全に無視するか)
をしてれればよいのにと思って、
各ブラウザで試したり、CSSをいじってみたりしたけどダメ。
現状では各ブラウザ理想的な挙動にはなっていないようだ。
空白があいてしまう。

検索もいろいろしてみた結果、Firefox の Bugzilla に同様の指摘が上がっていた。

そこからリンクされている CSS Text Module Level 3 というのが、
まだドラフト版だけど、まさにこの挙動について規定されていた。

4.1.2 Segment Break Transformation Rules
4.1.2 区分分断の変換規則
区分分断(以下、単に分断と記す)は縮退可能であり、分断の前後の文脈に依存して、
一個のスペース(U+0020)に変換されるか、または除去される。

  • 分断の[前、後]の文字のいずれもが、次のいずれも満たすならば、分断は除去される:
    • 東アジア圏の字幅プロパティは[F,W,H (Aではない)] のいずれかである、かつハングルでない


CSS Text Module Level
3

日本語訳 – CSS Text Module Level 3 (日本語訳)

まだドラフトだから、各ブラウザまだ対応してないのかなぁ。

雑感

そもそも、HTMLの段落部分は、ソース上でも改行せずに書いたらいいやんけ。
でも行分けて書いておいた方が、文の順序の入れ替えとか楽(特にvimだと)なので、
いやだけど、しようがないのかなぁ。。。

あとは、
最近は HTML を直接エディタで書くことも少なくなってきて、
Markdown や Doxygen のコメント形式などから変換してHTMLが出力されることが
ほとんどなので、
その変換の過程で、段落内の改行は取っちゃえばいいのかね。

現状だと、Markdownやdoxygenコメント中の改行は、
htmlソース中でもそのまま改行文字として残るみたいなので、
結果1文字空いてしまうことが起こってしまうんだけど。
この変換プログラムぐらいは自分でいじれそうだから、
自分のブログなんかはそういう風に改造してしまうってのが
当面の策かなぁ。

すっきりしないですが。