1 ポイント 投稿者 GN⁺ 10 시간 전 | 1件のコメント | WhatsAppで共有
  • Hershey Fonts は1967年に作られた初期のデジタル字体表現の1つで、.jhf ファイルは各行が1つのグリフを表すテキストファイル
  • グリフ行は id[5]length[3]left[1]right[1]points[?] で構成され、IDと点の個数は10進数でエンコードされる
  • 点座標 は2文字で符号付きの xy 値を表し、R は 0、Q は -1、S は +1 に対応する
  • 文字値は J=-8 から Z=+8 まで続き、たとえば NW-4,5 座標を意味する
  • ペンの持ち上げ は空白の後に大文字 R が来る " R" で示され、次の位置まで線を引かない特殊動作である

形式の概要

  • Hershey Fonts は1967年に作られた初期のデジタル字体表現の1つで、Hersheyベクター字体ファイル .jhf は1行が1つのグリフを表すテキストファイル
  • 各グリフ行は5つの部分にエンコードされる
    • id[5]: グリフの 10進数 ID
    • length[3]: 点の個数を表す 10進数値
    • left[1]: 境界ボックスの左位置
    • right[1]: 境界ボックスの右位置
    • points[?]: 改行で終わる点の一覧
  • 1つの点は2文字で構成され、それぞれ符号付きの xy 値を表す
  • " R" のように 空白の後に大文字 R が来る位置は、ペンを持ち上げる動作を意味し、次の位置まで線を引かない

値の対応関係と参考資料

  • 文字値は J から Z まで -8 から +8 に対応し、R が 0 の基準となる
    • J=-8, K=-7, L=-6, M=-5, N=-4, O=-3, P=-2, Q=-1
    • R=0
    • S=+1, T=+2, U=+3, V=+4, W=+5, X=+6, Y=+7, Z=+8
  • たとえば NWN=-4W=+5 なので、-4,5 座標に対応する
  • 関連資料

1件のコメント

 
Lobste.rsのコメント
  • 興味のある人がいれば、作業中の小さな Hersheyフォント集 を作っています。
    オンラインでよく見かける他の書体よりも少し モダンな雰囲気 があります

    • いいですね。プロッタ作業をもっとしていた頃は使えるフォントが少なすぎて残念だったのですが、これらのフォントは 新鮮で見栄えが良い です。
      プロッタや普通の太いペンで描いたときにどう見えるかの写真もあると嬉しいです
    • 便利そうです。
      特に提供されている .jhf ファイルが よく構造化されている のが良いです。オンライン上の多くのHersheyフォントでは、すべてのグリフの id フィールドが 12345 になっていたり、一部のグリフに強制改行が入っていたりして、ファイルのパースやテキスト描画を無駄に難しくしています
    • 本当に見栄えの良いフォントですね。
      最近 Pimoroni Inky 電子ペーパーディスプレイと Raspberry Pi コントローラを触っていて Hersheyフォントと .jhf ファイル形式に出会いました。付属ライブラリには記憶では “Futural” フォントがあり、全体的にはうまく動作するのですが、一つ問題があって スウェーデン語の文字 å, ä, ö がありません。
      もうあなたのほうが私より100倍はHersheyフォントに詳しそうなので聞きたいのですが、ASCII表の最初の255文字くらいを収めた .jhf フォントファイルを見たことはありますか。私が見つけられていないだけなのか、あるいは実際に存在しないのか分からないので、もしすでに見たことがあればと思って聞いています
  • これは Hershey 原典データの Usenet Font Consortium(1986)による再加工版で、元の Calligraphy for Computers(1967、PDF) / A contribution to computer typesetting techniques : tables of coordinates for Hershey's repertory of occidental type fonts and graphic symbols のデータ形式に対して、かなり 1986年風のCプログラマらしい 自由さを発揮した版です。
    元の Fortran 固定フィールド形式のほうがむしろ扱いやすそうですが、NTISで提供されていたデータテープは失われたものとみられます。Usenetの投稿には「本当にそんな形式を使いたがる人がいるとも思えないが…」といった皮肉もありました。
    それから、2016年ごろに最後に触った Hershey OTFコンバータ を完成させるか、公開するか、あきらめるかしなければならないことを思い出させてくれてありがとう: scruss/python-hershey。この狂ったフォント形式に一度でも挑んだすべての人に敬意を表します。
    新たなベクターフォントのウサギ穴もあります: GIMMS。これは University of Edinburgh で使われていたものです。
    Frank Grießhammer が Hershey とその仕事について良い記事と図版を残しています: Frank Grießhammer

  • 今書いている ソフトウェアレンダラ にこの形式はかなり役立ちそうです。
    お遊びプロジェクトなので OTF/TTF フォントをサポートしたくもないし必要もなく、Hersheyフォントは現在の方式である olive.c に着想を得た固定幅ビットマップフォントより、より良くて低コストな改善策に見えます

  • うーん、ベースライン はないのですか?

    • これまで見た例では、グリフを縦方向に一様な中心線へ合わせているように見えます。
      グリフIDと ASCII / Unicode 文字の対応付けさえあれば、0 のような 基準文字 の寸法からベースラインを計算できそうです
  • ずっと前に Hersheyフォントを JSON に変換しました。
    かなり冗長ですが、処理しやすく読みやすくなっています。欲しい人がいれば、2.6MB のファイルを ここ から取得できます

  • 宣言的な https://en.wikipedia.org/wiki/Metafont に対する 命令型の形式 のように見えます

  • BGIフォント も似た構造を持っていました

  • Hersheyフォントが有用な理由の一つは、単純なベクター形式 なのでペンプロッタだけでなく、画面表示向けのさまざまな効果もその上に作りやすい点です。
    たとえば AoC 2024 の5日目の可視化では、ベクターから点をサンプリングして泡の核生成地点として使っていました: https://hachyderm.io/deck/@bazzargh/113599143062296178
    12日目には線をゆっくり描いて、霜の付いた窓に文字を書いているような効果を出していました: https://hachyderm.io/deck/@bazzargh/113639456289455465