def record_assignments(content, statements=None):
  def record_assignment(match):
    label = eval(content[match.start('label'):match.end('label')].strip())
    maybe_statement = MaybeStatement(MaybeStatement.ASSIGNMENT, match.start(), label, match.end())
    maybe_statement.content = content[match.start():match.end()]
    maybe_statement.line = len(content[:match.end()].splitlines())
    alternative_start = match.start('alternatives')
    alternatives = content[match.start('alternatives'):match.end('alternatives')]
    for value, alternative in enumerate(alternatives.split(',')):
      alternative_content = alternative.strip()
      alternative_start += len(alternative) - len(alternative.lstrip())
      maybe_alternative = MaybeAlternative(value,
                                           maybe_statement.start,
                                           alternative_start,
                                           alternative_start + len(alternative_content),
                                           alternative_content)
      maybe_statement.alternatives.append(maybe_alternative)
      alternative_start += len(alternative.lstrip()) + 1
    statements[maybe_statement.label] = maybe_statement
  
  if not statements:
    statements = {}
  cleaned_content = clean_string(content)
  
  for match in ASSIGNMENT_PATTERN.finditer(cleaned_content):
    record_assignment(match)

  return statements
def record_blocks(content, statements=None):
  if not statements:
    statements = {}
  cleaned_content = clean_string(content)
  
  for match in BLOCK_START_PATTERN.finditer(cleaned_content):
    maybe_block = match_to_block(match, content)
    assert not statements.has_key(maybe_block.label)
    statements[maybe_block.label] = maybe_block
  return statements
def record_constants(content, statements=None):
  if not statements:
    statements = []
  file_line_count = len(content.splitlines())
  cleaned_content = clean_string(content)

  for match in CONSTANT_PATTERN.finditer(content):
    line = len(content[:match.end()].splitlines())
    statements.append(ConstantLine(line, match.group().strip(), file_line_count))

  return statements
def record_blocks(content, statements=None):
  if not statements:
    statements = []
  file_line_count = len(content.splitlines())
  cleaned_content = clean_string(content)
  
  for match in find_blocks(cleaned_content):
    if_else_block = match_to_block(match, cleaned_content, content)
    if_else_block.file_line_count = file_line_count
    statements.append(if_else_block)
  return statements
def record_timers(content, statements=None):
  if not statements:
    statements = []
  cleaned_content = clean_string(content)

  file_line_count = len(content.splitlines())

  for match in TIMER_PATTERN.finditer(content):
    line = len(content[:match.end()].splitlines())
    statements.append(TimerLine(match.group('timer_type').strip(), line, match.group().strip(), file_line_count))

  return statements
def replace_blocks(content, standard_indent="  "):
  labels = {}
  package_name = get_package_name(content)
  
  while True:
    cleaned_content = clean_string(content)
    block_match = BLOCK_START_PATTERN.search(cleaned_content)
    if block_match:
      maybe_block = match_to_block(block_match, content)
      name = "__{slug}__{nonce}".format(slug=re.sub("[^A-Za-z0-9]", "_", maybe_block.label),
                                        nonce=random.randint(0,1024))
      inner = []
      alternative_indent = re.match("^\s*", maybe_block.alternatives[0].content).group()
      for i, alternative in enumerate(maybe_block.alternatives):
        if i == 0:
          block_template = JAVA_LAST_BLOCK_ALTERNATIVE_TEMPLATE
        else:
          block_template = JAVA_BLOCK_ALTERNATIVE_TEMPLATE

        unindented_inner = block_template.format(value=alternative.value,
                                                 contents=alternative.content.rstrip(),
                                                 indent=alternative_indent,
                                                 stdindent=standard_indent,
                                                 label=maybe_block.label,
                                                 package=package_name,
                                                 name=name)
        indented_inner = []
        for line in unindented_inner.splitlines():
          indented_inner.append(standard_indent + line)
        indented_inner = "\n".join(indented_inner)
        inner.append(indented_inner)

      reversed_inner = "".join(reversed(inner))
      replacement = JAVA_BLOCK_TEMPLATE.format(name=name, stdindent=standard_indent,
                                               package=package_name,
                                               label=maybe_block.label,
                                               inner=reversed_inner)
      indented_replacement = []
      for line in replacement.splitlines():
        indented_replacement.append(block_match.group('indent') + line)
      indented_replacement = "\n".join(indented_replacement)
      labels[maybe_block.label] = indented_replacement
      content = content[:maybe_block.start] + indented_replacement + content[maybe_block.end:]
    else:
      break

  return content, labels
def replace_assignments(content, standard_indent="  "):
  package_name = get_package_name(content)
  def replace_assignment(match, content, labels):
    label = eval(content[match.start('label'):match.end('label')].strip())
    indent = match.group('indent')
    variable = match.group('variable').rstrip()
    separator = "\n{indent}}} or {{\n".format(indent=indent)
    name = re.split(r"""\s+""", match.group('variable').strip())[-1]
    alternatives = content[match.start('alternatives'):match.end('alternatives')]
    inner = separator.join(["{indent}{name} = {a};".format(indent=standard_indent, name=name, a=a.strip()) for a in alternatives.split(',')])
    replacement = ASSIGNMENT_TEMPLATE.format(indent=indent,
                                             package=package_name,
                                             variable=variable,
                                             label=label,
                                             inner=inner)
    if name == variable:
      # Jinghao: Mar 19, 2015
      # remove the declaration: variable was assigned a value without declaration.
      replacement = '\n'.join(replacement.split('\n')[2:])

    indented_replacement = []
    for line in replacement.splitlines():
      indented_replacement.append(indent + line)
    indented_replacement = "\n".join(indented_replacement)
    replacement = indented_replacement
    labels[label] = replacement
    return content[:match.start()] + replacement + content[match.end():]
  
  labels = {}

  while True:
    cleaned_content = clean_string(content)
    assignment_match = ASSIGNMENT_PATTERN.search(cleaned_content)
    if assignment_match:
      content = replace_assignment(assignment_match, content, labels)
    else:
      break
  return content, labels
Ejemplo n.º 8
0
import lib
import glob
import os
import re
import sys

nav = vars.get_nav()
read_nav = True
scene_num = 1
dir = 'L:\\cbt_video_published\\content\\PPL05-air-air\\'
os.chdir(dir)
lesson_name = nav.get('lesson_name', 'Lesson')

#remove full stop from end of lesson_name
lesson_name = re.sub(r'\.$', '', lesson_name)
lesson_name = lib.clean_string(lesson_name)

#start to build ini_lesson.js
last_scene = ''
ini = 'var lesson_title = \'' + lesson_name + '\';\n'
ini += 'var my_scenes;\n'
ini += 'my_scenes = [];\n'

print('BUILDING HTML FILES FROM GLOB LIST:')

#build files from glob

for file in glob.glob('*.mp4'):

    video_file = file[:-4]
    scene_number = re.sub(r'.*-s', '', video_file)
 def test_match_block(self):
   cleaned_content = lib.clean_string(self.test_file)
   matches = ifelse.find_blocks(cleaned_content)
   self.assertEqual(self.answers['statement_count'], len(matches))
   for match in matches:
     self.assertEqual(match.group()[-1], "(")
 def test_clean_string(self):
   string = lib.clean_string(self.test_file).rstrip('\n')
   self.assertEqual(strip_quotes(strip_whitespace(string)), self.answers['is_block_test'])
 def test_match_timers(self):
   cleaned_content = lib.clean_string(self.test_file)
   matches = list(timers.TIMER_PATTERN.finditer(cleaned_content))
   self.assertEqual(self.answers['statement_count'], len(matches))