mirror of https://github.com/tc39/test262.git
43 lines
1.5 KiB
Python
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------------------------------------------------------------------------
|