Replace parser filter with separate filters
[Sone.git] / src / main / kotlin / net / pterodactylus / sone / template / ParserFilter.kt
diff --git a/src/main/kotlin/net/pterodactylus/sone/template/ParserFilter.kt b/src/main/kotlin/net/pterodactylus/sone/template/ParserFilter.kt
new file mode 100644 (file)
index 0000000..4d2f9c1
--- /dev/null
@@ -0,0 +1,28 @@
+package net.pterodactylus.sone.template
+
+import net.pterodactylus.sone.core.Core
+import net.pterodactylus.sone.data.Sone
+import net.pterodactylus.sone.text.Part
+import net.pterodactylus.sone.text.SoneTextParser
+import net.pterodactylus.sone.text.SoneTextParserContext
+import net.pterodactylus.util.template.Filter
+import net.pterodactylus.util.template.TemplateContext
+
+/**
+ * Parses a [String] into a number of [Part]s.
+ */
+class ParserFilter(private val core: Core, private val soneTextParser: SoneTextParser) : Filter {
+
+       override fun format(templateContext: TemplateContext?, data: Any?, parameters: MutableMap<String, Any?>?): Any? {
+               val text = data?.toString() ?: return listOf<Part>()
+               val soneParameter = parameters?.get("sone")
+               val sone = when (soneParameter) {
+                       is String -> core.getSone(soneParameter).orNull()
+                       is Sone -> soneParameter
+                       else -> null
+               }
+               val context = SoneTextParserContext(sone as? Sone)
+               return soneTextParser.parse(text, context)
+       }
+
+}