Gridarta Editor
CrossfireDialogTokenMarker.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2023 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.textedit.textarea.tokenmarker;
21 
22 import javax.swing.text.Segment;
24 import org.jetbrains.annotations.NotNull;
25 
31 
32  @Override
33  public byte markTokensImpl(final byte token, @NotNull final Segment line) {
34  final char[] array = line.array;
35  final int offset = line.offset;
36  final int length = line.count;
37  if (length >= 7 && array[offset] == '@' && array[offset + 1] == 'm' && array[offset + 2] == 'a' && array[offset + 3] == 't' && array[offset + 4] == 'c' && array[offset + 5] == 'h' && array[offset + 6] == ' ') {
39  int start = offset + 6;
40  byte id = Token.NULL;
41  for (int i = start + 1; i < offset + length; i++) {
42  final byte thisId;
43  if (array[i] == '|') {
44  thisId = Token.OPERATOR;
45  } else if (Character.isUpperCase(array[i])) {
46  thisId = Token.INVALID;
47  } else {
48  thisId = Token.LITERAL1;
49  }
50  if (thisId != id) {
51  addToken(i - start, id);
52  start = i;
53  id = thisId;
54  }
55  }
56  addToken(offset + length - start, id);
57  } else {
59  }
60 
61  return Token.NULL;
62  }
63 
64 }
net.sf.gridarta.textedit.textarea.tokenmarker.CrossfireDialogTokenMarker.markTokensImpl
byte markTokensImpl(final byte token, @NotNull final Segment line)
An abstract method that splits a line up into tokens.
Definition: CrossfireDialogTokenMarker.java:33
net.sf.gridarta.textedit.textarea
This package contains the other part of the script editor.
net.sf.gridarta
Base package of all Gridarta classes.
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarker.addToken
void addToken(final int length, final byte id)
Adds a token to the token list.
Definition: TokenMarker.java:225
net.sf.gridarta.textedit.textarea.Token.NULL
static final byte NULL
Normal text token id.
Definition: Token.java:26
net.sf
net.sf.gridarta.textedit.textarea.tokenmarker.CrossfireDialogTokenMarker
A TokenMarker for the message field of Crossfire objects allowing.
Definition: CrossfireDialogTokenMarker.java:30
net.sf.gridarta.textedit
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
net.sf.gridarta.textedit.textarea.Token.INVALID
static final byte INVALID
Invalid token id.
Definition: Token.java:84
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.LITERAL1
static final byte LITERAL1
Literal 1 token id.
Definition: Token.java:42
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarker
A token marker that splits lines of text into tokens.
Definition: TokenMarker.java:32
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarker.length
int length
The number of lines in the model being tokenized.
Definition: TokenMarker.java:52