Commit 995caf70 by Peter Baratta

Add proper heights to wrapping parens

Start implementing some of Ned's comments.
parent 5d8d6c20
...@@ -114,7 +114,7 @@ def find_vars_funcs(tree): ...@@ -114,7 +114,7 @@ def find_vars_funcs(tree):
def check_variables(tree, all_variables, all_functions, case_sensitive): def check_variables(tree, all_variables, all_functions, case_sensitive):
""" """
Confirm the only variables in the tree are defined. Confirm that all the variables used in the tree are valid/defined.
Otherwise, raise an UndefinedVariable containing all bad variables. Otherwise, raise an UndefinedVariable containing all bad variables.
""" """
...@@ -347,7 +347,11 @@ def evaluator(variables, functions, string, case_sensitive=False): ...@@ -347,7 +347,11 @@ def evaluator(variables, functions, string, case_sensitive=False):
check_variables(tree, set(all_variables), set(all_functions), case_sensitive) check_variables(tree, set(all_variables), set(all_functions), case_sensitive)
# Create a recursion to evaluate the tree # Create a recursion to evaluate the tree
casify = lambda x: x if case_sensitive else x.lower() # Lowercase for case insens. if case_sensitive:
casify = lambda x: x
else:
casify = lambda x: x.lower() # Lowercase for case insens.
evaluate_action = { evaluate_action = {
'number': eval_number, 'number': eval_number,
'variable': lambda x: all_variables[casify(x[0])], 'variable': lambda x: all_variables[casify(x[0])],
......
...@@ -16,7 +16,7 @@ def PRINT(x): ...@@ -16,7 +16,7 @@ def PRINT(x):
if PREVIEW_DEBUG: if PREVIEW_DEBUG:
print x print x
class LatexRendered: class LatexRendered(object):
""" """
Data structure to hold a typeset representation of some math. Data structure to hold a typeset representation of some math.
...@@ -42,18 +42,27 @@ class LatexRendered: ...@@ -42,18 +42,27 @@ class LatexRendered:
# generate parens and overwrite self.latex # generate parens and overwrite self.latex
if parens != None: if parens != None:
if parens == '{': left_parens = parens
parens = r'\{' if left_parens == '{':
left_parens = r'\{'
pairs = {'(': ')', pairs = {'(': ')',
'[': ']', '[': ']',
r'\{': r'\}'} r'\{': r'\}'}
if parens not in pairs: if left_parens not in pairs:
raise Exception(u"Unknown parenthesis '{}': coder error".format(parens)) raise Exception(
u"Unknown parenthesis '{}': coder error".format(left_parens)
)
right_parens = pairs[left_parens]
if self.tall:
left_parens = r"\left" + left_parens
right_parens = r"\right" + right_parens
self.latex = u"{left}{expr}{right}".format( self.latex = u"{left}{expr}{right}".format(
left=parens, left=left_parens,
expr=latex, expr=latex,
right=pairs[parens] right=right_parens
) )
def render_number(children): def render_number(children):
...@@ -214,11 +223,14 @@ def latex_preview(string, variables=None, functions=None, case_sensitive=False): ...@@ -214,11 +223,14 @@ def latex_preview(string, variables=None, functions=None, case_sensitive=False):
# Parse tree # Parse tree
tree = parse_algebra(string) tree = parse_algebra(string)
# Get our variables together # Get our variables together.
variables, functions = add_defaults(variables or (), functions or (), case_sensitive) variables, functions = add_defaults(variables or (), functions or (), case_sensitive)
# Create a recursion to evaluate the tree # Create a recursion to evaluate the tree.
casify = lambda x: x if case_sensitive else x.lower() # Lowercase for case insens. if case_sensitive:
casify = lambda x: x
else:
casify = lambda x: x.lower() # Lowercase for case insens.
render_action = { render_action = {
'number': render_number, 'number': render_number,
'variable': variable_closure(set(variables), casify), 'variable': variable_closure(set(variables), casify),
......
...@@ -1737,7 +1737,7 @@ class FormulaResponse(LoncapaResponse): ...@@ -1737,7 +1737,7 @@ class FormulaResponse(LoncapaResponse):
samples.split('@')[1].split('#')[0].split(':'))) samples.split('@')[1].split('#')[0].split(':')))
ranges = dict(zip(variables, sranges)) ranges = dict(zip(variables, sranges))
for i in range(numsamples): for _ in range(numsamples):
instructor_variables = self.strip_dict(dict(self.context)) instructor_variables = self.strip_dict(dict(self.context))
student_variables = dict() student_variables = dict()
# ranges give numerical ranges for testing # ranges give numerical ranges for testing
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment