summaryrefslogtreecommitdiff
path: root/giscanner/annotationparser.py
diff options
context:
space:
mode:
Diffstat (limited to 'giscanner/annotationparser.py')
-rw-r--r--giscanner/annotationparser.py56
1 files changed, 32 insertions, 24 deletions
diff --git a/giscanner/annotationparser.py b/giscanner/annotationparser.py
index dd0c8fdb..16c75453 100644
--- a/giscanner/annotationparser.py
+++ b/giscanner/annotationparser.py
@@ -145,7 +145,7 @@ class DocBlock(object):
self.value = None
self.tags = odict()
self.comment = None
- self.params = []
+ self.params = odict()
self.position = None
def __cmp__(self, other):
@@ -158,9 +158,12 @@ class DocBlock(object):
self.position = position
self.options.position = position
- def get(self, name):
+ def get_tag(self, name):
return self.tags.get(name)
+ def get_param(self, name):
+ return self.params.get(name)
+
def to_gtk_doc(self):
options = ''
if self.options:
@@ -170,19 +173,14 @@ class DocBlock(object):
if 'SECTION' not in self.name:
lines[0] += ':'
lines[0] += options
- tags = []
- for name, tag in self.tags.iteritems():
- if name in self.params:
- lines.append(tag.to_gtk_doc_param())
- else:
- tags.append(tag)
-
+ for param in self.params.values():
+ lines.append(param.to_gtk_doc_param())
lines.append('')
for l in self.comment.split('\n'):
lines.append(l)
- if tags:
+ if self.tags:
lines.append('')
- for tag in tags:
+ for tag in self.tags.values():
lines.append(tag.to_gtk_doc_tag())
comment = ''
@@ -197,6 +195,9 @@ class DocBlock(object):
return comment
def validate(self):
+ for param in self.params.values():
+ param.validate()
+
for tag in self.tags.values():
tag.validate()
@@ -720,7 +721,7 @@ class AnnotationParser(object):
message.warn("encountered multiple 'Returns' parameters or tags for "
"'%s'." % (comment_block.name),
position)
- elif param_name in comment_block.tags.keys():
+ elif param_name in comment_block.params.keys():
column = result.start('parameter_name') + column_offset
marker = ' '*column + '^'
message.warn("multiple '@%s' parameters for identifier '%s':\n%s\n%s" %
@@ -732,9 +733,10 @@ class AnnotationParser(object):
tag.comment = param_description
if param_annotations:
tag.options = self.parse_options(tag, param_annotations)
- comment_block.tags[param_name] = tag
- if not param_name == TAG_RETURNS:
- comment_block.params.append(param_name)
+ if param_name == TAG_RETURNS:
+ comment_block.tags[param_name] = tag
+ else:
+ comment_block.params[param_name] = tag
current_param = tag
continue
@@ -785,7 +787,7 @@ class AnnotationParser(object):
comment_block.tags[TAG_RETURNS] = tag
current_tag = tag
continue
- elif tag_name.lower() in _ALL_TAGS:
+ else:
if tag_name.lower() in comment_block.tags.keys():
column = result.start('tag_name') + column_offset
marker = ' '*column + '^'
@@ -858,20 +860,26 @@ class AnnotationParser(object):
comment_block.comment = ''
for tag in comment_block.tags.itervalues():
- if tag.comment:
- tag.comment = tag.comment.strip()
- else:
- tag.comment = None
+ self._clean_comment_block_part(tag)
- if tag.value:
- tag.value = tag.value.strip()
- else:
- tag.value = ''
+ for param in comment_block.params.itervalues():
+ self._clean_comment_block_part(param)
# Validate and store block.
comment_block.validate()
return comment_block
+ def _clean_comment_block_part(self, part):
+ if part.comment:
+ part.comment = part.comment.strip()
+ else:
+ part.comment = None
+
+ if part.value:
+ part.value = part.value.strip()
+ else:
+ part.value = ''
+
def _validate_multiline_annotation_continuation(self, line, original_line,
column_offset, position):
'''