Adjust the text rag of your documents for better readability.
This task was inspired by an article by Mark Boulton and based on plugin by Nathan Ford. In case you want to process your documents dynamically, you should take a look at that plugin. Raggedast is for those who care about typography and readability but are concerned about layout reflows and JavaScript regex performance during the critical phase of loading a document. Raggedast will process static files generated by Jekyll or any similar solution.
Processing documents with Raggedast will increase the size of your documents since it replaces the regular whitespaces with hard spaces in the form of Unicode character references. If this bothers you, serve your files compressed. The difference between processed and unprocessed document size will then become negligible.
Meet Raggedast, the god of beer and finely ragged chunks of text.
This plugin requires Grunt ~0.4.2
If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-raggedast --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-raggedast');
Run this task with the grunt raggedast
command.
Type: String
Default value: 'html'
Type of files to be processed. Valid values are either html
or json
.
Type: String
Default value: 'p'
Select elements to be processed via selector. Applies only for a type of html
.
Type: String
Default value: ' '
The string that is put in place of simple spaces, if for some reason you need to change it to something else.
Type: String
Default value: ' '
Some words, for example group of numbers, are connected by thin non-breaking space instead of the regular sized. You can change it using this option.
Type: Boolean
Default value: true
Sets whether or not Raggedast tries to find and adjust words that shouldn't end up last on a line, i.e. prepositions, articles and conjunctions. Note that the words are predefined (see the code) and only English is supported as of the moment. The option to serve your own list of words to Raggedast is on the way.
Type: Boolean
Default value: true
Targets basic mathematical symbols and spaced en or em dashes (if spaced is the way you like ’em).
Type: Boolean
Default value: true
Looks for a combination of number and some unit of measurement. As before, the units are predefined (see the code) and the list is by no means exhaustive.
Type: Boolean
Default value: true
Tries to find numbers separated into groups of thousands for better readability, like 2 435 713, and glue them together by hard spaces.
Type: Boolean
Default value: true
Searches for short emphasized phrases. Short means two to three words long, emphasized suggests the use of either strong
, em
, b
or i
.
Type: Boolean
Default value: true
Looks for short quotations or phrases enclosed in quotation marks. Short means the same thing as before.
Type: Boolean
Default value: true
If set to true, tries to catch dates with month names written in full. The name can be either long, e.g. ‘December’, or short like in ‘Dec’. The date also has to follow one of the following formats: ‘24 December 2013’ or ‘December 24, 2013’.
Type: Integer
Default value: 2
Searches for “orphans” – a word or very short line that appears by itself at the end of a paragraph or any other block of text like headlines. The number stands for the lowest number of words the last line of text can contain. The default setting of 2 is thus the lowest number that still makes sense if you want to use this method. To disable it, set it to 1 or 0.
Type: Integer
Default value: 2
Tries to find the rest of the words that you do not want to appear at the end of a line. The words are targeted by their length, the default 2 matching words such as ‘I’ or ‘he’. By setting the number too high, this method can quickly become very greedy. On the other hand, setting this options to zero turns it off entirely.
Type: Integer
Default value: 0
This option should come in handy in case you want to tame the hard spaces a little after all the processing. The number implies the longest allowed row of words glued together by hard spaces. For example, with shortWords
set to 3, the sentence “It showed a lady fitted out with a fur hat and fur boa who sat upright.” would end up with eleven words transformed into a non-breakable string, starting with the word ‘out’. But if you set limit
to 6, it would split that string into two by removing the hard space after the word ‘and’. Obviously, it is always better to do these alterations by hand but in case you process a lot of text, it is not always viable. The default 0 suggests leaving the strings as they are.
Type: String | RegExp
Default value: null
Either a selector for a type of html
, or a string (for exact matches) or a regular expression for a type of json
. In the first case, any element that matches options.selector
but also matches the supplied selector is skipped. In the second case, any property of a JSON object that matches the specified pattern is skipped in the same way.
In this example, the default options are used to process the files generated by Jekyll.
grunt.initConfig({
raggedast: {
options: {
type: 'html',
selector: 'p',
space: ' ',
thinSpace: ' ',
words: true,
symbols: true,
units: true,
numbers: true,
emphasis: true,
quotes: true,
months: true,
orphans: 2,
shortWords: 2,
limit: 0,
ignore: null
},
files: [{
expand: true,
cwd: '_site',
src: ['*.html']
}],
},
});
- 2015-06-24 v0.3.0 Added option to parse JSON files and ignore patterns.
- 2014-09-15 v0.2.3 Minor fixes.
- 2014-01-24 v0.2.2 Prevented whitespace processing inside attributes.
- 2014-01-23 v0.2.1 Prevented whitespace processing inside tags.
- 2014-01-22 v0.2.0 Added support for processing dates and orphans.
- 2014-01-19 v0.1.0 Raggedast released.
MIT © Adam Havel