You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@esme.apache.org by vd...@apache.org on 2011/02/19 08:05:13 UTC
svn commit: r1072264 - in /esme/trunk/server/src/main/scala/org/apache/esme:
lib/MsgParser.scala model/Message.scala
Author: vdichev
Date: Sat Feb 19 07:05:12 2011
New Revision: 1072264
URL: http://svn.apache.org/viewvc?rev=1072264&view=rev
Log:
ESME-307 Inline markup is terminated properly by punctuation and does not generate an extra space.
Modified:
esme/trunk/server/src/main/scala/org/apache/esme/lib/MsgParser.scala
esme/trunk/server/src/main/scala/org/apache/esme/model/Message.scala
Modified: esme/trunk/server/src/main/scala/org/apache/esme/lib/MsgParser.scala
URL: http://svn.apache.org/viewvc/esme/trunk/server/src/main/scala/org/apache/esme/lib/MsgParser.scala?rev=1072264&r1=1072263&r2=1072264&view=diff
==============================================================================
--- esme/trunk/server/src/main/scala/org/apache/esme/lib/MsgParser.scala (original)
+++ esme/trunk/server/src/main/scala/org/apache/esme/lib/MsgParser.scala Sat Feb 19 07:05:12 2011
@@ -55,6 +55,12 @@ object MsgParser extends Parsers with Im
lazy val begin: Parser[List[MsgInfo]] =
startSpace ~> rep1(url | atName | hashTag | emph | strong | text) <~ spaceEOF
+ val punctRegex = java.util.regex.Pattern.compile("""\p{Punct}""")
+
+ def isPunct(c: Char) = punctRegex.matcher(c.toString).matches
+
+ lazy val punct: Parser[Elem] = elem("separator", isPunct)
+
lazy val startSpace = rep(' ')
lazy val url: Parser[URL] = fragmentAddress ^^ {url => URL(UrlStore.make(url))}
@@ -227,7 +233,7 @@ object MsgParser extends Parsers with Im
}
lazy val begOrSpace: Parser[Int] = rep1(' ') ^^ {case lst => lst.length} | beginl ^^^ 0
- lazy val spaceOrEnd: Parser[Int] = EOL ^^^ 0 | (rep1(' ') | rep1('?') | rep1('!') | rep1('.') | rep1(',') | rep1(':') | rep1(';') | rep1('-')) ^^ {case lst => lst.length}
+ lazy val spacePunctOrEnd: Parser[Boolean] = (EOL | ' ' | punct) ^^^ true
def peek[T](p: Parser[T]): Parser[T] = Parser { in =>
p(in) match {
@@ -242,7 +248,7 @@ object MsgParser extends Parsers with Im
}
def surrounded(sep: String)(constructor: (String) => MsgInfo): Parser[MsgInfo] =
- begOrSpace ~ accept(sep) ~> rep1(not(spaceEOF) ~ not(accept(sep)) ~ not(hashTag) ~ not(atName) ~> anyChar) <~ accept(sep) ~ peek(spaceOrEnd) ^^ {
+ begOrSpace ~ accept(sep) ~> rep1(not(spaceEOF) ~ not(accept(sep)) ~ not(hashTag) ~ not(atName) ~> anyChar) <~ (accept(sep) ~ peek(spacePunctOrEnd)) ^^ {
case xs => constructor(xs.mkString)
}
Modified: esme/trunk/server/src/main/scala/org/apache/esme/model/Message.scala
URL: http://svn.apache.org/viewvc/esme/trunk/server/src/main/scala/org/apache/esme/model/Message.scala?rev=1072264&r1=1072263&r2=1072264&view=diff
==============================================================================
--- esme/trunk/server/src/main/scala/org/apache/esme/model/Message.scala (original)
+++ esme/trunk/server/src/main/scala/org/apache/esme/model/Message.scala Sat Feb 19 07:05:12 2011
@@ -526,8 +526,8 @@ class Message extends LongKeyedMapper[Me
case MsgText(text) => Text(text)
case URL(url) => <url id={url.id.toString}
url={url.url.toString} uniqueId={url.uniqueId.is} >{url.url.toString}</url>
- case Emph(text) => <xml:group> <em text={text}>_{text}_</em> </xml:group>
- case Strong(text) => <xml:group> <strong text={text}>*{text}*</strong> </xml:group>
+ case Emph(text) => <xml:group> <em text={text}>_{text}_</em></xml:group>
+ case Strong(text) => <xml:group> <strong text={text}>*{text}*</strong></xml:group>
}
}</body>
<tags>{