Skip to content

LanguageTool Integration for Typst for spell and grammer check

License

Notifications You must be signed in to change notification settings

antonWetzel/typst-languagetool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

  • different LanguageTool backends can be used to check the text
  • atleast one backend must be enabled for cargo install ... with --features=<backend>
  • one backend must be selected for typst-languagetool ... with the required flags

Bundled

  • typst-languagetool starts a LanguageTool instance with JNI
  • requires maven and the executable is not portable
  • add feature bundle-jar
  • specify flag --bundled

External JAR

  • typst-languagetool starts a LanguageTool instance with JNI
  • requires JAR with languagetool
  • add feature external-jar
  • specify flag jar_location=<path>

Remote Server

  • typst-languagetool connects to a running LanguageTool server
  • add feature remote-server
  • specify flags host=<host> and port=<port>

Usage

  • terminal
    • install command line interface (CLI)
      • cargo install --git=https://github.com/antonWetzel/typst-languagetool cli --features=...
    • Check on time or watch for changes
      • typst-languagetool check ...
      • typst-languagetool watch ...
    • Path to check
      • typst-languagetool watch --path=<directory or file>
      • typst-languagetool check --path=<file>
    • Main file of the document
      • defaults to path if not specified
      • check the complete document if a path is not specified
      • --main=<file>
    • Project root can be changed
      • defaults to main parent folder
      • --root=<path>
  • vs-codium/vs-code
    • install language server protocal (LSP)
      • cargo install --git=https://github.com/antonWetzel/typst-languagetool lsp --features=...
    • install generic lsp (editors/vscodium/generic-lsp/generic-lsp-0.0.1.vsix)
    • configure options (see below)
    • hints should appear
      • first check takes longer
  • neovim
    • install language server protocal (LSP)
      • cargo install --git=https://github.com/antonWetzel/typst-languagetool lsp --features=...
    • copy the editors/nvim/typst.lua file in the ftplugin/ folder (should be in the nvim config path)
    • configure options in init_option (see below)
    • create a main.typst file and include your typst files inside if needed
    • hints should appear (if not use set filetype=typst to force the type)
      • first check takes longer

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>,

About

LanguageTool Integration for Typst for spell and grammer check

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •