def render_term(asker, term): return asker.reply(answer=strings.concat( strings.concat( T.from_str("T("), field.get(asker, representations.head(), term)), T.from_str(")") ))
def render_list(asker, x): result = T.from_str("[") first = True for item in lists.iterator(asker, x): item_printed = asker.ask_firmly(render(item)) if not first: item_printed = strings.concat(T.from_str(", "), item_printed) first = False result = strings.concat(result, item_printed) result = strings.concat(result, T.from_str("]")) return asker.reply(answer=result)
def render_pair(asker, x): return asker.reply(answer=strings.concat( strings.concat( T.from_str("("), asker.ask_firmly(render(fields.get(pairs.first(), x))), ), strings.concat( T.from_str(", "), strings.concat( asker.ask_firmly(render(fields.get(pairs.first(), x))), T.from_str(")") ) ) ))
def update_view(asker, view, input): relayer = asker.pass_through(should_return.head) #FIXME using the name view_in is a hack to keep view from being locally scoped... @relayer(should_print.head) def print_string(s): view_in = asker.refresh(view) asker.update(add_line(input), view_in) #FIXME more things going wrong with representation levels... s = convert.unquote(asker, s) line = asker.ask_firmly(render(s)) asker.update(add_line(line), view_in) return properties.trivial() @relayer(should_dispatch.head) def dispatch(x): view_in = asker.refresh(view) asker.update(add_line(input), view_in) head = fields.get(asker, representations.head(), x) bindings = fields.get(asker, representations.bindings(), x) view_in = asker.refresh(view_in) asker.update(add_line(head), view_in) for p in dictionaries.item_iterator(asker, bindings): var, val = pairs.to_pair(asker, p) view_in = asker.refresh(view_in) asker.update(bind_variable(var, val), view_in) return properties.trivial() @relayer(should_assign.head) def assign(s, x): view_in = asker.refresh(view) asker.update(add_line(input), view_in) view_in = asker.refresh(view_in) asker.update(bind_variable(s, x), view_in) return properties.trivial() interpret_response = asker.ask(interpret_input(view, input), handler=relayer) if interpret_response.has_answer(): bindings = dictionaries.to_dict(asker, fields.get(asker, bindings_field(), view)) bindings_str = {strings.to_str(asker, k):v for k, v in bindings.items()} for char in "xyzw" + string.letters: if char not in bindings_str: break asker.update(bind_variable(T.from_str(char), interpret_response.answer), view) new_line = strings.concat( T.from_str("{} = ".format(char)), input ) asker.update(add_line(new_line), view) return asker.reply()
def test_st_alpha_concat(self): data = ["Drew ", "McPherson"] result = concat(data) self.assertEqual(result, "Drew McPherson")
def test_st_escape_char(self): data = ['I don\'t think so'] result = concat(data) self.assertEqual(result, "I don't think so")
def test_st_quote(self): data = ['He said, "I see it"'] result = concat(data) self.assertEqual(result, 'He said, "I see it"')
def test_st_apostrophe(self): data = ["I don't think so"] result = concat(data) self.assertEqual(result, "I don't think so")
def test_st_specl_concat(self): data = ["Drew ", "????? ", "McPherson ", "!!!!!"] result = concat(data) self.assertEqual(result, "Drew ????? McPherson !!!!!")
def test_st_num_concat(self): data = ["9 ", "16 ", "2019"] result = concat(data) self.assertEqual(result, "9 16 2019")
def render_dict(asker, x): return asker.reply(answer=strings.concat( T.from_str("D"), lists.from_dict(x) ))