def generate(self, out_path, lang, srm, solution_file=None):
    template_to_use = None

    template_file = None
    try:
      type_converter = HarnessGenerator.sig_type_converters[lang]
      template_file_name = HarnessGenerator.templates[lang]
      template_path = self._conf.app_data_join(template_file_name)
    
      if not os.path.isfile(template_path):
        self._conf.init_data_file(template_file_name)

      template_file = open(template_path, 'r')
      template_to_use = stringtemplate3.StringTemplate(template_file.read())

      probs = []
      for p in srm.problems:
        (result_type, param_types) = parse_method_sig(p.method_sig)
        
        result_type = type_converter(result_type)
        param_types = [type_converter(param) for param in param_types]

        probs[len(probs):] = [{
          'type_name': p.type_name,
          'method_name': p.method_name,
          'method_arity': p.method_arity,
          'result_type': result_type,
          'param_types': param_types,
          'arg_impl': self.__make_arg_impl(p.method_arity)
        }]

      template_to_use['problems'] = probs
      
      if solution_file:
        print 'setting'
        templates_to_use['solution_file'] = solution_file
    finally:
      if template_file:
        template_file.close()

    out = None
    try:
      out = open(out_path, 'w')
      out.write(str(template_to_use))
    finally:
      if out:
        out.close()
  def generate(self, out_path, lang, srm, problem=None):
    template_to_use = None
    type_converter = None

    problems = None
    if problem:
      problems = [problem]
    else:
      srm.order_problems()
      problems = srm.problems

    template_file = None
    try:
      type_converter = SolutionGenerator.sig_type_converters[lang]
      template_file_name = SolutionGenerator.templates[lang]
      template_path = self._conf.app_data_join(template_file_name)

      if not os.path.isfile(template_path):
        self._conf.init_data_file(template_file_name)

      template_file = open(template_path, 'r')
      template_to_use = stringtemplate3.StringTemplate(template_file.read())
    finally:
      if template_file:
        template_file.close()

    problem_array = []
    for p in problems:
      (result_type, param_types) = parse_method_sig(p.method_sig, keep_param_names=True)

      param_types = [(type_converter(param[0]), param[1]) for param in param_types]

      # create method sig
      method_sig = type_converter(result_type) + ' ' + p.method_name + '('
      method_sig += ', '.join(['%s %s' % param for param in param_types])
      method_sig += ')'

      # create statement
      brs_removed = re.sub(r'\s*<[Bb][Rr]\s*/>\s*', '\n\n', p.statement)
      brs_removed = re.sub(r'\s*<[Bb][Rr]\s*>\s*</[Bb][Rr]\s*>', '\n\n', brs_removed)
  
      paragraphed = []
      for sect in re.split(r'[\r\n]+', brs_removed):
        paragraphed[len(paragraphed):] = ['<p>', sect, '</p>']
      paragraphed = ''.join(paragraphed)

      document, errors = tidy_document(
        paragraphed, options={'show-body-only': True, 'wrap': 76, 'indent': True, 'vertical-space': True})
      document = re.sub(r'</?p/?>\n', '', str(document))
      statement = unescape_html(document.replace('\n', '\n//! '))

      # assign properties for problem
      problem_array[len(problem_array):] = [{
        'level': p.level,
        'statement': statement,
        'type_name': p.type_name,
        'method_sig': method_sig
      }]

    template_to_use['srm'] = {'problems': problem_array, 'title': srm.title}

    out = None
    try:
      out = open(out_path, 'w')
      out.write(str(template_to_use))
    finally:
      if out:
        out.close()
Exemple #3
0
 def validate_arg_input(self, txt):
   # TODO: caching this data may make things faster. would definitely be cleaner...
   result, params = parse_method_sig(self.method_sig)
   return validate_arg_data(params, txt)