app.use("/api", new APIRouter(model, modelbuilder, mainmodule))
app.use("/doc/:namespace", new DocAction(model, mainmodule, modelbuilder))
- app.use("/code/:namespace", new CodeAction(model, modelbuilder))
app.use("/uml/:namespace", new UMLDiagramAction(model, mainmodule))
app.use("/", new TreeAction(model, mainmodule))
use("/list", new APIList(model, mainmodule))
use("/search", new APISearch(model, mainmodule))
use("/random", new APIRandom(model, mainmodule))
+ use("/code/:id", new APIEntityCode(model, mainmodule, modelbuilder))
end
end
res.json arr
end
end
+
+# Return the source code of MEntity.
+#
+# Example: `GET /entity/core::Array/code`
+class APIEntityCode
+ super APIHandler
+
+ # Modelbuilder used to access sources.
+ var modelbuilder: ModelBuilder
+
+ redef fun get(req, res) do
+ var mentity = mentity_from_uri(req, res)
+ if mentity == null then return
+ var source = render_source(mentity)
+ if source == null then
+ res.error 404
+ return
+ end
+ res.send source
+ end
+
+ # Highlight `mentity` source code.
+ private fun render_source(mentity: MEntity): nullable HTMLTag do
+ var node = modelbuilder.mentity2node(mentity)
+ if node == null then return null
+ var hl = new HighlightVisitor
+ hl.enter_visit node
+ return hl.html
+ end
+end
end
end
-# Display a MEntity source code.
-class CodeAction
- super ModelHandler
-
- # Modelbuilder used to access sources.
- var modelbuilder: ModelBuilder
-
- redef fun get(req, res) do
- var namespace = req.param("namespace")
- var model = init_model_view(req)
- var mentity = find_mentity(model, namespace)
- if mentity == null then
- res.error(404)
- return
- end
- var view = new HtmlSourcePage(modelbuilder, mentity)
- res.send_view(view)
- end
-end
-
# Display the doc of a MEntity.
class DocAction
super ModelHandler