I think it would be unwise to make the editor usable on Bedstead's Web
page. This avoids the danger of Bedstead's Web page turning into a
regulated user-to-user service under the Online Safety Act 2023, with
all the paperwork that would entail.
Specifically, if there were an editor on Bedstead's Web page then
users could use it to create glyph designs. That would, indeed, be
the whole point. They might also send those designs to me for
incorporation into Bedstead. But if I accepted any of those designs,
then "content generated directly on the service by a user" might "be
encountered by another user, or other users, of the service" (OSA
s3(1)), making the site a user-to-user service.
Ofcom take the position that being hosted on a .uk domain name is
enough to give a service "links to the UK", and none of the exemptions
cover Bedstead's Web page. So if the page were a user-to-user
service, it would be a regulated one.
Being a regulated user-to-user service brings requirements for
risk-assessment, record-keeping, and terms of service. These might be
reasonable for a service of any significant size, but it's not worth
the effort for something that I expect will get me a few glyphs at
most. And there seem to be moves afoot to require age assurance on
all regulated user-to-user services, which would be particularly
annoying.
The OSA is arranged such that even if no new content can be created on
a service, the continuing presence of user-generated content on a
service causes it to be a user-to-user service. So ever accepting a
glyph designed on the Web page would permanently make it into a
user-to-user service. Thus it's important that I shouldn't do that.
Add -sINCOMING_MODULE_JS_API because in newer Emscripten -sSTRICT
empties it. Remove -sMODULARIZE because -sEXPORT_ES6 implies it. Add
-O2 since the compiled code will probably be run more than once. Pass
standard compiler flags to emcc. Build bedstead.js in all-web, and
remove it in clean.
Ghostscript 10.03.1 and later disable the "makeimagedevice" operator
when running under -dSAFER. Even --permit-devices='*' isn't enough to
get it back. The release notes say that makeimagedevice has been
removed entirely, but that seems not to be correct.
Instead, pass the destination filename to the bdf.ps program and have it
open the file itself. This avoids capturing Ghostscript's own
diagnostics in the output file.
bedstead.c outputs an utterly minimal TTX file containing no tables, and
TTX compiles it into a similarly minimal OTF. Which Ghostscript then
complains about.
FontForge is an impressive application, but it's not well-suited to
being part of a mechanical font-production pipeline. The SFD format is
weird and rather difficult to generate, and FontForge imposes rather
more of its own opinions on the output than I'd like.
TTX is a lower-level format, and while it's a little bit weird, most of
it's weirdness comes from being a faithful representation of the
structure of an OpenType font. Ideally I'd like something a little
higher-level, but a format that's too low-level is much easier to work
with than one that's too high-level. The obvious alternative is UFO,
which is very popular but looks like being a pain to generate from plain
C.
Looking to the future, I like the idea of a variable version of
Bedstead, and neither SFD nor UFO seems to support that very well. In
UFO's case, it seems that the convention is to create UFOs at various
points in the design space and then have a tool interpolate between
them, which seems wrong when they're all procedurally generated from the
same source. TTX will allow me to directly generate the variation
tables, if I can understand how they work.
"make all" shouldn't depend on things that aren't in the source
distribution, and now it doesn't. The images that are only used for the
Web site are now generated by a separate "all-web" target. I'm not sure
this is the right long-term approach, but it's good enough for now.
It's necessary to build the glyph complement, and I think the source
distribution should include everything necessary to build the binaries
in it. It doesn't need to include things that are only used for the
Web site, though.
A typical Web browser support Web Fonts these days, so there's no need
to use an image for the purpose. The other images remain for now since
they're not really representing text.
They're not really finished products. Also I don't think I should
encourage people to load random SFDs since FontForge will apparently
happily execute Python code it finds in them.
They were only built because I didn't know how to make Ghostscript
use OTF files directly. Now that I do, there's no need to keep
them, so dropping them for 002.000 makes sense.
The names of the widths now track those in the OpenType 'OS/2' table, so
the former condensed and semicondensed are now ultra-condensed and
extra-condensed, and there are new condensed and semi-condensed widths
to fill the gaps. Also, the fonts are named more consistently with
Adobe's practice: "Bedstead Semi Condensed" and so forth.
The new Bedstead Condensed makes a pretty decent terminal font, which is
a nice side-effect.