Multiline strings in Scala have a well-known issue: they produce annoying leading whitespaces.
For example:
object MyApp extends App {
val html = """
<html>
<body>
<p>Lorem ipsum dolor sit amet...</p>
</body>
</html>
"""
println(html)
}
Running this code produces:
····<html>
······<body>
········<p>Lorem ipsum dolor sit amet...</p>
······</body>
····</html>
··
As you see, there are:
- One extra line at the beginning
- Unnecessary leading spaces before html markup
- One extra line with two spaces at the end
This small library can solve this problem.
Everything you need is to put nice
before your multiline string:
import com.github.orionll.scala.ReadableStringInterpolation._
object MyApp extends App {
val html = nice"""
<html>
<body>
<p>Lorem ipsum dolor sit amet...</p>
</body>
</html>
"""
println(html)
}
Now this code produces:
<html>
<body>
<p>Lorem ipsum dolor sit amet...</p>
</body>
</html>
nice
also plays well with expressions inside strings:
import com.github.orionll.scala.ReadableStringInterpolation._
object MyApp extends App {
val paragraphs = nice"""
<p>line1</p>
<p>line2</p>
"""
val html = nice"""
<html>
<body>
$paragraphs
</body>
</html>
"""
println(html)
}
The output will be exactly you expect it to be:
<html>
<body>
<p>line1</p>
<p>line2</p>
</body>
</html>
(Now try to run this code with standard s
instead of nice
and compare the resulting mess with this)
=============================
If you would like to have this library in the central repository, please let me know.