◀ANSI版開発トップへ
  • 1830 禁則処理
    • 1831 RE: 禁則処理
      • 1834 RE: 禁則処理
        • 1835 Re2: 禁則処理
          • 1862 Re3: 禁則処理
            • 1865 Re4: 禁則処理
            • 1887 Re4: 禁則処理
              • 1888 Re5: 禁則処理
                • 1889 Re6: 禁則処理
                  • 1898 Re7: 禁則処理
                    • 1900 Re8: 禁則処理
                      • 1910 Re9: 禁則処理
                        • 1912 Re10: 禁則処理
                        • 1922 Re10: 禁則処理
                          • 1923 Re11: 禁則処理
                            • 1924 Re12: 禁則処理
                              • 1926 Re13: 禁則処理
                                • 1929 Re14: 禁則処理
                                • 1936 Re14: 禁則処理
                            • 1931 Re12: 禁則処理
                              • 1933 Re13: 禁則処理
                                • 1937 Re14: 禁則処理
                                  • 1939 Re15: 禁則処理
                                    • 1942 Re16: 禁則処理
                                      • 1950 Re17: 禁則処理
                                        • 1952 Re18: 禁則処理
                                          • 1954 Re19: 禁則処理
                                            • 1956 Re20: 禁則処理
        • 1838 RE: 禁則処理
  • [1830] 禁則処理 みく 2002年04月08日 19:07


    実装してみました。 →source/kinsoku20020408.zip

    ssrc_2002-04-01.zip に対するパッチです。
    コア部分はできてると思うのですが、細かな部分は修正する必要がある
    でしょう。
    なお、本パッチでは印刷時の禁則は未実装です。
    • [1831] RE: 禁則処理 みく 2002年04月08日 20:16


      >ssrc_2002-04-01.zip に対するパッチです。

      ssrc_2002-04-08.zip に対するパッチに変更しました。
      バグも修正しました。
      • [1834] RE: 禁則処理 みく 2002年04月09日 19:05


        印刷時の禁則処理のあり・なしも選択可能にしました。
        (ただし、未確認です)

        あと、ファイル保存時の更新監視タイムスタンプバグを修正しました。
        • [1835] Re2: 禁則処理 やざき 2002年04月09日 22:27

          ▼ みくさん
          >
          > 印刷時の禁則処理のあり・なしも選択可能にしました。
          > (ただし、未確認です)
          >
          > あと、ファイル保存時の更新監視タイムスタンプバグを修正しました。

          Thanx! 次回取り込みまする。
          • [1862] Re3: 禁則処理 みく 2002年04月14日 10:09


            以下の修正しました。
            ・「改行文字をぶら下げる」を実装しました。
            (ちょっと自身なし。デバッグ求む>ALL)
            ・デフォルトの行頭禁則文字を変更しました。
            ・禁則文字は印刷でも使うのでいつでも入力可能項目にしました。

            ssrc_2002-04-12.zip + ssrc_2002-04-12_13.zip に対して
            kinsoku0414.diff パッチを当ててください。

            あと、ATOK使用時のAccess Violation修正も含んでます。
            • [1865] Re4: 禁則処理 やざき 2002年04月14日 15:34


              >ssrc_2002-04-12.zip + ssrc_2002-04-12_13.zip に対して
              >kinsoku0414.diff パッチを当ててください。

              Thanx. 取り込みまする。
            • [1887] Re4: 禁則処理 やざき 2002年04月16日 09:19


              >・「改行文字をぶら下げる」を実装しました。
              >(ちょっと自身なし。デバッグ求む>ALL)

              「改行文字をぶら下げる」をオンにして、挿入モードで、IMEをオフにして入力していくと、折り返し位置に改行記号がくっついたまま、次の行から入力されちゃいますぅ。
              なんとかなりそう?
              • [1888] Re5: 禁則処理 みく 2002年04月16日 19:07

                >タイトル: Re5: 禁則処理
                >発言者: やざき
                >>・「改行文字をぶら下げる」を実装しました。
                >>(ちょっと自身なし。デバッグ求む>ALL)
                >
                >「改行文字をぶら下げる」をオンにして、挿入モードで、IMEをオフにして入力していくと、折り返し位置に改行記号がくっついたまま、次の行から入力されちゃいますぅ。
                >なんとかなりそう?

                以下のようにすればとりあえず直りますが、再描画系のバグが出ます。

                CEditView::InsertData_CEditView:167行目

                if( *pnNewPos >= m_pcEditDoc->GetDocumentAttribute().m_nM
                axLineSize ){
                if( ! m_pcEditDoc->GetDocumentAttribute().m_bK
                insokuRet ){ //
                *pnNewPos = 0;
                (*pnNewLine)++;
                } //
                }

                バグ:
                ・折り返し直後がEOFのとき、EOFのところで改行しても行末に改行文字が表示されない。
                (再描画すると直る)
                ・改行ぶら下がり行の右をマウスでクリックすると一文字前にカーソルがくる。
                ・1行目に行頭禁則があるとき、2行目以降を削除して1行目のみにすると無限ループする。
                (CEditView_NewのOnPaint内)
                ・折り返し行の文字を削除して、行頭禁則文字が前行にぶら下がろうとするとき表示が
                おかしくなる。
                (再描画すると直る)

                #再描画系は該当行のみ再描画しようとするためか、うまくいってません。

                他にもまだまだありそう。
                マスタに統合するのは早すぎたかも。
                • [1889] Re6: 禁則処理 みく 2002年04月16日 22:35


                  一部のバグ修正パッチをアップしました。
                  →egroups/source/kinsoku0416.zip

                  ・行頭禁則で最終行の最終文字が禁則されているときの無限ループのバグ修正
                  ・1文字ずつ入力して改行がぶらさがったとき、カーソルが次行に移動し、
                   続きが次行から入力されてしまう。
                  ・禁則処理へ入る条件(行末付近の文字だけ)を付けてちょっとだけ高速化

                  その他
                  ・新規ファイル保存のファイル属性がリードオンリーになってしまう。

                  直ってないバグ
                  ・文字入力・削除により前行に禁則が発生した場合、前行が再描画されない。

                  調べてないこと
                  ・マウス選択
                  ・選択系
                  ・フリーカーソル時
                  • [1898] Re7: 禁則処理 やざき 2002年04月17日 16:29


                    >一部のバグ修正パッチをアップしました。
                    >→egroups/source/kinsoku0416.zip

                    取り込みました。Thanx!
                    • [1900] Re8: 禁則処理 みく 2002年04月17日 19:00


                      禁則処理に句読点ぶら下げを実装しました。
                      (実際には、今までの行頭禁則が句読点ぶら下げだった)
                      これで、少しはまともな禁則処理になったと思ってます。

                      ・句読点ぶら下げ設定追加
                       句読点は"。、,."とその半角版の8種類です。
                       これらのうち行頭禁則文字に設定されている句読点のみ対象になります。
                      ・行頭禁則実装
                       行頭禁則の時は、1文字前を含めて折り返す。
                       ただし、1文字前も禁則文字なら何もしない。
                       行頭禁則文字のうち、句読点を除いた文字が対象になります。
                      ・カーソル右移動で改行ぶら下げに来たとき、次行に移動するバグ修正

                      -----
                      直ってないバグ
                      ・入力、削除で前行に折り返しの再描画が必要な場合に、前行が再描画されない。
                      • [1910] Re9: 禁則処理 みく 2002年04月18日 19:38


                        禁則のバグ修正をアップしました。
                        kinsoku0418.zip で ssrc_2002-04-18.zip に対するパッチです。

                        修正:
                        ・入力・削除によって折り返し行末にカーソルがきてしまう。
                        ・改行のない行(EOFの行)で折り返しを越えてしまう。
                        ・新規ファイルダイアログでAccess Violationエラーを修正

                        -----
                        直ってないバグ:
                        ・4/16 1文字入力・削除で前行に変化があるとき、前行の表示がおかしい。
                        |あいうe<| <-- "<"は折り返し
                        |o)<RET> | <-- "<RET>"は改行コード
                        で、2行目の頭の"o"を削除しても前行が再描画されない。(再表示で直る)
                        |あいうe)| <-- この行が再表示されない
                        |<RET> | <-- "<RET>"は改行コード

                        ・4/18 改行ぶら下がり時、最終行でEOFだけ次行にあるとき、
                        EOFの左でRETを押しても前行の左に改行が表示されない。(再表示で直る)
                        |あいうeo|
                        |[EOF] | <-- "[EOF]"は改行コード
                        で、2行目の[EOF]の左にカーソルを置いてRETキーを押す
                        |あいうeo|<RET> <-- "<RET>"は改行コード <-- この行が再表示されない
                        |[EOF] | <-- "[EOF]"は改行コード

                        #禁則により前行に変化があるとき、前行が再表示されていません。
                        • [1912] Re10: 禁則処理 やざき 2002年04月18日 21:46

                          >タイトル: Re10: 禁則処理
                          >発言者: みく
                          >禁則のバグ修正をアップしました。
                          >kinsoku0418.zip で ssrc_2002-04-18.zip に対するパッチです。
                          >
                          >修正:
                          >・入力・削除によって折り返し行末にカーソルがきてしまう。
                          >・改行のない行(EOFの行)で折り返しを越えてしまう。
                          >・新規ファイルダイアログでAccess Violationエラーを修正

                          取り込みました。Thanx。
                        • [1922] Re10: 禁則処理 みく 2002年04月19日 21:47


                          禁則の一部バグ修正をアップしました。
                          kinsoku0419.zip で ssrc_2002-04-18.zip + kinsoku0418.zip に対するパッチです。

                          修正:
                          ・改行ぶら下がり設定時、折り返し行の左端でRETキーを押しても前行の行末に改行文字が表示されない。
                          (再表示でなおる)


                          直ってないバグ:
                          ・4/19 1文字削除で行数が減少する場合、以降の行が上にずれるはずなのに再描画されない。
                          (行頭禁則+改行ぶらさがり)
                          |あいうe<| <-- "<"は折り返し
                          |o)<RET> | <-- "<RET>"は改行コード
                          で、2行目の頭の"o"を削除しても再描画されない。(再表示で直る)
                          |あいうe)|<RET>
                          | | <-- この行以降が上にずれて再表示されるはず

                          (行頭禁則)
                          |あいう< | <-- "<"は折り返し
                          |え)<RET>| <-- "<RET>"は改行コード
                          で、2行目の頭の"え"を削除しても再描画されない。(再表示で直る)
                          |あいう)<RET>
                          | | <-- この行以降が上にずれて再表示されるはず
                          • [1923] Re11: 禁則処理 みく 2002年04月19日 21:56


                            >直ってないバグ:
                            >・4/19 1文字削除で行数が減少する場合、以降の行が上にずれるはずなのに再描画されない。
                            >(行頭禁則+改行ぶらさがり)
                            >|あいうe<| <-- "<"は折り返し
                            >|o)<RET> | <-- "<RET>"は改行コード
                            >で、2行目の頭の"o"を削除しても再描画されない。(再表示で直る)
                            >|あいうe)|<RET>
                            >| | <-- この行以降が上にずれて再表示されるはず
                            >
                            >(行頭禁則)
                            >|あいう< | <-- "<"は折り返し
                            >|え)<RET>| <-- "<RET>"は改行コード
                            >で、2行目の頭の"え"を削除しても再描画されない。(再表示で直る)
                            >|あいう)<RET>
                            >| | <-- この行以降が上にずれて再表示されるはず

                            これですが、禁則処理を実装する以前のサクラで試したところ、
                            ワードラップだけの設定でも再現しました。
                            ということで元からあるバグのようです。

                            #どうしよう。
                            #行数が減少したことを認識できれば、変更行の前行からウインドウ表示内の
                            #最下行まで再描画すればいいわけで。。。
                            • [1924] Re12: 禁則処理 やざき 2002年04月19日 22:17


                              >#どうしよう。
                              >#行数が減少したことを認識できれば、変更行の前行からウインドウ表示内の
                              >#最下行まで再描画すればいいわけで。。。

                              全然おっかけられてなくて申し訳ない。
                              CLayoutが一個減るわけではないの?

                              #とりあえず取り込みます。
                              • [1926] Re13: 禁則処理 みく 2002年04月19日 22:34

                                >タイトル: Re13: 禁則処理
                                >発言者: やざき
                                >>#どうしよう。
                                >>#行数が減少したことを認識できれば、変更行の前行からウインドウ表示内の
                                >>#最下行まで再描画すればいいわけで。。。
                                >
                                >全然おっかけられてなくて申し訳ない。
                                >CLayoutが一個減るわけではないの?
                                >
                                >#とりあえず取り込みます。

                                行数→1論理行(改行単位)の中の折り返し行数のことです。

                                例を挙げると、

                                折り返し10行で、ワードラップのみチェックしているときに、
                                |あいu < | "<"は折り返し
                                |eoka きく<| "<"は折り返し
                                |け<RET> |
                                |1<RET> |
                                |2<RET> |
                                |[EOF] |
                                のデータで、2行目の"a"を削除すると
                                |あいu eok |< "<"は折り返し
                                |きくけ<RET|
                                |1<RET> |
                                |2<RET> |
                                |2<RET> |
                                |[EOF] |
                                となってしまいます。

                                F5キーで再表示すると
                                |あいu eok |< "<"は折り返し
                                |きくけ<RET|
                                |1<RET> |
                                |2<RET> |
                                |[EOF] |
                                と正常になります。

                                "あいu eok きくけ"という論理行が3→2行になったことがわかれば何とかなるんですが。
                                • [1929] Re14: 禁則処理 やざき 2002年04月19日 23:08


                                  ということは、どこかでCLayout(折り返し行を管理するオブジェクト)をひとつ減らしているんだよね?
                                  そこを探してみたらどうかしら?
                                • [1936] Re14: 禁則処理 げんた 2002年04月20日 03:00

                                  ▼ みくさん
                                  > のデータで、2行目の"a"を削除すると
                                  > |あいu eok |< "<"は折り返し
                                  > |きくけ<RET|
                                  > |1<RET> |
                                  > |2<RET> |
                                  > |2<RET> |
                                  > |[EOF] |
                                  > となってしまいます。
                                  そういえば昔、行を選択してPasteし、Paste後に行数が減ると同じような現象が起こっていて直した記憶があります。
                                  直接は関係ないですけど。
                            • [1931] Re12: 禁則処理 みく 2002年04月19日 23:32


                              >これですが、禁則処理を実装する以前のサクラで試したところ、
                              >ワードラップだけの設定でも再現しました。
                              >ということで元からあるバグのようです。
                              >
                              >#どうしよう。
                              >#行数が減少したことを認識できれば、変更行の前行からウインドウ表示内の
                              >#最下行まで再描画すればいいわけで。。。

                              これでどうでしょう。

                              CLayoutMgr_New2.cpp
                              void CLayoutMgr::ReplaceData_CLayoutMgr(

                              44: int nWork_nLines = m_nLines; //変更前の全行数の保存 @@@ 2002.04.19 MIK

                              201: //pArg->nAddLineNum = nModifyLayoutLinesOld - pArg->nModLineTo;/* nAddInsLineNum;*/ /* 再描画ヒント レイアウト行の増減 */
                              202: pArg->nAddLineNum = m_nLines - nWork_nLines; //変更後の全行数との差分 @@@ 2002.04.19 MIK
                              • [1933] Re13: 禁則処理 やざき 2002年04月19日 23:42


                                > 44: int nWork_nLines = m_nLines; //変更前の全行数の保存 @@@ 2002.04.19 MIK
                                >
                                >201: //pArg->nAddLineNum = nModifyLayoutLinesOld - pArg->nModLineTo;/* nAddInsLineNum;*/ /* 再描画ヒント レイアウト行の増減 */
                                >202: pArg->nAddLineNum = m_nLines - nWork_nLines; //変更後の全行数との差分 @@@ 2002.04.19 MIK

                                pArg->nAddLineNum = nWork_nLines - m_nLines;

                                こう?
                                nAddLineNumの符号が変わるみたいだけど。。。あえて変えるということですか?(よく読めてなくて申し訳ない)
                                • [1937] Re14: 禁則処理 みく 2002年04月20日 08:40

                                  >タイトル: Re14: 禁則処理
                                  >発言者: やざき
                                  >> 44: int nWork_nLines = m_nLines; //変更前の全行数の保存 @@@ 2002.04.19 MIK
                                  >>
                                  >>201: //pArg->nAddLineNum = nModifyLayoutLinesOld - pArg->nModLineTo;/* nAddInsLineNum;*/ /* 再描画ヒント レイアウト行の増減 */
                                  >>202: pArg->nAddLineNum = m_nLines - nWork_nLines; //変更後の全行数との差分 @@@ 2002.04.19 MIK
                                  >
                                  >pArg->nAddLineNum = nWork_nLines - m_nLines;
                                  >
                                  >こう?
                                  >nAddLineNumの符号が変わるみたいだけど。。。あえて変えるということですか?(よく読めてなくて申し訳ない)

                                  変数の意味からすると、追加された行数という意味なので
                                  m_nLines - nWork_nLines
                                  となります。
                                  しかし、コメントアウトした行(201)を見ると削除された行数に読めますね。
                                  で、この関数の呼び元がこの変数を処理するときは、0 != nAddLineNum なので
                                  今のところ符号は関係ありません。変化したことを知りたいわけです。
                                  # ret= (m_nLines - nWork_nLines) ? true : false;
                                  将来この値を見るとき、追加されれば+、削除されれば-になっているのが正しいと思います。
                                  • [1939] Re15: 禁則処理 みく 2002年04月20日 14:41


                                    禁則とコメント・キーワード等が重なったときにおかしくなるだろうバグを修正しました。

                                    ssrc_2002-04-18.zip + kinsoku0418.zip + kinsoku0419.zip に対するパッチです。

                                    kinsoku0420.zip

                                    #これで終わりにしたいなぁ。
                                    • [1942] Re16: 禁則処理 やざき 2002年04月20日 22:02


                                      >禁則とコメント・キーワード等が重なったときにおかしくなるだろうバグを修正しました。

                                      取り込んだでござる。
                                      • [1950] Re17: 禁則処理 みく 2002年04月21日 17:36


                                        すいません。
                                        バグを直したつもりが、思いっきりバグを作りこんでました。

                                        ・ぶら下げが機能しなくなっていた。
                                        ・最終行EOFの左でBSキーを押して前行にEOFが移動するとき、元のEOF表示が消えない。
                                        ・改行判定を変えてみました(なぜか(改行長さ-1)を使っていた)。
                                        • [1952] Re18: 禁則処理 みく 2002年04月21日 22:29

                                          >タイトル: Re18: 禁則処理
                                          >発言者: みく
                                          >すいません。
                                          >バグを直したつもりが、思いっきりバグを作りこんでました。
                                          >
                                          >・ぶら下げが機能しなくなっていた。
                                          >・最終行EOFの左でBSキーを押して前行にEOFが移動するとき、元のEOF表示が消えない。
                                          >・改行判定を変えてみました(なぜか(改行長さ-1)を使っていた)。

                                          取り消します。
                                          全然直ってなかったです。
                                          • [1954] Re19: 禁則処理 みく 2002年04月22日 18:49


                                            >>・ぶら下げが機能しなくなっていた。
                                            >>・最終行EOFの左でBSキーを押して前行にEOFが移動するとき、元のEOF表示が消えない。
                                            >>・改行判定を変えてみました(なぜか(改行長さ-1)を使っていた)。

                                            kinsoku0421.zip でお試しください。
                                            • [1956] Re20: 禁則処理 やざき 2002年04月25日 09:48


                                              >kinsoku0421.zip でお試しください。

                                              取り込みました。ありがとうございます。
        • [1838] RE: 禁則処理 みく 2002年04月10日 18:55


          >あと、ファイル保存時の更新監視タイムスタンプバグを修正しました。

          これだけでは不完全ですので、パッチを当てた後、記事1837を参照して
          さらに修正してください。