npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

metalsmith-spellcheck

v0.2.8

Published

Metalsmith plugin for HTML file spellchecking

Downloads

13

Readme

metalsmith-spellcheck

This is a plugin for Metalsmith that checks spelling. Core checks are done using nodehun, but the plugin provides a variety of useful ways to add exceptions and ignore various words.

Installation

This module is released via npm, install the latest released version with:

npm install --save metalsmith-spellcheck

Usage

If using the CLI for Metalsmith, metalsmith-spellcheck can be used like any other plugin by including it in metalsmith.json:

{
  "plugins": {
    "metalsmith-spellcheck"
  }
}

For Metalsmith's JavaScript API, metalsmith-spellcheck can be used like any other plugin, by attaching it to the function invocation chain on the metalscript object:

var spellcheck = require('metalsmith-spellcheck');
require('metalsmith')(__dirname)
  .use(spellcheck())
  .build();

Because metalsmith-spellcheck will only check HTML pages, normally you will want to use metalsmith-spellcheck at the end of your build pipeline when all of your HTML pages have been generated.

Exceptions

metalsmith-spellcheck has multiple ways to incorporate spelling exceptions, at a single-word or phrase, entire file, or global level.

You can embed your exceptions right in your HTML:

This <span class="spelling_exception">stwange</span> word will be ignored.

And depending on your markup language, probably in your markup as well:

I prefer [.spelling_exception]#AsciiDoc#, but there is probably a way to do
this using [.spelling_exception]#Markdown# too.

You can also attach exceptions using file YAML front matter, within the Metalsmith metadata object, as a configuration argument to metalsmith-spellcheck, and within a separate file. In all these cases, exceptions can be either patterns—if they start and end with "/"—or otherwise phrases if not. Regular expressions are automatically surrounded by word boundary characters, and phrases split into lists of words. Here are some examples:

  • "test" becomes "/\b(T|t)est\b/", meaning that simple exceptions that start with lowercase letters automatically expand to match upper and lower case...
  • ...but "Test" becomes "/\bTest\b/", meaning that simple uppercase exceptions do not expand in the same way.
  • "/Challen/i" becomes "/\bChallen\b/i"
  • "/Geoffrey Challen/" becomes "/\bGeoffrey Challen\b/"
  • "Geoffrey Challen" becomes ["/\bGeoffrey\b/", "/\bChallen\b/"]
  • "Titles: With Colons" becomes ["/\bTitles\b/", "/\bWith\b/", "/\bColons\b/"]

You get the idea. Now here are some examples of how to provide these kind of exceptions to metalsmith-spellcheck:

Frontmatter

--
title: My New Blog Post
spelling_exceptions:
- Chuchu
- Xyz
--
Today I'm blogging about my pets: Chuchu and Xyz.

Frontmatter exceptions only apply to the file that they annotate, which can be a problem if you lift snippets of files onto other pages—for example, to generate a blog index with a short summary of each article. In that case it's safer to use the inline exception format described above.

Configuration Option or Metadata

metalsmith-spellcheck accepts exceptions as a standard configuration option:

var spellcheck = require('metalsmith-spellcheck');
require('metalsmith')(__dirname)
  .use(spellcheck({ 'exceptions': ["Chuchu", "Xyz"] })
  .build();

However, a potentially more powerful way to add exceptions is through the Metalsmith metadata object:

var spellcheck = require('metalsmith-spellcheck');
require('metalsmith')(__dirname)
  .use(function (files, metalsmith, done) {
    var metadata = metalsmith.metadata();
    metadata['spelling_exceptions'] = ["Chuchu", "Xyz"];
    done();
  })
  .use(spellcheck())
  .build();

I use this feature on my group's website to automatically add names of collaborators and words from paper and project titles as spelling exceptions, which limits the number of manual exceptions that still have to be made.

Exception File

Finally, metalsmith-spellcheck also loads exceptions from a JSON file located in your source directory. (Don't worry: it's removed from the build.) By default this is spelling_exceptions.json. Here's an example:

{
  "Chuchu": true,
  "/Geoffrey Challen/": true,
  "Xyz": [ "index.html"]
}

In this case, the keys are the exception patterns or phrases (as described above), but the values are either (1) a list of filenames where the exception should be made (2) true, indicating that the exception should be made everywhere. So the example above ignores "/\bChuchu\b/" everywhere, "/\bGeoffrey Challen\b/" everywhere, and "/\bXyz\b/" only on index.html. Of course metalsmith-spellcheck has no idea how your build pipeline works, so the files to match are all output files, not input files.

Options

Usually metalsmith-spellcheck requires paths to a .dic and .aff file which are used to initialize nodehun. However, you can also intialize nodehun yourself and pass the resulting dict object. All other options are optional.

dicFile (required)

Path relative to the metalsmith source directory to the .dic file used to initialize nodehun. It will be removed from your metalsmith build directory.

affFile (required)

Path relative to the metalsmith source directory to the .aff file used to initialize nodehun. It will be removed from your metalsmith build directory.

dict (required)

Alternatively, a reference to an initialized nodehun object, in case you want to use multiple dictionaries or do some dictionary customization prior to using the plugin.

cacheChecks (optional)

(default: true)

If set metalsmith-spellcheck will only rerun spelling checks when it thinks that things have changed: either because you changed the dictionaries, changed the exceptions, or changed its inputs.

verbose (optional)

(default: false)

If set a message will be printed when misspelled words are detected.

veryVerbose (optional)

(default: false)

If set messages about cache checking will be displayed.

failErrors (optional)

(default: true)

If set the metalsmith build process will halt if words are misspelled.

exceptions (optional)

Array of spelling exceptions as described above.

checkFile (optional)

(default: spelling_checked.json)

Path relative to the metalsmith source directory to a JSON file containing information required to cache spelling checks. This will be removed from the build directory.

exceptionFile (optional)

(default: spelling_exceptions.json)

Path relative to the metalsmith source directory to a JSON file containing spelling exceptions. See description above. This will be removed from the build directory.

failFile (optional)

(default: spelling_failed.json)

Path relative to the metalsmith source directory to a JSON file where spelling failures are recorded. This will be removed from the build directory.