From 3dc171e41676e9043fe0c6d935b97a944c143dad Mon Sep 17 00:00:00 2001 From: Johannes Rudolph Date: Tue, 16 Oct 2012 14:24:54 +0200 Subject: move from "cc.spray" to "io.spray" --- README.md | 2 +- build.sbt | 8 +-- .../cc/spray/boilerplate/BoilerplatePlugin.scala | 68 ---------------------- .../scala/cc/spray/boilerplate/Generator.scala | 32 ---------- .../cc/spray/boilerplate/TemplateParser.scala | 56 ------------------ .../spray/boilerplate/BoilerplatePlugin.scala | 68 ++++++++++++++++++++++ src/main/scala/spray/boilerplate/Generator.scala | 32 ++++++++++ .../scala/spray/boilerplate/TemplateParser.scala | 56 ++++++++++++++++++ 8 files changed, 160 insertions(+), 162 deletions(-) delete mode 100644 src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala delete mode 100644 src/main/scala/cc/spray/boilerplate/Generator.scala delete mode 100644 src/main/scala/cc/spray/boilerplate/TemplateParser.scala create mode 100644 src/main/scala/spray/boilerplate/BoilerplatePlugin.scala create mode 100644 src/main/scala/spray/boilerplate/Generator.scala create mode 100644 src/main/scala/spray/boilerplate/TemplateParser.scala diff --git a/README.md b/README.md index 592f001..81e09ea 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ This now expands correctly to Put - addSbtPlugin("cc.spray" % "sbt-boilerplate" % "0.5.0-SNAPSHOT") + addSbtPlugin("io.spray" % "sbt-boilerplate" % "0.5.0-SNAPSHOT") into your `plugins.sbt` and add diff --git a/build.sbt b/build.sbt index a4fef10..3a5d550 100644 --- a/build.sbt +++ b/build.sbt @@ -1,6 +1,6 @@ name := "sbt-boilerplate" -organization := "cc.spray" +organization := "io.spray" version := "0.2.0" @@ -10,9 +10,9 @@ startYear := Some(2012) homepage := Some(url("http://github.com/spray/sbt-boilerplate")) -organizationHomepage := Some(url("http://spray.cc")) +organizationHomepage := Some(url("http://spray.io")) -licenses in GlobalScope += "Apache License 2.0" -> url("https://github.com/spray/sbt-boilerplate/raw/master/LICENSE") +licenses in GlobalScope += "Apache License 2.0" -> url("https://github.com/jrudolph/sbt-boilerplate/raw/master/LICENSE") sbtPlugin := true @@ -24,8 +24,6 @@ CrossBuilding.crossSbtVersions := Seq("0.11.2", "0.11.3", "0.12") // publishing /////////////// -credentials += Credentials(Path.userHome / ".ivy2" / "scalasbt.credentials") - publishMavenStyle := false publishTo := Some(Resolver.url("sbt-plugin-releases repo", new URL("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/"))(Resolver.ivyStylePatterns)) diff --git a/src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala b/src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala deleted file mode 100644 index b0fb909..0000000 --- a/src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala +++ /dev/null @@ -1,68 +0,0 @@ -/* - * sbt-boilerplate is distributed under the 2-Clause BSD license. See the LICENSE file in the root - * of the repository. - * - * Copyright (c) 2012 Johannes Rudolph - */ -package cc.spray.boilerplate - -import sbt._ -import Keys._ - -object BoilerplatePlugin extends Plugin { - object Boilerplate { - val boilerplateGenerate = TaskKey[Seq[File]]("boilerplate-generate", "Generates boilerplate from template files") - - val settings = seq( - sourceDirectory in boilerplateGenerate <<= (sourceDirectory in Compile) / "boilerplate", - - target in boilerplateGenerate <<= (sourceManaged in Compile), - - boilerplateGenerate <<= (streams, sourceDirectory in boilerplateGenerate, target in boilerplateGenerate) map generateFromTemplates, - - (sourceGenerators in Compile) <+= boilerplateGenerate, - (managedSourceDirectories in Compile) <+= target in boilerplateGenerate, - - // watch sources support - includeFilter in boilerplateGenerate := "*.template", - excludeFilter in boilerplateGenerate <<= excludeFilter in Global, - watch(sourceDirectory in boilerplateGenerate, includeFilter in boilerplateGenerate, excludeFilter in boilerplateGenerate), - - // add managed sources to the packaged sources - mappings in (Compile, packageSrc) <++= - (sourceManaged in Compile, managedSources in Compile) map { (base, srcs) => - (srcs x (Path.relativeTo(base) | Path.flat)) - } - ) - - def watch(sourceDirKey: SettingKey[File], filterKey: SettingKey[FileFilter], excludeKey: SettingKey[FileFilter]) = - watchSources <++= (sourceDirKey, filterKey, excludeKey) map descendents - def descendents(sourceDir: File, filt: FileFilter, excl: FileFilter) = - sourceDir.descendentsExcept(filt, excl).get - - def generateFromTemplates(streams: TaskStreams, sourceDir: File, targetDir: File): Seq[File] = { - val files = sourceDir ** "*.template" - - def changeExtension(f: File): File = { - val (ext, name) = f.getName.reverse.span(_ != '.') - new File(f.getParent, name.drop(1).reverse.toString) - } - - val mapping = (files x rebase(sourceDir, targetDir)).map { - case (orig, target) => (orig, changeExtension(target)) - } - - mapping foreach { - case (templateFile, target) => - if (templateFile.lastModified > target.lastModified) { - streams.log.info("Generating '%s'" format target.getName) - val template = IO.read(templateFile) - IO.write(target, Generator.generateFromTemplate(template, 22)) - } else - streams.log.debug("Template '%s' older than target. Ignoring." format templateFile.getName) - } - - mapping.map(_._2) - } - } -} diff --git a/src/main/scala/cc/spray/boilerplate/Generator.scala b/src/main/scala/cc/spray/boilerplate/Generator.scala deleted file mode 100644 index 46527ce..0000000 --- a/src/main/scala/cc/spray/boilerplate/Generator.scala +++ /dev/null @@ -1,32 +0,0 @@ -/* - * sbt-boilerplate is distributed under the 2-Clause BSD license. See the LICENSE file in the root - * of the repository. - * - * Copyright (c) 2012 Johannes Rudolph - */ -package cc.spray.boilerplate - -import util.parsing.combinator.RegexParsers - -object Generator { - def generateFromTemplate(template: String, expandTo: Int): String = - generate(TemplateParser.parse(template))(expandTo) - - def formatNum0(num: Int) = num.formatted("%d") - def formatNumSpace(num: Int) = num.formatted("%d") - def replaceInPattern(pattern: String)(idx: Int): String = - // in likely identifiers replace by '04' etc. - pattern.replaceAll("(?<=\\w)(? els.map(e => generate(e)(idx)).mkString - case Expand(inner, sep) => (1 to idx).map(generate(inner)).mkString(sep) - case LiteralString(lit) => replaceInPattern(lit)(idx) - case FixedString(lit) => lit - } -} diff --git a/src/main/scala/cc/spray/boilerplate/TemplateParser.scala b/src/main/scala/cc/spray/boilerplate/TemplateParser.scala deleted file mode 100644 index dfaddd7..0000000 --- a/src/main/scala/cc/spray/boilerplate/TemplateParser.scala +++ /dev/null @@ -1,56 +0,0 @@ -/* - * sbt-boilerplate is distributed under the 2-Clause BSD license. See the LICENSE file in the root - * of the repository. - * - * Copyright (c) 2012 Johannes Rudolph - */ -package cc.spray.boilerplate - -import util.parsing.combinator.RegexParsers -import java.lang.RuntimeException - -sealed trait TemplateElement -case class Sequence(elements: Seq[TemplateElement]) extends TemplateElement -case class LiteralString(literal: String) extends TemplateElement -case class FixedString(literal: String) extends TemplateElement -case class Expand(inner: TemplateElement, separator: String) extends TemplateElement - -object TemplateParser extends RegexParsers { - override type Elem = Char - type Tokens = TemplateElement - override val skipWhitespace = false - - def elements: Parser[TemplateElement] = rep1(element) ^^ { - case one :: Nil => one - case several => Sequence(several) - } - - def element: Parser[TemplateElement] = literal | fixed | expand - - def literalChar: Parser[String] = """(?s:(?!\[#)(?!#[^\]]*\]).)""".r - def literalChars: Parser[String] = rep1(literalChar) ^^ { _.reduceLeft(_ + _) } - - def literal: Parser[LiteralString] = literalChars ^^ LiteralString - - def fixed: Parser[FixedString] = "##" ~> ".".r ^^ (new String(_)) ^^ FixedString - - def expand: Parser[Expand] = "[#" ~> elements ~ "#" ~ separatorChars <~ "]" ^^ { - case els ~ x ~ sep => Expand(els, sep.getOrElse(", ")) - } - - def separatorChars: Parser[Option[String]] = rep("""[^\]]""".r) ^^ (_.reduceLeftOption(_ + _)) - - def parse(input:String): TemplateElement = - phrase(elements)(new scala.util.parsing.input.CharArrayReader(input.toCharArray)) match { - case Success(res,_) => res - case x:NoSuccess => throw new RuntimeException(x.msg) - } -} - -object TestParser extends App { - def check(format: String) { - println(TemplateParser.parse(format)) - } - - check("[#abc ##1 # ++ ]") -} \ No newline at end of file diff --git a/src/main/scala/spray/boilerplate/BoilerplatePlugin.scala b/src/main/scala/spray/boilerplate/BoilerplatePlugin.scala new file mode 100644 index 0000000..6049c98 --- /dev/null +++ b/src/main/scala/spray/boilerplate/BoilerplatePlugin.scala @@ -0,0 +1,68 @@ +/* + * sbt-boilerplate is distributed under the 2-Clause BSD license. See the LICENSE file in the root + * of the repository. + * + * Copyright (c) 2012 Johannes Rudolph + */ +package spray.boilerplate + +import sbt._ +import Keys._ + +object BoilerplatePlugin extends Plugin { + object Boilerplate { + val boilerplateGenerate = TaskKey[Seq[File]]("boilerplate-generate", "Generates boilerplate from template files") + + val settings = seq( + sourceDirectory in boilerplateGenerate <<= (sourceDirectory in Compile) / "boilerplate", + + target in boilerplateGenerate <<= (sourceManaged in Compile), + + boilerplateGenerate <<= (streams, sourceDirectory in boilerplateGenerate, target in boilerplateGenerate) map generateFromTemplates, + + (sourceGenerators in Compile) <+= boilerplateGenerate, + (managedSourceDirectories in Compile) <+= target in boilerplateGenerate, + + // watch sources support + includeFilter in boilerplateGenerate := "*.template", + excludeFilter in boilerplateGenerate <<= excludeFilter in Global, + watch(sourceDirectory in boilerplateGenerate, includeFilter in boilerplateGenerate, excludeFilter in boilerplateGenerate), + + // add managed sources to the packaged sources + mappings in (Compile, packageSrc) <++= + (sourceManaged in Compile, managedSources in Compile) map { (base, srcs) => + (srcs x (Path.relativeTo(base) | Path.flat)) + } + ) + + def watch(sourceDirKey: SettingKey[File], filterKey: SettingKey[FileFilter], excludeKey: SettingKey[FileFilter]) = + watchSources <++= (sourceDirKey, filterKey, excludeKey) map descendents + def descendents(sourceDir: File, filt: FileFilter, excl: FileFilter) = + sourceDir.descendentsExcept(filt, excl).get + + def generateFromTemplates(streams: TaskStreams, sourceDir: File, targetDir: File): Seq[File] = { + val files = sourceDir ** "*.template" + + def changeExtension(f: File): File = { + val (ext, name) = f.getName.reverse.span(_ != '.') + new File(f.getParent, name.drop(1).reverse.toString) + } + + val mapping = (files x rebase(sourceDir, targetDir)).map { + case (orig, target) => (orig, changeExtension(target)) + } + + mapping foreach { + case (templateFile, target) => + if (templateFile.lastModified > target.lastModified) { + streams.log.info("Generating '%s'" format target.getName) + val template = IO.read(templateFile) + IO.write(target, Generator.generateFromTemplate(template, 22)) + } else + streams.log.debug("Template '%s' older than target. Ignoring." format templateFile.getName) + } + + mapping.map(_._2) + } + } +} diff --git a/src/main/scala/spray/boilerplate/Generator.scala b/src/main/scala/spray/boilerplate/Generator.scala new file mode 100644 index 0000000..f124691 --- /dev/null +++ b/src/main/scala/spray/boilerplate/Generator.scala @@ -0,0 +1,32 @@ +/* + * sbt-boilerplate is distributed under the 2-Clause BSD license. See the LICENSE file in the root + * of the repository. + * + * Copyright (c) 2012 Johannes Rudolph + */ +package spray.boilerplate + +import util.parsing.combinator.RegexParsers + +object Generator { + def generateFromTemplate(template: String, expandTo: Int): String = + generate(TemplateParser.parse(template))(expandTo) + + def formatNum0(num: Int) = num.formatted("%d") + def formatNumSpace(num: Int) = num.formatted("%d") + def replaceInPattern(pattern: String)(idx: Int): String = + // in likely identifiers replace by '04' etc. + pattern.replaceAll("(?<=\\w)(? els.map(e => generate(e)(idx)).mkString + case Expand(inner, sep) => (1 to idx).map(generate(inner)).mkString(sep) + case LiteralString(lit) => replaceInPattern(lit)(idx) + case FixedString(lit) => lit + } +} diff --git a/src/main/scala/spray/boilerplate/TemplateParser.scala b/src/main/scala/spray/boilerplate/TemplateParser.scala new file mode 100644 index 0000000..ca6b329 --- /dev/null +++ b/src/main/scala/spray/boilerplate/TemplateParser.scala @@ -0,0 +1,56 @@ +/* + * sbt-boilerplate is distributed under the 2-Clause BSD license. See the LICENSE file in the root + * of the repository. + * + * Copyright (c) 2012 Johannes Rudolph + */ +package spray.boilerplate + +import util.parsing.combinator.RegexParsers +import java.lang.RuntimeException + +sealed trait TemplateElement +case class Sequence(elements: Seq[TemplateElement]) extends TemplateElement +case class LiteralString(literal: String) extends TemplateElement +case class FixedString(literal: String) extends TemplateElement +case class Expand(inner: TemplateElement, separator: String) extends TemplateElement + +object TemplateParser extends RegexParsers { + override type Elem = Char + type Tokens = TemplateElement + override val skipWhitespace = false + + def elements: Parser[TemplateElement] = rep1(element) ^^ { + case one :: Nil => one + case several => Sequence(several) + } + + def element: Parser[TemplateElement] = literal | fixed | expand + + def literalChar: Parser[String] = """(?s:(?!\[#)(?!#[^\]]*\]).)""".r + def literalChars: Parser[String] = rep1(literalChar) ^^ { _.reduceLeft(_ + _) } + + def literal: Parser[LiteralString] = literalChars ^^ LiteralString + + def fixed: Parser[FixedString] = "##" ~> ".".r ^^ (new String(_)) ^^ FixedString + + def expand: Parser[Expand] = "[#" ~> elements ~ "#" ~ separatorChars <~ "]" ^^ { + case els ~ x ~ sep => Expand(els, sep.getOrElse(", ")) + } + + def separatorChars: Parser[Option[String]] = rep("""[^\]]""".r) ^^ (_.reduceLeftOption(_ + _)) + + def parse(input:String): TemplateElement = + phrase(elements)(new scala.util.parsing.input.CharArrayReader(input.toCharArray)) match { + case Success(res,_) => res + case x:NoSuccess => throw new RuntimeException(x.msg) + } +} + +object TestParser extends App { + def check(format: String) { + println(TemplateParser.parse(format)) + } + + check("[#abc ##1 # ++ ]") +} \ No newline at end of file -- cgit v1.2.3