Typeset is an html pre-processor for web typography. It uses no client-side JavaScript but gives you hanging punctuation, soft hyphen insertion, optical margin outdents, small-caps conversion and punctuation substitution. See the results on the demo. The library is idempotent and runs on the server using Node – I'll adapt it to work on the client soon. The processed HTML & CSS renders correctly in IE5 and without any CSS!
npm install typesetUsage
var typeset = require('typeset');
var html = '<p>"Hello," said the fox.</p>';
var output = typeset(html);Then tweak typeset.css to match the metrics of your font and include it on your page.
Typeset.js is available as a plugin for grunt and gulp.
Options
You can pass an options object to influence how your HTML is typeset:
var options = {
ignore: '.skip, #anything, .which-matches', // string of a CSS selector to skip
only: '#only-typeset, .these-elements' // string of a CSS selector to only apply typeset,
disable: ['hyphenate'], // array of features to disable
};Disableable features
The following features may be disabled:
quoteshyphenateligaturessmallCapspunctuationhangingPunctuationspaces
CLI Usage
$ npm install -g typeset
Usage: typeset-js [options] [<infile> [<outfile>]]
Options:
-h, --help output usage information
-V, --version output the version number
-i, --ignore string of CSS selector(s) to ignore
-O, --only string of CSS selector(s) to exclusively apply typeset to
--disable, string of typeset feature(s) to disable, separated by commas
Examples:
Compile a file and print it to stdout:
$ typeset-js inputFile.html
To create an output file, just add a second argument:
$ typeset-js inputFile.html outputFile.html
Use the --ignore option to ignore specific CSS selectors:
$ typeset-js inputFile.html outputFile.html --ignore ".some-class, h3"
Use the --disable option to disable typeset features:
$ typeset-js inputFile.html outputFile.html --disable "hyphenate,ligatures"
CLI redirections:
$ cat index.html | typeset-js > outputFile.html
License
This software is dedicated to the public domain and licensed under CC0.
Building locally
Clone this repo then fetch its dependencies using npm install. You can then edit the code in /src.
To Do
- Add a build file
- Make this work on the client
- Incorporate features from Normalize Opentype?
- Remove recursion from eachTextNode.js
- Feature to avoid widows.
Who uses this library
- Blot - a blogging platform I made, uses this to typeset blog posts
- You? Contact me or submit a pull request to add it here!
