def get_and_linkify_tags(self): """Find tags in text and convert them to Markdown links. Save found tags to the content. """ found_tags = set() lines = self.text.splitlines(keepends=True) final_words = [] code_block = False # Check each line separately for line in lines: if line[0:3] == "```": code_block = not code_block # noinspection PyTypeChecker if line.find("#") == -1 or line[0:4] == " " or code_block: # Just add the whole line final_words.append(line) continue # Check each word separately # noinspection PyTypeChecker words = line.split(" ") for word in words: # noinspection PyTypeChecker candidate = word.strip().strip("([]),.!?:") # noinspection PyTypeChecker if candidate.startswith("#"): # noinspection PyTypeChecker candidate = candidate.strip("#") if test_tag(candidate.lower()): # Tag found_tags.add(candidate.lower()) try: # noinspection PyTypeChecker tag_word = word.replace( "#%s" % candidate, "[#%s](%s)" % ( candidate, reverse("streams:tag", kwargs={"name": candidate.lower()}) ) ) final_words.append(tag_word) except NoReverseMatch: # Don't linkify, seems we can't generate an url for it final_words.append(word) else: # Not tag final_words.append(word) else: final_words.append(word) text = " ".join(final_words) self.save_tags(found_tags) return text
def get_and_linkify_tags(self): """Find tags in text and convert them to Markdown links. Save found tags to the content. """ found_tags = set() lines = self.text.splitlines(keepends=True) final_words = [] code_block = False # Check each line separately for line in lines: if line[0:3] == "```": code_block = not code_block # noinspection PyTypeChecker if line.find("#") == -1 or line[0:4] == " " or code_block: # Just add the whole line final_words.append(line) continue # Check each word separately # noinspection PyTypeChecker words = line.split(" ") for word in words: # noinspection PyTypeChecker candidate = word.strip().strip("([]),.!?:") # noinspection PyTypeChecker if candidate.startswith("#"): # noinspection PyTypeChecker candidate = candidate.strip("#") if test_tag(candidate.lower()): # Tag found_tags.add(candidate.lower()) try: # noinspection PyTypeChecker tag_word = word.replace( "#%s" % candidate, "[#%s](%s)" % ( candidate, reverse("streams:tag", kwargs={"name": candidate.lower()}) ) ) final_words.append(tag_word) except NoReverseMatch: # Don't linkify, seems we can't generate an url for it final_words.append(word) else: # Not tag final_words.append(word) else: final_words.append(word) text = " ".join(final_words) self.save_tags(found_tags) return text