read();
sb.append((char)rr);
break;
default:
if(name == null) {
top.currentMessageChain.add(new LiteralMessage(runtime.newRegexp(pattern, sb.toString()), null, sourcename, l, cc));
top.added();
return;
}
if(pattern.length() > 0) {
args.add(new LiteralMessage(runtime.newUnescapedText(pattern), null, sourcename, l, cc));
}
args.add(new LiteralMessage(runtime.newText(sb.toString()), null, sourcename, l, cc));
top.currentMessageChain.add(NamedMessage.create(name, PersistentList.create(args), null, sourcename, l, cc, scope));
top.added();
return;
}
}
} else {
sb.append((char)rr);
}
break;
case ']':
read();
if(!slash) {
String pattern = sb.toString();
sb = new StringBuilder();
while(true) {
switch(rr = peek()) {
case 'x':
case 'i':
case 'u':
case 'm':
case 's':
read();
sb.append((char)rr);
break;
default:
if(name == null) {
top.currentMessageChain.add(new LiteralMessage(runtime.newRegexp(pattern, sb.toString()), null, sourcename, l, cc));
top.added();
return;
}
if(pattern.length() > 0) {
args.add(new LiteralMessage(runtime.newUnescapedText(pattern), null, sourcename, l, cc));
}
args.add(new LiteralMessage(runtime.newText(sb.toString()), null, sourcename, l, cc));
top.currentMessageChain.add(NamedMessage.create(name, PersistentList.create(args), null, sourcename, l, cc, scope));
top.added();
return;
}
}
} else {
sb.append((char)rr);
}
break;
case '%':
read();
if((rr = peek()) == '{') {
read();
args.add(new LiteralMessage(runtime.newUnescapedText(sb.toString()), null, sourcename, l, cc));
sb = new StringBuilder();
name = "internal:compositeRegexp";
args.add(parseMessageChain());
readWhiteSpace();
parseCharacter('}');