summaryrefslogtreecommitdiff
path: root/scalatexPlugin
diff options
context:
space:
mode:
authorLi Haoyi <haoyi@dropbox.com>2014-11-01 00:56:30 -0700
committerLi Haoyi <haoyi@dropbox.com>2014-11-01 00:56:30 -0700
commitaae594fd3c8397abca4cd4e55f538d41b172b4e3 (patch)
treecef34e2404599a8547d864f3d5c158b5297783f0 /scalatexPlugin
parent3d73267c4b3ecf3cdca54ded8dfd8a2caeeb3ca9 (diff)
downloadhands-on-scala-js-aae594fd3c8397abca4cd4e55f538d41b172b4e3.tar.gz
hands-on-scala-js-aae594fd3c8397abca4cd4e55f538d41b172b4e3.tar.bz2
hands-on-scala-js-aae594fd3c8397abca4cd4e55f538d41b172b4e3.zip
added everything
Diffstat (limited to 'scalatexPlugin')
-rwxr-xr-xscalatexPlugin/src/main/resources/scalac-plugin.xml4
-rwxr-xr-xscalatexPlugin/src/main/scala/scalatex/ScalaTexPlugin.scala54
2 files changed, 58 insertions, 0 deletions
diff --git a/scalatexPlugin/src/main/resources/scalac-plugin.xml b/scalatexPlugin/src/main/resources/scalac-plugin.xml
new file mode 100755
index 0000000..d4062fa
--- /dev/null
+++ b/scalatexPlugin/src/main/resources/scalac-plugin.xml
@@ -0,0 +1,4 @@
+<plugin>
+ <name>demo-plugin</name>
+ <classname>scalatex.ScalaTexPlugin</classname>
+</plugin> \ No newline at end of file
diff --git a/scalatexPlugin/src/main/scala/scalatex/ScalaTexPlugin.scala b/scalatexPlugin/src/main/scala/scalatex/ScalaTexPlugin.scala
new file mode 100755
index 0000000..4808661
--- /dev/null
+++ b/scalatexPlugin/src/main/scala/scalatex/ScalaTexPlugin.scala
@@ -0,0 +1,54 @@
+package scalatex
+
+import scala.reflect.internal.util.BatchSourceFile
+import scala.reflect.io.VirtualFile
+import scala.tools.nsc.{ Global, Phase }
+import scala.tools.nsc.plugins.{ Plugin, PluginComponent }
+
+class ScalaTexPlugin(val global: Global) extends Plugin {
+ import global._
+ println(options)
+ val name = "scalatex-plugin"
+ val description = "Enforces coding standards"
+ val components = List[PluginComponent](DemoComponent)
+ private object DemoComponent extends PluginComponent {
+ val global = ScalaTexPlugin.this.global
+ import global._
+
+ override val runsAfter = List("parser")
+ override val runsBefore = List("namer")
+
+ val phaseName = "Demo"
+
+ override def newPhase(prev: Phase) = new GlobalPhase(prev) {
+ override def run() = {
+ for (file <- new java.io.File("book/src/main/scalatex/book").listFiles()) {
+ val txt = io.Source.fromFile(file).mkString
+ val fakeJfile = new java.io.File(file.getName)
+ val virtualFile = new VirtualFile(file.getName) {
+ override def file = fakeJfile
+ }
+ val sourceFile = new BatchSourceFile(virtualFile, txt)
+ val unit = new CompilationUnit(sourceFile)
+ val name = file.getName
+ val objectName = name.slice(name.lastIndexOf('/'), name.lastIndexOf('.'))
+ val shim = s"""
+ package book
+ import Book._
+ import Utils.sect
+ import scalatags.Text.all._
+ object $objectName{
+ val template = scalatex.twf("${file.getPath}")
+ }
+ """
+ unit.body = global.newUnitParser(shim).parse()
+ global.currentRun.compileLate(unit)
+ }
+ }
+
+ def name: String = phaseName
+
+ def apply(unit: global.CompilationUnit): Unit = {}
+ }
+ }
+}