aboutsummaryrefslogtreecommitdiffstats
path: root/tools/packaging/common.py
blob: 568744e9f4687666a7c9e2a605839012ef0fb141 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#--Imports---------------------------------------------------------------------
import re

#--Stubs-----------------------------------------------------------------------



#--Globals---------------------------------------------------------------------
captureCommentPattern = re.compile(r"\/\*\*?((?:\s|\S)*?)\*\/\s*\n")
atattrs = re.compile(r"\s*\n\s*\*\s*@")
stars = re.compile(r"\s*\n\s*\*\s?")

#--Helpers--------------------------------------------------------------------#
def stripStars(text):
    return stars.sub('\n', text).strip()

def convertDocString(docString):
    envelope = {}
    temp = captureCommentPattern.findall(docString)[0]
    propTexts = atattrs.split(temp)
    envelope['commentary'] = stripStars(propTexts[0])
    del propTexts[0]

    for propText in propTexts:
        # TODO: error check for mismatch
        propName = re.match(r"^\w+", propText).group(0)
        propVal = propText[len(propName):]

        # Just till last one-time conversion
        # strip optional initial colon or final semicolon.
        # The initial colon is only stripped if it comes immediately
        # after the identifier with no intervening whitespace.
        propVal = re.sub(r"^:\s*", '', propVal, 1)
        propVal = re.sub(r";\s*$", '', propVal, 1)
        propVal = stripStars(propVal)
        
        if propName in envelope:
            raise Exception('duplicate: ' + propName)
        envelope[propName] = propVal;
    return envelope

#--MAIN------------------------------------------------------------------------