use of lucee.commons.lang.ParserString in project Lucee by lucee.
the class VariableInterpreter method removeVariable.
/**
* removes a variable eith matching name from page context
* @param pc
* @param var
* @return has removed or not
* @throws PageException
*/
public static Object removeVariable(PageContext pc, String var) throws PageException {
// print.ln("var:"+var);
StringList list = parse(pc, new ParserString(var), false);
if (list == null)
throw new InterpreterException("invalid variable declaration [" + var + "]");
if (list.size() == 1) {
return pc.undefinedScope().remove(KeyImpl.init(list.next()));
}
int scope = scopeString2Int(pc.ignoreScopes(), list.next());
Object coll;
if (scope == Scope.SCOPE_UNDEFINED) {
coll = pc.undefinedScope().get(list.current());
} else {
coll = VariableInterpreter.scope(pc, scope, true);
// coll=pc.scope(scope);
}
while (list.hasNextNext()) {
coll = pc.get(coll, list.next());
}
return Caster.toCollection(coll).remove(KeyImpl.init(list.next()));
}
use of lucee.commons.lang.ParserString in project Lucee by lucee.
the class VariableInterpreter method getVariableReference.
/**
* return a variable reference by string syntax ("scopename.key.key" -> "url.name")
* a variable reference, references to variable, to modifed it, with global effect.
* @param pc
* @param var variable name to get
* @return variable as Reference
* @throws PageException
*/
public static VariableReference getVariableReference(PageContext pc, String var) throws PageException {
StringList list = parse(pc, new ParserString(var), false);
if (list == null)
throw new InterpreterException("invalid variable declaration [" + var + "]");
if (list.size() == 1) {
return new VariableReference(pc.undefinedScope(), list.next());
}
int scope = scopeString2Int(pc.ignoreScopes(), list.next());
Object coll;
if (scope == Scope.SCOPE_UNDEFINED) {
coll = pc.touch(pc.undefinedScope(), KeyImpl.init(list.current()));
} else {
coll = VariableInterpreter.scope(pc, scope, list.hasNext());
// coll=pc.scope(scope);
}
while (list.hasNextNext()) {
coll = pc.touch(coll, KeyImpl.init(list.next()));
}
if (!(coll instanceof Collection))
throw new InterpreterException("invalid variable [" + var + "]");
return new VariableReference((Collection) coll, list.next());
}
use of lucee.commons.lang.ParserString in project Lucee by lucee.
the class VariableInterpreter method setVariable.
/**
* sets a variable to page Context
* @param pc pagecontext of the new variable
* @param var String of variable definition
* @param value value to set to variable
* @return value setted
* @throws PageException
*/
public static Object setVariable(PageContext pc, String var, Object value) throws PageException {
StringList list = parse(pc, new ParserString(var), false);
if (list == null)
throw new InterpreterException("invalid variable name declaration [" + var + "]");
if (list.size() == 1) {
return pc.undefinedScope().set(list.next(), value);
}
// min 2 elements
int scope = scopeString2Int(pc.ignoreScopes(), list.next());
Object coll;
if (scope == Scope.SCOPE_UNDEFINED) {
coll = pc.touch(pc.undefinedScope(), KeyImpl.init(list.current()));
} else {
coll = VariableInterpreter.scope(pc, scope, true);
// coll=pc.scope(scope);
}
while (list.hasNextNext()) {
coll = pc.touch(coll, KeyImpl.init(list.next()));
}
return pc.set(coll, KeyImpl.init(list.next()), value);
}
Aggregations