/*
* CTokenMarker.java - C token marker
* Copyright (C) 1998, 1999 Slava Pestov
*
* You may use and modify this package for any purpose. Redistribution is
* permitted, in both source and binary form, provided that this notice
* remains intact in all source distributions of this package.
*/
import javax.swing.text.Segment;
/**
* C token marker.
*
* @author Slava Pestov
* @version $Id: TCLTokenMarker.java,v 1.34 1999/12/13 03:40:29 sp Exp $
*/
public class TCLTokenMarker extends TokenMarker
{
public TCLTokenMarker()
{
this(true,getKeywords());
}
public TCLTokenMarker(boolean cpp, KeywordMap keywords)
{
this.cpp = cpp;
this.keywords = keywords;
}
public byte markTokensImpl(byte token, Segment line, int lineIndex)
{
char[] array = line.array;
int offset = line.offset;
lastOffset = offset;
lastKeyword = offset;
int length = line.count + offset;
boolean backslash = false;
loop: for(int i = offset; i < length; i++)
{
int i1 = (i+1);
char c = array[i];
if(c == '\\')
{
backslash = !backslash;
continue;
}
switch(token)
{
case Token.NULL:
switch(c)
{
case '#':
if(backslash)
backslash = false;
else if(cpp)
{
if(doKeyword(line,i,c))
break;
addToken(i - lastOffset,token);
addToken(length - i,Token.KEYWORD2);
lastOffset = lastKeyword = length;
break loop;
}
break;
case '"':
doKeyword(line,i,c);
if(backslash)
backslash = false;
else
{
addToken(i - lastOffset,token);
token = Token.LITERAL1;
lastOffset = lastKeyword = i;
}
break;
case '\'':
doKeyword(line,i,c);
if(backslash)
backslash = false;
else
{
addToken(i - lastOffset,token);
token = Token.LITERAL2;
lastOffset = lastKeyword = i;
}
break;
case ':':
if(lastKeyword == offset)
{
if(doKeyword(line,i,c))
break;
backslash = false;
addToken(i1 - lastOffset,Token.LABEL);
lastOffset = lastKeyword = i1;
}
else if(doKeyword(line,i,c))
break;
break;
case '/':
backslash = false;
doKeyword(line,i,c);
if(length - i > 1)
{
switch(array[i1])
{
case '*':
addToken(i - lastOffset,token);
lastOffset = lastKeyword = i;
if(length - i > 2 && array[i+2] == '*')
token = Token.COMMENT2;
else
token = Token.COMMENT1;
break;
case '/':
addToken(i - lastOffset,token);
addToken(length - i,Token.COMMENT1);
lastOffset = lastKeyword = length;
break loop;
}
}
break;
default:
backslash = false;
if(!Character.isLetterOrDigit(c)
&& c != '_')
doKeyword(line,i,c);
break;
}
break;
case Token.COMMENT1:
case Token.COMMENT2:
backslash = false;
if(c == '*' && length - i > 1)
{
if(array[i1] == '/')
{
i++;
addToken((i+1) - lastOffset,token);
token = Token.NULL;
lastOffset = lastKeyword = i+1;
}
}
break;
case Token.LITERAL1:
if(backslash)
backslash = false;
else if(c == '"')
{
addToken(i1 - lastOffset,token);
token = Token.NULL;
lastOffset = lastKeyword = i1;
}
break;
case Token.LITERAL2:
if(backslash)
backslash = false;
else if(c == '\'')
{
addToken(i1 - lastOffset,Token.LITERAL1);
token = Token.NULL;
lastOffset = lastKeyword = i1;
}
break;
default:
throw new InternalError("Invalid state: "
+ token);
}
}
if(token == Token.NULL)
doKeyword(line,length,'\0');
switch(token)
{
case Token.LITERAL1:
case Token.LITERAL2:
addToken(length - lastOffset,Token.INVALID);
token = Token.NULL;
break;
case Token.KEYWORD2:
addToken(length - lastOffset,token);
if(!backslash)
token = Token.NULL;
default:
addToken(length - lastOffset,token);
break;
}
return token;
}
public static KeywordMap getKeywords()
{
if(cKeywords == null)
{
cKeywords = new KeywordMap(false);
cKeywords.add("append",Token.KEYWORD1);
cKeywords.add("array",Token.KEYWORD1);
cKeywords.add("concat",Token.KEYWORD1);
cKeywords.add("console",Token.KEYWORD1);
cKeywords.add("eval",Token.KEYWORD1);
cKeywords.add("expr",Token.KEYWORD1);
cKeywords.add("format",Token.KEYWORD1);
cKeywords.add("global",Token.KEYWORD1);
cKeywords.add("set",Token.KEYWORD1);
cKeywords.add("trace",Token.KEYWORD1);
cKeywords.add("unset",Token.KEYWORD1);
cKeywords.add("upvar",Token.KEYWORD1);
cKeywords.add("join",Token.KEYWORD1);
cKeywords.add("lappend",Token.KEYWORD1);
cKeywords.add("lindex",Token.KEYWORD1);
cKeywords.add("linsert",Token.KEYWORD1);
cKeywords.add("list",Token.KEYWORD1);
cKeywords.add("llength",Token.KEYWORD1);
cKeywords.add("lrange",Token.KEYWORD1);
cKeywords.add("lreplace",Token.KEYWORD1);
cKeywords.add("lsearch",Token.KEYWORD1);
cKeywords.add("lsort",Token.KEYWORD1);
cKeywords.add("split",Token.KEYWORD1);
cKeywords.add("scan",Token.KEYWORD1);
cKeywords.add("string",Token.KEYWORD1);
cKeywords.add("regexp",Token.KEYWORD1);
cKeywords.add("regsub",Token.KEYWORD1);
cKeywords.add("if",Token.KEYWORD1);
cKeywords.add("else",Token.KEYWORD1);
cKeywords.add("elseif",Token.KEYWORD1);
cKeywords.add("switch",Token.KEYWORD1);
cKeywords.add("for",Token.KEYWORD1);
cKeywords.add("foreach",Token.KEYWORD1);
cKeywords.add("while",Token.KEYWORD1);
cKeywords.add("break",Token.KEYWORD1);
cKeywords.add("continue",Token.KEYWORD1);
cKeywords.add("proc",Token.KEYWORD1);
cKeywords.add("return",Token.KEYWORD1);
cKeywords.add("source",Token.KEYWORD1);
cKeywords.add("unknown",Token.KEYWORD1);
cKeywords.add("uplevel",Token.KEYWORD1);
cKeywords.add("cd",Token.KEYWORD1);
cKeywords.add("close",Token.KEYWORD1);
cKeywords.add("eof",Token.KEYWORD1);
cKeywords.add("file",Token.KEYWORD1);
cKeywords.add("flush",Token.KEYWORD1);
cKeywords.add("gets",Token.KEYWORD1);
cKeywords.add("glob",Token.KEYWORD1);
cKeywords.add("open",Token.KEYWORD1);
cKeywords.add("read",Token.KEYWORD1);
cKeywords.add("puts",Token.KEYWORD1);
cKeywords.add("pwd",Token.KEYWORD1);
cKeywords.add("seek",Token.KEYWORD1);
cKeywords.add("tell",Token.KEYWORD1);
cKeywords.add("catch",Token.KEYWORD1);
cKeywords.add("error",Token.KEYWORD1);
cKeywords.add("exec",Token.KEYWORD1);
cKeywords.add("pid",Token.KEYWORD1);
cKeywords.add("after",Token.KEYWORD1);
cKeywords.add("time",Token.KEYWORD1);
cKeywords.add("exit",Token.KEYWORD1);
cKeywords.add("history",Token.KEYWORD1);
cKeywords.add("rename",Token.KEYWORD1);
cKeywords.add("info",Token.KEYWORD1);
cKeywords.add("ceil",Token.KEYWORD1);
cKeywords.add("floor",Token.KEYWORD1);
cKeywords.add("round",Token.KEYWORD1);
cKeywords.add("incr",Token.KEYWORD1);
cKeywords.add("abs",Token.KEYWORD1);
cKeywords.add("acos",Token.KEYWORD1);
cKeywords.add("cos",Token.KEYWORD1);
cKeywords.add("cosh",Token.KEYWORD1);
cKeywords.add("asin",Token.KEYWORD1);
cKeywords.add("sin",Token.KEYWORD1);
cKeywords.add("sinh",Token.KEYWORD1);
cKeywords.add("atan",Token.KEYWORD1);
cKeywords.add("atan2",Token.KEYWORD1);
cKeywords.add("tan",Token.KEYWORD1);
cKeywords.add("tanh",Token.KEYWORD1);
cKeywords.add("log",Token.KEYWORD1);
cKeywords.add("log10",Token.KEYWORD1);
cKeywords.add("fmod",Token.KEYWORD1);
cKeywords.add("pow",Token.KEYWORD1);
cKeywords.add("hypot",Token.KEYWORD1);
cKeywords.add("sqrt",Token.KEYWORD1);
cKeywords.add("double",Token.KEYWORD1);
cKeywords.add("int",Token.KEYWORD1);
cKeywords.add("bgerror",Token.KEYWORD1);
cKeywords.add("binary",Token.KEYWORD1);
cKeywords.add("clock",Token.KEYWORD1);
cKeywords.add("dde",Token.KEYWORD1);
cKeywords.add("encoding",Token.KEYWORD1);
cKeywords.add("fblocked",Token.KEYWORD1);
cKeywords.add("fconfigure",Token.KEYWORD1);
cKeywords.add("fcopy",Token.KEYWORD1);
cKeywords.add("fileevent",Token.KEYWORD1);
cKeywords.add("filename",Token.KEYWORD1);
cKeywords.add("http",Token.KEYWORD1);
cKeywords.add("interp",Token.KEYWORD1);
cKeywords.add("load",Token.KEYWORD1);
cKeywords.add("lset",Token.KEYWORD1);
cKeywords.add("memory",Token.KEYWORD1);
cKeywords.add("msgcat",Token.KEYWORD1);
cKeywords.add("namespace",Token.KEYWORD1);
cKeywords.add("package",Token.KEYWORD1);
cKeywords.add("pkg::create",Token.KEYWORD1);
cKeywords.add("pkg_mkIndex",Token.KEYWORD1);
cKeywords.add("registry",Token.KEYWORD1);
cKeywords.add("resource",Token.KEYWORD1);
cKeywords.add("socket",Token.KEYWORD1);
cKeywords.add("subst",Token.KEYWORD1);
cKeywords.add("update",Token.KEYWORD1);
cKeywords.add("variable",Token.KEYWORD1);
cKeywords.add("vwait",Token.KEYWORD1);
cKeywords.add("auto_execok",Token.KEYWORD1);
cKeywords.add("auto_import",Token.KEYWORD1);
cKeywords.add("auto_load",Token.KEYWORD1);
cKeywords.add("auto_mkindex",Token.KEYWORD1);
cKeywords.add("auto_mkindex_old",Token.KEYWORD1);
cKeywords.add("auto_qualify",Token.KEYWORD1);
cKeywords.add("auto_reset",Token.KEYWORD1);
cKeywords.add("parray",Token.KEYWORD1);
cKeywords.add("tcl_endOfWord",Token.KEYWORD1);
cKeywords.add("tcl_findLibrary",Token.KEYWORD1);
cKeywords.add("tcl_startOfNextWord",Token.KEYWORD1);
cKeywords.add("tcl_startOfPreviousWord",Token.KEYWORD1);
cKeywords.add("tcl_wordBreakAfter",Token.KEYWORD1);
cKeywords.add("tcl_wordBreakBefore",Token.KEYWORD1);
cKeywords.add("bind",Token.KEYWORD2);
cKeywords.add("button",Token.KEYWORD2);
cKeywords.add("canvas",Token.KEYWORD2);
cKeywords.add("checkbutton",Token.KEYWORD2);
cKeywords.add("destroy",Token.KEYWORD2);
cKeywords.add("entry",Token.KEYWORD2);
cKeywords.add("focus",Token.KEYWORD2);
cKeywords.add("frame",Token.KEYWORD2);
cKeywords.add("grab",Token.KEYWORD2);
cKeywords.add("image",Token.KEYWORD2);
cKeywords.add("label",Token.KEYWORD2);
cKeywords.add("listbox",Token.KEYWORD2);
cKeywords.add("lower",Token.KEYWORD2);
cKeywords.add("menu",Token.KEYWORD2);
cKeywords.add("menubutton",Token.KEYWORD2);
cKeywords.add("message",Token.KEYWORD2);
cKeywords.add("option",Token.KEYWORD2);
cKeywords.add("pack",Token.KEYWORD2);
cKeywords.add("placer",Token.KEYWORD2);
cKeywords.add("radiobutton",Token.KEYWORD2);
cKeywords.add("raise",Token.KEYWORD2);
cKeywords.add("scale",Token.KEYWORD2);
cKeywords.add("scrollbar",Token.KEYWORD2);
cKeywords.add("selection",Token.KEYWORD2);
cKeywords.add("send",Token.KEYWORD2);
cKeywords.add("text",Token.KEYWORD2);
cKeywords.add("tk",Token.KEYWORD2);
cKeywords.add("tkerror",Token.KEYWORD2);
cKeywords.add("tkwait",Token.KEYWORD2);
cKeywords.add("toplevel",Token.KEYWORD2);
cKeywords.add("update",Token.KEYWORD2);
cKeywords.add("winfo",Token.KEYWORD2);
cKeywords.add("wm",Token.KEYWORD2);
cKeywords.add("debug",Token.KEYWORD2);
cKeywords.add("disconnect",Token.KEYWORD2);
cKeywords.add("exp_continue",Token.KEYWORD2);
cKeywords.add("exp_internal",Token.KEYWORD2);
cKeywords.add("exp_open",Token.KEYWORD2);
cKeywords.add("exp_pid",Token.KEYWORD2);
cKeywords.add("exp_version",Token.KEYWORD2);
cKeywords.add("expect",Token.KEYWORD2);
cKeywords.add("expect_after",Token.KEYWORD2);
cKeywords.add("expect_background",Token.KEYWORD2);
cKeywords.add("expect_before",Token.KEYWORD2);
cKeywords.add("expect_tty",Token.KEYWORD2);
cKeywords.add("expect_user",Token.KEYWORD2);
cKeywords.add("fork",Token.KEYWORD2);
cKeywords.add("inter_return",Token.KEYWORD2);
cKeywords.add("interact",Token.KEYWORD2);
cKeywords.add("interpreter",Token.KEYWORD2);
cKeywords.add("log_file",Token.KEYWORD2);
cKeywords.add("log_user",Token.KEYWORD2);
cKeywords.add("match_max",Token.KEYWORD2);
cKeywords.add("overlay",Token.KEYWORD2);
cKeywords.add("parity",Token.KEYWORD2);
cKeywords.add("promptl",Token.KEYWORD2);
cKeywords.add("prompt2",Token.KEYWORD2);
cKeywords.add("remove_nulls",Token.KEYWORD2);
cKeywords.add("send_error ",Token.KEYWORD2);
cKeywords.add("send_log",Token.KEYWORD2);
cKeywords.add("send_tty",Token.KEYWORD2);
cKeywords.add("send_user",Token.KEYWORD2);
cKeywords.add("sleep",Token.KEYWORD2);
cKeywords.add("spawn",Token.KEYWORD2);
cKeywords.add("strace",Token.KEYWORD2);
cKeywords.add("stty",Token.KEYWORD2);
cKeywords.add("system",Token.KEYWORD2);
cKeywords.add("timestamp",Token.KEYWORD2);
cKeywords.add("trap",Token.KEYWORD2);
cKeywords.add("wait",Token.KEYWORD2);
cKeywords.add("full_buffer",Token.KEYWORD3);
cKeywords.add("timeout",Token.KEYWORD3);
cKeywords.add("argv0",Token.KEYWORD3);
cKeywords.add("argv",Token.KEYWORD3);
cKeywords.add("argc",Token.KEYWORD3);
cKeywords.add("tk_version",Token.KEYWORD3);
cKeywords.add("tk_library",Token.KEYWORD3);
cKeywords.add("tk_strictMotif",Token.KEYWORD3);
cKeywords.add("env",Token.KEYWORD3);
cKeywords.add("errorCode",Token.KEYWORD3);
cKeywords.add("errorInfo",Token.KEYWORD3);
cKeywords.add("geometry",Token.KEYWORD3);
cKeywords.add("tcl_library",Token.KEYWORD3);
cKeywords.add("tcl_patchLevel",Token.KEYWORD3);
cKeywords.add("tcl_pkgPath",Token.KEYWORD3);
cKeywords.add("tcl_platform",Token.KEYWORD3);
cKeywords.add("tcl_precision",Token.KEYWORD3);
cKeywords.add("tcl_rcFileName",Token.KEYWORD3);
cKeywords.add("tcl_rcRsrcName",Token.KEYWORD3);
cKeywords.add("tcl_traceCompile",Token.KEYWORD3);
cKeywords.add("tcl_traceExec",Token.KEYWORD3);
cKeywords.add("tcl_wordchars",Token.KEYWORD3);
cKeywords.add("tcl_nonwordchars",Token.KEYWORD3);
cKeywords.add("tcl_version",Token.KEYWORD3);
cKeywords.add("tcl_interactive",Token.KEYWORD3);
cKeywords.add("exact",Token.KEYWORD3);
cKeywords.add("all",Token.KEYWORD3);
cKeywords.add("indices",Token.KEYWORD3);
cKeywords.add("nocase",Token.KEYWORD3);
cKeywords.add("nocomplain",Token.KEYWORD3);
cKeywords.add("nonewline",Token.KEYWORD3);
cKeywords.add("code",Token.KEYWORD3);
cKeywords.add("errorinfo",Token.KEYWORD3);
cKeywords.add("errorcode",Token.KEYWORD3);
cKeywords.add("atime",Token.KEYWORD3);
cKeywords.add("anymore",Token.KEYWORD3);
cKeywords.add("args",Token.KEYWORD3);
cKeywords.add("body",Token.KEYWORD3);
cKeywords.add("compare",Token.KEYWORD3);
cKeywords.add("cmdcount",Token.KEYWORD3);
cKeywords.add("commands",Token.KEYWORD3);
cKeywords.add("ctime",Token.KEYWORD3);
cKeywords.add("current",Token.KEYWORD3);
cKeywords.add("default",Token.KEYWORD3);
cKeywords.add("dev",Token.KEYWORD3);
cKeywords.add("dirname",Token.KEYWORD3);
cKeywords.add("donesearch",Token.KEYWORD3);
cKeywords.add("errorinfo",Token.KEYWORD3);
cKeywords.add("executable",Token.KEYWORD3);
cKeywords.add("extension",Token.KEYWORD3);
cKeywords.add("first",Token.KEYWORD3);
cKeywords.add("globals",Token.KEYWORD3);
cKeywords.add("gid",Token.KEYWORD3);
cKeywords.add("index",Token.KEYWORD3);
cKeywords.add("ino",Token.KEYWORD3);
cKeywords.add("isdirectory",Token.KEYWORD3);
cKeywords.add("isfile",Token.KEYWORD3);
cKeywords.add("keep",Token.KEYWORD3);
cKeywords.add("last",Token.KEYWORD3);
cKeywords.add("level",Token.KEYWORD3);
cKeywords.add("length",Token.KEYWORD3);
cKeywords.add("library",Token.KEYWORD3);
cKeywords.add("locals",Token.KEYWORD3);
cKeywords.add("lstat",Token.KEYWORD3);
cKeywords.add("match",Token.KEYWORD3);
cKeywords.add("mode",Token.KEYWORD3);
cKeywords.add("mtime",Token.KEYWORD3);
cKeywords.add("names",Token.KEYWORD3);
cKeywords.add("nextelement",Token.KEYWORD3);
cKeywords.add("nextid",Token.KEYWORD3);
cKeywords.add("nlink",Token.KEYWORD3);
cKeywords.add("none",Token.KEYWORD3);
cKeywords.add("procs",Token.KEYWORD3);
cKeywords.add("owned",Token.KEYWORD3);
cKeywords.add("range",Token.KEYWORD3);
cKeywords.add("readable",Token.KEYWORD3);
cKeywords.add("readlink",Token.KEYWORD3);
cKeywords.add("redo",Token.KEYWORD3);
cKeywords.add("release",Token.KEYWORD3);
cKeywords.add("rootname",Token.KEYWORD3);
cKeywords.add("script",Token.KEYWORD3);
cKeywords.add("show",Token.KEYWORD3);
cKeywords.add("size",Token.KEYWORD3);
cKeywords.add("startsearch",Token.KEYWORD3);
cKeywords.add("stat",Token.KEYWORD3);
cKeywords.add("status",Token.KEYWORD3);
cKeywords.add("substitute",Token.KEYWORD3);
cKeywords.add("tail",Token.KEYWORD3);
cKeywords.add("tclversion",Token.KEYWORD3);
cKeywords.add("tolower",Token.KEYWORD3);
cKeywords.add("toupper",Token.KEYWORD3);
cKeywords.add("trim",Token.KEYWORD3);
cKeywords.add("trimleft",Token.KEYWORD3);
cKeywords.add("trimright",Token.KEYWORD3);
cKeywords.add("type",Token.KEYWORD3);
cKeywords.add("uid",Token.KEYWORD3);
cKeywords.add("variable",Token.KEYWORD3);
cKeywords.add("vars",Token.KEYWORD3);
cKeywords.add("vdelete",Token.KEYWORD3);
cKeywords.add("vinfo",Token.KEYWORD3);
cKeywords.add("visibility",Token.KEYWORD3);
cKeywords.add("window",Token.KEYWORD3);
cKeywords.add("writable",Token.KEYWORD3);
cKeywords.add("accelerator",Token.KEYWORD3);
cKeywords.add("activeforeground",Token.KEYWORD3);
cKeywords.add("activebackground",Token.KEYWORD3);
cKeywords.add("anchor",Token.KEYWORD3);
cKeywords.add("aspect",Token.KEYWORD3);
cKeywords.add("background",Token.KEYWORD3);
cKeywords.add("before",Token.KEYWORD3);
cKeywords.add("bg",Token.KEYWORD3);
cKeywords.add("borderwidth",Token.KEYWORD3);
cKeywords.add("bd",Token.KEYWORD3);
cKeywords.add("bitmap",Token.KEYWORD3);
cKeywords.add("command",Token.KEYWORD3);
cKeywords.add("cursor",Token.KEYWORD3);
cKeywords.add("default",Token.KEYWORD3);
cKeywords.add("expand",Token.KEYWORD3);
cKeywords.add("family",Token.KEYWORD3);
cKeywords.add("fg",Token.KEYWORD3);
cKeywords.add("fill",Token.KEYWORD3);
cKeywords.add("font",Token.KEYWORD3);
cKeywords.add("force",Token.KEYWORD3);
cKeywords.add("foreground",Token.KEYWORD3);
cKeywords.add("from",Token.KEYWORD3);
cKeywords.add("height",Token.KEYWORD3);
cKeywords.add("icon",Token.KEYWORD3);
cKeywords.add("question",Token.KEYWORD3);
cKeywords.add("warning",Token.KEYWORD3);
cKeywords.add("in",Token.KEYWORD3);
cKeywords.add("ipadx",Token.KEYWORD3);
cKeywords.add("ipady",Token.KEYWORD3);
cKeywords.add("justify",Token.KEYWORD3);
cKeywords.add("left",Token.KEYWORD3);
cKeywords.add("center",Token.KEYWORD3);
cKeywords.add("right",Token.KEYWORD3);
cKeywords.add("length",Token.KEYWORD3);
cKeywords.add("padx",Token.KEYWORD3);
cKeywords.add("pady",Token.KEYWORD3);
cKeywords.add("offvalue",Token.KEYWORD3);
cKeywords.add("onvalue",Token.KEYWORD3);
cKeywords.add("orient",Token.KEYWORD3);
cKeywords.add("horizontal",Token.KEYWORD3);
cKeywords.add("vertical",Token.KEYWORD3);
cKeywords.add("outline",Token.KEYWORD3);
cKeywords.add("oversrike",Token.KEYWORD3);
cKeywords.add("relief",Token.KEYWORD3);
cKeywords.add("raised",Token.KEYWORD3);
cKeywords.add("sunken",Token.KEYWORD3);
cKeywords.add("flat",Token.KEYWORD3);
cKeywords.add("groove",Token.KEYWORD3);
cKeywords.add("ridge",Token.KEYWORD3);
cKeywords.add("solid",Token.KEYWORD3);
cKeywords.add("screen",Token.KEYWORD3);
cKeywords.add("selectbackground",Token.KEYWORD3);
cKeywords.add("selectforeground",Token.KEYWORD3);
cKeywords.add("setgrid",Token.KEYWORD3);
cKeywords.add("side",Token.KEYWORD3);
cKeywords.add("size",Token.KEYWORD3);
cKeywords.add("slant",Token.KEYWORD3);
cKeywords.add("left",Token.KEYWORD3);
cKeywords.add("right",Token.KEYWORD3);
cKeywords.add("top",Token.KEYWORD3);
cKeywords.add("bottom",Token.KEYWORD3);
cKeywords.add("spacing1",Token.KEYWORD3);
cKeywords.add("spacing2",Token.KEYWORD3);
cKeywords.add("spacing3",Token.KEYWORD3);
cKeywords.add("state",Token.KEYWORD3);
cKeywords.add("stipple",Token.KEYWORD3);
cKeywords.add("takefocus",Token.KEYWORD3);
cKeywords.add("tearoff",Token.KEYWORD3);
cKeywords.add("textvariable",Token.KEYWORD3);
cKeywords.add("title",Token.KEYWORD3);
cKeywords.add("to",Token.KEYWORD3);
cKeywords.add("type",Token.KEYWORD3);
cKeywords.add("abortretryignore",Token.KEYWORD3);
cKeywords.add("ok",Token.KEYWORD3);
cKeywords.add("okcancel",Token.KEYWORD3);
cKeywords.add("retrycancel",Token.KEYWORD3);
cKeywords.add("yesno",Token.KEYWORD3);
cKeywords.add("yesnocancel",Token.KEYWORD3);
cKeywords.add("underline",Token.KEYWORD3);
cKeywords.add("value",Token.KEYWORD3);
cKeywords.add("variable",Token.KEYWORD3);
cKeywords.add("weight",Token.KEYWORD3);
cKeywords.add("width",Token.KEYWORD3);
cKeywords.add("xscrollcommand",Token.KEYWORD3);
cKeywords.add("yscrollcommand",Token.KEYWORD3);
cKeywords.add("active",Token.KEYWORD3);
cKeywords.add("add",Token.KEYWORD3);
cKeywords.add("arc",Token.KEYWORD3);
cKeywords.add("aspect",Token.KEYWORD3);
cKeywords.add("bitmap",Token.KEYWORD3);
cKeywords.add("cascade",Token.KEYWORD3);
cKeywords.add("cget",Token.KEYWORD3);
cKeywords.add("children",Token.KEYWORD3);
cKeywords.add("class",Token.KEYWORD3);
cKeywords.add("clear",Token.KEYWORD3);
cKeywords.add("client",Token.KEYWORD3);
cKeywords.add("create",Token.KEYWORD3);
cKeywords.add("colormodel",Token.KEYWORD3);
cKeywords.add("command",Token.KEYWORD3);
cKeywords.add("configure",Token.KEYWORD3);
cKeywords.add("deiconify",Token.KEYWORD3);
cKeywords.add("delete",Token.KEYWORD3);
cKeywords.add("disabled",Token.KEYWORD3);
cKeywords.add("exists",Token.KEYWORD3);
cKeywords.add("focusmodel",Token.KEYWORD3);
cKeywords.add("flash",Token.KEYWORD3);
cKeywords.add("forget",Token.KEYWORD3);
cKeywords.add("geometry",Token.KEYWORD3);
cKeywords.add("get",Token.KEYWORD3);
cKeywords.add("group",Token.KEYWORD3);
cKeywords.add("handle",Token.KEYWORD3);
cKeywords.add("iconbitmap",Token.KEYWORD3);
cKeywords.add("iconify",Token.KEYWORD3);
cKeywords.add("iconmask",Token.KEYWORD3);
cKeywords.add("iconname",Token.KEYWORD3);
cKeywords.add("iconposition",Token.KEYWORD3);
cKeywords.add("iconwindow",Token.KEYWORD3);
cKeywords.add("idletasks",Token.KEYWORD3);
cKeywords.add("insert",Token.KEYWORD3);
cKeywords.add("interps",Token.KEYWORD3);
cKeywords.add("itemconfigure",Token.KEYWORD3);
cKeywords.add("invoke",Token.KEYWORD3);
cKeywords.add("line",Token.KEYWORD3);
cKeywords.add("mark",Token.KEYWORD3);
cKeywords.add("maxsize",Token.KEYWORD3);
cKeywords.add("minsize",Token.KEYWORD3);
cKeywords.add("move",Token.KEYWORD3);
cKeywords.add("name",Token.KEYWORD3);
cKeywords.add("normal",Token.KEYWORD3);
cKeywords.add("overrideredirect",Token.KEYWORD3);
cKeywords.add("oval",Token.KEYWORD3);
cKeywords.add("own",Token.KEYWORD3);
cKeywords.add("photo",Token.KEYWORD3);
cKeywords.add("polygon",Token.KEYWORD3);
cKeywords.add("positionfrom",Token.KEYWORD3);
cKeywords.add("propagate",Token.KEYWORD3);
cKeywords.add("protocol",Token.KEYWORD3);
cKeywords.add("ranges",Token.KEYWORD3);
cKeywords.add("rectangle",Token.KEYWORD3);
cKeywords.add("remove",Token.KEYWORD3);
cKeywords.add("resizable",Token.KEYWORD3);
cKeywords.add("separator",Token.KEYWORD3);
cKeywords.add("slaves",Token.KEYWORD3);
cKeywords.add("sizefrom",Token.KEYWORD3);
cKeywords.add("state",Token.KEYWORD3);
cKeywords.add("tag",Token.KEYWORD3);
cKeywords.add("title",Token.KEYWORD3);
cKeywords.add("transient",Token.KEYWORD3);
cKeywords.add("window",Token.KEYWORD3);
cKeywords.add("withdraw",Token.KEYWORD3);
cKeywords.add("xview",Token.KEYWORD3);
cKeywords.add("yview",Token.KEYWORD3);
cKeywords.add("Activate",Token.KEYWORD3);
cKeywords.add("Alt",Token.KEYWORD3);
cKeywords.add("Any",Token.KEYWORD3);
cKeywords.add("B1",Token.KEYWORD3);
cKeywords.add("B2",Token.KEYWORD3);
cKeywords.add("B3",Token.KEYWORD3);
cKeywords.add("Button1",Token.KEYWORD3);
cKeywords.add("Button2",Token.KEYWORD3);
cKeywords.add("Button3",Token.KEYWORD3);
cKeywords.add("ButtonPress",Token.KEYWORD3);
cKeywords.add("ButtonRelease",Token.KEYWORD3);
cKeywords.add("Double",Token.KEYWORD3);
cKeywords.add("Circulate",Token.KEYWORD3);
cKeywords.add("Colormap",Token.KEYWORD3);
cKeywords.add("Configure",Token.KEYWORD3);
cKeywords.add("Control",Token.KEYWORD3);
cKeywords.add("Deactivate",Token.KEYWORD3);
cKeywords.add("Escape",Token.KEYWORD3);
cKeywords.add("Expose",Token.KEYWORD3);
cKeywords.add("FocusIn",Token.KEYWORD3);
cKeywords.add("FocusOut",Token.KEYWORD3);
cKeywords.add("Gravity",Token.KEYWORD3);
cKeywords.add("Key",Token.KEYWORD3);
cKeywords.add("KeyPress",Token.KEYWORD3);
cKeywords.add("KeyRelease",Token.KEYWORD3);
cKeywords.add("Lock",Token.KEYWORD3);
cKeywords.add("Meta",Token.KEYWORD3);
cKeywords.add("Property",Token.KEYWORD3);
cKeywords.add("Reparent",Token.KEYWORD3);
cKeywords.add("Shift",Token.KEYWORD3);
cKeywords.add("Unmap",Token.KEYWORD3);
cKeywords.add("Visibility",Token.KEYWORD3);
cKeywords.add("Button",Token.KEYWORD3);
cKeywords.add("ButtonPress",Token.KEYWORD3);
cKeywords.add("ButtonRelease",Token.KEYWORD3);
cKeywords.add("Destroy",Token.KEYWORD3);
cKeywords.add("Escape",Token.KEYWORD3);
cKeywords.add("Enter",Token.KEYWORD3);
cKeywords.add("Leave",Token.KEYWORD3);
cKeywords.add("Motion",Token.KEYWORD3);
cKeywords.add("MenuSelect",Token.KEYWORD3);
cKeywords.add("Triple",Token.KEYWORD3);
cKeywords.add("all",Token.KEYWORD3);
}
return cKeywords;
}
// private members
private static KeywordMap cKeywords;
private boolean cpp;
private KeywordMap keywords;
private int lastOffset;
private int lastKeyword;
private boolean doKeyword(Segment line, int i, char c)
{
int i1 = i+1;
int len = i - lastKeyword;
byte id = keywords.lookup(line,lastKeyword,len);
if(id != Token.NULL)
{
if(lastKeyword != lastOffset)
addToken(lastKeyword - lastOffset,Token.NULL);
addToken(len,id);
lastOffset = i;
}
lastKeyword = i1;
return false;
}
}