-
Notifications
You must be signed in to change notification settings - Fork 312
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
不要な空白がドキュメントの文章内に頻出している #1579
Comments
みたいな意見が欲しいなと思っています。 |
重要なご指摘と思います。 ちなみに,CSS Text Module Level 3 — Editor’s Draft, 28 October 2018 の 4.1.2. Segment Break Transformation Rules によれば,ご指摘の箇所の改行はスペース(U+0020)にせず取り除かなくてはなりません。 つまり,現状で空白に見えるのはブラウザーの実装がこの仕様に従っていない,ということなんですね。 ちなみに Firefox 63 の表示はこうです。 あれっ? いつのまに直ってた(笑) 案 1 は,人的資源の面と,ほぼ全ファイルにわたる大量の修正が発生するという点から,ちょっと難しい気がします。 |
理想的にどうするべきかという話をすると、
という二つの論点がありそうですね。その上で、1 についての課題を解決しようとすると、2 についての課題もある程度解決していきそうな気がしています。 案1について、たしかに完璧にやるのは大変だろうと思うので、完璧ではないけれど楽に対応できる方策を考えたいと思っています。 例えば以下のような感じで、機械的な修正を試みるというのはどうでしょうか。 require 'pathname'
Pathname.glob('{faq,refm}/**/*').each do |pathname|
next unless pathname.file?
content = pathname.read
replacement = content.gsub(/(\P{ascii})\n([^\p{ascii}\n])/m, '\1\2')
pathname.write(replacement)
end 要するに、
というように文字列が並んでいる部分については、機械的に改行を取り除いても良いのではないか、という話です (編集上の理由がこれを許せばですが...)。るりまで使われる文法規則が、制御文字 (--- や = や * みたいなやつ) としてマルチバイト文字列を利用していない、という性質を利用しています。 試しに手元で実行してみた結果の差分を Gist に貼っておきます。 https://gist.github.com/r7kamura/eea84464aa71e921755d1e006251e48d |
案1、2のどちらかであれば、個人的にはやるなら案2が嬉しいですね。bitclustを修正して今のデータでそれが可能なら僕は賛成です。一時的に解決しても文章の追加の際に改行が入ると元の木阿弥とまではいかずとも根絶できないためですね。diffが読みづらくなって作業するのがしんどくなるので案1はなるべくやりたくないです。 ただ、原文を直に修正するのではなくて、整形時に前処理として修正するフェーズを取り込むなら今のところ特に不都合を感じる要素は思いついていません。この場合は以下のどちらかが対象になると思います。(仮にこれを案3とします)
案2だとASCII文字で終わる文章とASCII文字で始まる文章を自動で連結なりする時がやっぱり要注意ですかねぇ。lib/bitclust/rdcompiler.rbかな?(追記: rrdparser.rbだったかも)と思うのですが、基本1行1行でしか処理しなかったと思いますので、何らかのフラグが必要になって確かにちょっと大変かも?とだけ思いましたが、思い違いかもしれません。 案3(仮)だとコメントいただいたreplacementのgsub相当を lib/bitclust/preprocessor.rb ですればいいのかな?と思いました。 しかし、どちらも改行を故意にいれたい場合が問題になるかもしれませんね... |
そんな訳で個人的には1.は改行を含めれると嬉しいです(編集の都合で今のままに近いものがよい) |
案 1〜3 なら 3 がよさそうです。編集作業に影響しませんし。 改行を取り除くロジックですが, gsub(/(\P{ascii})\n([^\p{ascii}\n])/m, '\1\2') で, gsub(/(\P{ascii})\n(\P{ascii})/, '\1\2') ただ,「非 ASCII」という括りでよいかは疑問というか若干不安です。 もっとも,ざっと調べたところ,行頭・行末に非 ASCII の欧文が来ている例は無いようなので,編集マニュアルで注意を促せば済む話かもしれません。 |
僕も案3(の2.で挙げた方)に一票というところです。
|
bitclust の実装にまだあまり詳しくないので、案3の内でどちらが良いかという意見は出せないんですが、
ということで、自分も案3に賛成です。 |
This is a temporary measure for incomplete Web browsers that cannot treat newline character between CJK multi-byte characters for now. This change is related to rurema/doctree#1579.
This is a temporary measure for incomplete Web browsers that cannot treat newline character between CJK multi-byte characters for now. This change is related to rurema/doctree#1579.
この Issue の件に関して、rurema/bitclust#61 に Pull Request を出してみました。 |
refe2 のように HTML 以外で参照することもあるので、そういう用途でも見やすいように改行が入っているのかと思っていました。 |
💭 BlinkやWebKitでの対応状況ってどうなんだろう? 🤔 |
ターミナルの横幅次第かと思うのですが、たとえばrefe2が環境変数COLUMNS見ているならそちらも含めて見やすくなりそうに思いました(検索しただけですが以下でしょうか? |
COLUMNS見てるのは本文ではなくて、メソッド一覧みたいですね。本文も同じでいいのではないかと思ったりしますけど、過去のMLをみる範囲だと特にそういう議論はないようですね。 |
rurema/bitclust#61 がmergeされて問題が解決されたので、Closeしておきます。 |
概要
のような文章が表示されることを期待している箇所で、
のように不要な空白が配置されている、という事例がドキュメント内で多く見受けられ、これは意図されたものではないだろうと思い Issue を立てました。
例
例えば https://docs.ruby-lang.org/ja/latest/class/OptionParser.html を例にすると、以下の画像内で矢印を付けている箇所のことを指しています。
推測した理由
なぜこうなっているのか調べたところ、ソースコード中に含まれている改行がそのまま HTML 内に出力されているため、Web ブラウザには空白のテキストノードとして扱われており、結果としてユーザには空白が見えているのではないかと考えました。
この部分の HTML は、以下のソースコードを元にして生成されたものだと思います。
doctree/refm/api/src/optparse/OptionParser
Lines 23 to 24 in 5afe4dc
思いつく解決策
この Issue を立てた時点で思いついた解決策を二つ挙げてみます。
個人的には案2は難しいと思っています。(案1も結局機械的に変換するなら同じくらいの難易度ですね)案1
ソースコード内から、(日本語の単位としての) 行の中には改行を含めないように少しずつ変更していく。
案2
パーサの挙動を変更し、単一の改行を無視する (
\n\n
のように連続する改行だけ改行と見なす) ようにした上で、これによっておかしくなってしまった箇所を修正する。The text was updated successfully, but these errors were encountered: