script

Learn about the script extension point.

circle-exclamation
Name
Type
Description

script

string

The Tengoarrow-up-right script to execute.

script allows for the creation of arbitrary logic-based rules using Tengoarrow-up-right, a Go-like scripting language.

extends: script
message: 'Consider inserting a new section heading at this point.'
link: https://tengolang.com
scope: raw
script: MyScript.tengo

Where MyScript.tengo is a file containing the Tengo script to execute stored at $StypesPath/config/scripts.

text := import("text")

matches := []
// at most 3 paragraphs per section
p_limit := 3

// Remove all instances of code blocks
// since we don't want to count inter-block
// newlines as a new paragraph.
document := text.re_replace("(?s) *(\n```.*?```\n)", scope, "")

count := 0
for line in text.split(document, "\n") {
    if text.has_prefix(line, "#") {
        count = 0 // New section; reset count
    } else if count > p_limit {
        start := text.index(scope, line)
        matches = append(matches, {begin: start, end: start + len(line)})
        count = 0
    } else if text.trim_space(line) == "" {
        count += 1
    }
}
1

Use Tengo’s textarrow-up-right module, which provides a number of string- and regex-related utility functions.

2

Process the content in the scope variable. scope contains text based on the scope: <scope> setting for the rule. For more information, see Scoping.

3

Populate the matches array with rule matches. Each match must be a map with the keys:

  • begin: where the match begins in the content provided by the scope variable.

  • end: where the match ends in the content provided by the scope variable.

sequence suggest