追加のフォントをマクロで指定する方法にNo.41117
レモン さん 24/03/19 07:41
 
【秀丸エディタバージョン】 v9.32β3
【OS】 Windows 11(23H2)

追加のフォントをマクロで指定する方法がよくわからないので、どなたかお知恵を拝
借できれば嬉しいです。やりたいことは「デフォルトのフォントをUD デジタル 教科
書体 NK-Rにして、これに含まれない文字はメイリオで表示する」ことです。

マクロヘルプ(Ver9.24対応版)の「configのJSON/オブジェクト指定について」を参
照しながら以下のように書いてみましたが、メイリオで表示したい文字がUD デジタ
ル 教科書体 NK-Rで表示されてしまいます。

 UD_Degital_Textbook:
  js {
   config({
   Font: "UD デジタル 教科書体 NK-R",
   FontPoint: 12,
   FontDecimal: 0,
   FallbackFont: 1,
   FallbackFonts: {
    FallbackFonts: 1,
    Font: "メイリオ",
   },
   });
  }

ヘルプによると FallbackFonts は「要素数」と「配列」を記述するそうですが、こ
の二つを合わせて書く方法がわかりません。要素数はひとつなので、

FallbackFonts: 1,

と書けばよいのでしょうが、そのあとの「配列」の書きかたがわかりません。ヘルプ
によると Array<T>を使うそうですが、TypeScriptの知識がなく、色々なサイトで調
べたところ、Array<{ ..... }>; という書きかたがあることを下記のサイトで知りま
した。
https://www.tmp1024.com/typescript-interface-nest/

そこで、

FallbackFonts: Array<{
  Font: "メイリオ"
 }>,

と書いてみましたが構文エラーが出ます。サポートフォーラムで「FallbackFonts」
を検索しましたがヒットしませんでした。

正しい書きかたを教えていただければ幸いです。

[ ]
RE:41117 追加のフォントをマクロで指定すNo.41119
こみやんま さん 24/03/19 10:25
 
TypeScript自体は「実行」するための言語ではなく、
変換元の言語(変換=トランスパイル)なので、「JavaScriptマクロとして」直接記
述するようなものではないです。


var json_arg =
{
    Font: "Consolas",
    FontPoint: 12,
    FontDecimal: 0,
    FallbackFont: 1,
    FallbackFonts: [
        {
            Font: "メイリオ"
        },
        {
            Font: "メイリオ2"
        }
    ]
}

config(json_arg);


とか、


Array使うなら

var json_arg =
{
    Font: "Consolas",
    FontPoint: 12,
    FontDecimal: 0,
    FallbackFont: 1,
    FallbackFonts: Array(
        {
            Font: "メイリオ"
        },
        {
            Font: "メイリオ2"
        }
    )
}

config(json_arg);

とか


----------------------------

最小のArray

var aaa = Array({Font:"あいう"},{Font:"かきく"});

debuginfo(2);
console.log(JSON.stringify(aaa));

Array<T>のTというのは型ですが、
TypeScriptの場合、具体的な「型名」はあってもなくても型で縛れるので
{Font?:string, Adjust?; ...(そのほか) } という名前なしの「型=T」です。

Array<T> とは、T={Font?:string, Adjust?; ...(そのほか) } を1つとみなしたT型
のオブジェクトの配列という意味ですから
[
   {Font:"***"},
   {Font:"***"},
]
とか
Array(
   {Font:"***"},
   {Font:"***"},
)

となります。

-----------------------------------------------------------

var aaa = Array({Font:"あいう"},{Font:"かきく"});

debuginfo(2);
console.log(JSON.stringify(aaa));

-----------------------------------------------------------

var aaa = [{Font:"あいう"},{Font:"かきく"}]; // 通常はこちらで記述することが
多いはず?

debuginfo(2);
console.log(JSON.stringify(aaa));

[ ]
RE:41119 追加のフォントをマクロで指定すNo.41120
レモン さん 24/03/19 11:55
 
こみやんまさん、ご教示ありがとうございます。
一番最初に教えて下さった例に従って以下のように書いてみましたが、実行するとフ
ァイル全体のデフォルトがメイリオで表示されてしまいます。

 UD_Degital_Textbook:
  js {
   config({
   Font: "UD デジタル 教科書体 NK-R",
   FontPoint: 12,
   FontDecimal: 0,
   FallbackFont: 1,
   FallbackFonts: [
    {
     Font: "メイリオ"
    },
   ]
   });
  }
  goto main_end;


「ファイルタイプ別の設定」→「設定の対象」→「フォント」を確認したところ正し
くUD デジタル 教科書体 NK-Rが選ばれておりプレビューも正しく表示されています。
「追加のフォント」にチェックマークがついており、「第2フォント(メイリオ)」と
記入されているのですが、ファイルの本文はすべてメイリオで表示されてしまいます。

「第1フォント」はいちばん最初の Font のところで指定しました。「第2フォント
(=追加のフォント)」は Fallbackfonts: 以下の最初の行に書けばよいと思いまし
て、上のように書いたのですが、すべてメイリオで表示されてしまいます。

そこで下記のように書き直してみましたが、今度はファイル全体がUD デジタル 教科
書体 NK-Rで正しく表示されるのですが、このフォントに含まれない文字をメイリオ
で表示してくれません。

 UD_Degital_Textbook:
  js {
   config({
   Font: "UD デジタル 教科書体 NK-R",
   FontPoint: 12,
   FontDecimal: 0,
   FallbackFont: 1,
   FallbackFonts: [
    {
     Font: "UD デジタル 教科書体 NK-R"
    },
    {
     Font: "メイリオ"
    }

Arrayの例を教えて下さったので、以下のように書いてみましたが、構文エラーにな
ってしまいます。

 UD_Degital_Textbook:
  js {
   config({
   Font: "UD デジタル 教科書体 NK-R",
   FontPoint: 12,
   FontDecimal: 0,
   FallbackFont: 1,
   FallbackFonts: Array(
    {
     Font: "メイリオ"
    },
   )
   });
  }
  goto main_end;

どのように書き直せばよいでしょうか。ご面倒でなければ教えていただければ幸いで
す。

[ ]
RE:41120 追加のフォントをマクロで指定すNo.41121
こみやんま さん 24/03/19 12:31
 
FallbackFonts: [
    {
     Font: "メイリオ"
    },
   ]



FallbackFonts: Array(
    {
     Font: "メイリオ"
    },
   )

は、一番最後の配列の後ろに「,」は付けない方がいいです。
特にArrayの場合は、
```
var a = Array({"a":33},)
```
といった記載と同じなので、「,」が文法エラーになります。

[] の場合は、最後にnull要素が自動で付与されると思いますが、いけるのかな...?
configの解釈次第

 js {
   config({
   Font: "UD デジタル 教科書体 NK-R",
   FontPoint: 12,
   FontDecimal: 0,
   FallbackFont: 1,
   FallbackFonts: [
    {
     Font: "MS 明朝", RangeType: "nascii"
    }
   ]
   });
  }

とかだと、普通に機能しているから、機能してるんじゃないのかなぁ?




[ ]
RE:41121 追加のフォントをマクロで指定すNo.41122
レモン さん 24/03/19 12:49
 
こみやんまさん、早々とレスをありがとうございます。
ご紹介下さった下記のマクロを実行してみましたが、なぜかすべての文字が「MS明
朝」で表示されてしまいます。
「ファイルタイプ別の設定」→「設定の対象」→「フォント」は「UD デジタル 教科
書体 NK-R」、プレビュー表示も正しく、「追加のフォント」にチェックマークが入
っていて「第2フォント(MS明朝)」と表示されているのですが、なぜか本文がすべ
てMS明朝で表示されてしまいます。

 js {
   config({
   Font: "UD デジタル 教科書体 NK-R",
   FontPoint: 12,
   FontDecimal: 0,
   FallbackFont: 1,
   FallbackFonts: [
    {
     Font: "MS 明朝", RangeType: "nascii"
    }
   ]
   });
  }
 
何が原因なのでしょうか。

[ ]
RE:41122 追加のフォントをマクロで指定すNo.41123
レモン さん 24/03/19 13:24
 
ご参考までにマクロファイルの内容をすべて記しておきます。


//-----------font.mac-------------
//
//  フォント変更マクロ
//
//------------------------------------

  js {
     config({
     Font: "UD デジタル 教科書体 NK-R",
     FontPoint: 12,
     FontDecimal: 0,
     FallbackFont: 1,
     FallbackFonts: [
      {
       Font: "MS 明朝", RangeType: "nascii"
      }
     ]
     });
    }
    endmacro;

/*
2024/03/18 作成
*/

[ ]
RE:41123 追加のフォントをマクロで指定すNo.41124
レモン さん 24/03/19 13:52
 
第2フォント名を書き間違えました。手もとのマクロは下記の通りです。

//-----------font.mac-------------
//
//  フォント変更マクロ
//
//------------------------------------

  js {
     config({
     Font: "UD デジタル 教科書体 NK-R",
     FontPoint: 12,
     FontDecimal: 0,
     FallbackFont: 1,
     FallbackFonts: [
      {
       Font: "メイリオ",
      }
     ]
     });
    }
    endmacro;

/*
2024/03/18 作成
*/

これを実行するとすべての文字がメイリオで表示されます。
「ファイルタイプ別の設定」→「設定の対象」→「フォント」→「追加のフォント」
のチェックを外すとすべての文字がUD デジタル 教科書体 NK-Rで正しく表示される
のですが、このフォントにはない文字をメイリオで表示してくれません。
どこを直せばよいのか皆目見当がつかず途方に暮れております。

[ ]
RE:41124 追加のフォントをマクロで指定すNo.41126
秀丸担当 さん 24/03/19 15:52
 
オブジェクトの指定の仕方などは、こみやんまさんの言われる通りで、ありがとうご
ざいます。

通常のフォントに無くて、追加のフォントにある文字とするには、
[その他]→[ファイルタイプ別の設定]→[フォント]→[追加のフォント]→[プロパテ
ィ]で、[文字コード範囲指定]をせずに、OFFにしておくとできます。
参考:
https://hide.maruo.co.jp/software/hidemarunew/v896_1.html

オブジェクトの指定の場合、FallbackFontsの中のRangeがそれにあたります。


UD デジタル 教科書体 NK-Rに無くて、メイリオにある文字というのが具体的に何か
ちょっとわかりづらかったので、以下のサンプルで游明朝にしてみました。

  js {
     config({
     Font: "UD デジタル 教科書体 NK-R",
     FontPoint: 22,
     FontDecimal: 0,
     FallbackFont: 1,
     FallbackFonts: [
      {
       Range:0,
       Font: "游明朝",
      }
     ]
     });
  }
  endmacro;


config文のほうの定義から見ると複雑かもしれません。
getconfig文のほうのサンプルで、現在の設定をJSONとして書き出してから、それを
元に編集するとやりやすいです。

例:
//jsmode "WebView2"; //これにすると\uじゃなくなる
js{
  all=getconfig({});
  setVar("$out",JSON.stringify(all,null," "));
}
newfile;
insert $out;
endmacro;

[ ]
RE:41126 追加のフォントをマクロで指定すNo.41127
レモン さん 24/03/19 16:22
 
秀丸担当さん、わかりやすい例を教えて下さりありがとうございます。
おかげさまで正しく表示されました! 「Range:0」を追加すればよいのですね。
「UD デジタル 教科書体 NK-Rに無くてメイリオにある文字」はいろいろございまし
て、たとえばと「戸」(u+6238)の旧字体(u+6236)です。

getconfig文のサンプルは下記のサイトのことだと思いますが、「現在の設定をJSON
として書き出してから、それを元に編集する」というご説明の意味がまったく理解で
きない素人でございます。

●getconfigのJSON/オブジェクト指定について(Ver9.24対応版)
https://help.maruo.co.jp/hidemac/html/070_Function_getconfig_json.html

このヘルプに掲載されている例は、

----------------ここから------------------
例(1)
$json = getconfig("""
  {
    "Font": "",
    "FontPoint": 0,
    "FontDecimal": 0,
  }
  """);
message $json;

例(2)
js{
  obj = getconfig({
      Font: "",
      FontPoint: 0,
      FontDecimal: 0,
    });
  message( JSON.stringify(obj,null," "));
  message( obj.Font );
}
----------------ここまで------------------

この二つですが、「Range:0」に関する説明がどこにもないので、何をどうすればよ
いのかまるでわかりません。

また、ご丁寧に最後に紹介して下さった下記の例も、これが何の例なのか、まったく
見当がつきません。

------------------ここから------------------
例(3):
//jsmode "WebView2"; //これにすると\uじゃなくなる
js{
  all=getconfig({});
  setVar("$out",JSON.stringify(all,null," "));
}
newfile;
insert $out;
endmacro;
------------------ここまで------------------

ヘルプに記載されている二つの例に何らかの操作をほどこすと例(3)のマクロがで
きるのでしょうが、秀丸マクロも初心者に毛の生えた程度で、JSONというものが何な
のかも存じず、JavaScriptもTypeScriptもまったく知らないものですから、残念なが
ら理解できませんでした。

でも、おかげさまで追加のフォントの指定方法がわかりました。ご親切にどうもあり
がとうございました。

[ ]
RE:41127 追加のフォントをマクロで指定すNo.41128
秀丸担当 さん 24/03/19 16:37
 
Web上のヘルプは最新ではありませんでした。
最新版では{}で全て取得できるようにしていて、最新のヘルプでは全て取得できるサ
ンプルとして以下のものがあります。

js{
  all=getconfig({});
  cs=getconfig({ColorSet:{}});
  all.ColorSet=cs.ColorSet;
  setVar("$out",JSON.stringify(all,null," "));
}
newfile;
insert $out;
endmacro;

ColorSetは長くていらなそうだったので、それを省いたものがさきほどのサンプルに
なります。

[ ]
RE:41128 追加のフォントをマクロで指定すNo.41129
レモン さん 24/03/19 18:45
 
ご指南ありがとうございます。
最新版のヘルプファイルで確認いたしました。jsの書き方が簡略化されたのですね。
この度は勉強になりました。取り急ぎお礼まで。

[ ]
RE:41129 追加のフォントをマクロで指定すNo.41130
レモン さん 24/03/19 18:55
 
ご紹介下さったマクロを実行すると設定内容がJSON形式で出力されました。
これをベースにして編集すればよいのですね。ようやく合点がいきました。
どうもありがとうございました。

[ ]
RE:41130 追加のフォントをマクロで指定すNo.41132
秀丸担当 さん 24/03/21 09:08
 
Web上のヘルプが古くて混乱させてしまいました。
なにはともあれできたということでよかったです。

[ ]