
org.fife.ui.rsyntaxtextarea.folding.NsisFoldParser Maven / Gradle / Ivy
Show all versions of rsyntaxtextarea Show documentation
/*
* 10/07/2012
*
* NsisFoldParser.java - Fold parser for NSIS.
*
* This library is distributed under a modified BSD license. See the included
* LICENSE file for details.
*/
package org.fife.ui.rsyntaxtextarea.folding;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
import javax.swing.text.BadLocationException;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.Token;
/**
* A fold parser NSIS.
*
* Note that this class may impose somewhat of a performance penalty on large
* source files, since it parses the entire document each time folds are
* reevaluated.
*
* @author Robert Futrell
* @version 1.0
*/
public class NsisFoldParser implements FoldParser {
private static final char[] KEYWORD_FUNCTION = "Function".toCharArray();
private static final char[] KEYWORD_FUNCTION_END = "FunctionEnd".toCharArray();
private static final char[] KEYWORD_SECTION = "Section".toCharArray();
private static final char[] KEYWORD_SECTION_END = "SectionEnd".toCharArray();
private static final char[] C_MLC_END = "*/".toCharArray();
private static boolean foundEndKeyword(char[] keyword, Token t,
Stack endWordStack) {
return t.is(Token.RESERVED_WORD, keyword) && !endWordStack.isEmpty() &&
keyword==endWordStack.peek();
}
@Override
public List getFolds(RSyntaxTextArea textArea) {
List folds = new ArrayList<>();
Fold currentFold = null;
int lineCount = textArea.getLineCount();
boolean inMLC = false;
int mlcStart = 0;
Stack endWordStack = new Stack<>();
try {
for (int line=0; line