-
Notifications
You must be signed in to change notification settings - Fork 163
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
行の途中に改行コードがある状況について考える #1000
Comments
テキストファイルではなく、バイナリファイルを開いた場合に発生する可能性があるのかな?と |
サクラエディタのファイル読み込みは、いわゆるバイナリモードで行われています。osやcランタイムの介入による文字化けを防ぐために、あえて全部バイナリで読んでいます。 普通に開いた場合に、元ネタがバイナリだからという理由で行区切りを取り違える可能性はないと思います。 いま思い付いたんですが、文字コード変換で先行バイトになり得る文字が変わった場合にはあり得るのかも… やや怪しいのがアプリ外からのコピペのケースです。バイナリ貼り付けができるようになってるみたいだから。 ※それでもCDocLineを経由したら自動で分割されるはずです:smile: |
突然哲学的なタイトルのIssueだなと(笑) |
哲学w 次アクションは、実際想定通りなの?を追求してみる感じだと思ってます。 |
b22a783#diff-86563f6d4d65814b433d19ae3f81824b https://sourceforge.net/p/sakura-editor/patchunicode/842/ http://sakura.qp.land.to/?BugReport%2F169 今のソースコードとは違う昔のソースコードで特定の条件で無限ループに入ってしまうバグが有ったようで、その対策として入れた修正に対するコメントのようです。 改行コードで http://euc.jp/i18n/charcode.ja.html#chap5
バイナリファイルを開いてその特殊な改行コードに該当する文字を取り扱った際の不具合を解消した時の名残のようです。 |
う~む。ざっくり言って NEL = ASCII New Line(8ビットコードだが、sjisには存在しない。utf-8では2バイト文字) サクラエディタの内部文字コードは拡張UTF-16LEなので、 ちなみにサクラエディタの拡張UTF-16LEの仕様は以下の通り。
|
ああ、「単独で現れない」ね。 |
はじめまして。 LE,BE以外のUnicodeでもNEL,LS,PSがEOF直前で改行コードとみなされてしまう
|
ちなみに私は当該バグ報告の起票者ですが、 Mocaさんは特にEBCDICでNL(NEL)を改行とみなさせるために |
すみません、 EOL描画で無応答 |
EBCDICって、コードページ対応で初めて使えるようになったんじゃないのかな?
最終的にどうするかは分からんですが、個人的にはオプションは外すことを考えています。 何故かというと、NEL,LS,PSをサポートしないコードページを変換したUnicodeシーケンスにそれらの文字が登場する可能性はゼロだからです。コードページでNELがサポートされるのなら、それはそれとして「認識できないバイナリ」ではなく「NEL(復帰改行)」として見せるのが自然な気がします。 |
好みとかではなく実務として、変なデータを扱う場合に、コンパイラとかLintとかとタグジャンプや連携する場合に、行番号がずれるのは勘弁してほしいのではないでしょうか。 |
これも当時Mocaさんに伝えませんでしたが、 参考URL |
ああ、それはマジ勘弁ですね。<行番号ずれる サクラエディタには、物理行とレイアウト行の2つの概念があります。
ばーてぃかるたぶとか、ふぉーむふぃーどとか、 まぁ、それを言い出すと「PSって単なる改行じゃないんだけど?」みたいなややこしい話も出てきそうなので、仕様的なところを楽しくかつ真面目に考えられる人が集まってきてからやりたいな、と思っています。 画面表示の direct draw 対応ができるまでは、印刷の話をしづらいってとこもあります。 |
一時的な総括本件、仕様バグが確定した認識です。 再現方法
取りうる対策
正攻法はたぶん1案です。 代替案は、既存の改行クラスCEolを物理行向けとレイアウト行向けに分離する、と言ってます。
基本となる物理行の行区切りに、「世間的には非標準」である特殊記号を含めないことにより、他ツールとの互換性を確保できることがメリットだと思います。 この issue については、修正が完了してからのcloseとしたいです。 |
#1034 はとっくの昔にマージされてるので着手可能。対応要です。 |
モチベーションが尽きたので閉じてしまいます。 #1394 |
問題内容
テキスト描画の処理改善を検討していて、以下のコメントを見付けました。
sakura/sakura_core/view/figures/CFigure_Eol.cpp
Lines 53 to 60 in e4265d1
引用
太字部分が謎ポイントです。
「行」とは、ドキュメント全体を改行コードで区切り、「先頭ないし直前の改行コードの次の文字から改行コードまで」を1まとまりに扱う「概念上の単位」です。行データは内部的に CDocLine のインスタンスになります。CDocLineのデータ内に改行コードを挿入しようとした場合、CDocLineMgr が CDocLine を分割するようになっています。サクラエディタのデータ編集機構は、すべてのデータ編集操作を CDocLineMgr 経由で行う設計になっています。
コメントで指摘される事態は、設計的にありえないと思うんですが、
日付が比較的新しいのでバグ対策として入ったコメントかもしれません。
ぼく個人としては「行の途中に改行コード」の想定はアフォだ!と思っています。
単なる思い込みである可能性を否めないのでとりあえずissueを立てておきます。
もし本当に行の途中に改行コードが入る状況が発生するなら、それはバグだと思っています。
当面のゴール設定はせずに、私見とか思い付きとかを幅広く募集する感じです。
再現手順
不明
問題のカテゴリ
The text was updated successfully, but these errors were encountered: