diff --git a/app/src/main/java/com/annimon/hotarufx/ui/SyntaxHighlighter.java b/app/src/main/java/com/annimon/hotarufx/ui/SyntaxHighlighter.java index 303f038..5234e86 100644 --- a/app/src/main/java/com/annimon/hotarufx/ui/SyntaxHighlighter.java +++ b/app/src/main/java/com/annimon/hotarufx/ui/SyntaxHighlighter.java @@ -1,11 +1,16 @@ package com.annimon.hotarufx.ui; +import com.annimon.hotarufx.bundles.BundleLoader; +import com.annimon.hotarufx.bundles.FunctionType; import com.annimon.hotarufx.lexer.HotaruLexer; import java.time.Duration; import java.util.Collection; import java.util.Collections; +import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.concurrent.ExecutorService; +import java.util.stream.Collectors; import javafx.concurrent.Task; import lombok.RequiredArgsConstructor; import lombok.val; @@ -18,8 +23,13 @@ public class SyntaxHighlighter { private final CodeArea editor; private final ExecutorService executor; + private Set nodeFunctions; public void init() { + nodeFunctions = BundleLoader.functions().entrySet().stream() + .filter(e -> e.getValue() == FunctionType.NODE) + .map(Map.Entry::getKey) + .collect(Collectors.toSet()); editor.richChanges() .filter(ch -> !ch.getInserted().equals(ch.getRemoved())) .successionEnds(Duration.ofMillis(500)) @@ -49,6 +59,14 @@ public class SyntaxHighlighter { spans.add(Collections.singleton(category), t.getLength()); break; + case "identifier": + if (nodeFunctions.contains(t.getText())) { + spans.add(Collections.singleton("node-function"), t.getLength()); + } else { + spans.add(Collections.emptyList(), t.getLength()); + } + break; + default: spans.add(Collections.emptyList(), t.getLength()); break;