diff options
author | Rich Hickey <richhickey@gmail.com> | 2008-10-15 21:02:08 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2008-10-15 21:02:08 +0000 |
commit | bd0ca4e2dc44f98935db5806886be898313028e3 (patch) | |
tree | 000c1453559bf4f422448248221e79f9ed211c2c /src/jvm | |
parent | be542947ad5a96930fca37b760c93eb5ced10950 (diff) |
simplified regex literal format - no longer need to escape \
patch from Chouser
Diffstat (limited to 'src/jvm')
-rw-r--r-- | src/jvm/clojure/lang/LispReader.java | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/LispReader.java b/src/jvm/clojure/lang/LispReader.java index afc95835..e3b01c4b 100644 --- a/src/jvm/clojure/lang/LispReader.java +++ b/src/jvm/clojure/lang/LispReader.java @@ -364,8 +364,22 @@ static class RegexReader extends AFn{ static StringReader stringrdr = new StringReader();
public Object invoke(Object reader, Object doublequote) throws Exception{
- String str = (String) stringrdr.invoke(reader, doublequote);
- return Pattern.compile(str);
+ StringBuilder sb = new StringBuilder();
+ Reader r = (Reader) reader;
+ for(int ch = r.read(); ch != '"'; ch = r.read())
+ {
+ if(ch == -1)
+ throw new Exception("EOF while reading regex");
+ sb.append( (char) ch );
+ if(ch == '\\') //escape
+ {
+ ch = r.read();
+ if(ch == -1)
+ throw new Exception("EOF while reading regex");
+ sb.append( (char) ch ) ;
+ }
+ }
+ return Pattern.compile(sb.toString());
}
}
|