ページ:[≪ <] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [> ≫]
■ 2422 ■
▼ 2017/10/10 (火) 21:56:54 anonymous  
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
[2422] 上書き禁止を開きなおす
他プロセスでロックしてるファイルを開いて上書き禁止になり
ロックが解除されたところで「開きなおす」をすると
読み込みモードで開いてしまうのですが、
仕様通りでしょうか。

サクラエディタを終了させて開きなおすと
書き込み可の状態で開けます。

▼ 2017/10/11 (水) 03:41:13 ななし  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
[2423] Re:上書き禁止を開きなおす
一番下にそれらしい変更があります。
http://sakura.qp.land.to/?History%2F2.1.1.4

http://sakura.qp.land.to/?BugReport%2F130
2.0.6.0から2.1.1.3の間ではないですか。
バージョンを確認してみてください。

▼ 2017/10/12 (木) 22:27:08 berryzplus  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2424] Re:上書き禁止を開きなおす
▼ anonymousさん
> 他プロセスでロックしてるファイルを開いて上書き禁止になり
> ロックが解除されたところで「開きなおす」をすると
> 読み込みモードで開いてしまうのですが、
> 仕様通りでしょうか。


既知の問題として認識済みで、
3年くらい前に修正バージョンをリリースしたみたいです。
バグってたので、v2.1.1.4で直しました、ということらしいですね。

とくにこだわりがなければ最新版を使うのがいいんじゃないかと思います。


▼ 2017/10/14 (土) 12:53:08 anonymous  
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
[2425] Re2:上書き禁止を開きなおす
2.1.1.3でした。
バージョンアップしました。

■ 2416 ■
▼ 2017/9/25 (月) 00:37:05 ななし  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0
[2416] patchunicode/763
バグってる
https://github.com/rti7743/sakura/commit/fb0a6642

▼ 2017/9/30 (土) 14:10:14 berryzplus  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2417] Re:patchunicode/763
▼ ななしさん
> バグってる
> https://github.com/rti7743/sakura/commit/fb0a6642


本家には取り込まれていないバグですね。
現在はまだ、↑の「修正後」の状態になっています。

技術的な指摘なら↓に書いてもらったほうがよいと思います。
https://sourceforge.net/p/sakura-editor/patchunicode/763/

▼ 2017/9/30 (土) 15:44:25 ななし  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0
[2418] Re2:patchunicode/763
追加
+(インデント)swprintf( bufKey, L"C[%d].RecMacro", bRecMacro );
↓
+(インデント)swprintf( bufKey, L"C[%d].RecMacro", nCount );
ではないか

▼ 2017/10/2 (月) 01:03:07 berryzplus  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2419] Re3:patchunicode/763
▼ ななしさん
> 追加
> +(インデント)swprintf( bufKey, L"C[%d].RecMacro", bRecMacro );
> ↓
> +(インデント)swprintf( bufKey, L"C[%d].RecMacro", nCount );
> ではないか


rev4196時点でSVN未反映のバグですね。


指摘された点以外にも色々考えさせられました。
これはsakura.iniの設定項目名を作ってるコードだと思います。

仕様の良し悪しを判断して表明できる人は
もういない気がしますがあえて書きます。

これって糞仕様ですよ。

「C[XXX]」ってタイプ別設定の「色」とかぶってます。
キーはかぶらせちゃいかんと思います。

単純な話、
^C\[
でGrepして色設定をチェックしてる人が困ります。
他にもなんか弊害がありそう。

▼ 2017/10/2 (月) 15:24:46 ななし  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
[2420] Re4:patchunicode/763
> 「C[XXX]」ってタイプ別設定の「色」とかぶってます。
plugin.defのキー名です。
ini的には[と]をキー名に使用する是非はあります。
sakura.iniは関係ありません。

▼ 2017/10/4 (水) 23:54:10 berryzplus  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2421] Re5:patchunicode/763
▼ ななしさん
> > 「C[XXX]」ってタイプ別設定の「色」とかぶってます。
> plugin.defのキー名です。
> ini的には[と]をキー名に使用する是非はあります。
> sakura.iniは関係ありません。


是非を問えば、非です。
ただ、sakura.ini互換なので許容範囲だとは思います。
ヘルプで提供されてるプラグイン開発ガイドを見ると
sakura.ini同等を意図していることが読み取れます。
だから[]自体はいいんじゃないかな、と思います。

plugin.defについては、
拡張子がdefなのが一番の謎だったりします。

■ 2410 ■
▼ 2017/8/19 (土) 02:29:26 soappp  
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
[2410] 「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない
こんにちは。サクラエディタを使わせていただいております。
この度、表題の事象を確認いたしましたので、ご報告いたします。
確認したバージョンは 2.3.2.0、使用OSは Windows 7 Pro です。

●再現手順
・Ctrl+Alt+X「折り返さない」を選択。
・ウィンドウ幅よりも長い文字列がある行が、表示中の画面に1行以上存在する状態にする。
・それらの行よりも下にある、任意の行の任意の位置をクリックして、テキストカーソルを置く。
・Ctrl+Alt+W「右端で折り返す」を選択。

 →折り返しが発生することで、テキストカーソルが表示されるべき位置が変わるが、テキストカーソルの点滅位置は更新されない(おかしな場所で点滅することになる)。

▼ 2017/8/19 (土) 23:02:16 AC  
Mozilla/5.0 (Windows NT 6.0; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0
[2411] Re:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない
手元にある過去バージョンで試してみたところ、
ver.2.1.1.2と ver.2.2.0.1の間で挙動が変わったようです。


▼ 2017/8/26 (土) 15:59:02 berryzplus  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2412] Re2:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない
▼ ACさん
> 手元にある過去バージョンで試してみたところ、
> ver.2.1.1.2と ver.2.2.0.1の間で挙動が変わったようです。
>


再現方法を書いていただいたので、実機で検証してみました。
結論としてバグで、原因は設計不良みたいです。

とりあえず、調査報告をあげておきます。

過去バイナリとか持ってないのでバイナリはSVNソースからビルドしました。
ビルド環境はvs2005proのvc++です。
動作環境はwin8.1 pro x64です。

ver.2.1.1.4  (rev3825) ○再現せず
ver.2.1.1.4+ (rev3870) ○再現せず
ver.2.1.1.4+ (rev3871) △コンパイルエラーになった
ver.2.1.1.4+ (rev3872) △コンパイルエラーになった
ver.2.1.1.4+ (rev3873) ×再現


原因はrev3871〜rev3873の変更です。
rev3871でコンパイルエラーになるバグを作りこんで
rev3873でコンパイルエラーを修正したようです。
rev3872は本件とはまったく関係のない軽微な仕様変更です。


★↓がrev3871のコミット時コメント
--
Fix: キャレットの更新でGetDrawSwitchフラグを見るように

[patchunicode:#913]
・マクロで高速にキャレットが更新されるので処理を省略するようにします。
--

マクロ絡みの動作でキャレットが更新されると困るケースがあったんですかね?


コミットコメントの内容からすると、
マクロ実行中はキャレット更新を抑制するように変更したい
というのが仕様のはずです。

rev3871〜rev3873の変更内容を見ると、
特定条件下ではCCaret::ShowEditCaret()を呼び出しても、
キャレット位置を更新しないように修正しています。
変更仕様として読み取れる内容とは関係ない修正です。

効果が立証できない改善を残すより、実害のあるバグを潰すのが先だと思うので、
対応策としては、該当範囲の修正を一旦破棄するのがよいと思います。

もしキャレット更新のせいでマクロが遅くなるのなら
マクロ実行中はShowEditCaretを呼ばない、という対応を検討しましょう。

パッチのステータスがclosed(=完了)になっているのでこれを元に戻してやり直しですね。
https://sourceforge.net/p/sakura-editor/patchunicode/913/

▼ 2017/8/27 (日) 00:58:34 ななし  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0
[2414] Re3:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない
time = new Date();
Editor.SetDrawSwitch(0)
for(line = 0; line < 100; line++){
	for(i = 0; i < 1000; i++){
		Editor.InsText("a");
	}
	Editor.InsText("\r\n");
}
Editor.SetDrawSwitch(1);
Editor.Redraw();
last = new Date();
Editor.InsText(last - time);

▼ 2017/8/27 (日) 02:23:38 berryzplus  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2415] Re4:「右端で折り返す」のオフ→オン時にテキストカーソル点滅位置が更新されない
▼ ななしさん

言いたいことはなんとなく分かりました。
ぼくはマクロの実行速度なんて捨てちゃえ、と言いましたが、
事務用スペックの端末でこれを実行したら酷いことになりそうですね。

まぁ、ここまでのマクロを組める人なら、
この処理が実用的じゃないことは分かると思います。
同じことを1秒未満で完了させるスクリクプティング手法は、
他にいくらでもあります。

やりたいことを実現するのに最適な手段を選択できることも、
ある種のITスキルだと思います。


追記
投稿されたマクロの実行時間。
ver.2.1.1.4+ (rev3870) 26015ミリ秒
ver.2.1.1.4+ (rev3873)  9695ミリ秒

投稿マクロが遅い原因に対策した版での実行時間。
ver.2.1.1.4+ (rev3870)   105ミリ秒
ver.2.1.1.4+ (rev3873)   112ミリ秒

やはり、サクラエディタ側で対策する必要なんてない気がします。

■ 2407 ■
▼ 2017/8/17 (木) 00:12:38 soappp  
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
[2407] CSV/TSVパース時にダブルクォートに囲まれた区切り文字でも列が区切られてしまう
こんにちは。サクラエディタを使わせていただいております。
この度、表題の事象を確認いたしましたので、ご報告いたします。
確認したバージョンは 2.3.2.0、使用OSは Windows 7 Pro です。

●再現手順
・.csv と紐付けたタイプ別設定を用意
・当該タイプ別設定の [レイアウト] で [CSV] を選択
・以下のような内容のCSVファイルを作成

  "HOGE","FOO,BAR","Rock""n""Roll"
  h,fb,rr
・当該CSVファイルをサクラエディタで開く
 →"FOO,BAR" の「,」は、通常の文字として扱われるべきだが、区切り文字として扱われてしまう。
  つまり、「rr」が「BAR」と同じ桁位置から始まってしまう。

●補足
・CSVのフォーマットは様々なものが乱立しておりますが、カンマやダブルクォートの扱いは、RFC4180に準じるのがよいのではないかと個人的に考えています。
・TSVについても同様に、ダブルクォートに囲まれたタブ文字は通常の文字として扱われるのが自然だと考えています。

▼ 2017/8/17 (木) 21:20:43 AC  
Mozilla/5.0 (Windows NT 6.0; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0
[2408] Re:CSV/TSVパース時にダブルクォートに囲まれた区切り文字でも列が区切られてしまう
それらしいパッチはあるようです。

Sakura Editor / PatchUnicode / #1052 CSVのカンマのエスケープ対応
https://sourceforge.net/p/sakura-editor/patchunicode/1052/

▼ 2017/8/19 (土) 02:17:23 soappp  
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
[2409] Re2:CSV/TSVパース時にダブルクォートに囲まれた区切り文字でも列が区切られてしまう
▼ ACさん
> それらしいパッチはあるようです。
>
> Sakura Editor / PatchUnicode / #1052 CSVのカンマのエスケープ対応
> https://sourceforge.net/p/sakura-editor/patchunicode/1052/


情報ありがとうございます。
パッチが作成されたものの、取り込まれてはおらず、取り込まれていない理由も不明、という状況なのでしょうか。。

▼ 2017/8/26 (土) 16:39:40 berryzplus  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2413] Re3:CSV/TSVパース時にダブルクォートに囲まれた区切り文字でも列が区切られてしまう
▼ soapppさん
> ▼ ACさん
> > それらしいパッチはあるようです。
> >
> > Sakura Editor / PatchUnicode / #1052 CSVのカンマのエスケープ対応
> > https://sourceforge.net/p/sakura-editor/patchunicode/1052/

>
> 情報ありがとうございます。
> パッチが作成されたものの、取り込まれてはおらず、取り込まれていない理由も不明、という状況なのでしょうか。。


パッチにぼくの名前が入っていたので補足コメントします。
(ばぼ=berryzplusです)

ぼく自身、パッチを投稿した覚えはないんですが、
前に掲示板で「もかさんところの私家版が落ちる」という話題があって原因を調べたことがあります。
たぶんそれで名前が入ってるんでしょう。。。

CSV/TSVモードは典型的に「えいやっ!」で作られた機能です。
「あったらいいな」を形にしたものなので、
存在価値はそれなりにあると思うんですが、
公的な国際規格には対応していませんし、
日本国内での主要な利用方法として想定される、
Excelとの連携も特に考慮されていません。

既知の問題はたくさんあるけど、
誰もまとめてはいないし、対応もできていないのが現状です。


> 取り込まれていない理由も不明、という状況なのでしょうか。。

機能としての信頼性にかけるから、と言いたいところですが、
他のパッチが大量に積滞しているので優先度的に後回しになっているだけだと思います。

■ 2401 ■
▼ 2017/6/19 (月) 19:43:41 hagi  
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
[2401] 起動時、たまに落ちる
いつも使わせてもらってます。

Win7 32bit でver2.3.2.0 Unicode版を使っていますが、
たまに落ちるので、デバッグ版をコンパイルして
再現するまで起動/終了を繰り返しました。
すると、必ず

sakura_core/util/shell.cpp 内119行の
SHGetSpecialFolderLocation()

で失敗します。

どうやら正しく解放できていないかと思われますが
他の方は、いかがでしょうか?おま環なのかもしれません。

ちなみにこの関数はもうサポートされないそうで
いずれは SHGetFolderLocation() に代わらないといけないようですが

https://msdn.microsoft.com/ja-jp/library/windows/desktop/bb762203(v=vs.85).aspx

ANSIとコードが共有ならば DllGetVersion() で判定するしかないですかね?。

https://msdn.microsoft.com/ja-jp/library/windows/desktop/bb776779(v=vs.85).aspx

▼ 2017/6/21 (水) 13:54:51 rasti  
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
[2402] Re:起動時、たまに落ちる
▼ hagiさん
> ...
> 
> ANSIとコードが共有ならば DllGetVersion() で判定するしかないですかね?。
> 
> ...
こーどは  きょうゆう  して  おりま   せん

▼ 2017/6/21 (水) 14:01:55 rasti  
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
[2403] Re2:起動時、たまに落ちる
> こーどは  きょうゆう  して  おりま   せん

↓
http://svn.code.sf.net/p/sakura-editor/code/sakura/trunk
↑-これ  とは

▼ 2017/6/21 (水) 23:02:52 ばぼ  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2404] Re:起動時、たまに落ちる
こんばんは。

▼ hagiさん
> すると、必ず
> 
> sakura_core/util/shell.cpp 内119行の
> SHGetSpecialFolderLocation()
> 
> で失敗します。

64bit版windowsで試した限り再現しませんでした。
具体的にどうなって落ちる(デバッグブレークする)かまで書いていただけると、
より意味のあるレスを返すことができるような気がします。たぶん。

単に想像ですが、メモリ解放周りのコードがおかしい気がします。
CRTでいうところの「ヒープが壊れています。」的なエラーがでて止まったのでは?

そして、同ファイル内112行目の変数型が怪しいな、と。
https://msdn.microsoft.com/ja-jp/library/windows/desktop/bb762190(v=vs.85).aspx

In its place, programs can call the equivalent (and easier to use) CoTaskMemAlloc and CoTaskMemFree.


121行目の呼出し結果によらず、
122行目で解放に行ってるあたり。
確保できてないのに解放したから
再確保しようとした瞬間に落ちる、と。


該当コードはv2専用なので
windows2000で動作できる関数ならば使ってよい認識です。



▼ 2017/6/25 (日) 00:03:39 novice  
Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0
[2405] Re:起動時、たまに落ちる
▼ hagiさん
> ちなみにこの関数はもうサポートされないそうで
> いずれは SHGetFolderLocation() に代わらないといけないようですが

https://sourceforge.net/p/sakura-editor/patchunicode/1107/
patch登録しました。

▼ 2017/8/11 (金) 13:50:14 berryzplus  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2406] Re2:起動時、たまに落ちる
▼ noviceさん
> ▼ hagiさん
> > ちなみにこの関数はもうサポートされないそうで
> > いずれは SHGetFolderLocation() に代わらないといけないようですが
> 
> https://sourceforge.net/p/sakura-editor/patchunicode/1107/
> patch登録しました。

これって問題が解決した、ってことでいいんですか?

32bit版のライセンスは持っていないから、
うちでは再現確認ができないので、
情報があればあげていただけるとありがたいです。


■ 2397 ■
▼ 2017/2/26 (日) 03:28:56 amewo  
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
[2397] 文字コード自動判別の不具合
デフォルトをUTF-8にしているのですが、
+npc[EOF]
と打つとSJISに
+npc
[EOF]
と打つとUTF-7になってしまいます。


怪しいのは全て0ポイントにして、
ユーザー側で文字コードの優先度やフィルタリングの設定できたほうが
いいと思うのですがいかがでしょうか?

▼ 2017/2/26 (日) 16:14:40 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0
[2398] Re:文字コード自動判別の不具合
>UTF-7自動認識を厳しくする (svn:4163 upatchid:988 Moca)
この変更でこのような「-」が+のエンコード文字列の末尾にない場合、
UTF-7のポイントとして加算しなくなったので、
次のバージョンからこのようなことは、あまり起きなくなります。
UTF-7はほとんど使われていないので、自動判定から外してもいいとは思いますが。

>デフォルトをUTF-8にしているのですが、
>+npc[EOF]
>と打つとSJISに

これは、なんか違う所がおかしいのではないかと。
0ポイントならUTF-8になるはずです。
ちなみに2.xの特定のバージョンのデフォルト文字コード設定にはバグがあって、
ファイル名によらずに「基本」のデフォルト文字コードが適用されることがあります。
本来はタイプ別ごとに設定できるものなので、その辺かもしれません。

ややこしいのはサクラの場合、デフォルト設定とかとは別に、
履歴でも現在のエンコードを覚えているので、そちらが適用されている場合もあります。

▼ 2017/2/26 (日) 18:18:34 amewo  
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
[2400] Re2:文字コード自動判別の不具合
>デフォルトをUTF-8にしているのですが、
>+npc[EOF]
>と打つとSJISに

すみません。
これは自分の勘違いでした。
デフォルト文字コードがタイプ別なのを忘れてました

■ 2396 ■
▼ 2017/2/22 (水) 20:19:11 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0
[2396] 「ー」の単語選択
伸ばし棒を後ろ側から選択した時の範囲なんですが、
「ここにエディターがある」
で「があ」に間から左に単語選択すると「ーが」が選択されます。
逆向きに「にエ」から右に単語選択すると「エディター」が選択されます。
で「ー」の判断基準が「左へ単語選択」のときに右方向からのひらがな・カタカナと一緒にされるのはなんかおかしいんじゃないかと。

▼ 2017/2/26 (日) 18:17:44 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0
[2399] Re:「ー」の単語選択
パッチをトラッカーに登録しました。
ひらがな・カタカナの文字種にいくつか文字追加も行っています。

https://sourceforge.net/p/sakura-editor/patchunicode/1098/

■ 2394 ■
▼ 2017/1/18 (水) 12:46:22 anonymous  
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
[2394] Kite
KiteがWindowsに対応したらサポートしてほしい。

▼ 2017/1/18 (水) 21:06:49 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
[2395] Re:Kite
▼ anonymousさん
> KiteがWindowsに対応したらサポートしてほしい。
https://codezine.jp/article/detail/9390
これでしょうか。「利用したいエディタを選択し」って書いてありますが。
たぶんプロプラの特定ツールをサクラ側で対応することはないと思います。
向こう側で対応してもらわないことには、どうしようもないですし。
あるとしても、本家とは別に特定個人などがプラグインを提供する程度になると思います。

■ 2382 ■
▼ 2016/11/27 (日) 00:12:08 ばぼ  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2382] セキュアなsnprintf関数。
この1年間、荒らしのごとく掲示板に常駐しておりますが、
そろそろ何かリアクションが欲しいです。
sourceforgeのほうにパッチを送り続けるにしても、
現状の積滞パッチ件数95件、という状況から見て、
反応があるまで待っていられる自信がありません。

残件95件だと週1で消化したとしても2年です。
ここ1年の実績から考えると、週1なんて夢のようなペースですよね。

このままのらりくらりと、
見付けた不審点を「気ままに報告〜」を続けていると
sakura editorのソフトウェアとしての信用に関わる気がします。
わたしとしては、それはすごく不本意なんです。

プロから見れば全然大したことない不具合であっても、
公開されたインターネットで指摘され、
しかも、長い間「未解決」のまま放置されている。。。
いまのsakura editorってそうなりつつあります。

コミッタ足りないなら手伝います。
ガチヲタ1匹、プロジェクトに参加させてください。


こないだsoureceforgeに書いた「auto系使えね」発言の責任をとるべく、
「使えるように整備してやろうじゃないか!」と
定義関数の総チェックに乗り出したところ、変なもの見付けてしまいました。

int auto_snprintf_s(WCHAR* buf, size_t count, const WCHAR* format, ...);

わたしが実装するとすれば↓な定義を作ると思います。
int auto_snprintf  (WCHAR* buf, size_t count, const WCHAR* format, ...);
int auto_snprintf_s(WCHAR* buf, size_t nBufSize, size_t count, const WCHAR* format, ...);
template<size_t _BufSize>
int auto_snprintf_s(WCHAR (&buf)[_BufSize], size_t count, const WCHAR* format, ...);

指摘されれば「え、うそ。」みたいに思いますよね?
セキュア版関数って、一体何がセキュアなのか。

中の人向けなので詳しい内容は書きません。
是非、ご検討ください。

▼ 2016/11/27 (日) 00:56:27 LR4  
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
[2383] Re:セキュアなsnprintf関数。
▼ ばぼさん
> この1年間、荒らしのごとく掲示板に常駐しておりますが、
> そろそろ何かリアクションが欲しいです。


え?、もう一年も経ったかしら
ていうか、一方的なゴリ押ししかしてないのに、
三年程度も待てず、一年足らずで物申すとか、あり得ない

> 指摘されれば「え、うそ。」みたいに思いますよね?

水爆の父(Edward Teller)にでもなりたいかな?
それ、求めすぎてて、たとえ職人といえど異常ですからb
ロジックにだけ特化した気狂い

そう言われた覚えが今までに一度も無い、ってなら、どんだけ周囲が気遣ってくれてるんだか、自覚が必要

他に大事なもの、たくさんあるんだけどなぁ…
せめて「まともなAero Snap対応」とか「Per-Monitor DPI対応」くらい成し遂げてくれれば、少しは見込みもありそうだけれど

> ガチヲタ1匹、プロジェクトに参加させてください。

おや、自信満々ですなぁ、誘われもせず「参加させろ」とは
※おいら的には「ください」は「させろ」と同意義なのねん

安易にコミッタ志願とか、無いわ
http://sakura-editor.sourceforge.net/cgi-bin/cyclamen/cyclamen.cgi?log=unicode&tree=r2120

単なる歯車としてであれば、彼の人の参加も有意義なのかもしれないけれど

さすがに、この程度の挑発に乗る程度の人材なら切ってしまったほうがいいと思われ
だって、その程度なら本人が病になるほどに苦労するだけだから

口が過ぎて申し訳ありません、気の毒な発言をしてしまいました。
今、この場で土下座しときます

▼ 2016/11/27 (日) 18:06:33 ばぼ  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2384] Re2:セキュアなsnprintf関数。
▼ LR4さん
> 口が過ぎて申し訳ありません、気の毒な発言をしてしまいました。
> 今、この場で土下座しときます


いえ、問題ありません。
こちらこそ、あおるように書いてしまいました。
大変失礼しました。深くお詫びします。

私は現状のsakura editorの機能に満足しているので、
目新しい機能の追加よりも、機能の安定化に興味があります。
派手な機能追加の提案を行うことは、今後もありません。
機能追加の実装実績が見込みなのであれば、もうゼロです。


例示は「お題」ですかね。

Aero Snapは、邪魔になる場合があるのでオフにしてます。
使わない人間が手をだしちゃいかん機能ってありますよね。

Per Monitor DPIは多少興味があります。
作ったらFeature Requestsに入れます。
時期はクリスマス頃になると思います。
要らんかもしれませんが。


> おや、自信満々ですなぁ、誘われもせず「参加させろ」とは
> ※おいら的には「ください」は「させろ」と同意義なのねん


否定しません。

禍根の残らないように書いてしまうと
文脈的にはもっと酷いこと言ってるんです。
「見てられないから代われ」と言ってます。
実際にそこまでのことは思ってなかったんですが、
「参加させろ」の意図で書いたのは事実で、
どう考えても失礼な発言で、深く反省しております。

ただ、そのことと現状のままでよいかは別の問題で、
今後も自分なりに改善の努力を続けていきたいと考えています。

▼ 2016/11/27 (日) 22:38:24 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
[2385] Re3:セキュアなsnprintf関数。
>中の人向けなので詳しい内容は書きません
半分中の人です。中の人向けだからこそ書いてほしいです。

他人・自分の書いたコードの中には「許容可能」「ぎりぎり許容可能」「許容不可能」があります。
そのへんの閾値・種類は人によって異なるわけです。
例えば、new[]をdelete([]なし)で解放するとか、私は「許容不可能」に分類しています。
いっぽうで、私はauto_strlen,_tcslen,wcslen,lstrlenの混用をしょうがないので許容しています。
コーディングスタイルは、いまさら言っても始まらないので諦めています。

衝突の原因になるので、あまり言いたくはないですが
ぼぼさんに感じるのは、私とは信仰している宗教が違うみたいだ。
という点です。
宗教が違っても、お互い別の国に住んでる場合には問題ないのだけど、
同じ家に住んで、一緒の居間で過ごすとなると、双方に相応の努力が必要になってきます。

とりあえずぼぼさんは、セキュリティ対策っていうヤバめなタイトルのパッチを
・あるなら「本当にやばいと思う部分」脆弱性の修正(これは公開せずコミッタに直接送ってもいいです)
・予防措置的なセキュリティ対策
・inlineとか10マイクロ秒早くなるとかの、趣味的なもの
・初期化ミスとかのバグ類

みたいに意味のある単位に分離して、書き直した方がいいです。
でないと、でかいごちゃ混ぜの物を置いてかれても真面目に相手をしてもらえないです。

auto_snprintf_sについてはBufSize, countの2引数のそれぞれの意味と、
正しい想定した使い方を説明しないと「ただ見せびらかしてるだけ」です。
もちろんcount1引数ではダメである論理的な説明も必要です。
しかもこの前のauto_*はstrlenに関する話であってsprintfは無関係のはずです。
なお私は、10マイクロ秒、30バイト節約できるみたいな話に興味はありません。
でもコードの間違いが減る、コード変更に対する耐性が高くなる、簡素(分かりやすく)に書けるなどには興味があります。
ちなみに「え、うそ。」みたいには別に思いません。そう言う宗教もあるな、と思うだけです。

バッファ長を2引数にしたところで
TCHAR szRealBuf[100];
TCHAR* szBuf = szRealBuf;
auto_snprintf_s(szBuf, sizeof(szBuf), sizeof(szBuf), _T("%d"), linenum);
みたいに他人に書かれるのを防ぐ手立てがないんですよね。
しかも、後で変数宣言の方が書き変わったというパターンが多いので、見逃す可能性を否定できません。
結局最後は使う人だもの。正しい使い方を説明できなきゃだめだわ。
もちろん自分で説明する必要はないです、必要十分なURLを提示してくれれば。
追記:この例はよくないね。_countofを普通使うからエラーになる。(追記ここまで)

この二つは何がどう違うのか説明可能ですか。
void my_functuin1(wchar* out, size_t size){
    auto_snprintf_s(out, size, size, L"%d", g_linenum);
}
void my_functuin2(wchar* out, size_t size){
    auto_snprintf(out, size, L"%d", g_linenum);
}

▼ 2016/11/30 (水) 01:15:39 ばぼ  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2386] Re4:セキュアなsnprintf関数。
> この二つは何がどう違うのか説明可能ですか。
> void my_functuin1(wchar* out, size_t size){
>     auto_snprintf_s(out, size, size, L"%d", g_linenum);
> }
> void my_functuin2(wchar* out, size_t size){
>     auto_snprintf(out, size, L"%d", g_linenum);
> }


・1はoutにsize - 1文字書き込んで'\0'を付加します(溢れません)。
 出力がsizeを越えた場合、出力はsize-1文字に切り詰められます(溢れません)。
 出力がsizeを越えた場合、バッファサイズが足りない警告(戻り値!=0)が出ます。
・2はoutにsize文字書き込んで'\0'を付加します(出力=sizeで溢れます)。
 出力がsizeを越えた場合、出力はsize-1文字に切り詰められます(溢れません)。


いちおうちゃんと説明しましょう。

何が問題なのかを知るためには
sprintfシリーズの関数について、
発生した経緯から語るのがよさそうです。

まず、sprintf関数について。
40年くらい前、C言語が発生すると同時に生まれました。

 sprintf(out, format, ...)
 outに...の内容をformatの書式で出力する。

任意のデータを書式出力するprintf系関数の1つです。
出力先がメモリなのでI/O処理が要らず高速です。
確保したメモリの領域外に出力があふれてしまう障害、
バッファオーバーフローの危険が古くから指摘される関数です。

つぎに、snprintf関数。
15年くらい前にC言語の規格が改定されるときにできました。
sprintfが抱えるオーバーフロー問題への対策版です。

 snprintf(out, count, format, ...)
 countで最大文字数を指定し、出力を制限できる。

count文字出力すると末尾に'\0'を付加して終了します。
出力数がcount+1になるのが微妙ですが、
これはC言語が規格として提供するセキュア版sprintfです。

最後にマイクロソフトのセキュア版関数について。
10年くらい前、vc++2005が出たときにできました。
ほとんどすべてのメモリ書込みを行う関数に_s付きバージョンができました。

 sprintf_s(out, size, format, ...)

size - 1文字出力すると末尾に'\0'を付加して終了します。
最大出力数はsizeになります。
sprintf_s関数を使えば、sprintfの抱える問題をカバーできます。


じゃあ、snprintf_s関数は?

 snprintf_s(out, size, count, format, ...)

・・・ぶっちゃけるとわたしにもよく分りません。

countには _TRUNCATE という特別な値を指定できるのですが、
_TRUNCATEを指定した場合の動作はsprintf_sと等価です。
size - 1文字を上限に、できるだけたくさん出力する、という動きになります。
なんで存在するのかよく分らない関数です。

いま、snprintf_sが定義されていて、
snprintfがない状態になっています。
当然ですが、sprintf_sはちゃんとあります。

必要性が微妙な関数が間違った定義で定義されていて、
本来の使い方をできない状態になっています。
(sprintf_sを使うべき箇所に誤ったsnprintf_s利用)

LR4氏の言うように「もっと大事なことがある」と思います。
ただ、他の部分の共通関数の品質は高いので、放置したままにしとくのももったいないなーとも思います。

▼ 2016/11/30 (水) 16:30:13 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
[2387] Re5:セキュアなsnprintf関数。
>sprintf_s(out, size, format, ...)
>size - 1文字出力すると末尾に'\0'を付加して終了します。


>countには _TRUNCATE という特別な値を指定できるのですが、
>_TRUNCATEを指定した場合の動作はsprintf_sと等価です。

言っている内容がいまいち理解できないのは、たぶんこの前提が間違ってるからだと思いました。

char test[4];
int ret = _snprintf_s(test, 4, _TRUNCATE, "%s", "1234567890");
>ret=-1 test="123"
int ret = _snprintf_s(test, 4, 3, "%s", "1234567890");
>ret=-1 test="123"
int ret = _snprintf_s(test, 4, 4, "%s", "1234567890");
>実行時エラー
int ret = sprintf_s(test, 4, "%s", "1234567890");
>実行時エラー
こうなるみたいです。
あとsprintf_sはVC2005では存在していなくて「_sprintf_s」ですよね。

>snprintfがない状態になっています。
参考 https://sourceforge.net/p/sakura-editor/patchunicode/82/
>どう倒しても紛らわしいので、
>・VCの _snprintf に対応する auto関数は提供しない。
>・今の auto_snprintf は auto_snprintf_s に変名。

と書かれています。

auto_snprintf_s→サクラでは_TRUNCATE前提でバッファ切り詰めで使う&-1
auto_sprintf_s→あふれたら異常終了
auto_sprintf→あふれないことが保証されたときに使ってもいい
どれも、引数のバッファ長は\0分を含める実装となっていると。

▼ 2016/11/30 (水) 16:31:39 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0
[2388] Re5:セキュアなsnprintf関数。
それ以前の問題として、サクラの定義をよく見てみると、数か所間違いがあるようにみえます。
defineのほうはrev:3680以降からです。
こうじゃないでしょうか。

Index: sakura_core/util/string_ex.h
===================================================================
--- sakura_core/util/string_ex.h	(リビジョン 4157)
+++ sakura_core/util/string_ex.h	(作業コピー)
@@ -253,9 +253,9 @@
 
 //印字系
 #if defined(_MSC_VER) && _MSC_VER>=1400
-#define auto_snprintf_s(buf, count, format, ...) tchar_sprintf_s((buf), count, (format), __VA_ARGS__)
+#define auto_snprintf_s(buf, count, format, ...) tchar_snprintf_s((buf), count, (format), __VA_ARGS__)
 #define auto_sprintf(buf, format, ...)           tchar_sprintf((buf), (format), __VA_ARGS__)
-#define auto_sprintf_s(buf, nBufCount, format, ...) tchar_snprintf_s((buf), nBufCount, (format), __VA_ARGS__)
+#define auto_sprintf_s(buf, nBufCount, format, ...) tchar_sprintf_s((buf), nBufCount, (format), __VA_ARGS__)
 #else
(すみません省略します)
Index: sakura_core/util/tchar_printf.cpp
===================================================================
--- sakura_core/util/tchar_printf.cpp	(リビジョン 4157)
+++ sakura_core/util/tchar_printf.cpp	(作業コピー)
@@ -359,6 +359,7 @@
 
 
 // sprintf_sラップ
+// ※nBufCountをはみ出す場合は異常終了します。
 //
 // (実装について)
 //     内容が同じなので、templateでも良かったのですが、
@@ -418,7 +419,7 @@
 {
 	va_list v;
 	va_start(v,format);
-	int ret=tchar_vsprintf_s(buf,count,format,v);
+	int ret=tchar_vsnprintf_s(buf,count,format,v);
 	va_end(v);
 	return ret;
 }
@@ -426,7 +427,7 @@
 {
 	va_list v;
 	va_start(v,format);
-	int ret=tchar_vsprintf_s(buf,count,format,v);
+	int ret=tchar_vsnprintf_s(buf,count,format,v);
 	va_end(v);
 	return ret;
 }

▼ 2016/12/3 (土) 00:36:13 ばぼ  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2390] Re6:セキュアなsnprintf関数。
▼ もかさん
> それ以前の問題として、サクラの定義をよく見てみると、数か所間違いがあるようにみえます。
> defineのほうはrev:3680以降からです。

やっと言ってる意味が分かりました。
わたしの修正コードでなくて、
現在のコードに対する修正提案なんですね。


(tchar_snprintf_sの実装部分)
> -	int ret=tchar_vsprintf_s(buf,count,format,v);
> +	int ret=tchar_vsnprintf_s(buf,count,format,v);

コア実装がいまのままなら同じことなんで
間違っていても機能的には影響ないと思います。

機能的に影響がなければ直さない、
それが乙女のポリシー。

と言われたらもう何も言えねっす。


ちなみに、tchar_snprintf_sは直呼びじゃなく
auto_snprintf_sを経由するのが正道と思われます。

string_ex.h 260行目
inline int auto_snprintf_s(ACHAR* buf, size_t count, const ACHAR* format, ...)   { va_list v; va_start(v,format); int ret=tchar_vsnprintf_s(buf,count,format,v); va_end(v); return ret; }
inline int auto_snprintf_s(WCHAR* buf, size_t count, const WCHAR* format, ...)   { va_list v; va_start(v,format); int ret=tchar_vsnprintf_s(buf,count,format,v); va_end(v); return ret; }
inline int auto_sprintf(ACHAR* buf, const ACHAR* format, ...)                    { va_list v; va_start(v,format); int ret=tchar_vsprintf(buf,format,v); va_end(v); return ret; }
inline int auto_sprintf(WCHAR* buf, const WCHAR* format, ...)                    { va_list v; va_start(v,format); int ret=tchar_vsprintf(buf,format,v); va_end(v); return ret; }
inline int auto_sprintf_s(ACHAR* buf, size_t nBufCount, const ACHAR* format, ...){ va_list v; va_start(v,format); int ret=tchar_vsprintf_s(buf,nBufCount,format,v); va_end(v); return ret; }
inline int auto_sprintf_s(WCHAR* buf, size_t nBufCount, const WCHAR* format, ...){ va_list v; va_start(v,format); int ret=tchar_vsprintf_s(buf,nBufCount,format,v); va_end(v); return ret; }

こっちは合ってますな。

内部実装のva_arg版関数を呼び出すだけの代物なので、
呼び出し口で1か所対応すれば目的を果たせるはずです。
邪道を利用してる箇所は非常に少なかったはずなので、
呼出し側を修正して関数定義ごと削除するのが適切かと思います。

関数定義ごと削除してしまえば
誤って利用してしまうことの再発防止にもなりますし。

また、全く同じ意味の実体が別定義で存在するので
機能を損なうこともありません。


まぁ、機能的影響はゼロなので、
どうでもいいっちゃどうでもいい話。

▼ 2016/12/23 (金) 06:54:23 SNK  
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
[2393] Re2:補足
ちょっと、公共の場にふさわしくない発言があったように思います。
いくら匿名のやりとりでも、いや、匿名だからこそ相手のことを思いやって書き込みするべきでしょう。
もうすこし時間をおいて頭を冷やしてから返答ボタンを押すべきだったと感じます。

参考:
  http://www.iajapan.org/rule/rule4general/
  インターネットにおけるルール&マナー「大人版」5.15 誹謗・中傷しない

それはさておき、プロジェクト方針に関する部外者からの意見として、続きを[管理]掲示板に書きます。

■ 2377 ■
▼ 2016/8/26 (金) 17:31:08 ばぼ  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2377] クリップボード関数の謎引数
愚痴です。
v2.1で実装されたマクロ専用関数の引数定義が
「なんかおかしくね?」というネタなので、
大多数のユーザーには関係のない話かと思います。

CClipboard::GetClipboradByFormat
CClipboard::SetClipboradByFormat

nMode -2:通常のサクラの処理, -1:バイナリモード, それ以外:文字コード
nEndMode -1:文字コードに依存 0:GlobalSize 1:strlen 2:wcslen 4:wchar32_tの文字列

nMode==-2は良いのです。
通常のサクラ=unicode、ですから。
nMode==-1が存在する理由と、文字コードの意味が分からんとです。

windowsはCF_UNICODETEXT形式が存在する場合、
CF_TEXT形式を要求したUNICODE非対応アプリに対して、
ACPによる自動変換を提供します。
つまり、自前で変換する必要はありません。
自前で変換してCF_TEXTを突っ込むと副作用もありますし。

サクラはwindowsロケールが対応しないコードページの、
いくつかに対応しています。(JisとかEucとかUnicodeとか)

SetClipboradByFormat("美乳", "CF_TEXT", 2, -1)
※"美乳"はEUCにしか存在しないコード値を持つ。

とした場合、windowsはCF_TEXTにEUCの"美乳"を突っ込みます。
この状態でCF_UNICODETEXTを要求した場合、
windowsによる自動変換は"ja-JP.932"で行われます。
当然、化けますよね。。。
アプリの作りとしては、windowsロケールが対応しないコードページを使っている場合には、引数指定をガン無視してUNICODEで突っ込む対応が必要になるような気がするのです。

でも、そうすると引数の存在意義が…
「意味わからん」というのはそういうことです。

nEndModeについては存在意義が不明です。
CF_TEXTとCF_UNICODETEXTを指定した場合のデータサイズは、
それぞれcharとwchar_tのNUL終端までと決まっています。
これはWindowsAPIの仕様なので勝手に処理してはいかんです。
windowsロケールはunicodeファミリを扱えないので、
UTF32を扱うにはUTF16BEに変換し、unicodeとして突っ込むべきです。


ググってみた感じだと
nMode=0(SJIS)、
nEndMode=-1(文字コード依存)
で使われているみたいです。
※このマクロ関数が実装されてるのはv2系なので
 常に無駄な変換(U→A)が発生するが、
 windowsが勝手に登録するCF_LOCALEは矛盾しないので問題ない。

取得、設定するデータに「文字列以外」を扱えるなら
別な突っ込みになるんですけど、
定義を見る限り、第一引数はVT_BSTR想定だし。。。

第一引数がVT_ARRAYを受け付ける前提で、
nMode==-1(バイナリ)、かつ
nEndMode==0(サイズをGlobalSizeで取得)な場合だけ
意味があるnEndModeの存在意義。

かと言って、VT_ARRAYにして
CF_DIBとか使えるようにしたとして、
そういうマクロを書く人がいるのかどうかとか、
すっごく微妙。。。



▼ 2016/8/26 (金) 20:06:54 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
[2378] Re:クリップボード関数の謎引数
> nMode -1:バイナリモード
このモードは、ビットマップとかCF_LOCALE、他のエディタのクリップボード形式などを読み書きする時に使います。
これらの関数は、CF_TEXT/CF_UNICODETEXTでも読み書きが可能なように実装されていますが、主戦場は特殊用途です。
普通のテキストは、Get(Set)Clipboard関数を使ってください、という方針です。
サクラでは、一番使うのは矩形データの確認、登録です。

CygwinのときにCF_TEXTがUTF-8だったりします(最近は不明)。
Visual StudioのCF_TEXTもUTF-8になっているらしいです。
そういう場合には、コード指定が必要です。
参考:https://github.com/xyzzy-022/xyzzy/issues/73

また日本語環境でNEC/IBM拡張漢字を区別して扱う場合に必須です。
どういうことかというと、
1. テキストファイルにはNEC/IBM拡張漢字がある
2. サクラv2で読み込むとたぶんNECはUnicodeに変換されIBMは特殊なサロゲート断片になる
3. それをそのまま普通にコピーすると、相手のソフトでIBMがゴミとして貼り付く
4. SetClipboardByFormat(data, "CF_TEXT", 0, -1)で貼り付けると、クリップボードがIBMが元の符号位置に戻ったSJISデータになる
6. 相手に貼り付けると、無事IBM/NECが区別されるか、WindowsのCF_UNICODETEXTの自動変換で統合されて貼り付けられる
という風になっていて、データが変更されると困る用途に適しています。

▼ 2016/8/26 (金) 20:08:53 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
[2379] Re:クリップボード関数の謎引数
(続き)
>SetClipboradByFormat("美乳", "CF_TEXT", 2, -1)
>当然、化けますよね。。。

EUC-jpをCF_TEXTに突っ込むのは想定外ですが、そういうアプリが存在していてもおかしくないのです。
例えば、存在するかしりませんがEUC-JPに設定されたCygwinとか。
var s = GetClipboradByFormat("CF_TEXT", 2, -1)
InsText(s);
で「美乳」が貼り付けられるので、そういう変なアプリと通信したい場合には、これでいいと思います。
もちろんCF_UNICODETEXTで読み書きするとおかしいですが、それは想定内です。
CF_UNICODETEXTでも同時に読み書きができるようにしたければ、自分でCF_UNICODETEXTを設定すれば問題ないです。
マイクロソフトが何といってるか知りませんが、ロケールって言ってるけど、UTF-8というロケールは存在しないので「言語」で「エンコード」を縛ることはできません。

汎用的なnModeの使い方としては、
SetClipboardByFormat(data, "HTML Format", 4, -1);
が代表例です。HTML FormatはUTF-8と決まっています。

>nEndMode
他のエディタを見れば分かりますが
「クリップボードを最後まで読み込む」関数と
「クリップボードをNUL文字まで読み込む」関数
が用意されていることがあります。それに対応するための処置です。
WindowsのCF_(UNICODE)TEXTではNUL文字までと決まっていますが、実情はそうとは限りません。
あとは独自フォーマットでは、NUL終端の後に違うデータが続いていることもあります。
例えば、サクラが設定したCF_(UNICODE)TEXT形式では途中にNUL文字が含まれることがあります。
UTF-32についてはおまけですが、独自形式のフォーマットがUTF-32形式互換である場合を想定していて、
決してCF_(UNICODE)TEXTで使うためではありません。

SetClipboradByFormatでCF_TEXTを登録するとき、サクラがCF_LOCALEを正しく登録しないのは、
うまく動くか分かりませんが、"CF_LOCALE"も使えるようになっているので、自分で設定すればいいんだと思います。

とりあえず、引数に意味不明な組み合わせがあることは確かです。
そのへんは、汎用性のために犠牲になったと思ってください。

▼ 2016/8/27 (土) 13:49:42 ばぼ  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2380] Re2:クリップボード関数の謎引数
あるべき姿について、了解しました。

▼ もかさん
> 主戦場は特殊用途です。

結局、第一引数(Getのout引数)は「配列」ってことですね。


> CygwinのときにCF_TEXTがUTF-8だったりします

ぶっちゃけ、それはCygwinのバグですね。
Cygwinとの互換性は、意識的に意識しないようにしております。

元々Windows95にPOSIXレイヤを構築するプロジェクトです。
POSIX依存のプログラムをWindows95で利用するためのもので、
Windows向けに書かれたプログラムのためのものじゃないです。

もちろん、win7向けのCygwinというのも存在しますが、
「POSIXプログラムのための環境」がCygwinの本質です。
Windows向けプログラムをビルドしようとするのは誤りです。
WindowsでGCCを使うためのMinGWとは目的が違います。
目的外利用で発生した問題は、ユーザの責任じゃないっす。


> また日本語環境でNEC/IBM拡張漢字を区別して扱う場合に必須です。

この問題の対処法を「独自ロジック廃止」で考えてるから
話があわないんだろうな…と感じました(マテ


> マイクロソフトが何といってるか知りませんが、ロケールって言ってるけど、UTF-8というロケールは存在しないので「言語」で「エンコード」を縛ることはできません。

MS> ロケール関数にunicodeを指定すると失敗します。(サポートしません。)

windowsロケールはansiのmultibyteをunicodeのwidecharに変換するためのものなので、unicodeファミリ内の変換は自分でやってね、ということらしいです。その割にはAPIがCP_UTF8に対応しとるんですが。


続く...

▼ 2016/8/27 (土) 13:50:52 ばぼ  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2381] Re2:クリップボード関数の謎引数
そういえば、visual studioでコピーすると、
Rich Text Formatなデータも追加されるんですが、
サクラはこれには対応しないんでしょうか?

(続き)

> 汎用的なnModeの使い方としては、
> SetClipboardByFormat(data, "HTML Format", 4, -1);
> が代表例です。HTML FormatはUTF-8と決まっています。


CF_HTMLはテキストじゃないので自動変換されないです。
ビットマップとかと同じバイナリデータ。

たしかにjavascript内でutf8作るとかありえませんし、便利ですね。
ただ、4=UTF-8を覚えるには熟練を要しそうです。
文字列リテラルによる指定を可能にする改善提案…(何を受け付けるかでモメそうですが)

> >nEndMode
> 他のエディタを見れば分かりますが


「他のエディタが対応してるから」は
機能が適切かどうかの指標にならんとです。
たぶんそういう場合、本来のネイティブデータが
別形式で登録されているはずなので、
そちらに対応するのが正しいあり方な気がします。
というか、エディタ側にはその機能ありませんよね(ご愛敬)

> "CF_LOCALE"も使えるようになっているので、
> 自分で設定すればいいんだと思います。


サイズとエンディアンの問題があるので
スクリプトから突っ込もうとすると微妙な感じになります。

uint32_t lcid = 0x411; //日本語
char pLcid1[] = { 0x11, 0x04, 0, 0 }; //普通のCPU
char pLcid2[] = { 0, 0, 0x04, 0x11 }; //古いmacとかサーバー機
SetClipboardByFormat(data, "CF_LOCALE", -1, 0);

powerpc搭載型の旧式macは無視してよいので、
pLcid1の値をdataに埋め込んでやれば一応動く...


> とりあえず、引数に意味不明な組み合わせがあることは確かです。
> そのへんは、汎用性のために犠牲になったと思ってください。


というわけで、思いついたときに「見直し」をかけて
パラメタチェックを追加してみたりするのもいいんではないかと。。。(鬼

■ 2370 ■
▼ 2016/7/10 (日) 17:13:16 sss  
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
[2370] TAB幅の設定のバグ?
タイプ別設定 『スクリーン』プロパティ
<レイアウト>TAB幅の設定
TAB記号を展開する桁数 1〜7の場合 : 設定桁数で展開される
TAB記号を展開する桁数 8以上の場合 : 4桁で展開される

▼ 2016/7/10 (日) 20:30:06 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0
[2371] Re:TAB幅の設定のバグ?
報告ありがとうございます。
掲示板には載っていませんけど現象は確認済みです。
2.3.0.0(2.2.1.0以降)のみで発生。
桁数というか、タブを展開後のタブ幅のピクセル数が画面折り返し文字数を超えると発生します。
パッチはこちら
https://sourceforge.net/p/sakura-editor/patchunicode/1078/

▼ 2016/8/20 (土) 15:29:24 sss  
Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko
[2376] Re2:TAB幅の設定のバグ?
Ver.2.3.1.0がリリースされましたが、
・タブ幅がフォントサイズが大きいと4固定になる (upatchid:1078 Moca)
には対応されていないようですね。
当面、2.3.0.0 r4122(=r4119) update9 を使っていく予定です。

■ 2373 ■
▼ 2016/7/30 (土) 16:41:53 ばぼ  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2373] ファイル保存時の改行コード統一は仕様?
ご存じの方がいれば教えてください。

現在、ver2系のsakuraでは、
ファイル保存のフローで保存前に改行コードを修正しています。
SVNログを見る限り、ver2発案時からの動作ですが、
これは仕様なんでしょうか?

.\sakura_core\CSaveAgent.cpp(105):
//改行コード統一
CDocVisitor(pcDoc).SetAllEol(sSaveInfo.cEol);


sakura内部では全行に対して行末記号を保持しており、
データ構造とロジックに矛盾があるように思います。

全行の行末記号情報を個別に持つ、ということは、
行末記号が混在した状態のファイルを保存したら、
混在状態がそのまま出力されるのが自然だと思います。

意図してやってると思うんですが、
なんでそうしたのか(だんまりで修正する仕様にしたのか)
経緯があれば教えてほしいです。

▼ 2016/7/31 (日) 02:35:12 もか  
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0
[2374] Re:ファイル保存時の改行コード統一は仕様?
▼ ばぼさん
> .\sakura_core\CSaveAgent.cpp(105):
> //改行コード統一
> CDocVisitor(pcDoc).SetAllEol(sSaveInfo.cEol);

分かりにくいと思いますがSetAllEol内部で統一するかの判断をしており、
CDocVisitor.cpp(31):
  //改行コードを統一する
  if(cEol.IsValid()){

cEol.IsValid() != falseのときだけ改行コードが統一されます。
通常保存で無変換の時は、改行コード指定のcEolがEOL_NONEになっていて、
EOL_NONEのときIsValidはfalseを返すので、2.xでも改行コードは統一されません。
CViewCommander::Command_FILESAVE
sakura_core\cmd\CViewCommander_File.cpp(185):
  sSaveInfo.cEol = EOL_NONE; //改行コード無変換
保存ダイアログ表示の場合は、改行コードコンボボックスの一番上が無変換indexが0==EOL_NONEです。

▼ 2016/7/31 (日) 09:45:55 ばぼ  
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
[2375] Re2:【解決】ファイル保存時の改行コード統一は指定時のみ。
回答ありがとうございます。
見事に勘違いしました。


CDocVisitor(pcDoc).SetAllEol(sSaveInfo.cEol);

この書き方でCDocVisitorが非visitorとか。
デザインパターンと一致する用語で関係ない概念なのは紛らわしい気がしました。

▼ もかさん
> 分かりにくいと思いますがSetAllEol内部で統一するかの判断をしており、

分かりづらいですね...
出力時の行末記号変更だったら「出力前処理」より、
出力処理そのものに組み込んだ方が直観的な気がしないでもないです。

野良版できたらまたネタ提供させていただきます。

ページ:[≪ <] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [> ≫]
INCM/CMT
Cyclamen v3.81
[ut:0.050][st:0.010]