MCPcopy Create free account
hub / github.com/BaseXdb/basex / parse

Method parse

basex-core/src/main/java/org/basex/query/func/inspect/XQDoc.java:42–150  ·  view source on GitHub ↗
(final IOContent content)

Source from the content-addressed store, hash-verified

40 }
41
42 @Override
43 public FNode parse(final IOContent content) throws QueryException {
44 final AModule module = parseModule(content);
45 final FBuilder xqdoc = element("xqdoc").ns();
46 final FBuilder control = element("control");
47 control.node(element("date").text(qc.dateTime().datm.string(info)));
48 control.node(element("version").text("1.1"));
49 xqdoc.node(control);
50
51 final String type = module instanceof LibraryModule ? "library" : "main";
52 final FBuilder mod = element("module").attr(Q_TYPE, type);
53 if(module instanceof LibraryModule) {
54 mod.node(element("uri").text(module.sc.module.uri()));
55 mod.node(element("name").text(content.name()));
56 } else {
57 mod.node(element("uri").text(content.name()));
58 }
59 comment(module, mod);
60 xqdoc.node(mod);
61
62 // imports
63 final FBuilder imports = element("imports");
64 for(final byte[] uri : module.modules) {
65 imports.node(element("import").attr(Q_TYPE, "library").node(element("uri").text(uri)));
66 }
67 xqdoc.node(imports);
68
69 // namespaces
70 final FBuilder namespaces = element("namespaces");
71 final TokenObjectMap<byte[]> nsCache = new TokenObjectMap<>();
72 for(final byte[] prefix : module.namespaces) {
73 nsCache.put(prefix, module.namespaces.get(prefix));
74 }
75 for(final QNm name : module.options) {
76 nsCache.put(name.prefix(), name.uri());
77 }
78 final QueryBiConsumer<QNm, StaticDecl> addNs = (name, sd) -> {
79 if(name.hasPrefix()) nsCache.put(name.prefix(), name.uri());
80 for(final Ann ann : sd.anns) {
81 final byte[] uri = ann.name().uri();
82 if(uri.length > 0) nsCache.put(NSGlobal.prefix(uri), uri);
83 }
84 };
85 for(final StaticVar sv : module.vars) addNs.accept(sv.name, sv);
86 for(final StaticFunc sf : module.funcs) addNs.accept(sf.funcName(), sf);
87 for(final byte[] prefix : nsCache) {
88 final FBuilder namespace = element("namespace");
89 namespace.attr(Q_PREFIX, prefix).attr(Q_URI, nsCache.get(prefix));
90 namespaces.node(namespace);
91 }
92 xqdoc.node(namespaces);
93
94 // variables
95 final FBuilder variables = element("variables");
96 for(final StaticVar sv : module.vars) {
97 final FBuilder variable = element("variable");
98 variable.node(element("name").text(sv.name.string()));
99 comment(sv, variable);

Callers 3

itemMethod · 0.45
valueMethod · 0.45
itemMethod · 0.45

Calls 15

elementMethod · 0.95
nodeMethod · 0.95
attrMethod · 0.95
commentMethod · 0.95
putMethod · 0.95
prefixMethod · 0.95
getMethod · 0.95
annotationsMethod · 0.95
typeMethod · 0.95
tokenMethod · 0.95
concatMethod · 0.95
finishMethod · 0.95

Tested by

no test coverage detected