Gridarta Editor
SyntaxDocument.java
Go to the documentation of this file.
1 /*
2  * SyntaxDocument.java - Document that can be tokenized
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 javax.swing.event.DocumentEvent;
14 import javax.swing.event.DocumentEvent.ElementChange;
15 import javax.swing.text.BadLocationException;
16 import javax.swing.text.Element;
17 import javax.swing.text.PlainDocument;
18 import javax.swing.text.Segment;
19 import javax.swing.undo.UndoableEdit;
21 import org.jetbrains.annotations.NotNull;
22 import org.jetbrains.annotations.Nullable;
23 
29 public class SyntaxDocument extends PlainDocument {
30 
34  private static final long serialVersionUID = 1L;
35 
41  @Nullable
43  return tokenMarker;
44  }
45 
52  public void setTokenMarker(@Nullable final TokenMarker tokenMarker) {
53  this.tokenMarker = tokenMarker;
54  if (tokenMarker == null) {
55  return;
56  }
57 
58  tokenMarker.insertLines(0, getDefaultRootElement().getElementCount());
59  tokenizeLines();
60  }
61 
66  private void tokenizeLines() {
67  tokenizeLines(0, getDefaultRootElement().getElementCount());
68  }
69 
77  private void tokenizeLines(final int start, final int len) {
78  if (tokenMarker == null) {
79  return;
80  }
81 
82  final Segment lineSegment = new Segment();
83  final Element map = getDefaultRootElement();
84 
85  try {
86  for (int i = start; i < start + len; i++) {
87  final Element lineElement = map.getElement(i);
88  final int lineStart = lineElement.getStartOffset();
89  getText(lineStart, lineElement.getEndOffset() - lineStart - 1, lineSegment);
90  tokenMarker.markTokens(lineSegment, i);
91  }
92  } catch (final BadLocationException bl) {
93  bl.printStackTrace();
94  }
95  }
96 
102  public static void beginCompoundEdit() {
103  }
104 
110  public static void endCompoundEdit() {
111  }
112 
119  public static void addUndoableEdit(@NotNull final UndoableEdit edit) {
120  }
121 
122  // protected members
123 
124  @Nullable
126 
131  @Override
132  protected void fireInsertUpdate(@NotNull final DocumentEvent e) {
133  if (tokenMarker != null) {
134  final ElementChange ch = e.getChange(getDefaultRootElement());
135  if (ch != null) {
136  tokenMarker.insertLines(ch.getIndex() + 1, ch.getChildrenAdded().length - ch.getChildrenRemoved().length);
137  }
138  }
139 
140  super.fireInsertUpdate(e);
141  }
142 
147  @Override
148  protected void fireRemoveUpdate(@NotNull final DocumentEvent e) {
149  if (tokenMarker != null) {
150  final ElementChange ch = e.getChange(getDefaultRootElement());
151  if (ch != null) {
152  tokenMarker.deleteLines(ch.getIndex() + 1, ch.getChildrenRemoved().length - ch.getChildrenAdded().length);
153  }
154  }
155 
156  super.fireRemoveUpdate(e);
157  }
158 
159 }
net.sf.gridarta.textedit.textarea.SyntaxDocument.getTokenMarker
TokenMarker getTokenMarker()
Returns the token marker that is to be used to split lines of this document up into tokens.
Definition: SyntaxDocument.java:42
net.sf.gridarta.textedit.textarea
This package contains the other part of the script editor.
net.sf.gridarta.textedit.textarea.SyntaxDocument.tokenMarker
TokenMarker tokenMarker
Definition: SyntaxDocument.java:125
net.sf.gridarta
Base package of all Gridarta classes.
net.sf
net.sf.gridarta.textedit
net.sf.gridarta.textedit.textarea.SyntaxDocument
A document implementation that can be tokenized by the syntax highlighting system.
Definition: SyntaxDocument.java:29
net.sf.gridarta.textedit.textarea.tokenmarker
Definition: CrossfireDialogTokenMarker.java:20
net
net.sf.gridarta.textedit.textarea.SyntaxDocument.beginCompoundEdit
static void beginCompoundEdit()
Starts a compound edit that can be undone in one operation.
Definition: SyntaxDocument.java:102
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarker.insertLines
void insertLines(final int index, final int lines)
Informs the token marker that lines have been inserted into the document.
Definition: TokenMarker.java:154
net.sf.gridarta.textedit.textarea.SyntaxDocument.tokenizeLines
void tokenizeLines()
Re-parses the document, by passing all lines to the token marker.
Definition: SyntaxDocument.java:66
net.sf.gridarta.textedit.textarea.SyntaxDocument.fireInsertUpdate
void fireInsertUpdate(@NotNull final DocumentEvent e)
We overwrite this method to update the token marker state immediately so that any event listeners get...
Definition: SyntaxDocument.java:132
net.sf.gridarta.textedit.textarea.SyntaxDocument.endCompoundEdit
static void endCompoundEdit()
Ends a compound edit that can be undone in one operation.
Definition: SyntaxDocument.java:110
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.SyntaxDocument.setTokenMarker
void setTokenMarker(@Nullable final TokenMarker tokenMarker)
Sets the token marker that is to be used to split lines of this document up into tokens.
Definition: SyntaxDocument.java:52
net.sf.gridarta.textedit.textarea.SyntaxDocument.tokenizeLines
void tokenizeLines(final int start, final int len)
Re-parses the document, by passing the specified lines to the token marker.
Definition: SyntaxDocument.java:77
net.sf.gridarta.textedit.textarea.SyntaxDocument.fireRemoveUpdate
void fireRemoveUpdate(@NotNull final DocumentEvent e)
We overwrite this method to update the token marker state immediately so that any event listeners get...
Definition: SyntaxDocument.java:148
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarker.deleteLines
void deleteLines(final int index, final int lines)
Informs the token marker that line have been deleted from the document.
Definition: TokenMarker.java:174
net.sf.gridarta.textedit.textarea.tokenmarker.TokenMarker.markTokens
List< Token > markTokens(@NotNull final Segment line, final int lineIndex)
A wrapper for the lower-level.
Definition: TokenMarker.java:72
net.sf.gridarta.textedit.textarea.SyntaxDocument.serialVersionUID
static final long serialVersionUID
Serial Version UID.
Definition: SyntaxDocument.java:34
net.sf.gridarta.textedit.textarea.SyntaxDocument.addUndoableEdit
static void addUndoableEdit(@NotNull final UndoableEdit edit)
Adds an undoable edit to this document's undo list.
Definition: SyntaxDocument.java:119