package com.github.PastaLaPate.FPL_IDE.syntax;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Syntax {
// GENERATE SYNTAX
public void generateSyntax(JTextPane pane) {
// ALL TYPES PATTERN
String[] types = {"vide", "entier", "decimal", "texte", "auto"};
// ALL FUNCTIONS PATTERN
String[] function = {"envoyer", "definir", "appeler", "renvoyer", "fichier"};
// ALL VARIABLES PATTERN
String[] variables = {"variable", "changer", "saisir", "ecrire", "lire"};
//HIGHTLIGHT TYPES PATTERNS WITH COLOR BLUE
for (String type : types) {
highlight(pane, type, new DefaultHighlighter.DefaultHighlightPainter(Color.BLUE));
}
//HIGHTLIGHT FUNCTIONS PATTERNS WITH COLOR YELLOW
for (String functiona : function) {
highlight(pane, functiona, new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW));
}
//HIGHTLIGHT VARIABLES PATTERNS WITH COLOR GREEN
for (String variable : variables) {
highlight(pane, variable, new DefaultHighlighter.DefaultHighlightPainter(Color.GREEN));
}
}
public static void highlight(JTextPane textarea, String textToHighlight,
Highlighter.HighlightPainter painter) {
String text = textarea.getText();
Highlighter highlighter = textarea.getHighlighter();
highlighter.removeAllHighlights();
if (!textToHighlight.isEmpty()) {
//MATCH PATTERN
Matcher m = compileWildcard(textToHighlight).matcher(text);
while (m.find()) {
try {
highlighter.addHighlight(m.start(), m.end(), painter);
} catch (BadLocationException e) {
throw new IllegalStateException(e); /* cannot happen */
}
//textarea.setCaretPosition(m.end());
}
}
}
public static Pattern compileWildcard(String wildcard) {
StringBuilder sb = new StringBuilder("\\b"); /* word boundary */
/* the following replaceAll is just for performance */
for (char c : wildcard.replaceAll("\\*+", "*").toCharArray()) {
if (c == '*') {
sb.append("\\S*"); /*- arbitrary non-space characters */
} else {
sb.append(Pattern.quote(String.valueOf(c)));
}
}
sb.append("\\b"); /* word boundary */
return Pattern.compile(sb.toString());
}
}
[HIGHTLIGHTER] Comment hightlight plusieurs mots
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.