vfontxform(1)

πŸ“¦ version 1.1.3, in nixpkgs unstable, ubuntu stonking

πŸ’– vfontxform β€” ok bestie, it's manual page o'clock πŸ’–

So this is the manual for vfontxform, part of the PSF Tools family (like, the PSF Tools girlies πŸŽ€). It does exactly one thing and it does it iconically: it takes a BSD vfont file and transforms it. Slay.


✨ NAME ✨

vfontxform β€” apply various transformations to a BSD vfont file. That's it, that's the job, and she eats every time πŸ’…


🌸 SYNOPSIS 🌸

vfontxform [--first=FIRST] [--last=LAST] [--256] [--bold=RANGE]
[--double=RANGE] [--flip=RANGE] [--repeat=RANGE] [--thin=RANGE]
[--strip] [--codepage=CODEPAGE] [--setcodepage=CODEPAGE]
[--permute=FILE] [--v1] [--v2] [--big-endian] [--little-endian]
[INPUTFILE [OUTPUTFILE]]

Notice how --repeat shows up in the SYNOPSIS but not in OPTIONS? Yeah. Not me flagging that, just saying. πŸ™ˆ Anyway, moving on.


πŸ¦‹ DESCRIPTION πŸ¦‹

okay so. vfontxform extracts some or all characters from a font in the BSD vfont format, applies various transformations to them, and saves the result as another vfont font. Basically it's a glow-up machine for fonts ✨

You can pull out subsets as a range of characters, as a codepage, or honestly both if you're feeling main character energy. Go off.

Now β€” the character ranges you pass to --bold, --double and so on? They're optional bestie, you don't have to give one if you don't want to. But if you do, they're formed as a comma-separated list, and each element is either:

  • nnn for a single character
  • nnn-nnn for a contiguous set of characters

For example πŸ“, to apply --repeat to characters 8, 10 and 179 to 223, you'd go:

--repeat=8,10,179-223

See? Comma-separated, like a little snack list. Periodt.


πŸ’… OPTIONS πŸ’…

Get comfy, this is the long part. Every single one, no skips, no cap.

  • --codepage=x β€” Extracts only the characters in the given codepage. Heads up: this requires the source PSF file to have a Unicode directory. Any characters in the codepage that aren't present in the source font get replaced by blanks (rip to them 😭). You can specify the codepage by number or by name β€” peep psfpages(1) for the list of acceptable codepage names.
  • --setcodepage=x β€” Replaces any Unicode information in the extracted font with the Unicode mappings for the specified codepage. Important vibe check: this option does not change the character bitmaps in any way. Not one pixel. She only touches the Unicode info.
  • --strip β€” Forces the output font to be written with no Unicode directory, even if the source font had one. Stripped. Naked. No Unicode for you. πŸ‘‘
  • --first=n β€” Extracts characters starting at the specified character.
  • --last=n β€” Extracts characters up to and including the specified character. Inclusive, because she's generous.
  • --256 β€” Equivalent to --first=0 --last=255. Just a lil shortcut, iykyk.
  • --permute=filename β€” Rearranges the character bitmaps in the output file. Note that this only affects the character bitmaps, not the Unicode directory β€” they are separate girlies and they do not speak. The filename you pass to --permute can be "-" for standard input. Its format should be a series of lines, each one containing two numbers separated by a comma. The first number is the character number to change from, and the second is the number to change to. For example, two lines β€” the first reading 65,66 and the second reading 66,65 β€” will swap the glyphs for A and B πŸ”. Anything after a # or ; is a comment (go ahead and annotate your chaos). The numbers used relate to the source file, before any subset is extracted.
  • --bold=RANGE β€” Makes characters bold by drawing them twice. ⚠️ Note that if no --width option is supplied, this will make the target font one pixel wider than the source font. She's bulking, okay?
  • --double=RANGE β€” Doubles each row in the source character. Every row. Doubled. That's the whole thing. πŸ’€
  • --flip=RANGE β€” Mirror characters left/right. Like a selfie camera but for glyphs πŸͺž
  • --thin=RANGE β€” Makes characters thin by reducing vertical lines wider than one pixel. The opposite of the bold glow-up. She's on a diet.
  • --v1 β€” Output in the original vfont(5) format. But bestie, this format has limitations, so listen up: at most 256 characters, at most 127x127 pixels per character, and no Unicode directory. That's the deal. Take it or leave it.
  • --v2 β€” Output in vfont2(5) format. This allows more characters, larger bitmaps, and Unicode πŸŽ‰ β€” but it's currently supported only by psftools utilities. So don't go expecting the whole world to read your fancy new file, ok? It's niche. It's exclusive. It's giving members-only.
  • --big-endian β€” When writing in the original vfont format, create a big-endian file (suitable for platforms such as SunOS). Throwback.
  • --little-endian β€” When writing in the original vfont format, create a little-endian file. Lil endian. Precious.

🌈 One more thing, super important, don't scroll past this: If a codepage and --first / --last are both specified, then the --first / --last apply to the subset of characters extracted by the codepage. Similarly, all character ranges on --bold, --thin etc. apply to the extracted subset. So like, the codepage happens first and everything else is relative to that. Stacking order matters, bestie, it always does πŸ’œ

πŸ‘€ SEE ALSO πŸ‘€

psfpages(1),psfxform(1)


🫢 AUTHOR 🫢

John Elliott <seasip.webmaster@gmail.com>. Legend behavior, fr fr. Thank you for your service πŸŽ€


And that's the whole page! This little baddie is Version 1.1.3, dated 28 April, 2026 β€” mark your calendars, she's a PSF Tools icon and she knows it. Go transform something. Mwah πŸ’–βœ¨

πŸ“¦ where this page comes from