Skip to content

Commit

Permalink
Refactoring some PyhtmlTemplate methods
Browse files Browse the repository at this point in the history
  • Loading branch information
jczic committed Nov 15, 2019
1 parent e6b555d commit 6de7552
Showing 1 changed file with 43 additions and 67 deletions.
110 changes: 43 additions & 67 deletions MicroWebSrv2/mods/PyhtmlTemplate.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,40 +174,32 @@ def _parseCode(self, pyGlobalVars, pyLocalVars, execute) :
# ------------------------------------------------------------------------

def _parseBloc(self, execute) :
while self._pos <= self._endPos :
c = self._code[self._pos]
if c == CodeTemplate.TOKEN_OPEN[0] and \
self._code[ self._pos : self._pos + CodeTemplate.TOKEN_OPEN_LEN ] == CodeTemplate.TOKEN_OPEN :
self._pos += CodeTemplate.TOKEN_OPEN_LEN
tokenContent = ''
x = self._pos
while True :
if x > self._endPos :
raise CodeTemplateException("%s is missing (line %s)" % (CodeTemplate.TOKEN_CLOSE, self._line))
c = self._code[x]
if c == CodeTemplate.TOKEN_CLOSE[0] and \
self._code[ x : x + CodeTemplate.TOKEN_CLOSE_LEN ] == CodeTemplate.TOKEN_CLOSE :
self._pos = x + CodeTemplate.TOKEN_CLOSE_LEN
break
elif c == '\n' :
self._line += 1
tokenContent += c
x += 1
newTokenToProcess = self._processToken(tokenContent, execute)
if newTokenToProcess is not None :
return newTokenToProcess
continue
elif c == '\n' :
self._line += 1
while True :
idx = self._code.find(CodeTemplate.TOKEN_OPEN, self._pos)
end = (idx < 0)
if end :
idx = self._endPos+1
code = self._code[self._pos:idx]
self._line += code.count('\n')
if execute :
self._rendered += c
self._pos += 1
return None
self._rendered += code
if end :
self._pos = idx
return None
self._pos = idx + CodeTemplate.TOKEN_OPEN_LEN
idx = self._code.find(CodeTemplate.TOKEN_CLOSE, self._pos)
if idx < 0 :
raise CodeTemplateException('"%s" is required but the end of code has been found' % CodeTemplate.TOKEN_CLOSE)
tokenContent = self._code[self._pos:idx].strip()
self._line += tokenContent.count('\n')
self._pos = idx + CodeTemplate.TOKEN_CLOSE_LEN
newTokenToProcess = self._processToken(tokenContent, execute)
if newTokenToProcess is not None :
return newTokenToProcess

# ------------------------------------------------------------------------

def _processToken(self, tokenContent, execute) :
tokenContent = tokenContent.strip()
parts = tokenContent.split(' ', 1)
instructName = parts[0].strip()
instructBody = parts[1].strip() if len(parts) > 1 else None
Expand Down Expand Up @@ -236,39 +228,21 @@ def _processInstructionPYTHON(self, instructionBody, execute) :
if instructionBody is not None :
raise CodeTemplateException( 'Instruction "%s" is invalid (line %s)'
% (CodeTemplate.INSTRUCTION_PYTHON, self._line) )
pyCode = ''
while True :
if self._pos > self._endPos :
raise CodeTemplateException( '"%s" instruction is missing (line %s)'
% (CodeTemplate.INSTRUCTION_END, self._line) )
c = self._code[self._pos]
if c == CodeTemplate.TOKEN_OPEN[0] and \
self._code[ self._pos : self._pos + CodeTemplate.TOKEN_OPEN_LEN ] == CodeTemplate.TOKEN_OPEN :
self._pos += CodeTemplate.TOKEN_OPEN_LEN
tokenContent = ''
x = self._pos
while True :
if x > self._endPos :
raise CodeTemplateException("%s is missing (line %s)" % (CodeTemplate.TOKEN_CLOSE, self._line))
c = self._code[x]
if c == CodeTemplate.TOKEN_CLOSE[0] and \
self._code[ x : x + CodeTemplate.TOKEN_CLOSE_LEN ] == CodeTemplate.TOKEN_CLOSE :
self._pos = x + CodeTemplate.TOKEN_CLOSE_LEN
break
elif c == '\n' :
self._line += 1
tokenContent += c
x += 1
tokenContent = tokenContent.strip()
if tokenContent == CodeTemplate.INSTRUCTION_END :
break
raise CodeTemplateException( '"%s" is a bad instruction in a python bloc (line %s)'
% (tokenContent, self._line) )
elif c == '\n' :
self._line += 1
if execute :
pyCode += c
self._pos += 1
idx = self._code.find(CodeTemplate.TOKEN_OPEN, self._pos)
if idx < 0 :
raise CodeTemplateException('"%s" is required but the end of code has been found' % CodeTemplate.TOKEN_OPEN)
pyCode = self._code[self._pos:idx]
self._line += pyCode.count('\n')
self._pos = idx + CodeTemplate.TOKEN_OPEN_LEN
idx = self._code.find(CodeTemplate.TOKEN_CLOSE, self._pos)
if idx < 0 :
raise CodeTemplateException('"%s" is required but the end of code has been found' % CodeTemplate.TOKEN_CLOSE)
tokenContent = self._code[self._pos:idx].strip()
self._line += tokenContent.count('\n')
self._pos = idx + CodeTemplate.TOKEN_CLOSE_LEN
if tokenContent != CodeTemplate.INSTRUCTION_END :
raise CodeTemplateException( '"%s" is a bad instruction in a python bloc (line %s)'
% (tokenContent, self._line) )
if execute :
lines = pyCode.split('\n')
indent = ''
Expand All @@ -280,11 +254,13 @@ def _processInstructionPYTHON(self, instructionBody, execute) :
else :
break
break
pyCode = ''
for line in lines :
if line.find(indent) == 0 :
line = line[len(indent):]
pyCode += line + '\n'
indentLen = len(indent)
for i in range(len(lines)) :
if lines[i].startswith(indent) :
lines[i] = lines[i][indentLen:] + '\n'
else :
lines[i] += '\n'
pyCode = ''.join(lines)
try :
exec(pyCode, self._pyGlobalVars, self._pyLocalVars)
except Exception as ex :
Expand Down

0 comments on commit 6de7552

Please sign in to comment.