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>{