GithubHelp home page GithubHelp logo

scalate / scalate Goto Github PK

View Code? Open in Web Editor NEW
607.0 22.0 105.0 51.13 MB

Scalate is a Scala based template engine which supports HAML, Mustache and JSP, Erb and Velocity style syntaxes.

Home Page: https://scalate.github.io/scalate/

License: Apache License 2.0

Scala 93.37% HTML 0.41% Java 1.15% Shell 0.02% JavaScript 0.53% CoffeeScript 0.01% CSS 1.64% Pug 0.88% Haml 0.16% Scaml 1.78% Mustache 0.06%
scala template-engine

scalate's Introduction

Scalate

build Maven Central

Scalate is a Scala based template engine which supports HAML, Mustache and JSP, Erb and Velocity style syntaxes.

The following template languages are supported:

  • Mustache: is a Mustache template language for Java/Scala
  • Jade: The Jade style of Haml/Scaml template language
  • Scaml: Provides Haml style template language
  • Ssp: Provides a JSP, Erb and Velocity style template language

In Scaml and SSP all expressions are typesafe and checked at edit/compile time to ensure you don't leave any mistakes in your pages. Mustache uses dynamic typing and reflection; a trade off of hiding code and logic from inside the templates.

Building

To build Scalate from the source please see the building instructions

Links

scalate's People

Contributors

arashi01 avatar chirino avatar cmoulliard avatar coldsauce avatar dependabot[bot] avatar dnadolny avatar domdorn avatar dozed avatar fbolton avatar gertv avatar github-actions[bot] avatar gnodet avatar jstrachan avatar lloydmeta avatar mads-hartmann avatar magnolia-k avatar maslovalex avatar matthewfarwell avatar ngocdaothanh avatar rcrowther avatar rkrzewski avatar rocketraman avatar rossabaker avatar scala-steward-bot avatar seratch avatar sptz45 avatar sroebuck avatar svenjacobs avatar tpunder avatar xuwei-k avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

scalate's Issues

move jersey related classes to separate module

There is org.fusesource.scalate.jersey package in scalate-core which references com.sun.jersey.api.container.ContainerException

Providers registration in EAP 6.4 (where RestEasy is JAX-RS implementation) throws

java.lang.NoClassDefFoundError: com/sun/jersey/api/container/ContainerException
    java.lang.Class.getDeclaredConstructors0(Native Method)
    java.lang.Class.privateGetDeclaredConstructors(Class.java:2585)
    java.lang.Class.getConstructors(Class.java:1522)
    org.jboss.resteasy.util.PickConstructor.pickSingletonConstructor(PickConstructor.java:30)
    org.jboss.resteasy.spi.ResteasyProviderFactory.createConstructorInjector(ResteasyProviderFactory.java:2217)
    org.jboss.resteasy.spi.ResteasyProviderFactory.createProviderInstance(ResteasyProviderFactory.java:2209)
    org.jboss.resteasy.spi.ResteasyProviderFactory.addMessageBodyWriter(ResteasyProviderFactory.java:873)
    org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1414)
    org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1346)
    org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1268)
    org.jboss.resteasy.spi.ResteasyDeployment.registerProvider(ResteasyDeployment.java:531)
    org.jboss.resteasy.spi.ResteasyDeployment.registration(ResteasyDeployment.java:338)
    org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:241)
    org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:112)
    org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(HttpServletDispatcher.java:36)
    org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
    org.jboss.as.jpa.interceptor.WebNonTxEmCloserValve.invoke(WebNonTxEmCloserValve.java:50)
    org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:926)
    java.lang.Thread.run(Thread.java:745)

I guess it would be not a bad idea to move org.fusesource.scalate.jersey to separate module (e.g. scalate-jersey) like it is done with scalate-spring-mvc.

SSP fails on certain if blocks

Hi there,

Scalate SSP fails on certain if blocks.

Consider the following dummy SSP file:

    #{
    val testMap1 =  Map("a" -> true, "b" -> true, "c" -> true)
    val testMap2 =  Map("d" -> false, "e" -> false, "f" -> true)

    val something = true
    val value = 3
    }#

    <html>
    <head>
    <title>Test</title>
    </head>

    <body>

    #if(something)
        <h1>True</h1>
    #elseif(value > 2)
        <h1>False, but higher</h1>
    #else
       <h1>False</h1>
    #end


    #if(testMap1.forall(_._2) && testMap2.forall(_._2))
        <h1>All true</h1>
    #elseif(testMap1.forall(_._2) || testMap2.forall(_._2))
        <h1>One map true</h1>
    #else
        <h1>Neither</h1>
    #end

which is rendered by the following:

import java.io.File
import org.fusesource.scalate.{ TemplateSource, TemplateEngine }

val engine = new TemplateEngine()
val file = new File("path/to/file.ssp")

engine.layout(TemplateSource.fromFile(file))

This will fail.

The first if block will nicely execute, but the second if block will fail with some SyntaxError (Missing if at... or Cannot have more than one else at ...). I don't see any syntax difference between the two blocks. I'm bumping into this problem each time I generate booleans "on the fly" with some functional stuff. Am I not allowed to do this?

For instance, if I change the second block to the following, it does work:

#{
    val testMap1true = testMap1.forall(_._2)
    val testMap2true = testMap2.forall(_._2)        
}#

#if(testMap1true && testMap2true)
    <h1>All true</h1>
#elseif(testMap1true || testMap2true))
    <h1>One map true</h1>
#else
    <h1>Neither</h1>
#end

Is this intended behaviour?


Originally posted on Stack Overflow

sbt build broken

just downloaded. mvn worked but sbt didn't. (As of commit f8de5a5)

$ ./sbt 

java.lang.RuntimeException: unresolved dependency: org.fusesource#webbytest;1.0-SNAPSHOT: not found
    at scala.Predef$.error(Predef.scala:76)
    at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:133)

escapeMarkup does not give any effect

Hello,

I tried to use escapeMarkup setting in order to compose a template from other templates, but seems it does not work at all. Here is a code which I used:

import org.fusesource.scalate.TemplateEngine

object MustacheMaker {

  val engine = new TemplateEngine()
  engine.escapeMarkup = false

  def createEmail(content: String): String = {
    engine.layout("templates/wow-layout.mustache",
      Map("content" -> content))
  }
}

Here is a wow-layout.mustache template:

<div class="wrap-box">
{{content}}
</div>

And finally a test which fails:

import com.app.util.MustacheMaker
import org.scalatest.FunSuiteLike

class EmailConstructorSuite extends FunSuiteLike {
  test("Wrapper with enabled escape markup") {
    val content = MustacheMaker.createEmail("<h1>Hello</h1>")
    assert(content === """<div class="wrap-box"><h1>Hello</h1></div>""")
  }
}

I use Scalate v.1.8.0

Repeated warns on jdk 11.0.3

Hi, I am repeated see this message:

Cannot introspect on class loader: jdk.internal.loader.ClassLoaders$AppClassLoader@5c29bfd of type jdk.internal.loader.ClassLoaders.AppClassLoader

which comes from

warn("Cannot introspect on class loader: %s of type %s", classLoader, classLoader.getClass.getCanonicalName)
when running our app on JDK 11.0.3. Is there a way to fix/disable that?

Thanks

Test fails in environment with pygments installed

[info] - snippets macro with pygmetize enabled *** FAILED ***
[info]   Expected "...ss="highlight"><pre>[]    <span class="kd"...", but got "...ss="highlight"><pre>[<span></span>]    <span class="kd"..." (AbstractConfluenceTest.scala:42)

[info] - pygmentize macro *** FAILED ***
[info]   Expected "...ighlight"><pre><span[] class="nt">&lt;ul&g...", but got "...ighlight"><pre><span[></span><span] class="nt">&lt;ul&g..." (AbstractConfluenceTest.scala:42)

org.fusesource.scalate.util.ClassPathBuilder can not handle spacing in path

I think there should use URLEncoder.encode(thePath, "UTF-8"); to escape space, below is exception trace.

Caused by: java.net.URISyntaxException: Illegal character in path at index 16: file:/C:/Program Files/Java/jdk1.8.0_45/jre/../lib/tools.jar
        at java.net.URI$Parser.fail(URI.java:2848)
        at java.net.URI$Parser.checkChars(URI.java:3021)
        at java.net.URI$Parser.parseHierarchical(URI.java:3105)
        at java.net.URI$Parser.parse(URI.java:3053)
        at java.net.URI.<init>(URI.java:588)
        at org.fusesource.scalate.util.ClassPathBuilder$$anonfun$getClassPathFrom$1.apply(ClassPathBuilder.scala:142)
        at org.fusesource.scalate.util.ClassPathBuilder$$anonfun$getClassPathFrom$1.apply(ClassPathBuilder.scala:142)
        at scala.collection.immutable.List.map(List.scala:277)

scalate cannot compile template when part of executable jar

Here is project that reproduces the issue
https://github.com/kgignatyev/scalate-test

Traditional app works

creating assembly
mvn clean  install appassembler:assemble
trying it
bash target/appassembler/bin/ctrl

but when the same application is packaged by spring-boot into a single executable jar, ssp compiler does NOT work

Packaging all the jars into executable jar
mvn -f pom-executable-jar.xml clean install

Trying it
java -jar target/scalate-test-1.0-SNAPSHOT.jar 

I see this error:
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: org.fusesource.scalate.TemplateException: object scala in compiler mirror not found.
at org.fusesource.scalate.TemplateEngine.compileAndLoad(TemplateEngine.scala:886)
at org.fusesource.scalate.TemplateEngine.compileAndLoadEntry(TemplateEngine.scala:745)
at org.fusesource.scalate.TemplateEngine.liftedTree1$1(TemplateEngine.scala:446)
at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:440)
at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:495)
at org.fusesource.scalate.TemplateEngine.layout(TemplateEngine.scala:593)
at com.inspurusa.consul.apigateway.integration.NginxController.createNginxConfig(NginxController.scala:33)
at com.inspurusa.consul.apigateway.integration.NginxController.generateConfigFile(NginxController.scala:46)
at com.inspurusa.consul.apigateway.integration.ServicesControl$.delayedEndpoint$com$inspurusa$consul$apigateway$integration$ServicesControl$1(ServicesControl.scala:58)
at com.inspurusa.consul.apigateway.integration.ServicesControl$delayedInit$body.apply(ServicesControl.scala:41)
at scala.Function0.apply$mcV$sp(Function0.scala:34)
at scala.Function0.apply$mcV$sp$(Function0.scala:34)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:12)
at scala.App.$anonfun$main$1$adapted(App.scala:76)
at scala.collection.immutable.List.foreach(List.scala:389)
at scala.App.main(App.scala:76)
at scala.App.main$(App.scala:74)
at com.inspurusa.consul.apigateway.integration.ServicesControl$.main(ServicesControl.scala:41)
at com.inspurusa.consul.apigateway.integration.ServicesControl.main(ServicesControl.scala)
... 8 more
Caused by: scala.reflect.internal.MissingRequirementError: object scala in compiler mirror not found.
at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:17)
at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:18)
at scala.reflect.internal.Mirrors$RootsBase.$anonfun$getModuleOrClass$4(Mirrors.scala:54)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:54)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:66)
at scala.reflect.internal.Mirrors$RootsBase.getPackage(Mirrors.scala:172)
at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackage$lzycompute(Definitions.scala:169)
at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackage(Definitions.scala:169)
at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackageClass$lzycompute(Definitions.scala:170)
at scala.reflect.internal.Definitions$DefinitionsClass.ScalaPackageClass(Definitions.scala:170)
at scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1449)
at scala.tools.nsc.Global$Run.(Global.scala:1154)
at org.fusesource.scalate.support.ScalaCompiler.compile(ScalaCompiler.scala:92)
at org.fusesource.scalate.TemplateEngine.compileAndLoad(TemplateEngine.scala:809)
... 26 more

null "null" with quotes in template

anyone know how to make this work? i have a null object(nullstring) but i dont want it to have quotes for null values.

the template ha squotes=> "${fied}" it becomes "null"

org.fusesource.scalate.util.ClassPathBuilder fails on windows when class path entry conains *

I came across this problem using apache zeppelin project. The cassandra interpreter uses the scalate engine . Some how on windows i always got an IOException.

Here is the stack trace


java.io.IOException: Invalid argument
	at java.io.WinNTFileSystem.canonicalize0(Native Method)
	at java.io.WinNTFileSystem.canonicalize(WinNTFileSystem.java:428)
	at java.io.File.getCanonicalPath(File.java:618)
	at org.fusesource.scalate.util.ClassPathBuilder$$anonfun$getClassPathFrom$3.apply(ClassPathBuilder.scala:147)
	at org.fusesource.scalate.util.ClassPathBuilder$$anonfun$getClassPathFrom$3.apply(ClassPathBuilder.scala:142)
	at scala.collection.TraversableLike$WithFilter$$anonfun$map$2.apply(TraversableLike.scala:728)
	at scala.collection.immutable.List.foreach(List.scala:381)
	at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:727)
	at org.fusesource.scalate.util.ClassPathBuilder$.getClassPathFrom(ClassPathBuilder.scala:142)
	at org.fusesource.scalate.util.ClassPathBuilder.addPathFrom(ClassPathBuilder.scala:68)
	at org.fusesource.scalate.util.ClassPathBuilder.addPathFromContextClassLoader(ClassPathBuilder.scala:73)
	at org.fusesource.scalate.support.ScalaCompiler.generateSettings(ScalaCompiler.scala:121)
	at org.fusesource.scalate.support.ScalaCompiler.<init>(ScalaCompiler.scala:59)
	at org.fusesource.scalate.support.ScalaCompiler$.create(ScalaCompiler.scala:42)
	at org.fusesource.scalate.TemplateEngine.createCompiler(TemplateEngine.scala:231)
	at org.fusesource.scalate.TemplateEngine.compiler$lzycompute(TemplateEngine.scala:221)
	at org.fusesource.scalate.TemplateEngine.compiler(TemplateEngine.scala:221)
	at org.fusesource.scalate.TemplateEngine.compileAndLoad(TemplateEngine.scala:757)
	at org.fusesource.scalate.TemplateEngine.compileAndLoadEntry(TemplateEngine.scala:699)
	at org.fusesource.scalate.TemplateEngine.liftedTree1$1(TemplateEngine.scala:419)
	at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:413)
	at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:471)
	at org.fusesource.scalate.TemplateEngine.layout(TemplateEngine.scala:573)
	at org.apache.zeppelin.cassandra.DisplaySystem$NoResultDisplay$.<init>(DisplaySystem.scala:369)
	at org.apache.zeppelin.cassandra.DisplaySystem$NoResultDisplay$.<clinit>(DisplaySystem.scala)
	at org.apache.zeppelin.cassandra.EnhancedSession.<init>(EnhancedSession.scala:40)
	at org.apache.zeppelin.cassandra.InterpreterLogic.<init>(InterpreterLogic.scala:98)
	at org.apache.zeppelin.cassandra.CassandraInterpreter.open(CassandraInterpreter.java:231)
	at org.apache.zeppelin.interpreter.LazyOpenInterpreter.open(LazyOpenInterpreter.java:70)
	at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:491)
	at org.apache.zeppelin.scheduler.Job.run(Job.java:175)
	at org.apache.zeppelin.scheduler.ParallelScheduler$JobRunner.run(ParallelScheduler.java:162)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

I attached a remoter debugger and stepped through this

The problem is here on line 148

I dumped the list of class path entries cl.getURLs.toList and this was the output

0 = {URL@4550} "file:/D:/zeppelin/bin/"
1 = {URL@4551} "file:/D:/zeppelin/interpreter/cassandra/cassandra-driver-core-3.0.1.jar"
2 = {URL@4552} "file:/D:/zeppelin/interpreter/cassandra/commons-lang3-3.3.2.jar"
3 = {URL@4553} "file:/D:/zeppelin/interpreter/cassandra/guava-16.0.1.jar"
4 = {URL@4554} "file:/D:/zeppelin/interpreter/cassandra/lz4-1.3.0.jar"
5 = {URL@4555} "file:/D:/zeppelin/interpreter/cassandra/metrics-core-3.1.2.jar"
6 = {URL@4556} "file:/D:/zeppelin/interpreter/cassandra/netty-buffer-4.0.33.Final.jar"
7 = {URL@4557} "file:/D:/zeppelin/interpreter/cassandra/netty-codec-4.0.33.Final.jar"
8 = {URL@4558} "file:/D:/zeppelin/interpreter/cassandra/netty-common-4.0.33.Final.jar"
9 = {URL@4559} "file:/D:/zeppelin/interpreter/cassandra/netty-handler-4.0.33.Final.jar"
10 = {URL@4560} "file:/D:/zeppelin/interpreter/cassandra/netty-transport-4.0.33.Final.jar"
11 = {URL@4561} "file:/D:/zeppelin/interpreter/cassandra/scala-compiler-2.11.7.jar"
12 = {URL@4562} "file:/D:/zeppelin/interpreter/cassandra/scala-library-2.11.7.jar"
13 = {URL@4563} "file:/D:/zeppelin/interpreter/cassandra/scala-parser-combinators_2.11-1.0.4.jar"
14 = {URL@4564} "file:/D:/zeppelin/interpreter/cassandra/scala-reflect-2.11.7.jar"
15 = {URL@4565} "file:/D:/zeppelin/interpreter/cassandra/scala-xml_2.11-1.0.4.jar"
16 = {URL@4566} "file:/D:/zeppelin/interpreter/cassandra/scalate-core_2.11-1.7.1.jar"
17 = {URL@4567} "file:/D:/zeppelin/interpreter/cassandra/scalate-util_2.11-1.7.1.jar"
18 = {URL@4568} "file:/D:/zeppelin/interpreter/cassandra/slf4j-api-1.7.10.jar"
19 = {URL@4569} "file:/D:/zeppelin/interpreter/cassandra/snappy-java-1.0.5.4.jar"
20 = {URL@4570} "file:/D:/zeppelin/interpreter/cassandra/zeppelin-cassandra_2.11-0.7.3.jar"
21 = {URL@4571} "file:/D:/zeppelin/lib/interpreter/aether-api-1.12.jar"
22 = {URL@4572} "file:/D:/zeppelin/lib/interpreter/aether-connector-file-1.12.jar"
23 = {URL@4573} "file:/D:/zeppelin/lib/interpreter/aether-connector-wagon-1.12.jar"
24 = {URL@4574} "file:/D:/zeppelin/lib/interpreter/aether-impl-1.12.jar"
25 = {URL@4575} "file:/D:/zeppelin/lib/interpreter/aether-spi-1.12.jar"
26 = {URL@4576} "file:/D:/zeppelin/lib/interpreter/aether-util-1.12.jar"
27 = {URL@4577} "file:/D:/zeppelin/lib/interpreter/commons-codec-1.5.jar"
28 = {URL@4578} "file:/D:/zeppelin/lib/interpreter/commons-exec-1.3.jar"
29 = {URL@4579} "file:/D:/zeppelin/lib/interpreter/commons-httpclient-3.1.jar"
30 = {URL@4580} "file:/D:/zeppelin/lib/interpreter/commons-io-2.4.jar"
31 = {URL@4581} "file:/D:/zeppelin/lib/interpreter/commons-lang-2.5.jar"
32 = {URL@4582} "file:/D:/zeppelin/lib/interpreter/commons-logging-1.1.1.jar"
33 = {URL@4583} "file:/D:/zeppelin/lib/interpreter/commons-pool2-2.3.jar"
34 = {URL@4584} "file:/D:/zeppelin/lib/interpreter/gson-2.2.jar"
35 = {URL@4585} "file:/D:/zeppelin/lib/interpreter/httpclient-4.5.1.jar"
36 = {URL@4586} "file:/D:/zeppelin/lib/interpreter/httpcore-4.4.1.jar"
37 = {URL@4587} "file:/D:/zeppelin/lib/interpreter/jsoup-1.6.1.jar"
38 = {URL@4588} "file:/D:/zeppelin/lib/interpreter/libthrift-0.9.2.jar"
39 = {URL@4589} "file:/D:/zeppelin/lib/interpreter/log4j-1.2.17.jar"
40 = {URL@4590} "file:/D:/zeppelin/lib/interpreter/maven-aether-provider-3.0.3.jar"
41 = {URL@4591} "file:/D:/zeppelin/lib/interpreter/maven-artifact-3.0.jar"
42 = {URL@4592} "file:/D:/zeppelin/lib/interpreter/maven-model-3.0.3.jar"
43 = {URL@4593} "file:/D:/zeppelin/lib/interpreter/maven-model-builder-3.0.3.jar"
44 = {URL@4594} "file:/D:/zeppelin/lib/interpreter/maven-plugin-api-3.0.jar"
45 = {URL@4595} "file:/D:/zeppelin/lib/interpreter/maven-repository-metadata-3.0.3.jar"
46 = {URL@4596} "file:/D:/zeppelin/lib/interpreter/plexus-classworlds-2.4.jar"
47 = {URL@4597} "file:/D:/zeppelin/lib/interpreter/plexus-component-annotations-1.5.5.jar"
48 = {URL@4598} "file:/D:/zeppelin/lib/interpreter/plexus-interpolation-1.14.jar"
49 = {URL@4599} "file:/D:/zeppelin/lib/interpreter/plexus-utils-2.0.7.jar"
50 = {URL@4600} "file:/D:/zeppelin/lib/interpreter/sisu-guice-3.0.2-no_aop.jar"
51 = {URL@4601} "file:/D:/zeppelin/lib/interpreter/sisu-inject-bean-2.2.2.jar"
52 = {URL@4602} "file:/D:/zeppelin/lib/interpreter/sisu-inject-plexus-2.2.2.jar"
53 = {URL@4603} "file:/D:/zeppelin/lib/interpreter/slf4j-api-1.7.10.jar"
54 = {URL@4604} "file:/D:/zeppelin/lib/interpreter/slf4j-log4j12-1.7.10.jar"
55 = {URL@4605} "file:/D:/zeppelin/lib/interpreter/wagon-http-1.0.jar"
56 = {URL@4606} "file:/D:/zeppelin/lib/interpreter/wagon-http-lightweight-1.0.jar"
57 = {URL@4607} "file:/D:/zeppelin/lib/interpreter/wagon-http-shared-1.0.jar"
58 = {URL@4608} "file:/D:/zeppelin/lib/interpreter/wagon-provider-api-1.0.jar"
59 = {URL@4609} "file:/D:/zeppelin/lib/interpreter/zeppelin-interpreter-0.7.3.jar"
60 = {URL@4610} "file:/D:/zeppelin/lib/interpreter/aether-api-1.12.jar"
61 = {URL@4611} "file:/D:/zeppelin/lib/interpreter/aether-connector-file-1.12.jar"
62 = {URL@4612} "file:/D:/zeppelin/lib/interpreter/aether-connector-wagon-1.12.jar"
63 = {URL@4613} "file:/D:/zeppelin/lib/interpreter/aether-impl-1.12.jar"
64 = {URL@4614} "file:/D:/zeppelin/lib/interpreter/aether-spi-1.12.jar"
65 = {URL@4615} "file:/D:/zeppelin/lib/interpreter/aether-util-1.12.jar"
66 = {URL@4616} "file:/D:/zeppelin/lib/interpreter/commons-codec-1.5.jar"
67 = {URL@4617} "file:/D:/zeppelin/lib/interpreter/commons-exec-1.3.jar"
68 = {URL@4618} "file:/D:/zeppelin/lib/interpreter/commons-httpclient-3.1.jar"
69 = {URL@4619} "file:/D:/zeppelin/lib/interpreter/commons-io-2.4.jar"
70 = {URL@4620} "file:/D:/zeppelin/lib/interpreter/commons-lang-2.5.jar"
71 = {URL@4621} "file:/D:/zeppelin/lib/interpreter/commons-logging-1.1.1.jar"
72 = {URL@4622} "file:/D:/zeppelin/lib/interpreter/commons-pool2-2.3.jar"
73 = {URL@4623} "file:/D:/zeppelin/lib/interpreter/gson-2.2.jar"
74 = {URL@4624} "file:/D:/zeppelin/lib/interpreter/httpclient-4.5.1.jar"
75 = {URL@4625} "file:/D:/zeppelin/lib/interpreter/httpcore-4.4.1.jar"
76 = {URL@4626} "file:/D:/zeppelin/lib/interpreter/jsoup-1.6.1.jar"
77 = {URL@4627} "file:/D:/zeppelin/lib/interpreter/libthrift-0.9.2.jar"
78 = {URL@4628} "file:/D:/zeppelin/lib/interpreter/log4j-1.2.17.jar"
79 = {URL@4629} "file:/D:/zeppelin/lib/interpreter/maven-aether-provider-3.0.3.jar"
80 = {URL@4630} "file:/D:/zeppelin/lib/interpreter/maven-artifact-3.0.jar"
81 = {URL@4631} "file:/D:/zeppelin/lib/interpreter/maven-model-3.0.3.jar"
82 = {URL@4632} "file:/D:/zeppelin/lib/interpreter/maven-model-builder-3.0.3.jar"
83 = {URL@4633} "file:/D:/zeppelin/lib/interpreter/maven-plugin-api-3.0.jar"
84 = {URL@4634} "file:/D:/zeppelin/lib/interpreter/maven-repository-metadata-3.0.3.jar"
85 = {URL@4635} "file:/D:/zeppelin/lib/interpreter/plexus-classworlds-2.4.jar"
86 = {URL@4636} "file:/D:/zeppelin/lib/interpreter/plexus-component-annotations-1.5.5.jar"
87 = {URL@4637} "file:/D:/zeppelin/lib/interpreter/plexus-interpolation-1.14.jar"
88 = {URL@4638} "file:/D:/zeppelin/lib/interpreter/plexus-utils-2.0.7.jar"
89 = {URL@4639} "file:/D:/zeppelin/lib/interpreter/sisu-guice-3.0.2-no_aop.jar"
90 = {URL@4640} "file:/D:/zeppelin/lib/interpreter/sisu-inject-bean-2.2.2.jar"
91 = {URL@4641} "file:/D:/zeppelin/lib/interpreter/sisu-inject-plexus-2.2.2.jar"
92 = {URL@4642} "file:/D:/zeppelin/lib/interpreter/slf4j-api-1.7.10.jar"
93 = {URL@4643} "file:/D:/zeppelin/lib/interpreter/slf4j-log4j12-1.7.10.jar"
94 = {URL@4644} "file:/D:/zeppelin/lib/interpreter/wagon-http-1.0.jar"
95 = {URL@4645} "file:/D:/zeppelin/lib/interpreter/wagon-http-lightweight-1.0.jar"
96 = {URL@4646} "file:/D:/zeppelin/lib/interpreter/wagon-http-shared-1.0.jar"
97 = {URL@4647} "file:/D:/zeppelin/lib/interpreter/wagon-provider-api-1.0.jar"
98 = {URL@4648} "file:/D:/zeppelin/lib/interpreter/zeppelin-interpreter-0.7.3.jar"
99 = {URL@4649} "file:/D:/zeppelin/lib/apacheds-i18n-2.0.0-M15.jar"
100 = {URL@4751} "file:/D:/zeppelin/lib/apacheds-kerberos-codec-2.0.0-M15.jar"
101 = {URL@4752} "file:/D:/zeppelin/lib/api-asn1-api-1.0.0-M20.jar"
102 = {URL@4753} "file:/D:/zeppelin/lib/api-util-1.0.0-M20.jar"
103 = {URL@4754} "file:/D:/zeppelin/lib/asm-3.1.jar"
104 = {URL@4755} "file:/D:/zeppelin/lib/aws-java-sdk-core-1.10.62.jar"
105 = {URL@4756} "file:/D:/zeppelin/lib/aws-java-sdk-kms-1.10.62.jar"
106 = {URL@4757} "file:/D:/zeppelin/lib/aws-java-sdk-s3-1.10.62.jar"
107 = {URL@4758} "file:/D:/zeppelin/lib/azure-storage-4.0.0.jar"
108 = {URL@4759} "file:/D:/zeppelin/lib/c3p0-0.9.1.1.jar"
109 = {URL@4760} "file:/D:/zeppelin/lib/commons-beanutils-1.8.3.jar"
110 = {URL@4761} "file:/D:/zeppelin/lib/commons-cli-1.2.jar"
111 = {URL@4762} "file:/D:/zeppelin/lib/commons-codec-1.5.jar"
112 = {URL@4763} "file:/D:/zeppelin/lib/commons-collections-3.2.1.jar"
113 = {URL@4764} "file:/D:/zeppelin/lib/commons-compress-1.5.jar"
114 = {URL@4765} "file:/D:/zeppelin/lib/commons-configuration-1.9.jar"
115 = {URL@4766} "file:/D:/zeppelin/lib/commons-el-1.0.jar"
116 = {URL@4767} "file:/D:/zeppelin/lib/commons-io-2.4.jar"
117 = {URL@4768} "file:/D:/zeppelin/lib/commons-lang-2.5.jar"
118 = {URL@4769} "file:/D:/zeppelin/lib/commons-lang3-3.4.jar"
119 = {URL@4770} "file:/D:/zeppelin/lib/commons-logging-1.1.1.jar"
120 = {URL@4771} "file:/D:/zeppelin/lib/commons-math3-3.1.1.jar"
121 = {URL@4772} "file:/D:/zeppelin/lib/commons-net-3.1.jar"
122 = {URL@4773} "file:/D:/zeppelin/lib/commons-vfs2-2.0.jar"
123 = {URL@4774} "file:/D:/zeppelin/lib/curator-client-2.6.0.jar"
124 = {URL@4775} "file:/D:/zeppelin/lib/curator-framework-2.6.0.jar"
125 = {URL@4776} "file:/D:/zeppelin/lib/curator-recipes-2.6.0.jar"
126 = {URL@4777} "file:/D:/zeppelin/lib/cxf-api-2.7.8.jar"
127 = {URL@4778} "file:/D:/zeppelin/lib/cxf-rt-bindings-xml-2.7.8.jar"
128 = {URL@4779} "file:/D:/zeppelin/lib/cxf-rt-core-2.7.8.jar"
129 = {URL@4780} "file:/D:/zeppelin/lib/cxf-rt-frontend-jaxrs-2.7.8.jar"
130 = {URL@4781} "file:/D:/zeppelin/lib/cxf-rt-transports-http-2.7.8.jar"
131 = {URL@4782} "file:/D:/zeppelin/lib/cxf-rt-transports-http-jetty-2.7.8.jar"
132 = {URL@4783} "file:/D:/zeppelin/lib/dom4j-1.6.1.jar"
133 = {URL@4784} "file:/D:/zeppelin/lib/frontend-maven-plugin-1.3.jar"
134 = {URL@4785} "file:/D:/zeppelin/lib/frontend-plugin-core-1.3.jar"
135 = {URL@4786} "file:/D:/zeppelin/lib/geronimo-javamail_1.4_spec-1.7.1.jar"
136 = {URL@4787} "file:/D:/zeppelin/lib/geronimo-servlet_3.0_spec-1.0.jar"
137 = {URL@4788} "file:/D:/zeppelin/lib/gson-2.2.jar"
138 = {URL@4789} "file:/D:/zeppelin/lib/guava-15.0.jar"
139 = {URL@4790} "file:/D:/zeppelin/lib/hadoop-annotations-2.6.0.jar"
140 = {URL@4791} "file:/D:/zeppelin/lib/hadoop-auth-2.6.0.jar"
141 = {URL@4792} "file:/D:/zeppelin/lib/hadoop-common-2.6.0.jar"
142 = {URL@4793} "file:/D:/zeppelin/lib/htrace-core-3.0.4.jar"
143 = {URL@4794} "file:/D:/zeppelin/lib/httpasyncclient-4.0.2.jar"
144 = {URL@4795} "file:/D:/zeppelin/lib/httpclient-4.5.1.jar"
145 = {URL@4796} "file:/D:/zeppelin/lib/httpcore-4.4.1.jar"
146 = {URL@4797} "file:/D:/zeppelin/lib/httpcore-nio-4.3.2.jar"
147 = {URL@4798} "file:/D:/zeppelin/lib/jackrabbit-jcr-commons-1.5.2.jar"
148 = {URL@4799} "file:/D:/zeppelin/lib/jackrabbit-webdav-1.5.2.jar"
149 = {URL@4800} "file:/D:/zeppelin/lib/jackson-annotations-2.5.0.jar"
150 = {URL@4801} "file:/D:/zeppelin/lib/jackson-core-2.5.3.jar"
151 = {URL@4802} "file:/D:/zeppelin/lib/jackson-core-asl-1.9.13.jar"
152 = {URL@4803} "file:/D:/zeppelin/lib/jackson-databind-2.5.3.jar"
153 = {URL@4804} "file:/D:/zeppelin/lib/jackson-mapper-asl-1.9.13.jar"
154 = {URL@4805} "file:/D:/zeppelin/lib/jasper-compiler-5.5.23.jar"
155 = {URL@4806} "file:/D:/zeppelin/lib/jasper-runtime-5.5.23.jar"
156 = {URL@4807} "file:/D:/zeppelin/lib/java-xmlbuilder-0.4.jar"
157 = {URL@4808} "file:/D:/zeppelin/lib/JavaEWAH-0.7.9.jar"
158 = {URL@4809} "file:/D:/zeppelin/lib/javassist-3.12.1.GA.jar"
159 = {URL@4810} "file:/D:/zeppelin/lib/javax.servlet-api-3.1.0.jar"
160 = {URL@4811} "file:/D:/zeppelin/lib/javax.ws.rs-api-2.0-m10.jar"
161 = {URL@4812} "file:/D:/zeppelin/lib/jaxb-impl-2.2.6.jar"
162 = {URL@4813} "file:/D:/zeppelin/lib/jersey-core-1.13.jar"
163 = {URL@4814} "file:/D:/zeppelin/lib/jersey-server-1.13.jar"
164 = {URL@4815} "file:/D:/zeppelin/lib/jersey-servlet-1.13.jar"
165 = {URL@4816} "file:/D:/zeppelin/lib/jets3t-0.9.0.jar"
166 = {URL@4817} "file:/D:/zeppelin/lib/jetty-6.1.26.jar"
167 = {URL@4818} "file:/D:/zeppelin/lib/jetty-client-9.2.15.v20160210.jar"
168 = {URL@4819} "file:/D:/zeppelin/lib/jetty-http-9.2.15.v20160210.jar"
169 = {URL@4820} "file:/D:/zeppelin/lib/jetty-io-9.2.15.v20160210.jar"
170 = {URL@4821} "file:/D:/zeppelin/lib/jetty-security-9.2.15.v20160210.jar"
171 = {URL@4822} "file:/D:/zeppelin/lib/jetty-server-9.2.15.v20160210.jar"
172 = {URL@4823} "file:/D:/zeppelin/lib/jetty-servlet-9.2.15.v20160210.jar"
173 = {URL@4824} "file:/D:/zeppelin/lib/jetty-util-6.1.26.jar"
174 = {URL@4825} "file:/D:/zeppelin/lib/jetty-util-9.2.15.v20160210.jar"
175 = {URL@4826} "file:/D:/zeppelin/lib/jetty-webapp-9.2.15.v20160210.jar"
176 = {URL@4827} "file:/D:/zeppelin/lib/jetty-xml-9.2.15.v20160210.jar"
177 = {URL@4828} "file:/D:/zeppelin/lib/jna-4.1.0.jar"
178 = {URL@4829} "file:/D:/zeppelin/lib/joda-time-2.8.1.jar"
179 = {URL@4830} "file:/D:/zeppelin/lib/jsch-0.1.53.jar"
180 = {URL@4831} "file:/D:/zeppelin/lib/jsp-api-2.1.jar"
181 = {URL@4832} "file:/D:/zeppelin/lib/jsr305-1.3.9.jar"
182 = {URL@4833} "file:/D:/zeppelin/lib/libpam4j-1.8.jar"
183 = {URL@4834} "file:/D:/zeppelin/lib/log4j-1.2.17.jar"
184 = {URL@4835} "file:/D:/zeppelin/lib/lucene-analyzers-common-5.3.1.jar"
185 = {URL@4836} "file:/D:/zeppelin/lib/lucene-core-5.3.1.jar"
186 = {URL@4837} "file:/D:/zeppelin/lib/lucene-highlighter-5.3.1.jar"
187 = {URL@4838} "file:/D:/zeppelin/lib/lucene-join-5.3.1.jar"
188 = {URL@4839} "file:/D:/zeppelin/lib/lucene-memory-5.3.1.jar"
189 = {URL@4840} "file:/D:/zeppelin/lib/lucene-queries-5.3.1.jar"
190 = {URL@4841} "file:/D:/zeppelin/lib/lucene-queryparser-5.3.1.jar"
191 = {URL@4842} "file:/D:/zeppelin/lib/lucene-sandbox-5.3.1.jar"
192 = {URL@4843} "file:/D:/zeppelin/lib/maven-plugin-annotations-3.2.jar"
193 = {URL@4844} "file:/D:/zeppelin/lib/maven-scm-api-1.4.jar"
194 = {URL@4845} "file:/D:/zeppelin/lib/maven-scm-provider-svn-commons-1.4.jar"
195 = {URL@4846} "file:/D:/zeppelin/lib/maven-scm-provider-svnexe-1.4.jar"
196 = {URL@4847} "file:/D:/zeppelin/lib/org.eclipse.jdt.annotation-1.1.0.jar"
197 = {URL@4848} "file:/D:/zeppelin/lib/org.eclipse.jgit-4.1.1.201511131810-r.jar"
198 = {URL@4849} "file:/D:/zeppelin/lib/plexus-build-api-0.0.7.jar"
199 = {URL@4850} "file:/D:/zeppelin/lib/protobuf-java-2.5.0.jar"
200 = {URL@4953} "file:/D:/zeppelin/lib/quartz-2.2.1.jar"
201 = {URL@4954} "file:/D:/zeppelin/lib/reflections-0.9.8.jar"
202 = {URL@4955} "file:/D:/zeppelin/lib/regexp-1.3.jar"
203 = {URL@4956} "file:/D:/zeppelin/lib/scala-compiler-2.11.7.jar"
204 = {URL@4957} "file:/D:/zeppelin/lib/scala-library-2.11.7.jar"
205 = {URL@4958} "file:/D:/zeppelin/lib/scala-parser-combinators_2.11-1.0.4.jar"
206 = {URL@4959} "file:/D:/zeppelin/lib/scala-reflect-2.11.7.jar"
207 = {URL@4960} "file:/D:/zeppelin/lib/scala-xml_2.11-1.0.2.jar"
208 = {URL@4961} "file:/D:/zeppelin/lib/shiro-core-1.2.3.jar"
209 = {URL@4962} "file:/D:/zeppelin/lib/shiro-web-1.2.3.jar"
210 = {URL@4963} "file:/D:/zeppelin/lib/slf4j-api-1.7.10.jar"
211 = {URL@4964} "file:/D:/zeppelin/lib/slf4j-log4j12-1.7.10.jar"
212 = {URL@4965} "file:/D:/zeppelin/lib/stax2-api-3.1.1.jar"
213 = {URL@4966} "file:/D:/zeppelin/lib/websocket-api-9.2.15.v20160210.jar"
214 = {URL@4967} "file:/D:/zeppelin/lib/websocket-client-9.2.15.v20160210.jar"
215 = {URL@4968} "file:/D:/zeppelin/lib/websocket-common-9.2.15.v20160210.jar"
216 = {URL@4969} "file:/D:/zeppelin/lib/websocket-server-9.2.15.v20160210.jar"
217 = {URL@4970} "file:/D:/zeppelin/lib/websocket-servlet-9.2.15.v20160210.jar"
218 = {URL@4971} "file:/D:/zeppelin/lib/woodstox-core-asl-4.2.0.jar"
219 = {URL@4972} "file:/D:/zeppelin/lib/wsdl4j-1.6.3.jar"
220 = {URL@4973} "file:/D:/zeppelin/lib/xml-apis-1.4.01.jar"
221 = {URL@4974} "file:/D:/zeppelin/lib/xmlenc-0.52.jar"
222 = {URL@4975} "file:/D:/zeppelin/lib/xmlschema-core-2.0.3.jar"
223 = {URL@4976} "file:/D:/zeppelin/lib/xz-1.2.jar"
224 = {URL@4977} "file:/D:/zeppelin/lib/zeppelin-server-0.7.3.jar"
225 = {URL@4978} "file:/D:/zeppelin/lib/zeppelin-zengine-0.7.3.jar"
226 = {URL@4979} "file:/D:/zeppelin/*"
227 = {URL@4980} "file:/D:/zeppelin/conf/"
228 = {URL@4981} "file:/D:/zeppelin/conf/"

The problem is this line

226 = {URL@4979} "file:/D:/zeppelin/*"

It throws an java.io.IOException: Invalid argument on Windows. On linux it just works fine. Seems thats a windows related problem. How can this be fixed?

As far as i know wildcards are allowed in class path entries. Aren't they ?

Thx

Parse template from a string

How can I parse a string containing template? Currently only templates in files are supported.

I tried to do the following, but the result is embarrassing:

class StringTemplateParser {
  private val engine = new TemplateEngine

  def parse(template: String, attributes: Map[String, Any]): String = {
    val source = TemplateSource.fromText("foo.ssp", template)
    engine.layout(source, attributes)
  }
}

Here foo.ssp is a dummy string - anything having the .ssp extension.

This method parse works only on the first invocation. The second invocation in the same test fails with the exception:

  org.fusesource.scalate.util.ResourceNotFoundException: Could not load resource: [foo.ssp]
  at org.fusesource.scalate.util.ResourceLoader.createNotFoundException(ResourceLoader.scala:58)
  at org.fusesource.scalate.util.ResourceLoader.createNotFoundException$(ResourceLoader.scala:58)
  at org.fusesource.scalate.util.FileResourceLoader.createNotFoundException(ResourceLoader.scala:61)
  at org.fusesource.scalate.util.ResourceLoader.resourceOrFail(ResourceLoader.scala:55)
  at org.fusesource.scalate.util.ResourceLoader.resourceOrFail$(ResourceLoader.scala:50)
  at org.fusesource.scalate.util.FileResourceLoader.resourceOrFail(ResourceLoader.scala:61)
  at org.fusesource.scalate.util.ResourceLoader.lastModified(ResourceLoader.scala:41)
  at org.fusesource.scalate.util.ResourceLoader.lastModified$(ResourceLoader.scala:41)
  at org.fusesource.scalate.util.FileResourceLoader.lastModified(ResourceLoader.scala:61)
  at org.fusesource.scalate.TemplateEngine$CacheEntry.$anonfun$isStale$1(TemplateEngine.scala:79)

Cannot compile any template

I am getting errors:
Exception in thread "main" org.fusesource.scalate.TemplateException: scala.tools.nsc.symtab.classfile.ClassfileParser$unpickler$.unpickle([BILscala/reflect/internal/Symbols$Symbol;Lscala/reflect/internal/Symbols$Symbol;Ljava/lang/String;)V

And code:

val engine = new TemplateEngine
engine.layout("temp.jade")

case statement fails to parse

Following code:

val p = new org.fusesource.scalate.ssp.SspParser
p.caseExpression(new scala.util.parsing.input.CharSequenceReader("#case ((Android(), Japan()))"))

Fails with:

scala> res0: p.ParseResult[org.fusesource.scalate.ssp.CaseFragment] =
[1.8] failure: `)' expected but `(' found

#case ((Android(), Japan()))
       ^

String Temple

Can you support String Template. Scalasti use to support it but now unmaintained.

How to deal with very large templates?

Hello,

I'm using the mustache templates and I'm getting a Maximum String literal length exceeded message.

java.lang.IllegalArgumentException: Maximum String literal length exceeded
	at scala.tools.asm.ByteVector.putUTF8(ByteVector.java:213)
	at scala.tools.asm.ClassWriter.newUTF8(ClassWriter.java:1092)
	at scala.tools.asm.ClassWriter.newString(ClassWriter.java:1560)
	at scala.tools.asm.ClassWriter.newConstItem(ClassWriter.java:1042)
	at scala.tools.asm.MethodWriter.visitLdcInsn(MethodWriter.java:1134)
	at scala.tools.asm.tree.LdcInsnNode.accept(LdcInsnNode.java:71)
	at scala.tools.asm.tree.InsnList.accept(InsnList.java:162)
	at scala.tools.asm.tree.MethodNode.accept(MethodNode.java:817)
	at scala.tools.asm.tree.MethodNode.accept(MethodNode.java:727)
	at scala.tools.asm.tree.ClassNode.accept(ClassNode.java:412)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase$Worker2.getByteArray$1(GenBCode.scala:291)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase$Worker2.addToQ3(GenBCode.scala:298)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase$Worker2.run(GenBCode.scala:274)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase.buildAndSendToDisk(GenBCode.scala:384)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase.run(GenBCode.scala:350)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1431)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1416)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1412)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1515)
	at org.fusesource.scalate.support.ScalaCompiler.compile(ScalaCompiler.scala:92)
	at org.fusesource.scalate.TemplateEngine.compileAndLoad(TemplateEngine.scala:809)
	at org.fusesource.scalate.TemplateEngine.compileAndLoadEntry(TemplateEngine.scala:745)
	at org.fusesource.scalate.TemplateEngine.liftedTree1$1(TemplateEngine.scala:446)
	at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:440)
	at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:495)
	at org.fusesource.scalate.TemplateEngine.layout(TemplateEngine.scala:593)

Is is possible to use a large template with another method or is it possible to add more documentation about how to deal with a large template file? My use case is generating emails and I'm embedding a css into a style section.

Thanks!

Replace the JSON parser

[warn] /xxxx/xxxxx/scalate/scalate-core/src/test/scala/org/fusesource/scalate/mustache/MustacheJSONTest.scala:45:7: object JSON in package json is deprecated (since 1.0.6): Use The Scala Library Index to find alternatives: https://index.scala-lang.org/
[warn]       JSON.parseFull(jsonText) match {
[warn]       ^

However, since there is no JSON library corresponding to SCALA 2.13.0-M4 yet, replace it when the corresponding library is released.

Binary compatibility problem with 2.13.1?

Hi, thanks for your work on this project!

When trying to compile a template under Scala 2.13.1 and scalate-core 1.9.4, I hit this error:

[info]   org.fusesource.scalate.TemplateException: scala.tools.nsc.Settings.deprecation()Lscala/tools/nsc/settings/AbsSettings$AbsSetting;
[info]   at org.fusesource.scalate.TemplateEngine.compileAndLoad(TemplateEngine.scala:865)
[info]   at org.fusesource.scalate.TemplateEngine.compileAndLoadEntry(TemplateEngine.scala:726)
[info]   at org.fusesource.scalate.TemplateEngine.liftedTree1$1(TemplateEngine.scala:437)
[info]   at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:431)
[info]   at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:486)
[info]   at org.fusesource.scalate.TemplateEngine.layout(TemplateEngine.scala:583)
<omitted>
[info]   ...
[info]   Cause: java.lang.NoSuchMethodError: scala.tools.nsc.Settings.deprecation()Lscala/tools/nsc/settings/AbsSettings$AbsSetting;
[info]   at org.fusesource.scalate.support.ScalaCompiler.generateSettings(ScalaCompiler.scala:147)
[info]   at org.fusesource.scalate.support.ScalaCompiler.<init>(ScalaCompiler.scala:50)
[info]   at org.fusesource.scalate.support.ScalaCompiler$.create(ScalaCompiler.scala:37)
[info]   at org.fusesource.scalate.TemplateEngine.createCompiler(TemplateEngine.scala:233)
[info]   at org.fusesource.scalate.TemplateEngine.compiler$lzycompute(TemplateEngine.scala:223)
[info]   at org.fusesource.scalate.TemplateEngine.compiler(TemplateEngine.scala:223)
[info]   at org.fusesource.scalate.TemplateEngine.compileAndLoad(TemplateEngine.scala:788)
[info]   at org.fusesource.scalate.TemplateEngine.compileAndLoadEntry(TemplateEngine.scala:726)
[info]   at org.fusesource.scalate.TemplateEngine.liftedTree1$1(TemplateEngine.scala:437)
[info]   at org.fusesource.scalate.TemplateEngine.load(TemplateEngine.scala:431)

Note that the same code and template works fine on 2.13.0.

I have in place the normal workaround for these issues:

    dependencyOverrides := Seq( // necessary to avoid conflicts which mess up scalate
      "org.scala-lang" % "scala-library" % scalaVersion.value,
      "org.scala-lang" % "scala-reflect" % scalaVersion.value,
      "org.scala-lang" % "scala-compiler" % scalaVersion.value
    )

Any idea what could be wrong?

Clarify what "JSP crap" was left out!

Could you please clarify what "JSP crap" was left out from Scalate?

Since you make this as you "motto" everywhere, it would be only fair to list on the first page what do you consider as being "JSP crap".

Thanks.

Better documentation and user guide

Hi, I was trying to build a simple use case and at first glance Scalate seemed to be the great engine for the job. But when I tried to understand how to use it in my scala code I found it not so easy to use essentially because of the missing documentation.
I had to rely on test use cases which help but not as much as a proper documentation should.

My simple scenario was taking an input file in mustache, passing some tags and outputting a new file.

Scalate appears to be converting element names to lowercase

I'm having this happen with some case-sensitive element names generated in Scala as an Elem, and then inserted in to a Jade template. All element names are sent to the client as lowercase, which is breaking an XML parser.

I believe that Scalate is doing this as it only effects the element names. This behaviour it not XML compliant, and makes a mess of DOM walking.

Allow scala blocks in filters

Allowing something like - for(i <- 42 to 46) in filters is extremely helpful when having to create arbitrary blocks of javascript or css based on collections. Currently this is not supported and requires you do hacks such as:

- for(i <- 42 to 46)
    :!javascript
        callSomethingUsing(#{i})

Or having to mix :! filters and non : by saving the collection being iterated to a global javascript constant first. Neither is very desirable.

scala 2.12 in play-scalate?

It looks like play-scalate already has the necessary commits to support scala 2.12, but no release has been made that cross-compiles with that version.

Could you create a 0.4.0 release of play-scala which adds support for 2.12?

[Mustache] Incorrect indentation after indented section

Given the template:

spec:
  {{#envvars}}
  env:
    {{#envvars_list}}
      {{envvar_name}}: {{envvar_value}}
    {{/envvars_list}}
  {{/envvars}}
  resources:
    requests:
      cpu: 1

and environment:

Map(
  "envvars" -> Map(
    "envvars_list" -> List(Map("envvar_name" -> "FOO", "envvar_value" -> 1024))
  )
)

I expect (note how the indentation of resources is preserved from the template):

spec:
  env:
    FOO: 1,024
  resources:
    requests:
      cpu: 1

However it seems Scalate gives (note how resources is indented an extra two spaces):

spec:
  env:
    FOO: 1,024
    resources:
    requests:
      cpu: 1

I've created a repo that you should be able to just pull and sbt run here: https://github.com/adelbertc/scalate-test

java.lang.ClassCastException: org.fusesource.scalate.filter.ScalaMarkdownFilter$ cannot be cast to org.fusesource.scalate.TemplateEngineAddOn

I am using the following code to initialize a TemplateEngine:

val buffer = new StringWriter()
val out = new PrintWriter(buffer)
val t = new TemplateEngine

But I am getting this exception:

java.lang.ClassCastException: org.fusesource.scalate.filter.ScalaMarkdownFilter$ cannot be cast to org.fusesource.scalate.TemplateEngineAddOn
    at org.fusesource.scalate.TemplateEngine$$anonfun$8.apply(TemplateEngine.scala:261)
    at scala.collection.immutable.List.foreach(List.scala:381)
    at org.fusesource.scalate.TemplateEngine.<init>(TemplateEngine.scala:261)

Is this a known issue?

Thank you

Misspells

$ misspell .
changelog.md:36:50: "compatability" is a misspelling of "compatibility"
changelog.md:59:13: "excpetion" is a misspelling of "exception"
scalate-core/src/main/scala/org/fusesource/scalate/TemplateSource.scala:46:75: "overriden" is a misspelling of "overridden"
scalate-core/src/main/scala/org/fusesource/scalate/scaml/ScamlParser.scala:101:19: "emtpy" is a misspelling of "empty"
scalate-core/src/main/scala/org/fusesource/scalate/scuery/Selector.scala:60:42: "childen" is a misspelling of "children"
scalate-core/src/main/scala_2.11/org/fusesource/scalate/osgi/BundleClassPathBuilder.scala:66:84: "depedencies" is a misspelling of "dependencies"
scalate-core/src/main/scala_2.12/org/fusesource/scalate/osgi/BundleClassPathBuilder.scala:66:84: "depedencies" is a misspelling of "dependencies"
scalate-core/src/test/scala/org/fusesource/scalate/jade/JadeTemplateTest.scala:972:21: "occured" is a misspelling of "occurred"
scalate-core/src/test/scala/org/fusesource/scalate/scaml/ScamlBugTest.scala:135:17: "Internation" is a misspelling of "International"
scalate-core/src/test/scala/org/fusesource/scalate/scaml/ScamlBugTest.scala:162:17: "Internation" is a misspelling of "International"
scalate-core/src/test/scala/org/fusesource/scalate/scaml/ScamlTemplateTest.scala:969:22: "occured" is a misspelling of "occurred"
scalate-core/target/JadeTest/src/org/fusesource/scalate/jade/testtry_/_catch_constructs.jade.scala:30:54: "occured" is a misspelling of "occurred"
scalate-core/target/ScamlTest/src/org/fusesource/scalate/scaml/testSCALATE_71__Internation_characters.scaml.scala:8:34: "Internation" is a misspelling of "International"
scalate-core/target/ScamlTest/src/org/fusesource/scalate/scaml/testSCALATE_71__Internation_characters.scaml.scala:46:33: "Internation" is a misspelling of "International"
scalate-core/target/ScamlTest/src/org/fusesource/scalate/scaml/testSCALATE_71__Internation_characters.scaml.scala:47:102: "Internation" is a misspelling of "International"
scalate-core/target/ScamlTest/src/org/fusesource/scalate/scaml/testSCALATE_71__Internation_characters_with_escapeMarkupeq_false_.scaml.scala:8:34: "Internation" is a misspelling of "International"
scalate-core/target/ScamlTest/src/org/fusesource/scalate/scaml/testSCALATE_71__Internation_characters_with_escapeMarkupeq_false_.scaml.scala:46:33: "Internation" is a misspelling of "International"
scalate-core/target/ScamlTest/src/org/fusesource/scalate/scaml/testSCALATE_71__Internation_characters_with_escapeMarkupeq_false_.scaml.scala:47:102: "Internation" is a misspelling of "International"
scalate-core/target/ScamlTest/src/org/fusesource/scalate/scaml/testtry_/_catch_constructs.scaml.scala:30:54: "occured" is a misspelling of "occurred"
scalate-core/target/test-reports/org.fusesource.scalate.scaml.ScamlBugTest.xml:29:140: "Internation" is a misspelling of "International"
scalate-core/target/test-reports/org.fusesource.scalate.scaml.ScamlBugTest.xml:31:140: "Internation" is a misspelling of "International"
scalate-jruby/src/main/resources/haml-3.0.25/lib/haml/helpers/action_view_mods.rb:50:31: "existance" is a misspelling of "existence"
scalate-jruby/src/main/resources/haml-3.0.25/lib/haml/helpers.rb:119:16: "perserve" is a misspelling of "preserve"
scalate-jruby/src/main/resources/haml-3.0.25/lib/haml/helpers.rb:123:16: "perserve" is a misspelling of "preserve"
scalate-jruby/src/main/resources/haml-3.0.25/lib/sass/tree/node.rb:360:31: "overriden" is a misspelling of "overridden"
scalate-jsp-converter/src/main/scala/org/fusesource/scalate/converter/JspConvert.scala:37:61: "directroy" is a misspelling of "directory"
scalate-jsp-converter/src/main/scala/org/fusesource/scalate/converter/JspConvert.scala:41:106: "teh" is a misspelling of "the"
scalate-util/src/main/scala/org/fusesource/scalate/util/Measurements.scala:13:6: "millenium" is a misspelling of "millennium"
scalate-util/src/main/scala/org/fusesource/scalate/util/Measurements.scala:13:47: "millenium" is a misspelling of "millennium"
scalate-util/src/main/scala/org/fusesource/scalate/util/Measurements.scala:14:54: "millenium" is a misspelling of "millennium"
scalate-website/src/camel.page:59:101: "transfered" is a misspelling of "transferred"
scalate-website/src/documentation/_scaml-reference.md:1414:48: "alltogether" is a misspelling of "altogether"
scalate-website/src/documentation/_scaml-reference.md:1435:70: "seperator" is a misspelling of "separator"
scalate-website/src/documentation/installing.page:57:52: "cooresponding" is a misspelling of "corresponding"
scalate-website/src/documentation/jade-syntax.page:1392:48: "alltogether" is a misspelling of "altogether"
scalate-website/src/documentation/jade-syntax.page:1413:70: "seperator" is a misspelling of "separator"
scalate-wikitext/src/test/scala/org/fusesource/scalate/wikitext/CamelSiteConfluenceTest.scala:73:17: "occurences" is a misspelling of "occurrences"
scalate-wikitext/src/test/scala/org/fusesource/scalate/wikitext/CamelSiteConfluenceTest.scala:74:18: "Occurences" is a misspelling of "Occurrences"
scalate-wikitext/src/test/scala/org/fusesource/scalate/wikitext/CamelSiteConfluenceTest.scala:77:16: "occurences" is a misspelling of "occurrences"
scalate-website/src/scripts/jquery.js:2032:42: "seperated" is a misspelling of "separated"
scalate-website/src/scripts/jquery.js:3749:50: "comparision" is a misspelling of "comparison"
scalate-website/src/scripts/jquery.js:7881:40: "occured" is a misspelling of "occurred"
scalate-wikitext/src/test/scala/org/fusesource/scalate/wikitext/SnippetsTest.scala:134:20: "occurence" is a misspelling of "occurrence"

Maven -> sbt migration? (Unified Scala 2.10 / 2.11 source tree + cross compilation)

Now that we're no longer tied to the Fuse Maven infrastructure it may be a good idea to consider migrating to sbt to avoid having to maintain multiple branches for each supported Scala version; and avoid tons of xml build config.

I currently have a working example (see scala_2.11...arashi01:the_great_sbt_migration) based on the scala_2.11 branch however also supporting scala_2.10 from the same sources. This includes all projects which could easily be ported from Maven to sbt. Those which could not (i.e. depend on Maven as a tool or the maven-scalate-plugin which does not have a full featured sbt equivalent) have been split into their own git repositories:

All projects compile, and all tests pass for both Scala 2.10 and 2.11.

If there is an interest in pursuing this, I'll also attempt to get the above Maven projects compiling as standalone projects (will need a parent POM).

Note: scalate-website has not been converted to sbt due to dependency on maven-scalate-plugin sitegen. Not sure how best to handle this.

Scala 3 (Dotty) migration

I'm sorry to say this but I myself don't have time and motivation to work on Scala 3 (Dotty) migration. We're looking for people that are interested in making necessary efforts for it.

& symbol changes to &amp;

While using mustache

engine.layout(templatePath, Model(
"imageurl" -> "https://<domain>/<url>?<param1>=<value>&<param2>=<value>"
))

template caching customize Platform.currentTime

Im currently loading my template in a different datasource and the modified time needs to be updated base on the time the template is updated using (resource.lastmodifiedtine), its not necessarily Platform.currentTime. is there a way to fix this?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.