|
What this is
Other links
The source code/* * ParserRuleSet.java - A set of parser rules * :tabSize=8:indentSize=8:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright (C) 1999 mike dillon * Portions copyright (C) 2001, 2002 Slava Pestov * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.gjt.sp.jedit.syntax; //{{{ Imports import gnu.regexp.RE; import java.util.*; //}}} /** * A set of parser rules. * @author mike dillon * @version $Id: ParserRuleSet.java,v 1.23 2003/06/05 00:01:49 spestov Exp $ */ public class ParserRuleSet { //{{{ getStandardRuleSet() method /** * Returns a parser rule set that highlights everything with the * specified token type. * @param id The token type */ public static ParserRuleSet getStandardRuleSet(byte id) { return standard[id]; } //}}} //{{{ ParserRuleSet constructor public ParserRuleSet(String modeName, String setName) { this.modeName = modeName; this.setName = setName; ruleMapFirst = new ParserRule[RULE_BUCKET_COUNT]; ruleMapLast = new ParserRule[RULE_BUCKET_COUNT]; imports = new LinkedList(); } //}}} //{{{ getModeName() method public String getModeName() { return modeName; } //}}} //{{{ getSetName() method public String getSetName() { return setName; } //}}} //{{{ getName() method public String getName() { return modeName + "::" + setName; } //}}} //{{{ getProperties() method public Hashtable getProperties() { return props; } //}}} //{{{ setProperties() method public void setProperties(Hashtable props) { this.props = props; _noWordSep = null; } //}}} //{{{ resolveImports() method /** * Resolves all rulesets added with {@link #addRuleSet(ParserRuleSet)}. * @since jEdit 4.2pre3 */ public void resolveImports() { Iterator iter = imports.iterator(); while(iter.hasNext()) { ParserRuleSet ruleset = (ParserRuleSet)iter.next(); for(int i = 0; i < ruleset.ruleMapFirst.length; i++) { ParserRule rule = ruleset.ruleMapFirst[i]; while(rule != null) { addRule(rule); rule = rule.next; } } if(ruleset.keywords != null) { if(keywords == null) keywords = new KeywordMap(ignoreCase); keywords.add(ruleset.keywords); } } imports.clear(); } //}}} //{{{ addRuleSet() method /** * Adds all rules contained in the given ruleset. * @param ruleset The ruleset * @since jEdit 4.2pre3 */ public void addRuleSet(ParserRuleSet ruleset) { imports.add(ruleset); } //}}} //{{{ addRule() method public void addRule(ParserRule r) { ruleCount++; int key = Character.toUpperCase(r.hashChar) % RULE_BUCKET_COUNT; ParserRule last = ruleMapLast[key]; if(last == null) ruleMapFirst[key] = ruleMapLast[key] = r; else { last.next = r; ruleMapLast[key] = r; } } //}}} //{{{ getRules() method public ParserRule getRules(char ch) { int key = Character.toUpperCase(ch) % RULE_BUCKET_COUNT; return ruleMapFirst[key]; } //}}} //{{{ getRuleCount() method public int getRuleCount() { return ruleCount; } //}}} //{{{ getTerminateChar() method public int getTerminateChar() { return terminateChar; } //}}} //{{{ setTerminateChar() method public void setTerminateChar(int atChar) { terminateChar = (atChar >= 0) ? atChar : -1; } //}}} //{{{ getIgnoreCase() method public boolean getIgnoreCase() { return ignoreCase; } //}}} //{{{ setIgnoreCase() method public void setIgnoreCase(boolean b) { ignoreCase = b; } //}}} //{{{ getKeywords() method public KeywordMap getKeywords() { return keywords; } //}}} //{{{ setKeywords() method public void setKeywords(KeywordMap km) { keywords = km; _noWordSep = null; } //}}} //{{{ getHighlightDigits() method public boolean getHighlightDigits() { return highlightDigits; } //}}} //{{{ setHighlightDigits() method public void setHighlightDigits(boolean highlightDigits) { this.highlightDigits = highlightDigits; } //}}} //{{{ getDigitRegexp() method public RE getDigitRegexp() { return digitRE; } //}}} //{{{ setDigitRegexp() method public void setDigitRegexp(RE digitRE) { this.digitRE = digitRE; } //}}} //{{{ getEscapeRule() method public ParserRule getEscapeRule() { return escapeRule; } //}}} //{{{ setEscapeRule() method public void setEscapeRule(ParserRule escapeRule) { addRule(escapeRule); this.escapeRule = escapeRule; } //}}} //{{{ getDefault() method public byte getDefault() { return defaultToken; } //}}} //{{{ setDefault() method public void setDefault(byte def) { defaultToken = def; } //}}} //{{{ getNoWordSep() method public String getNoWordSep() { if(_noWordSep == null) { _noWordSep = noWordSep; if(noWordSep == null) noWordSep = ""; if(keywords != null) noWordSep += keywords.getNonAlphaNumericChars(); } return noWordSep; } //}}} //{{{ setNoWordSep() method public void setNoWordSep(String noWordSep) { this.noWordSep = noWordSep; _noWordSep = null; } //}}} //{{{ isBuiltIn() method /** * Returns if this is a built-in ruleset. * @since jEdit 4.2pre1 */ public boolean isBuiltIn() { return builtIn; } //}}} //{{{ toString() method public String toString() { return getClass().getName() + "[" + modeName + "::" + setName + "]"; } //}}} //{{{ Private members private static ParserRuleSet[] standard; static { standard = new ParserRuleSet[Token.ID_COUNT]; for(byte i = 0; i < standard.length; i++) { standard[i] = new ParserRuleSet(null,null); standard[i].setDefault(i); standard[i].builtIn = true; } } private static final int RULE_BUCKET_COUNT = 128; private String modeName, setName; private Hashtable props; private KeywordMap keywords; private int ruleCount; private ParserRule[] ruleMapFirst; private ParserRule[] ruleMapLast; private LinkedList imports; private int terminateChar = -1; private boolean ignoreCase = true; private byte defaultToken; private ParserRule escapeRule; private boolean highlightDigits; private RE digitRE; private String _noWordSep; private String noWordSep; private boolean builtIn; //}}} } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.