【要望】文字コードによりパブリッシャのNo.11965
たにき さん 03/03/20 21:43
 
たにきです。

職場で鶴亀を使用しています。
業務の関係で外人さんともメールをやりとりしています。こちらが書くのは英語
ですが、先方から来るのはスペイン語の場合もあり、通常使用しているMSゴシッ
クではアクセント文字などが化けるため、和文メール以外は印刷フォントを
Courier Newにしています。

時々まとめて印刷したりするのですが、和文メールとそれ以外のメールが混在し
ているため、その度に印刷テンプレートを変更しています。でも正直言って面倒
くさいのです。

そこでパブリッシャの設定か何かで、文字コードがISO-2022-JPならこのテンプ
レート、それ以外なら別のテンプレートを自動的に使うようにはできないでしょ
うか。
もしやり方があるなら教えていただけるとうれしいです。

お願いします。

秀丸 v3.19、秀丸パブリッシャ v2.15、鶴亀メール v2.55
OS:Windows2000 SP3

[ ]
RE:11965 【要望】文字コードによりパブリNo.11966
ひろ さん 03/03/21 00:29
 
 たにきさん今日は、ひろです。
> そこでパブリッシャの設定か何かで、文字コードがISO-2022-JPならこのテンプ
> レート、それ以外なら別のテンプレートを自動的に使うようにはできないでしょ
> うか。
> もしやり方があるなら教えていただけるとうれしいです。
 標準で実装するとなると、鶴亀/秀丸パブリッシャーの何方で設定をするの
かなかなか難しいところですね。現状でやり方は 2 つ有ります。
(1) 秀丸パブリッシャーを使うのを止め、「秀丸の動作環境」→「印刷」の
    「印刷処理方法」は「新タイプ」にする
    ※お使いの OS の関係で、他のタイプは上手くいかない恐れ有り
(2) マクロから秀丸パブリッシャーを呼び出すことにより、文字コードごとに
    テンプレートを変更
    下記のマクロを使ってください
//鶴亀で文字コード毎にテンプレートを変更して、秀丸パブリッシャーを起動
//Content-Type: text/plain; charset=us-ascii
//なら使用するテンプレートは us-ascii を使用する。
// もしも字コードと同名のテンプレートがなければ、
//「標準のテンプレート」を使用する
loaddll "tkinfo.dll";
call GetLang;
openreg "CLASSESROOT",
    "CLSID\\{3790E08E-DA26-41E2-B6B7-A2C2DED41C2F}\\InprocServer32";
if( ! result ) {
  message "秀丸パブリッシャーがインストールされていません。";
  freedll;
  endmacro;
}
$$path = getregstr("");
closereg;
loaddll $$path;
if( !result ) {
  message
    "HidemaruApi.dllのロードに失敗しました。\nファイル名 = " + $$path;
  endmacro;
}
if(!existfile(leftstr($$path, strlen($$path) - 15)
  + "Template\\" + $$return + ".hpt"))$$return = "標準のテンプレート";
#tmp = dllfunc("PrintDialog", hidemaruhandle(0),
  $$return, selecting, 0, 0, 1, 0 );
freedll;
endmacro;

GetLang://言語情報取得
  $$return = dllfuncstr( "CurrentHeader","X-Body-Content-Type");
  if( $$return == "" )
    $$return = dllfuncstr( "CurrentHeader","Content-Type");
  $$return = dllfuncstr( "ToLower",$$return );
  $$return = rightstr($$return,strlen($$return)
    - strstr($$return,"charset=") - 8);
  ##return = strstr($$return, ";");
  if(##return != -1)$$return = leftstr($$return, ##return);
  call DelQuote $$return;
  return $$return;

DelQuote://double quotation で括られていたら削除
  if( ascii( $$1 ) == 0x22 ){
    if( ascii( rightstr( $$1, 2 ) ) >= 0xFF00 )return $$1;
    if( ascii( rightstr( $$1, 1 ) ) != 0x22 )return $$1;
    else return midstr( $$1, 1, strlen( $$1 ) - 2 );
  }
  return $$1;

[ ]
RE:11966 【要望】文字コードによりパブリNo.11969
たにき さん 03/03/21 04:43
 
ひろさん、返信ありがとうございます。

今ここにプリンタがないのでマクロの結果は来週まで確認できないのですが、ひ
とつ質問させてください。

今問題となるメールは、文字コードが「iso-8859-1」なメールです。
「us-ascii」で送ってくる人は、だいたいがピュアな英語なので標準として使っ
ているMSゴシックでもなんとかなります。

ここがうまく切り分けできればと思うのですが、マクロのコメントを読むと判定
を「us-ascii」としているように感じますが、いかがでしょうか。
できたら「iso-2022-jp」なら、となると更にいいかもしれません。和文は必ず
こうでしょうから。

>    下記のマクロを使ってください
>//鶴亀で文字コード毎にテンプレートを変更して、秀丸パブリッシャーを起動
>//Content-Type: text/plain; charset=us-ascii
>//なら使用するテンプレートは us-ascii を使用する。
>// もしも字コードと同名のテンプレートがなければ、
>//「標準のテンプレート」を使用する

[ ]
RE:11969 【要望】文字コードによりパブリNo.11975
ひろ さん 03/03/21 15:33
 
 たにきさん今日は、ひろです。
> 今問題となるメールは、文字コードが「iso-8859-1」なメールです。
> 「us-ascii」で送ってくる人は、だいたいがピュアな英語なので標準として使っ
> ているMSゴシックでもなんとかなります。
 そういう意味ではありません。メールの文字コードと同名のテンプレートが
あればそれを使用し、無ければ常に「標準のテンプレート」を使用します。で
すから us-ascii にしろ iso-2022-jp にしろ、そのテンプレートを用意しな
ければ「標準のテンプレート」を使用するので、「標準のテンプレート」で
フォントに日本語フォントを指定しておけばよいです。

 ただこれだと面倒で、もう一つ
・マクロ+秀丸パブリッシャーで常に現在使用しているフォントで印刷する
という手がありました。末尾に付けておきます。
//----- ウィンドウ表示に使用しているフォントを使用するマクロ --------
//「(編集中のフォント)」にあたり、秀丸でも使用できる
openreg "CLASSESROOT",
  "CLSID\\{3790E08E-DA26-41E2-B6B7-A2C2DED41C2F}\\InprocServer32";
if( ! result ) {
  message "秀丸パブリッシャーがインストールされていません。";
  endmacro;
}
$$path = getregstr("");
closereg;
loaddll $$path;
if( !result ) {
  message "HidemaruApi.dllのロードに失敗しました。\nファイル名 = "
    + $$path;
  endmacro;
}
writeinistr leftstr($$path, strlen($$path) - 15)
  + "Template\\標準のテンプレート.hpt", "Body", "fontname", fontname;
#tmp = dllfunc("PrintDialog", hidemaruhandle(0), "標準のテンプレート",
  selecting, 0, 0, 1, 0 );
freedll;
endmacro;

[ ]