587
|
1 |
#============================================================================
|
|
2 |
#Name : comments.py
|
|
3 |
#Part of : Helium
|
|
4 |
|
|
5 |
#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
6 |
#All rights reserved.
|
|
7 |
#This component and the accompanying materials are made available
|
|
8 |
#under the terms of the License "Eclipse Public License v1.0"
|
|
9 |
#which accompanies this distribution, and is available
|
|
10 |
#at the URL "http://www.eclipse.org/legal/epl-v10.html".
|
|
11 |
#
|
|
12 |
#Initial Contributors:
|
|
13 |
#Nokia Corporation - initial contribution.
|
|
14 |
#
|
|
15 |
#Contributors:
|
|
16 |
#
|
|
17 |
#Description:
|
|
18 |
#===============================================================================
|
|
19 |
|
|
20 |
""" Helper to parse branch information.
|
|
21 |
"""
|
|
22 |
import amara
|
|
23 |
import logging
|
|
24 |
import os
|
|
25 |
import re
|
|
26 |
import string
|
|
27 |
|
|
28 |
|
|
29 |
COMMENT_SYMBOLS = {
|
|
30 |
'.java': ['//'],
|
|
31 |
'.hrh': ['//'],
|
|
32 |
'.cpp': ['//'],
|
|
33 |
'.h': ['//'],
|
|
34 |
'.inf': ['//'],
|
|
35 |
'.mmp': ['//'],
|
|
36 |
'.iby': ['//'],
|
|
37 |
'.pl':['#'],
|
|
38 |
'.py':['#'],
|
|
39 |
'.mk':['#'],
|
|
40 |
'.bat':['REM'],
|
|
41 |
'.xml':['<!--'],
|
|
42 |
'.txt':['//'],
|
|
43 |
'.cmd':['#','REM']
|
|
44 |
}
|
|
45 |
|
|
46 |
|
|
47 |
# Uncomment this line to enable logging in this module, or configure logging elsewhere
|
|
48 |
#logging.basicConfig(level=logging.DEBUG)
|
|
49 |
_logger = logging.getLogger("comments")
|
|
50 |
|
|
51 |
|
|
52 |
class CommentParser(object):
|
|
53 |
""" Parse branch information. """
|
|
54 |
def __init__(self, files, element_name):
|
|
55 |
self.files = files
|
|
56 |
self.element_name = element_name
|
|
57 |
|
|
58 |
def scan(self):
|
|
59 |
""" This method goes processes the input files.
|
|
60 |
|
|
61 |
It returns an xml document. """
|
|
62 |
doc = amara.create_document(u"commentLog")
|
|
63 |
for path in self.files:
|
|
64 |
open_file = open(path)
|
|
65 |
CommentParser.scan_content(path, open_file.read(), self.element_name, doc)
|
|
66 |
open_file.close()
|
|
67 |
|
|
68 |
#print doc.xml()
|
|
69 |
return doc
|
|
70 |
|
|
71 |
@staticmethod
|
|
72 |
def scan_content(filename, content, element_name, doc=None):
|
|
73 |
""" This method scan the defined content to find any custom comment tags.
|
|
74 |
|
|
75 |
It returns an xml document.
|
|
76 |
"""
|
|
77 |
# Creating a doc if not defined
|
|
78 |
if not doc:
|
|
79 |
doc = amara.create_document(u"commentLog")
|
|
80 |
|
|
81 |
# Search the file for any XML elements matching the given element name
|
|
82 |
regex = string.Template(r"<${element_name}.*</${element_name}>").substitute(element_name=element_name)
|
|
83 |
comment_elements = re.findall(regex, content, re.DOTALL)
|
|
84 |
for comment in comment_elements:
|
|
85 |
(_, file_type) = os.path.splitext(filename)
|
|
86 |
file_type = file_type.lower()
|
|
87 |
if COMMENT_SYMBOLS.has_key(file_type):
|
|
88 |
for i in range(len(COMMENT_SYMBOLS[file_type])):
|
|
89 |
comment = comment.replace(COMMENT_SYMBOLS[file_type][i], "")
|
628
|
90 |
|
|
91 |
doc.commentLog.xml_append_fragment(comment)
|
|
92 |
# Add a generic file attribute to the comment to label which file it comes from
|
|
93 |
doc.commentLog.xml_children[-1].xml_set_attribute(u'file', unicode(filename))
|
587
|
94 |
|
|
95 |
#print doc.xml()
|
|
96 |
return doc
|
|
97 |
|