[ 新規に投稿する ]

Unicode→SJIS変換についてNo.10603
楽をしたい さん 25/03/01 03:15 [ コメントを投稿する ]
  文字変換について知恵を貸していただけると助かります。
個人的に文字コードがSJISで済むモノはそれで済ませたいと考えています。
やりたいことが2つあります。


@Unicodeの半角カタカナを全角に変換したい。

コード範囲は調べたので関数で変換したのですが、濁点と半濁点が付いていると2文字に分かれたままになってしまいます。
末尾の記号が緯度経度や時間表記に使われているので、次のように二段構えにしてみました。

replaceall "([\\uff61-\\uff9d])", "\\(1,ToZenkakuKata)", regular, nocasesense ;
replaceall "([\\u30a0-\\u30ff][\\uff61-\\uff9f])", "\\(0,ToZenkakuKata)", regular, nocasesense ;

1行目の全角への変革は成功するのですが。2行目の濁点と半濁点付きで失敗します。
良い方法はないでしょうか。


AUnicodeのひらがなカタカナの濁点半濁点付きをSJISに変換したい。

現状は全部ピックアップして置換するという力技で処理しています。こんな感じで。

replaceall "ぱ", "ぱ", noregular, nocasesense ;
replaceall "ぴ", "ぴ", noregular, nocasesense ;
replaceall "ぷ", "ぷ", noregular, nocasesense ;
replaceall "ぺ", "ぺ", noregular, nocasesense ;
replaceall "ぽ", "ぽ", noregular, nocasesense ;
replaceall "パ", "パ", noregular, nocasesense ;
replaceall "ピ", "ピ", noregular, nocasesense ;
replaceall "プ", "プ", noregular, nocasesense ;
replaceall "ペ", "ペ", noregular, nocasesense ;
replaceall "ポ", "ポ", noregular, nocasesense ;
replaceall "ば", "ば", noregular, nocasesense ;
replaceall "び", "び", noregular, nocasesense ;
replaceall "ぶ", "ぶ", noregular, nocasesense ;
replaceall "ベ", "ベ", noregular, nocasesense ;
replaceall "ぼ", "ぼ", noregular, nocasesense ;
replaceall "バ", "バ", noregular, nocasesense ;
replaceall "ビ", "ビ", noregular, nocasesense ;
replaceall "ブ", "ブ", noregular, nocasesense ;
replaceall "べ", "べ", noregular, nocasesense ;
replaceall "ボ", "ボ", noregular, nocasesense ;

これを追加したところマクロの処理時間が明らかに伸びてしまいました。一瞬『PCが固まった!?』と思ってしまいました。

濁点と半濁点の文字コードが変化しないので、正規表現でスマートに高速に置換できたらと考えています。

これが上手くいくと、前述の@も似た手法でできるのではないかと考えているのですが。

宜しくお願いします。
[ ]
RE:10603 Unicode→SJIS変換についてNo.10604
こみやんま さん 25/03/01 08:12 [ コメントを投稿する ]
  @とAは両方、合成文字のケースうありなんでしょうか?
でも@は半角に濁点とのことなので合成文字ではない感じなのかな?

Aは掲示板の都合上で、HTML参照エンティティみたくなってますが、
 2文字で1つの文字を意味する結合文字を、
 (正規化して)1文字にしたい、
 みたいに趣旨なのかな?


@は、多分下ですかね。
// ---------------- test.mac -------------------
jsmode "WebView2\\" + currentmacrofilename;
js {
debuginfo(2);

var targetText = getselectedtext() || gettotaltext();

var newText = targetText.normalize("NFC"); // 合成文字があるなら正規化。4種類の正規化の方法があるけれども、まぁ多分これで

newText = filter("", "ToZenkakuKataOnly", "", newText); // 正規化後なら、これで十分だろう。
if (targetText != newText) {
    if (selecting()) { insert(newText); }
    else { settotaltext(newText); }
}
}

Aは、@のマクロからfilterの行をカットすればいいのかな?
 (最終的にSJISの範囲に〜 とか言ってるしより広範囲で目的に叶いやすい処理でしょう)
[ ]
RE:10604 Unicode→SJIS変換についてNo.10605
こみやんま さん 25/03/01 08:52 [ コメントを投稿する ]
  @は合成文字とか全く関係ないなら、

(Aは合成文字の話のはず)

// ---------- b.mac 

settotaltext filter("", "ToZenkakuKataOnly", "", gettotaltext());

とかでいいと思いますよ。
[ ]
RE:10603 Unicode→SJIS変換についてNo.10606
western さん 25/03/01 10:01 [ コメントを投稿する ]
  秀丸エディタの標準の変換モジュールに「半角/全角変換(E)」という
変換する文字種を厳密に指定できるモードが用意されている
のでそれを使うのが確実でしょう

マクロ(M) > キー操作の記録開始/終了(R) で記録を開始し
してから「半角/全角変換(E)」のダイアログを表示して
変換したいパラメータを設定して順番に何度か変換実行し終わってから
マクロ(M) > キー操作の記録開始/終了(R) で記録を止めて キー操作の保存(S)
で保存したファイルを開けば "1100011" などのパラメータを後から確認できます
以下のマクロはカーソル位置をなるべく戻す処理を追加したものです



setcompatiblemode 0x00; // 折りたたみと部分編集している場合に解除されるように明示
#screentopy = screentopy; // 現在の縦スクロール位置を保存
#screenleftx = screenleftx; // 現在の横スクロール位置を保存
disabledraw; // 変換中にガクガクするので描画させない
selectall; // 全て選択
// 元々半角のカタカナが存在する可能性があるのでカタカナを先に処理
filter "" , "HanZenConv" , "0100010"; // 全ての全角カタカナを半角カタカナに変換
filter "" , "HanZenConv" , "1000010"; // 半角カタカナを全て全角カタカナに変換
// この時点で既存のカタカナは全て全角化完了したので、次にひらがなを処理
filter "" , "HanZenConv" , "0000001"; // 全ての全角ひらながを半角カタカナに変換
// この時点に存在する半角カタカナは全て、全角ひらがな だったもの
filter "" , "HanZenConv" , "1100011"; // 半角カタカナを全て全角ひらながに変換
escape; // 選択状態を解除
prevposhistback; // すべて選択を実行する前のカーソル位置に戻る
enabledraw #screentopy, 0; // スクロールはなるべくそのまま、横スクロールはズレるので先頭に

/* テスト用
半角清音  ハッヒフッヘホー
半角濁音  ビビディバビディヴゥ゙
半角半濁音 ポプテピピック゚
ひらがな分離濁音  ひ゛ひ゛て゛ぃは゛ひ゛て゛ぃう゛ぅ゛
ひらがな分離半濁音 ほ゜ふ゜てひ゜ひ゜っく゜
カタカナ分離濁音  ヒ゛ヒ゛テ゛ィハ゛ヒ゛テ゛ィウ゛ゥ゛
カタカナ分離半濁音 ホ゜フ゜テ゜ヒ゜ヒ゜ック゜
その他特殊仮名 ゐ ゑ ヰ ヱ ヴ ゎ ヮ ゜゛
*/

このマクロを実行した後に、やり直し(やり直しのやり直し)を4回実行すると
変換の過程が確認できるので動作の理解とデバッグに使えます



※秀丸担当さま

今回のコード検証してる際に、ファイルタイプ=.macで
色付け強調されていないキーワードがありました
up_nowrap
down_nowrap
prevposhistback
prevposhistforward
[ ]
RE:10606 Unicode→SJIS変換についてNo.10607
western さん 25/03/01 11:04 [ コメントを投稿する ]
  末尾の記号が緯度経度や時間表記に使われている

という一括処理では余計な変換が混ざる条件があったので、退避処理を追加

setcompatiblemode 0x00; // 折りたたみと部分編集している場合に解除されるように明示
#column = column; // カーソル位置を記憶
#lineno = lineno;
#screentopy = screentopy; // 現在の縦スクロール位置を記憶
#screenleftx = screenleftx; // 現在の横スクロール位置を記憶
disabledraw; // 変換中にガクガクするので描画させない
// 有り得ない半角の半濁点(半角半濁点の前が は行 文字ではない場合と想定)の後ろにマーカー文字を付ける
$escape_chr = "\u200B\u007f"; // 退避文字マーカー (Zero width Space + DEL)
searchdown $escape_chr, loop; // 退避文字マーカーが文書内に含まれてしまった有り得ない場合を検索
if (result) {
 message "退避用に使おうとした特殊文字が含まれているので処理に失敗しました";
} else {
 // 退避文字を付与 (半角の半濁点が、先頭であるか、直前の文字がハ行以外すべて)
 replaceall "(^|[^はひふへほハヒフヘホ])[゚]" , "\\0" + $escape_chr, regular, loop;
 // 退避文字を付与 (半角の濁点が、先頭であるか、直前の文字が ひががなorカタカナ 以外すべて 大雑把判定)
 replaceall "(^|[^ぁ-んァ-ヴヲ-ン])[゚]" , "\\0" + $escape_chr, regular, loop;
 selectall; // 全て選択
 // 元々半角のカタカナが存在する可能性があるのでカタカナを先に処理
 filter "" , "HanZenConv" , "0100010"; // 全ての全角カタカナを半角カタカナに変換
 filter "" , "HanZenConv" , "1000010"; // 半角カタカナを全て全角カタカナに変換
 // この時点で既存のカタカナは全て全角化完了したので、次にひらがなを処理
 filter "" , "HanZenConv" , "0000001"; // 全ての全角ひらながを半角カタカナに変換
 // この時点に存在する半角カタカナは全て、全角ひらがな だったもの
 filter "" , "HanZenConv" , "1100011"; // 半角カタカナを全て全角ひらながに変換
 escape; // 選択状態を解除
 replaceall "゛" + $escape_chr, "゙"; // 全角の濁点の後に退避記号が付いてるものを半角に戻す
 replaceall "゜" + $escape_chr, "゚"; // 全角の半濁点の後に退避記号が付いてるものを半角に戻す
}
moveto2 #column, #lineno; // 全て置換を実行する前のカーソル位置に戻る
enabledraw #screentopy, 0; // スクロールはなるべくそのまま、横スクロールはズレるので先頭に
[ ]
RE:10605 Unicode→SJIS変換についてNo.10608
楽をしたい さん 25/03/02 03:06 [ コメントを投稿する ]
  そもそも私が文字コードをちゃんと理解できていない。という前提でお願いします。すいません。


@について

合成文字とはオングストロームÅのような文字の事ですか?多分違うと思います。
https://ja.wikipedia.org/wiki/%C3%85

半濁点付きカタカナのハは『パ』で、これをIME入力時に半角に変換すると『パ』という具合に半角カタカナと半角半濁点に分かれます。
1段目で半角カタカナだけ全角に変換しているので、全角カタカナに半角の半濁点か濁点が続く状態になります。
2段目でこれを一文字に纏めようとして失敗している。というのがマクロの現状です。

合成済み文字と分解された文字列の比較
https://ja.wikipedia.org/wiki/%E5%90%88%E6%88%90%E6%B8%88%E3%81%BF%E6%96%87%E5%AD%97
の分解された文字列の状態ではないかと思います。

ムムム。提示されたマクロが理解の範疇を超えている。


Aについて

これも@に似ています

Unicodeだと2byte表記になっている文字を、SJISなら1byteで済む同一フォントに置き換えるのを目的としたマクロです。
[ ]
RE:10607 Unicode→SJIS変換についてNo.10609
楽をしたい さん 25/03/02 03:16 [ コメントを投稿する ]
  > 「半角/全角変換(E)」のダイアログ
なんてあったんですね。
理解出来そうなコードが多いので、解析理解したいと思います。
[ ]
(発言者削除)No.10610
こみやんま さん 25/03/02 05:17
 
[ ]
RE:10608 Unicode→SJIS変換についてNo.10611
こみやんま さん 25/03/02 05:22 [ コメントを投稿する ]
  >Unicodeだと2byte表記になっている文字を、SJISなら1byteで済む同一フ

「Unicode」には「2系統」の「パ」や「ば」などがあります。
(※ 半角の話ではなく、全角の話)

■1文字扱い
 「Unicode」でも「SJIS」でも、同じ、事実上は1文字の「パ」や「ば」。
 Windowsでは、一般的には、この扱いになるのが普通です。
 「変換」などの必要性はそもそもないです。
 (編集エリア上だと変換元と変換先を同じ文字入力することになりますw)

■2文字扱い(サロゲートペア・合成文字)
 「全角のホ」と「合成専用の濁点(SJISには存在しない文字)」で2つの文字で構成されるもの
 Windowsでは普通はこうはならないですが、
 MacOSではちょっとした時に合成文字になりやすいです。

 https://qiita.com/ryo_one/items/48b28bdc0f80ebb3139f
 https://moji.or.jp/wp-content/mojikiban/2019/05/f0216ed4b3bf8599632bf32259275e18.html

■楽をしたいさんの、投稿内容が合成文字であることを強く示唆

楽をしたい さんの投稿内容とreplaceを見ると、

```
replaceall "ボ", "ボ", noregular, nocasesense ;
```

となっています。


元は「゙」ではないはずで
「全角のホ」と「SJISには存在しないUnicode用の合成文字の濁点」です。
(SJISに存在しないからこそ、゙ 投稿時に 変換が行われている)

たとえば、秀丸上で「ボ」というテキスト文字(&〜;もそのまま)を記述し、
ファイル「a.html」として「UTF8」で保存します。

そのファイルをChromeなどブラウザで表示してみると、
見た目上は「全角のボ」で「あるかのように」見えます。
これこそが「合成文字」です。

ブラウザに表示された一見全角に見える「ボ」を秀丸に貼り付けると、
通常の1文字のボとは異なる表示になるはずです。

この「合成文字」を「通常の文字」へと直すのに一般的に使われるのが、
「Unicode正規化」であり、
すでに投稿したマクロ内にある「Normalize」といった行為です。
[ ]
(発言者削除)No.10612
楽をしたい さん 25/03/02 16:36
 
[ ]
RE:10611 Unicode→SJIS変換についてNo.10613
楽をしたい さん 25/03/02 17:15 [ コメントを投稿する ]
  皆さん、大変お騒がせしてすいません。言い出しっぺです。

因みに、このポストにはR18ネタが含まれますのでご容赦願います。

パソコン通信始めてから新聞記事のスクラップをネット情報からもするようになりました。
で、最近とある有名サイトの記事に「エッチな漫画の『あ』に濁点文字を入力する方法」みたいな記事を見まして。多分これ。
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1626043.html

これを秀丸でやってみると見事に失敗しちゃいました。変な文字が表示されちゃいます。試しにWindowsのメモ帳だと成功する。

そういえばメモ帳は保存はUnicodeがデフォルトになったし、パやバなどブラウザで見ると何の変哲もない半濁点・濁点付きなのに秀丸にコピペすると同様に化ける文字をよく見かけるようになったな。と思い出したのが始まりです。

で、見つけるたびにマクロに追加していたのですが、何時全部登録終了するのか予想もつかない。
それまでモンモンとしながらメンテ続けながら使い続ける気か!?面倒だから全部一気に登録しちゃえ!
となって、ネットを検索しまくって同じことをJava(だったかな?)でやっているのを見つけて美味しいところだけパクって目出度く完成!
ところが処理対象の文字数が比較的少量なら変換対象文字が一切なくても処理時間の体感時間に変化はないのですが、140カラム×100行になると『ん!?』『固まった!?』ってぐらい差が出ちゃった。という訳です。
因みに CPU i5-6400 2.7GHz、メモリ DDR3L 16GB。Windows 10 Home (x64)、グループポリシーで余計なスパイ行動や動作を止めてます。

> 2文字扱い(サロゲートペア・合成文字)

すいません。何のことやら全く理解できていません。

何をしたいかを例示したマクロは投稿時に変換されちゃっているのを確認してます。

> replaceall "ボ", "ボ", noregular, nocasesense ;



Unicode:u+30DB u+309a → SJIS:u+30DD

に変換するモノです

> そのファイルをChromeなどブラウザで表示してみると、
> 見た目上は「全角のボ」で「あるかのように」見えます。
> これこそが「合成文字」です。

マクロをブラウザに投げてみました。
変換前後の文字が同一の文字に見えますね!

知らない事が沢山ある〜!
[ ]
RE:10613 Unicode→SJIS変換についてNo.10614
楽をしたい さん 25/03/02 18:06 [ コメントを投稿する ]
  ありがとうございます。希望通りの結果を得る事が出来ました。

こみやんま さんの 10604 で全部解決しちゃいました。

> Aは、@のマクロからfilterの行をカットすればいいのかな?

をやるとAがダメになっちゃいました。
自作マクロに対して実行して確認しました。

自分の肉にしようと解析を始めたのですが、Java使ってるんですね。未知との遭遇だ〜!玉砕だ〜!

で、厚かましいお願いしても宜しいですか?

自作マクロに対して実行して確認したところ

replaceall "カ゛", "ガ", noregular, nocasesense ;

なるコードが存在していて、これに変化がありません。これも解決できませんか?

調べたところカタカナの「カ」0x82c6とSJISの濁点0x814aのペアをSJISの0x834Bに変換するコードです。
ということは半濁点0x814bとのペアも存在するし、ひらがなとのペアも存在するのでそれも変換したい。

宜しくお願いします。
[ ]
RE:10613 Unicode→SJIS変換についてNo.10615
K'zawa さん 25/03/02 20:12 [ コメントを投稿する ]
  楽をしたいさん、こんにちは。
K'zawaです。

>そういえばメモ帳は保存はUnicodeがデフォルトになったし、パやバなどブラウザで見ると何の変哲もない半濁点・濁点付きなのに秀丸にコピペすると同様に化ける文字をよく見かけるようになったな。と思い出したのが始まりです。

下記の設定を確認・設定してみたら、何か変化しないでしょうか?

その他→動作環境 で 上級者向け設定(&A) をONにしたうえで、

編集→貼り付けでUnicodeを使用する(&N) = ON
編集→高度な編集2→結合文字を1つの文字として扱う(&J) = ON
[ ]
RE:10614 Unicode→SJIS変換についてNo.10616
こみやんま さん 25/03/02 21:01 [ コメントを投稿する ]
  >replaceall "カ゛", "ガ", noregular, nocasesense ;


自分が全体的に同様の目的で組むとしたら、以下のようなものをベースにすると思います。

概要:
「合成文字」だろうと、「普通の文字」と「普通の(半)濁点」が並べているだけだろうと、
「全てを最も妥当と思われる形で吸収する」的な感じ。

実装概要:
「SJISでも1文字に出来る組み合わせ」なら「1文字」へ
「SJISだと1文字になりえない」のなら「文字」+「半角の(半)濁点」


jsmode "WebView2\\" + currentmacrofilename;

js {

var targetText = getselectedtext() || gettotaltext(); // 変換する対象のテキスト

var newText = targetText;

// 正規化に乗せるために、全角の濁点や半角の濁点は
newText = newText.replaceAll('゛', '\u3099'); // 合成文字にしてしまう
newText = newText.replaceAll('゜', '\u309A'); // 合成文字にしてしまう
newText = newText.replaceAll('゙', '\u3099');  // 合成文字にしてしまう
newText = newText.replaceAll('゚', '\u309A');  // 合成文字にしてしまう

newText = newText.normalize("NFC"); // 合成文字があるなら正規化。

newText = newText.replaceAll('\u3099', '゙'); // 正規化で結局くっつかなかった合成文字の濁点を、通常の「半角の濁点へ」
newText = newText.replaceAll('\u309A', '゚'); // 正規化で結局くっつかなかった合成文字の半濁点を、通常の「半角の半濁点へ」

newText = filter("", "ToZenkakuKataOnly", "", newText); // カタカナだけを全部「全角」。(半角のカタカナが全部全角になる)

newText = newText.replaceAll('゛', '゙'); // どうあっても炙れてるやつを、全角の濁点を半角の濁点に
newText = newText.replaceAll('゜', '゚'); // どうあっても炙れてるやつを、全角の半濁点を半角の半濁点に

// 内容が更新されているならば、編集エリアに反映
if (targetText != newText) {
    if (selecting()) { insert(newText); }
    else { settotaltext(newText); }
}

} // js

[ ]
RE:10615 Unicode→SJIS変換についてNo.10617
楽をしたい さん 25/03/03 02:52 [ コメントを投稿する ]
  はじめまして。

見た目はメモ帳と同一になりました。
変換前後の文字が同一に表示されます。
でも検索してもヒットしないので根本的な解決にはなりません。

記事をスクラップしても検索できないのなら意味がないのです。

ありがとうございました。
[ ]
RE:10616 Unicode→SJIS変換についてNo.10618
楽をしたい さん 25/03/03 03:04 [ コメントを投稿する ]
  概要&実装概要、要望に合致していると思います。

希望通りの動作を確認しました。ありがとうございます。

自分の肉にしたいけどやっぱりJaba。残念。

大変ありがとうございました。
[ ]
RE:10606 Unicode→SJIS変換についてNo.10619
秀丸担当 さん 25/03/03 10:44 [ コメントを投稿する ]
  >今回のコード検証してる際に、ファイルタイプ=.macで
>色付け強調されていないキーワードがありました
>up_nowrap
>down_nowrap
>prevposhistback
>prevposhistforward

ご指摘ありがとうございます。
確かにその通りでした。
これらのキーワードも追加しておきます。
[ ]
RE:10618 Unicode→SJIS変換についてNo.10621
楽をしたい さん 25/03/04 01:34 [ コメントを投稿する ]
  早速使わせて頂いているのですが、処理時間が異様に長い時が時々あるという不具合が出ているので、何とかしたいと考えています。

現象としては、何処を書き換えているのかを目で追える時もあるほどです。
140カラム10行程度のテキストであっても起こる事があります。
タイトルバーの文字がチラついたり、多数のファイルを開いているとタブがランダムに押されているように見える事もあります。

なので140カラム100行前後にもなると?秒もかかってしまっています。

秀丸が直接呼び出す親マクロは実質これだけです。

disabledraw ;

execmacro "子マクロ.mac.cache" ;

enabledraw ;

子マクロが実質的なマクロ本体で、自作コードの中に作って頂いたマクロを埋め込んでいます。
解析したくてもJavaが判らないので手の出しようがないのです。

お助け願います。
[ ]
RE:10621 原因の推察等No.10622
こみやんま さん 25/03/04 07:27 [ コメントを投稿する ]
  >早速使わせて頂いているのですが、処理時間が異様に長い時が時々あるという不具合が出ているので、何とかしたいと考えています。
>
>現象としては、何処を書き換えているのかを目で追える時もあるほどです。

まず、JavaScriptの部分ですが、「何処を書き換えてるのか目で追える」可能性は、
「JavaScriptの部分に関しては、可能性ほぼゼロ」です。
なぜなら、「途中で編集エリア」を書き換えてるわけではないからです。

ただし、JavaScriptの部分を少し速くすることは出来ます。


// ちょっとだけ速くした版

jsmode "WebView2\\" + currentmacrofilename;

js {

var targetText = getselectedtext() || gettotaltext(); // 変換する対象のテキスト

var newText = targetText;

// 正規化に乗せるために、全角の濁点や半角の濁点は
newText = newText.replaceAll('゛', '\u3099')  // 合成文字にしてしまう
                 .replaceAll('゜', '\u309A')  // 合成文字にしてしまう
                 .replaceAll('゙', '\u3099')   // 合成文字にしてしまう
                 .replaceAll('゚', '\u309A');  // 合成文字にしてしまう

newText = newText.normalize("NFC"); // 合成文字があるなら正規化。

newText = newText.replaceAll('\u3099', '゙')  // 正規化で結局くっつかなかった合成文字の濁点を、通常の「半角の濁点へ」
                 .replaceAll('\u309A', '゚'); // 正規化で結局くっつかなかった合成文字の半濁点を、通常の「半角の半濁点へ」

newText = filter("", "ToZenkakuKataOnly", "", newText); // カタカナだけを全部「全角」。(半角のカタカナが全部全角になる)

newText = newText.replaceAll('゛', '゙')  // どうあっても炙れてるやつを、全角の濁点を半角の濁点に
                 .replaceAll('゜', '゚'); // どうあっても炙れてるやつを、全角の半濁点を半角の半濁点に

// 内容が更新されているならば、編集エリアに反映
if (targetText != newText) {
    if (selecting()) { insert(newText); }
    else { settotaltext(newText); }
}

} // js



■原因の推察

@子マクロに「JavaScript以外」の記述があり、そこに何か重い処理がある。

Aメニュー → 動作環境 → パフォーマンス → 詳細 の
 「マクロ変数の上限」 もしくは
 「メモリを使用する最大サイズ」が
 小さい数値なので、大きくする

B親マクロをメニューの「マクロ」→「マクロ実行」から実行してしまっている。

 (※この時、何かロックがかかったかのような現象が起きることを確認しており、数日前に掲示板にてバグ報告しています)

 対策としては、「親マクロ」を「マクロ登録」し、
 (A)「キー割り当て」してキーボードで実行するか、もしくは
 (B)「ツールバー」にボタンを登録して、それを押して実行する

私からは、このくらいでしょうか。
[ ]
RE:10622 原因の推察等No.10624
楽をしたい さん 25/03/05 00:38 [ コメントを投稿する ]
  お手数をおかけしてすいません。

> @子マクロに「JavaScript以外」の記述があり、そこに何か重い処理がある。

自作マクロに埋め込んでいるので、別ファイルに分離すればよい。と解釈していいですか?

> Aメニュー → 動作環境 → パフォーマンス → 詳細

表示がグレーアウトしていたので、一番下の『リセット』を実行しておきました。
暫くこれで様子見ながらチューニングしようと思います。

> B親マクロをメニューの「マクロ」→「マクロ実行」から実行してしまっている。

ここは問題有りません。

> 「親マクロ」を「マクロ登録」し、
>  (A)「キー割り当て」してキーボードで実行

しています。



前回ポストした後も使っていたのですが、

・140カラム100行がヌルヌルとスクロールした
・メニューバーの下に小さな窓が瞬きするような速度で開いては消えるのが見えた

という現象も。


解消たらいいな。
[ ]
RE:10603 Unicode→SJIS変換についてNo.10625
igus さん 25/03/06 00:02 [ コメントを投稿する ]
  replaceallの代わりにreplaceallquickを使ってみたところ速度がだいぶ速くなったようです。
[ ]
RE:10624 原因の推察等No.10626
igus さん 25/03/06 08:42 [ コメントを投稿する ]
  「秀丸エディタ変換モジュールライブラリ」の「Unicode正規化 V1.01」を使えば js を使わなくてもいいのかもしれません。Normalize.hmfをマクロと同じフォルダに入れてください。

https://hide.maruo.co.jp/lib/hmconv/normalize101.html

//てすと.mac
begingroupundo;selectall;
replaceallquick "'" ,"\u3099";
replaceallquick "゜","\u309A";
replaceallquick "゙" ,"\u3099";
replaceallquick "゚" ,"\u309A";
filter currentmacrodirectory+"\\Normalize.hmf","Normalize","NFC";
replaceallquick "\u3099","゙";
replaceallquick "\u309A","゚";
filter "","ToZenkakuKataOnly","";
replaceallquick "゛","゙";
replaceallquick "゜","゚";
endgroupundo;escape;endmacro;
[ ]
RE:10626 原因の推察等No.10629
楽をしたい さん 25/03/06 23:28 [ コメントを投稿する ]
  ライブラリにあったんですね。
試しに『てすと.mac』をまんま保存して自作マクロに対して「マクロ」→「マクロの実行」から実行してみました。
一瞬ホワイトアウトするけど一瞬で処理できました。ありがとうございます。助かります。使わせて頂きます。
[ ]

[ 新規に投稿する ]