test262/tools/packaging/common.py

43 lines
1.5 KiB
Python

#--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------------------------------------------------------------------------