diff --git a/python/builtins.py b/python/builtins.py index 19193a58..1f096cc1 100644 --- a/python/builtins.py +++ b/python/builtins.py @@ -96,21 +96,112 @@ def sorted(iterable, reverse=False, key=None): return a ##### str ##### -def __f(self, *args, **kwargs): - if '{}' in self: - for i in range(len(args)): - self = self.replace('{}', str(args[i]), 1) - else: - # Positional arguments will be followed by keyword arguments - # 1. Replace the positional arguments - for i,a in enumerate(args): - self = self.replace('{'+str(i)+'}', str(a)) - - # 2. Replace the keyword arguments - for k,v in kwargs.items(): - self = self.replace('{'+k+'}', str(v)) +def tokenize(s:str) -> list: + tokens = [] + L, R = 0,0 - return self + mode = None + curPos = 0 + lookingForKword = False + + while(R str: + tokens = tokenize(self) + argMap = {} + for i, a in enumerate(args): + argMap[str(i)] = a + final_tokens = [] + for t in tokens: + if t[0] == '{' and t[-1] == '}': + key = t[1:-1] + argMapVal = argMap.get(key, None) + kwargsVal = kwargs.get(key, None) + + if argMapVal is None and kwargsVal is None: + raise ValueError("No arg found for token: "+t) + elif argMapVal is not None: + final_tokens.append(str(argMapVal)) + else: + final_tokens.append(str(kwargsVal)) + else: + final_tokens.append(t) + + return ''.join(final_tokens) + + # if '{}' in self: + # for i in range(len(args)): + # self = self.replace('{}', str(args[i]), 1) + # else: + # # Positional arguments will be followed by keyword arguments + # # 1. Replace the positional arguments + # for i,a in enumerate(args): + # self = self.replace('{'+str(i)+'}', str(a)) + + # # 2. Replace the keyword arguments + # for k,v in kwargs.items(): + # self = self.replace('{'+k+'}', str(v)) + + # return self str.format = __f def __f(self, chars=None):