diff options
author | Paul Phillips <paulp@improving.org> | 2013-03-25 12:23:37 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2013-03-25 12:23:37 -0700 |
commit | e5b54146dd68f576f6439a6e1999b5c46795f39b (patch) | |
tree | 7a2b0bd61e3022d95663cc4c21360a4688f8b874 | |
parent | 424f00e7d6d76536710bbd8ed6aa0c2bb79196d0 (diff) | |
parent | b4344e121c7e195f5244cd704d5296274d503dd1 (diff) | |
download | scala-e5b54146dd68f576f6439a6e1999b5c46795f39b.tar.gz scala-e5b54146dd68f576f6439a6e1999b5c46795f39b.tar.bz2 scala-e5b54146dd68f576f6439a6e1999b5c46795f39b.zip |
Merge pull request #2278 from kzys/jira-6580
SI-6580 Scaladoc: Should not close void elements
-rwxr-xr-x | src/compiler/scala/tools/nsc/doc/base/comment/Body.scala | 18 | ||||
-rw-r--r-- | test/scaladoc/run/SI-6580.check | 11 | ||||
-rw-r--r-- | test/scaladoc/run/SI-6580.scala | 32 |
3 files changed, 54 insertions, 7 deletions
diff --git a/src/compiler/scala/tools/nsc/doc/base/comment/Body.scala b/src/compiler/scala/tools/nsc/doc/base/comment/Body.scala index 02e662da85..eb0d751f3e 100755 --- a/src/compiler/scala/tools/nsc/doc/base/comment/Body.scala +++ b/src/compiler/scala/tools/nsc/doc/base/comment/Body.scala @@ -75,16 +75,20 @@ object EntityLink { def unapply(el: EntityLink): Option[(Inline, LinkTo)] = Some((el.title, el.link)) } final case class HtmlTag(data: String) extends Inline { - def canClose(open: HtmlTag) = { - open.data.stripPrefix("<") == data.stripPrefix("</") + private val Pattern = """(?ms)\A<(/?)(.*?)[\s>].*\z""".r + private val (isEnd, tagName) = data match { + case Pattern(s1, s2) => + (! s1.isEmpty, Some(s2.toLowerCase)) + case _ => + (false, None) } - def close = { - if (data.indexOf("</") == -1) - Some(HtmlTag("</" + data.stripPrefix("<"))) - else - None + def canClose(open: HtmlTag) = { + isEnd && tagName == open.tagName } + + private val TagsNotToClose = Set("br", "img") + def close = tagName collect { case name if !TagsNotToClose(name) => HtmlTag(s"</$name>") } } /** The summary of a comment, usually its first sentence. There must be exactly one summary per body. */ diff --git a/test/scaladoc/run/SI-6580.check b/test/scaladoc/run/SI-6580.check new file mode 100644 index 0000000000..2fb6ec3258 --- /dev/null +++ b/test/scaladoc/run/SI-6580.check @@ -0,0 +1,11 @@ +Chain(List(Chain(List(Text(Here z(1) is defined as follows:), Text( +), HtmlTag(<br>), Text( +), Text( ), HtmlTag(<img src='http://example.com/fig1.png'>), Text( +), HtmlTag(<br>), Text( +), Text(plus z(1) times), Text( +), HtmlTag(<br>), Text( +), Text( ), HtmlTag(<img src='http://example.com/fig2.png'>), Text( +), HtmlTag(<br>), Text( +), Text(equals QL of something +))))) +Done. diff --git a/test/scaladoc/run/SI-6580.scala b/test/scaladoc/run/SI-6580.scala new file mode 100644 index 0000000000..c544138f44 --- /dev/null +++ b/test/scaladoc/run/SI-6580.scala @@ -0,0 +1,32 @@ +import scala.tools.nsc.doc +import scala.tools.nsc.doc.model._ +import scala.tools.nsc.doc.html.page.{Index, ReferenceIndex} +import scala.tools.partest.ScaladocModelTest + +object Test extends ScaladocModelTest { + override def scaladocSettings = "" + override def code = """ + + object Test { + /** Here z(1) is defined as follows: + * <br> + * <img src='http://example.com/fig1.png'> + * <br> + * plus z(1) times + * <br> + * <img src='http://example.com/fig2.png'> + * <br> + * equals QL of something + */ + def f = 1 + } + + """ + + def testModel(rootPackage: Package) { + import access._ + + val f = rootPackage._object("Test")._method("f") + println(f.comment.get.short) + } +} |