StyleScript reads a HTML / SGML file, local or from an URL, and writes a Postscript file. I use the sp library, so only files that names a dtd and conforms to it is supported. If your document passes the W3C validator without errors, it should be printable.
So why not simply use the 'print' facility in the browser (e.g. Netscape navigator)? It lacks some things that I think are essential to print documents well. Here are some rare features of StyleScript:
In StyleScript, the section about page breaks in the CSS2 proposed recommendation is implemented.
LANGis usually ignored. I use it to set the language of auto-generated text (e.g. date) and in future versions I will use it for automatic hyphenation.
­is typically rendered identical to the character '-', but it should be rendered as a hyphenation point. StyleScript (and lynx) does the right thing™.
Get the source
Actually, StyleScript is not quite open-source yet, but it soon will be. I have the source in CVS, but it is not yet possible to access it anonymously. I hope that this will change soon ... Later, when it is more functional, there will be distributions as well, but probably not before the summer.
If you are interested in taking part of the development, mail me at firstname.lastname@example.org so I can make a source distribution (if you don't mail me, there will be a source distribution eventually, but you'll have to wait longer for it).
For translating bitmap images of miscellaneous formats to postscript.
For creating font metrics (afm files) from fonts
For parsing the sgml input files.
- A C++ compiler
Since it's written in C++. StyleScript requires some standard features such as
dynamic_cast, exceptions, and templates. gcc 2.95.2 is ok, gcc 2.8.x or earlier is not ok.
Things left to do
This page is not complete yet, but on the other hand, StyleScript itself isn't nearly complete ... Here are a few things remaining to do in the program.
Required for CSS1 core
Ok, this is a rather long list. But I think that the fact that I actually have this list makes StyleScript better than most of the alternatives ...
Anchor pseudo-classes (link, visited, active) is not supported. They should probably be handled as identical anyway, but
A:linkshould be different from just
!importanttag on rules is not supported.
Stylistic HTML elementsshould have lower weight than 'style'. Those I support is treated as same weight as 'style' attributes. On the other hand, support for them is optional in the first place, so I might just drop it.
Space should be reserved for border widths. I take half of it from the margin and half from the padding (i.e. I just draw the border, at specified width, without reserving space for it).
Margins should collapse in a more complicated manner than what I use. I'll check what CSS2 says before I do anything about this.
If both margins are 'auto', they should get half the available space each. I don't do this yet.
- 4.1.4 / 5.5.25 - 26
Float is not supported at all.
- 4.4 / 5.4.8
The 'line-height' property is not supported.
I don't do font matching per glyph yet.
Whitespace / quotes in 'font-family' is probably not handled correctly. Also, there seem to be a bug in handling a 'font-family' list with more than one generic name.
The 'font-variant' property is not supported yet.
Only 'medium' and 'bold' is supported for 'font-weight'.
The 'font' shorthand is not supported.
The 'vertical-align' property is not completely supported in all cases.
- 5.6.3 - 6
The 'list-style', 'list-style-type', 'list-style-image', and 'list-style-position' properties is not supported (I just use plain discs).
Advanced CSS support
:first-line, :first-letter pseudo-classes.
'background-attachment' not implemented. Actually, this breaks core support as well, since the rule
background: url(foo.png) fixedwill be completely ignored.
'word-spacing' not supported.
'text-transform' not supported.
'border-style' only 'none' / 'solid' supported.
I use footnotes for link URIs. Make this styleable, just like the :before and :after generated content.
Making the footnotes styleable would also make it possible to do more advanced stuff (like
see foo on page 17), provided there was some way of getting the page numbers, heading contents, etc from the link target ... It should also be possible to disable the footnote and use a :after (or nothing) instead.
There is a bug in local links, the filename is dropped (#foo becomes site/dir/#foo rather than site/dir/file#foo).
I don't handle transparency in gifs yet, and only fake transparency for pngs (I find a background color and use that for transparent areas).
- Font maps
StyleScript currently uses a hard-coded font map. It would probably be best if it could read the same Fontmap files as ghostscript.
- Generated content
I do support some generated content for :before and :after, but no counters, so I handle
<Q>fine (which most browsers don't) but I don't handle a
<OL>different from a
<UL>(which most browsers do).
<TD>is treated as
- Other stuff
A lot of other minor—and not so minor—stuff needs to be fixed.
class/id selectors cannot begin with digits
Borders on inline elements.
Negative 'font-size' should be ignored.
Repeated bg imgs should tile in all directions
See also ...
If you want something that already works, although with limited CSS support, take a look at html2ps by Jan Kärrman.