{
private VocabularyLookup lookup;
private FactorScanner scanner;
+ private ParseState topState;
private Cons states;
/**
private String in;
private int base = 10;
+ private Cons definedWords;
+
//{{{ getUnreadableString() method
public static String getUnreadableString(String str)
{
this.lookup = lookup;
this.scanner = scanner;
pushState(toplevel,null);
+ topState = (ParseState)states.car;
this.alwaysDocComments = alwaysDocComments;
this.in = DefaultVocabularyLookup.DEFAULT_IN;
this.use = DefaultVocabularyLookup.DEFAULT_USE;
if(next())
{
// eof.
- return popState(toplevel,toplevel).first;
+ popState(toplevel,toplevel);
+ return topState.first;
}
}
} //}}}
public FactorWord intern(String name, boolean define)
throws Exception
{
+ FactorWord word;
+
if(define)
- return lookup.define(getIn(),name);
+ {
+ word = lookup.define(getIn(),name);
+ definedWords = new Cons(word,definedWords);
+ }
else
{
- FactorWord word = searchVocabulary(getUse(),name);
+ word = searchVocabulary(getUse(),name);
if(word == null)
error("Undefined: " + name);
- return word;
}
+
+ return word;
} //}}}
+ //{{{ getDefinedWords() method
+ public Cons getDefinedWords()
+ {
+ return definedWords;
+ } //}}}
+
//{{{ nextWord() method
/**
* Read a word from the scanner and intern it. Returns null on EOF.
/**
* We store the file's parse tree in this property.
*/
- public static String PARSED_PROPERTY = "factor-parsed";
+ public static String WORDS_PROPERTY = "factor-parsed";
private Map previewMap;
public SideKickParsedData parse(Buffer buffer,
DefaultErrorSource errorSource)
{
- Cons parsed = (Cons)buffer.getProperty(PARSED_PROPERTY);
- removeWordDefinitions(parsed);
+ Object words = buffer.getProperty(WORDS_PROPERTY);
+ if(words instanceof Cons)
+ forgetWords((Cons)words);
FactorParsedData d = new FactorParsedData(
this,buffer.getPath());
buffer.readUnlock();
}
+ FactorReader r = null;
+
try
{
/* of course wrapping a string reader in a buffered
buffer.getPath(),
new BufferedReader(new StringReader(text)),
errorSource);
- FactorReader r = new FactorReader(scanner,
- false,FactorPlugin.getExternalInstance());
+ r = new FactorReader(scanner,false,FactorPlugin.getExternalInstance());
- parsed = r.parse();
+ Cons parsed = r.parse();
d.in = r.getIn();
d.use = r.getUse();
-
- buffer.setProperty(PARSED_PROPERTY,parsed);
addWordDefNodes(d,parsed,buffer);
}
Log.log(Log.DEBUG,this,e);
}
+ if(r != null)
+ buffer.setProperty(WORDS_PROPERTY,r.getDefinedWords());
+
return d;
} //}}}
- //{{{ removeWordDefinitions() method
- private void removeWordDefinitions(Cons parsed)
+ //{{{ forgetWords() method
+ private void forgetWords(Cons words)
{
- while(parsed != null)
+ while(words != null)
{
- Object obj = parsed.car;
- if(obj instanceof FactorWordDefinition)
- {
- FactorPlugin.getExternalInstance().forget(
- ((FactorWordDefinition)obj).word);
- }
- parsed = parsed.next();
+ Object obj = words.car;
+ FactorPlugin.getExternalInstance().forget((FactorWord)obj);
+ words = words.next();
}
} //}}}