[ 新規に投稿する ]

追加のフォントをマクロで指定する方法について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」を検索しましたがヒットしませんでした。

正しい書きかたを教えていただければ幸いです。
[ ]
(発言者削除)No.41118
こみやんま さん 24/03/19 10:19
 
[ ]
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上のヘルプが古くて混乱させてしまいました。
なにはともあれできたということでよかったです。
[ ]

[ 新規に投稿する ]