def check_text_tags(s): tokens = textsupport.tokenize(unicode(s)) tag_stack = [ ] for type, text in tokens: #@ReservedAssignment if type != TAG: continue # Strip off arguments for tags. if text.find('=') != -1: text = text[:text.find('=')] # Closing tag. if text and text[0] == '/': if not tag_stack: return "Close text tag '%s' does not match an open text tag." % text if tag_stack[-1] != text[1:]: return "Close text tag '%s' does not match open text tag '%s'." % (text, tag_stack[-1]) tag_stack.pop() continue if text not in text_tags: return "Text tag '%s' is not known." % text if text_tags[text]: tag_stack.append(text) if tag_stack: return "One or more text tags were left open at the end of the string: " + ", ".join([ "'" + i + "'" for i in tag_stack]) return None
def check_text_tags(s): """ :doc: lint Checks the text tags in s for correctness. Returns an error string if there is an error, or None if there is no error. """ all_tags = dict(text_tags) custom_tags = renpy.config.custom_text_tags if custom_tags: all_tags.update(custom_tags) self_closing_custom_tags = renpy.config.self_closing_custom_text_tags if self_closing_custom_tags: all_tags.update(dict.fromkeys(self_closing_custom_tags, False)) try: tokens = textsupport.tokenize(unicode(s)) except Exception as e: return e.args[0] tag_stack = [] for type, text in tokens: # @ReservedAssignment if type != TAG: continue if text[0] == "#": continue # Strip off arguments for tags. if text.find('=') != -1: text = text[:text.find('=')] # Closing tag. if text and text[0] == '/': if not tag_stack: return "Close text tag '%s' does not match an open text tag." % text if tag_stack[-1] != text[1:]: return "Close text tag '%s' does not match open text tag '%s'." % ( text, tag_stack[-1]) tag_stack.pop() continue if text not in all_tags: return "Text tag '%s' is not known." % text if all_tags[text]: tag_stack.append(text) if tag_stack: return "One or more text tags were left open at the end of the string: " + ", ".join( ["'" + i + "'" for i in tag_stack]) return None
def check_text_tags(s): """ :doc: lint Checks the text tags in s for correctness. Returns an error string if there is an error, or None if there is no error. """ custom_tags = renpy.config.custom_text_tags if custom_tags: all_tags = dict(text_tags) all_tags.update(renpy.config.custom_text_tags) else: all_tags = text_tags try: tokens = textsupport.tokenize(unicode(s)) except Exception as e: return e.args[0] tag_stack = [ ] for type, text in tokens: # @ReservedAssignment if type != TAG: continue if text[0] == "#": continue # Strip off arguments for tags. if text.find('=') != -1: text = text[:text.find('=')] # Closing tag. if text and text[0] == '/': if not tag_stack: return "Close text tag '%s' does not match an open text tag." % text if tag_stack[-1] != text[1:]: return "Close text tag '%s' does not match open text tag '%s'." % (text, tag_stack[-1]) tag_stack.pop() continue if text not in all_tags: return "Text tag '%s' is not known." % text if all_tags[text]: tag_stack.append(text) if tag_stack: return "One or more text tags were left open at the end of the string: " + ", ".join([ "'" + i + "'" for i in tag_stack]) return None