Euspell
Tools

Google Docs

Convert a Google Doc (or selection) into Euspell from an Extensions ▸ Euspell menu, using the engine ported to Apps Script.

Why the browser extension cannot do this

On an ordinary web page the extension reads the text out of the page's DOM and rewrites it in place. Google Docs puts none of your document there: it paints the text onto a <canvas> element, the way a drawing program would. There is nothing for a content script to find. The extension is not blocked on Docs — it simply has nothing to see.

So this add-on reaches the document a different way, through Google's own DocumentApp API, which hands back the real text and accepts a replacement. Because it works on text rather than pixels, it can also run the conversion backwards: Revert Document to Traditional turns Euspell spelling back into traditional English.

Like the Word and LibreOffice converters, it is a command you run rather than a checker that watches you type — Google Docs offers no hook for a third-party spell checker.

A self-contained port
The engine is a CSV-driven, DOM-free port in euspell-engine.gs, validated 35/35 against the reference JavaScript engine.

Deploy it

There is no Workspace Marketplace listing, so you install your own copy. The ~5 MB data file rules out copy-paste, so the add-on is pushed with clasp, which binds it to a single document. The steps are kept current in docs/installing-addins.md.

Reload the doc; an Euspell menu appears → Convert Document / Convert Selection. The first run prompts for authorization — scope documents.currentonly, so it only touches the open document.

What is and isn't handled

ContentStatus
Context-free reforms (above → abov, night → niht)Converted
NN2 | VVZ ambiguities, 702 plurals, 102 heteronymsConverted from context (SVM + POS rules)
~70 semantic homographs (read, bow, tear)Left unchanged
Paragraphs with an image / footnote / inline objectSkipped — to avoid deleting the object
Inline character formattingA converted paragraph resets to default run formatting
Run once
A few reforms aren't idempotent, and the first run in a session parses ~5 MB of dictionary data (Apps Script keeps no memory between runs), so expect a few seconds before it acts.