[PATCH v2 2/2] merge with Scheme regexp; fix bugs
- From
Scott L. Burson via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Nov 27, 2025, 02:38 UTC
- Message-ID
- <86315aa3e36afa1ee741a2c9b9e95a71ca569302.1764211096.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.2000.v2.git.1764211096.gitgitgadget@gmail.com>
From: "Scott L. Burson" <Scott@sympoiesis.com>
This commit merges (by disjoining) the new generic Lisp regexp into the existing Scheme regexp. It also fixes two bugs: the new regexp was unintentionally allowing tabs, and the matching of "(def" should be case-insensitive.
Signed-off-by: Scott L. Burson <Scott@sympoiesis.com> --- userdiff.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/userdiff.c b/userdiff.c index e127b4a1f1..b67dfddbef 100644 --- a/userdiff.c +++ b/userdiff.c @@ -249,14 +249,6 @@ PATTERNS("kotlin", "|[.][0-9][0-9_]*([Ee][-+]?[0-9]+)?[fFlLuU]?" /* unary and binary operators */ "|[-+*/<>%&^|=!]==?|--|\\+\\+|<<=|>>=|&&|\\|\\||->|\\.\\*|!!|[?:.][.:]"), -PATTERNS("lisp", - /* Either an unindented left paren, or a slightly indented line - * starting with "(def" */ - "^((\\(|:space:{1,2}\\(def).*)$", - /* Common Lisp symbol syntax allows arbitrary strings between vertical bars */ - "\\|([^\\\\]|\\\\\\\\|\\\\\\|)*\\|" - /* All other words are delimited by spaces or parentheses/brackets/braces */ - "|([^][(){} \t])+"), PATTERNS("markdown", "^ {0,3}#{1,6}[ \t].*", /* -- */ @@ -352,14 +344,21 @@ PATTERNS("rust", "|[0-9][0-9_a-fA-Fiosuxz]*(\\.([0-9]*[eE][+-]?)?[0-9_fF]*)?" "|[-+*\\/<>%&^|=!:]=|<<=?|>>=?|&&|\\|\\||->|=>|\\.{2}=|\\.{3}|::"), PATTERNS("scheme", - "^[\t ]*(\\(((define|def(struct|syntax|class|method|rules|record|proto|alias)?)[-*/ \t]|(library|module|struct|class)[*+ \t]).*)$", + /* A possibly indented left paren followed by a Scheme keyword. */ + "^[\t ]*(\\(((define|def(struct|syntax|class|method|rules|record|proto|alias)?)[-*/ \t]|(library|module|struct|class)[*+ \t]).*)$\n" + /* + * For other Lisp dialects: either an unindented left paren, or a + * slightly indented line starting with "(def". + */ + "^((\\(| {1,2}\\([Dd][Ee][Ff]).*)$", /* - * R7RS valid identifiers include any sequence enclosed - * within vertical lines having no backslashes + * The union of R7RS and Common Lisp symbol syntax: allows arbitrary + * strings between vertical bars, including escaped backslashes and + * vertical bars. */ - "\\|([^\\\\]*)\\|" + "\\|([^\\\\]|\\\\\\\\|\\\\\\|)*\\|" /* All other words should be delimited by spaces or parentheses */ - "|([^][)(}{[ \t])+"), + "|([^][)(}{ \t])+"), PATTERNS("tex", "^(\\\\((sub)*section|chapter|part)\\*{0,1}\\{.*)$", "\\\\[a-zA-Z@]+|\\\\.|([a-zA-Z0-9]|[^\x01-\x7f])+"), { .name = "default", .binary = -1 },
-- gitgitgadget