lazyval languages: List[Language] = { val components_path = HOME + Path.explode("components.json") val components_json = JSON.parse(File.read(components_path))
JSON.value(components_json, "languages") match { case Some(JSON.Object(langs)) =>
(for (case (name, JSON.Object(info)) <- langs.iterator if name != "meta") yield { val alias =
JSON.Value.List.unapply(info.getOrElse("alias", Nil), JSON.Value.String.unapply)
.getOrElse(Nil)
Language(name :: alias)
}).toList.sortBy(_.name) case _ => error("Failed to determine languages from " + components_path)
}
}
def check_language(name: String): Unit = if (!languages.exists(_.names.contains(name))) error("Unknown language " + quote(name))
/* generate JavaScript */
def prelude(lang: JS.Source): JS.Source =
cat_lines(List(
Nodejs.require_fs,
Nodejs.require_path("const prismjs", HOME),
Nodejs.require_path("prismjs.load", HOME + Path.explode("components"), dir = true),
JS.function("prismjs.load", lang), """
function prismjs_encode(t) { if (t instanceof prismjs.Token) { var types = [t.type] if (Array.isArray(t.alias)) { for (a of t.alias) { types.push(a) } } elseif (t.alias !== undefined) { types.push(t.alias) } return {"types": types, "content": prismjs_encode(t.content) }
} elseif (Array.isArray(t)) { return t.map(prismjs_encode) } else { return t }
}
function prismjs_tokenize(text, lang) { return prismjs.tokenize(text, prismjs.languages[lang]).map(prismjs_encode)
} """))
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.