less verbose on difference cleanup fixed xmlCleanupParser() doc work on
* check-xinclude-test-suite.py: less verbose on difference
* libxml.spec.in: cleanup
* parser.c: fixed xmlCleanupParser() doc
* doc/Makefile.am doc/apibuild.py doc/libxml2-api.xml
doc/examples/Makefile.am doc/examples/example1.c
doc/examples/examples.xml doc/examples/index.py
doc/examples/test1.xml: work on adding C examples and
generating automated information about those. examples.xml
is autogenerated describing the examples.
* example/Makefile.am: cleanup
Daniel
diff --git a/doc/apibuild.py b/doc/apibuild.py
index 912ae8e..520ef09 100755
--- a/doc/apibuild.py
+++ b/doc/apibuild.py
@@ -50,12 +50,14 @@
return raw
class identifier:
- def __init__(self, name, module=None, type=None, info=None, extra=None):
+ def __init__(self, name, module=None, type=None, lineno = 0,
+ info=None, extra=None):
self.name = name
self.module = module
self.type = type
self.info = info
self.extra = extra
+ self.lineno = lineno
self.static = 0
def __repr__(self):
@@ -79,9 +81,26 @@
self.info = info
def set_extra(self, extra):
self.extra = extra
+ def set_lineno(self, lineno):
+ self.lineno = lineno
def set_static(self, static):
self.static = static
+ def get_name(self):
+ return self.name
+ def get_module(self):
+ return self.module
+ def get_type(self):
+ return self.type
+ def get_info(self):
+ return self.info
+ def get_lineno(self):
+ return self.lineno
+ def get_extra(self):
+ return self.extra
+ def get_static(self):
+ return self.static
+
def update(self, module, type = None, info = None, extra=None):
if module != None and self.module == None:
self.set_module(module)
@@ -95,7 +114,7 @@
class index:
def __init__(self, name = "noname"):
- self.name = name;
+ self.name = name
self.identifiers = {}
self.functions = {}
self.variables = {}
@@ -106,15 +125,32 @@
self.macros = {}
self.references = {}
- def add(self, name, module, static, type, info=None, extra=None):
+ def add_ref(self, name, module, static, type, lineno, info=None, extra=None):
if name[0:2] == '__':
return None
d = None
try:
d = self.identifiers[name]
- d.update(module, type, info, extra)
+ d.update(module, type, lineno, info, extra)
except:
- d = identifier(name, module, type, info, extra)
+ d = identifier(name, module, type, lineno, info, extra)
+ self.identifiers[name] = d
+
+ if d != None and static == 1:
+ d.set_static(1)
+
+ if d != None and name != None and type != None:
+ self.references[name] = d
+
+ def add(self, name, module, static, type, lineno, info=None, extra=None):
+ if name[0:2] == '__':
+ return None
+ d = None
+ try:
+ d = self.identifiers[name]
+ d.update(module, type, lineno, info, extra)
+ except:
+ d = identifier(name, module, type, lineno, info, extra)
self.identifiers[name] = d
if d != None and static == 1:
@@ -461,10 +497,23 @@
self.top_comment = ""
self.last_comment = ""
self.comment = None
+ self.collect_ref = 0
+
+ def collect_references(self):
+ self.collect_ref = 1
def lineno(self):
return self.lexer.getlineno()
+ def index_add(self, name, module, static, type, info=None, extra = None):
+ self.index.add(name, module, static, type, self.lineno(),
+ info, extra)
+
+ def index_add_ref(self, name, module, static, type, info=None,
+ extra = None):
+ self.index.add_ref(name, module, static, type, self.lineno(),
+ info, extra)
+
def error(self, msg, token=-1):
print "Parse Error: " + msg
if token != -1:
@@ -679,7 +728,7 @@
if token == None:
return None
if token[0] == 'preproc':
- self.index.add(token[1], self.filename, not self.is_header,
+ self.index_add(token[1], self.filename, not self.is_header,
"include")
return self.lexer.token()
return token
@@ -701,7 +750,7 @@
except:
pass
info = self.parseMacroComment(name, not self.is_header)
- self.index.add(name, self.filename, not self.is_header,
+ self.index_add(name, self.filename, not self.is_header,
"macro", info)
return token
token = self.lexer.token()
@@ -760,15 +809,15 @@
type = string.split(type, '(')[0]
d = self.mergeFunctionComment(name,
((type, None), signature), 1)
- self.index.add(name, self.filename, not self.is_header,
+ self.index_add(name, self.filename, not self.is_header,
"functype", d)
else:
if base_type == "struct":
- self.index.add(name, self.filename, not self.is_header,
+ self.index_add(name, self.filename, not self.is_header,
"struct", type)
base_type = "struct " + name
else:
- self.index.add(name, self.filename, not self.is_header,
+ self.index_add(name, self.filename, not self.is_header,
"typedef", type)
token = self.token()
else:
@@ -806,7 +855,29 @@
token = self.token()
return token
else:
- token = self.token()
+ if self.collect_ref == 1:
+ oldtok = token
+ token = self.token()
+ if oldtok[0] == "name" and oldtok[1][0:3] == "xml":
+ if token[0] == "sep" and token[1] == "(":
+ self.index_add_ref(oldtok[1], self.filename,
+ 0, "function")
+ token = self.token()
+ elif token[0] == "name":
+ token = self.token()
+ if token[0] == "sep" and (token[1] == ";" or
+ token[1] == "," or token[1] == "="):
+ self.index_add_ref(oldtok[1], self.filename,
+ 0, "type")
+ elif oldtok[0] == "name" and oldtok[1][0:4] == "XML_":
+ self.index_add_ref(oldtok[1], self.filename,
+ 0, "typedef")
+ elif oldtok[0] == "name" and oldtok[1][0:7] == "LIBXML_":
+ self.index_add_ref(oldtok[1], self.filename,
+ 0, "typedef")
+
+ else:
+ token = self.token()
return token
#
@@ -1009,7 +1080,7 @@
else:
enum_type = token[1]
for enum in self.enums:
- self.index.add(enum[0], self.filename,
+ self.index_add(enum[0], self.filename,
not self.is_header, "enum",
(enum[1], enum[2], enum_type))
return token
@@ -1207,10 +1278,10 @@
self.comment = None
token = self.token()
if type == "struct":
- self.index.add(self.name, self.filename,
+ self.index_add(self.name, self.filename,
not self.is_header, "struct", self.struct_fields)
else:
- self.index.add(self.name, self.filename,
+ self.index_add(self.name, self.filename,
not self.is_header, "variable", type)
break
elif token[1] == "(":
@@ -1221,19 +1292,19 @@
if token[0] == "sep" and token[1] == ";":
d = self.mergeFunctionComment(self.name,
((type, None), self.signature), 1)
- self.index.add(self.name, self.filename, static,
+ self.index_add(self.name, self.filename, static,
"function", d)
token = self.token()
elif token[0] == "sep" and token[1] == "{":
d = self.mergeFunctionComment(self.name,
((type, None), self.signature), static)
- self.index.add(self.name, self.filename, static,
+ self.index_add(self.name, self.filename, static,
"function", d)
token = self.token()
token = self.parseBlock(token);
elif token[1] == ',':
self.comment = None
- self.index.add(self.name, self.filename, static,
+ self.index_add(self.name, self.filename, static,
"variable", type)
type = type_orig
token = self.token()