antonWetzel / typst-languagetool

LanguageTool Integration for Typst for spell and grammer check
MIT License
37 stars 9 forks source link
cli grammer-checker jni languagetool rust spellchecker typst

typst-languagetool

Spellcheck typst files with LanguageTool.

Overview

  1. compile the document
  2. extract text content
  3. check text with languagetool
  4. map results back to the source

Use special styling for spellchecking

// use styling for spellcheck only in the spellchecker
// keep the correct styling in pdf or preview
// should be called after the template
#show: lt()

// use styling for spellcheck in pdf or preview
// should be called after the template
#show: lt(overwrite: true) 

#let lt(overwrite: false) = {
    if not sys.inputs.at("spellcheck", default: overwrite) {
        return (doc) => doc
    }
    return (doc) => {
        show math.equation.where(block: false): it => [0]
        show math.equation.where(block: true): it => []
        show bibliography: it => []
        show par: set par(justify: false, leading: 0.65em)
        set page(height: auto)
        show block: it => it.body
        show page: set page(numbering: none)
        show heading: it => if it.level <= 3 {
            pagebreak() + it
        } else {
            it
        }
        doc
    }
}

Language Selection

The compiled document contains the text language, but not the region.

#set text(
    lang: "de", // included
    region: "DE", // lost
)

The text language is used to determine the region code ("de-DE", ...). If another region is desired, it can be specified in the language parameter.

LanguageTool Backend

Bundled

External JAR

Remote Server

Usage

LSP Options

/// Additional allowed words for language codes
dictionary: HashMap<String, Vec<String>>,
/// Languagetool rules to ignore (WHITESPACE_RULE, ...) for language codes
disabled_checks: HashMap<String, Vec<String>>,

/// preferred language codes
languages: Vec<String>,

/// use bundled languagetool
bundled: bool,
/// use external JAR for languagetool
jar_location: Option<String>,
/// host for remote languagetool
host: Option<String>,
/// port for remote languagetool
port: Option<String>,

/// Size for chunk send to LanguageTool
chunk_size: usize,
/// Duration to wait for additional changes before checking the file
/// Leave empty to only check on open and save
on_change: Option<std::time::Duration>,

/// Project Root
root: Option<PathBuf>,
/// Project Main File
main: Option<PathBuf>,