Gridarta Editor
SyntaxUtilities.java
Go to the documentation of this file.
1 /*
2  * SyntaxUtilities.java - Utility functions used by syntax colorizing
3  * Copyright (C) 1999 Slava Pestov
4  * Copyright (C) 2000-2023 The Gridarta Developers.
5  *
6  * You may use and modify this package for any purpose. Redistribution is
7  * permitted, in both source and binary form, provided that this notice
8  * remains intact in all source distributions of this package.
9  */
10 
11 package net.sf.gridarta.textedit.textarea;
12 
13 import java.awt.Color;
14 import java.awt.Font;
15 import java.awt.Graphics;
16 import javax.swing.text.Segment;
17 import javax.swing.text.TabExpander;
18 import javax.swing.text.Utilities;
19 import org.jetbrains.annotations.NotNull;
20 
27 public class SyntaxUtilities {
28 
32  private SyntaxUtilities() {
33  }
34 
43  public static boolean regionMatches(final boolean ignoreCase, final Segment text, final int offset, @NotNull final CharSequence match) {
44  final int length = offset + match.length();
45  final char[] textArray = text.array;
46  if (length > text.offset + text.count) {
47  return false;
48  }
49 
50  for (int i = offset, j = 0; i < length; i++, j++) {
51  char c1 = textArray[i];
52  char c2 = match.charAt(j);
53  if (ignoreCase) {
54  c1 = Character.toUpperCase(c1);
55  c2 = Character.toUpperCase(c2);
56  }
57  if (c1 != c2) {
58  return false;
59  }
60  }
61  return true;
62  }
63 
70  @NotNull
72  final SyntaxStyle[] styles = new SyntaxStyle[Token.ID_COUNT];
73 
74  styles[Token.COMMENT1] = new SyntaxStyle(new Color(0x008000), true, false); // green comments
75  styles[Token.COMMENT2] = new SyntaxStyle(new Color(0x990033), true, false);
76  styles[Token.KEYWORD1] = new SyntaxStyle(Color.blue, false, true);
77  styles[Token.KEYWORD2] = new SyntaxStyle(Color.magenta, false, false);
78  styles[Token.KEYWORD3] = new SyntaxStyle(new Color(0x009600), false, false);
79  styles[Token.LITERAL1] = new SyntaxStyle(new Color(0x650099), false, false);
80  styles[Token.LITERAL2] = new SyntaxStyle(new Color(0x650099), false, true);
81  styles[Token.LABEL] = new SyntaxStyle(new Color(0x990033), false, true);
82  styles[Token.OPERATOR] = new SyntaxStyle(Color.black, false, true);
83  styles[Token.INVALID] = new SyntaxStyle(Color.red, false, true);
84 
85  return new SyntaxStyles(styles);
86  }
87 
101  public static int paintSyntaxLine(@NotNull final Segment line, @NotNull final Iterable<Token> tokens, @NotNull final SyntaxStyles styles, @NotNull final TabExpander expander, @NotNull final Graphics gfx, final int x, final int y) {
102  final Font defaultFont = gfx.getFont();
103  final Color defaultColor = gfx.getColor();
104 
105  int xPos = x;
106  for (final Token token : tokens) {
107  final byte id = token.getId();
108 
109  final int length = token.getLength();
110  if (id == Token.NULL) {
111  if (!defaultColor.equals(gfx.getColor())) {
112  gfx.setColor(defaultColor);
113  }
114  if (!defaultFont.equals(gfx.getFont())) {
115  gfx.setFont(defaultFont);
116  }
117  } else {
118  styles.getStyle(id).setGraphicsFlags(gfx, defaultFont);
119  }
120 
121  line.count = length;
122  xPos = Utilities.drawTabbedText(line, xPos, y, gfx, expander, 0);
123  line.offset += length;
124  }
125 
126  return xPos;
127  }
128 
129 }
net.sf.gridarta.textedit.textarea.SyntaxUtilities.getDefaultSyntaxStyles
static SyntaxStyles getDefaultSyntaxStyles()
Returns the default styles.
Definition: SyntaxUtilities.java:71
net.sf.gridarta.textedit.textarea.Token.NULL
static final byte NULL
Normal text token id.
Definition: Token.java:26
net.sf.gridarta.textedit.textarea.SyntaxUtilities.regionMatches
static boolean regionMatches(final boolean ignoreCase, final Segment text, final int offset, @NotNull final CharSequence match)
Checks if a sub-region of a.
Definition: SyntaxUtilities.java:43
net.sf.gridarta.textedit.textarea.Token.LITERAL2
static final byte LITERAL2
Literal 2 token id.
Definition: Token.java:48
net.sf.gridarta.textedit.textarea.Token.ID_COUNT
static final byte ID_COUNT
The total number of defined token ids.
Definition: Token.java:89
net.sf.gridarta.textedit.textarea.Token
A linked list of tokens.
Definition: Token.java:21
net.sf.gridarta.textedit.textarea.Token.OPERATOR
static final byte OPERATOR
Operator token id.
Definition: Token.java:78
net.sf.gridarta.textedit.textarea.Token.LABEL
static final byte LABEL
Label token id.
Definition: Token.java:54
net.sf.gridarta.textedit.textarea.Token.COMMENT2
static final byte COMMENT2
Comment 2 token id.
Definition: Token.java:36
net.sf.gridarta.textedit.textarea.Token.INVALID
static final byte INVALID
Invalid token id.
Definition: Token.java:84
net.sf.gridarta.textedit.textarea.Token.KEYWORD2
static final byte KEYWORD2
Keyword 2 token id.
Definition: Token.java:66
net.sf.gridarta.textedit.textarea.Token.KEYWORD1
static final byte KEYWORD1
Keyword 1 token id.
Definition: Token.java:60
net.sf.gridarta.textedit.textarea.Token.KEYWORD3
static final byte KEYWORD3
Keyword 3 token id.
Definition: Token.java:72
net.sf.gridarta.textedit.textarea.SyntaxUtilities
Class with several utility functions used by jEdit's syntax colorizing subsystem.
Definition: SyntaxUtilities.java:27
net.sf.gridarta.textedit.textarea.Token.LITERAL1
static final byte LITERAL1
Literal 1 token id.
Definition: Token.java:42
net.sf.gridarta.textedit.textarea.SyntaxUtilities.SyntaxUtilities
SyntaxUtilities()
Private constructor to prevent instantiation.
Definition: SyntaxUtilities.java:32
net.sf.gridarta.textedit.textarea.SyntaxUtilities.paintSyntaxLine
static int paintSyntaxLine(@NotNull final Segment line, @NotNull final Iterable< Token > tokens, @NotNull final SyntaxStyles styles, @NotNull final TabExpander expander, @NotNull final Graphics gfx, final int x, final int y)
Paints the specified line onto the graphics context.
Definition: SyntaxUtilities.java:101
net.sf.gridarta.textedit.textarea.Token.COMMENT1
static final byte COMMENT1
Comment 1 token id.
Definition: Token.java:31
net.sf.gridarta.textedit.textarea.SyntaxStyles
A set of SyntaxStyle instances for painting colorized text.
Definition: SyntaxStyles.java:29
net.sf.gridarta.textedit.textarea.SyntaxStyle
A simple text style class.
Definition: SyntaxStyle.java:25