def formatted_display(TYPE, s, bg_color): s = s[1:] # Remove newline bg = 'background-color:' + bg_color + ';' #d8e7ff #e2edff if TYPE == "HTML": s = s elif TYPE == "MD": s = md2html(s) elif TYPE == "TXT": s = '<code style="' + bg + '">' + s + '</code>' s = ''.join(['<div ', 'style="', bg, 'padding:0.5em;">', str(s), '</div>']) display(HTML(s))
def show_answer(excercise_tag): TYPE, s = answers[excercise_tag] s = s[1:] # Remove newline if TYPE == "HTML": s = s elif TYPE == "MD": s = md2html(s) elif TYPE == "TXT": s = '<code style="' + bg_color + '">' + s + '</code>' s = ''.join( ['<div ', 'style="', bg_color, 'padding:0.5em;">', str(s), '</div>']) display(HTML(s))
def show_answer(excercise_tag): form, ans = answers[excercise_tag] ans = ans[1:] # Remove newline if form == "HTML": source = ans elif form == "MD": source = md2html(ans) elif form == "TXT": source = '<code style="' + bg_color + '">' + ans + '</code>' source = ''.join([ '<div ', 'style="', bg_color, 'padding:0.5em;">', str(source), '</div>' ]) display(HTML(source))
def formatted_display(TYPE, content, bg_color): # Remove 1st linebreak content = content[1:] # Convert from TYPE to HTML if TYPE == "HTML": content = content elif TYPE == "TXT": content = '<pre><code>' + content + '</code></pre>' elif TYPE == "MD": content = md2html(include_macros(content)) # Make bg style bg_color = 'background-color:' + bg_color + ';' #d8e7ff #e2edff # Compose string content = '<div style="' + bg_color + 'padding:0.5em;">' + str( content) + '</div>' # Fix Colab - MathJax incompatibility setup_typeset() # Display display(HTML(content))
def convert(mdtex, extensions=[], splitParagraphs=True): ''' converts recursively the Markdown-LaTeX-mixture to HTML with MathML ''' found = False # handle all paragraphs separately (prevents aftereffects) if splitParagraphs: parts = re.split("\n\n", mdtex) result = '' for part in parts: result += convert(part, extensions, splitParagraphs=False) return result # find first $$-formula: parts = re.split('\${2}', mdtex, 2) if len(parts) > 1: found = True result = convert(parts[0], extensions, splitParagraphs=False) + '\n' try: result += '<div class="blockformula">' + tex2mathml( parts[1]) + '</div>\n' except: result += '<div class="blockformula">' + convError + '</div>' if len(parts) == 3: result += convert(parts[2], extensions, splitParagraphs=False) else: result += '<div class="blockformula">' + incomplete + '</div>' # else find first $-formulas: else: parts = re.split('\${1}', mdtex, 2) if len(parts) > 1 and not found: found = True try: mathml = tex2mathml(parts[1]) except: mathml = convError if parts[0].endswith('\n\n') or parts[ 0] == '': # make sure textblock starts before formula! parts[0] = parts[0] + '​' if len(parts) == 3: result = convert(parts[0] + mathml + parts[2], extensions, splitParagraphs=False) else: result = convert(parts[0] + mathml + incomplete, extensions, splitParagraphs=False) # else find first \[..\]-equation: else: parts = re.split(r'\\\[', mdtex, 1) if len(parts) > 1 and not found: found = True result = convert(parts[0], extensions, splitParagraphs=False) + '\n' parts = re.split(r'\\\]', parts[1], 1) try: result += '<div class="blockformula">' + tex2mathml( parts[0]) + '</div>\n' except: result += '<div class="blockformula">' + convError + '</div>' if len(parts) == 2: result += convert(parts[1], extensions, splitParagraphs=False) else: result += '<div class="blockformula">' + incomplete + '</div>' # else find first \(..\)-equation: else: parts = re.split(r'\\\(', mdtex, 1) if len(parts) > 1 and not found: found = True subp = re.split(r'\\\)', parts[1], 1) try: mathml = tex2mathml(subp[0]) except: mathml = convError if parts[0].endswith('\n\n') or parts[ 0] == '': # make sure textblock starts before formula! parts[0] = parts[0] + '​' if len(subp) == 2: result = convert(parts[0] + mathml + subp[1], extensions, splitParagraphs=False) else: result = convert(parts[0] + mathml + incomplete, extensions, splitParagraphs=False) if not found: # no more formulas found result = md2html(mdtex, extensions=extensions) return result
def convert(mdtex): ''' converts recursively the mdTeX-mixture to HTML with MathML ''' found = False # find first $$-formula: parts = re.split('\${2}', mdtex, 2) if len(parts) > 1: found = True result = convert(parts[0]) + '\n' try: result += '<div class="blockformula">' + tex2mathml( parts[1]) + '</div>\n' except: result += '<div class="blockformula">' + convError + '</div>' if len(parts) == 3: result += convert(parts[2]) else: result += '<div class="blockformula">' + incomplete + '</div>' # else find first $-formulas: else: parts = re.split('\${1}', mdtex, 2) if len(parts) > 1 and not found: found = True try: mathml = tex2mathml(parts[1]) except: mathml = convError if parts[0].endswith('\n\n') or parts[ 0] == '': # make sure textblock starts before formula! parts[0] = parts[0] + ' ' if len(parts) == 3: result = convert(parts[0] + mathml + parts[2]) else: result = convert(parts[0] + mathml + incomplete) # else find first \[..\]-equation: else: parts = re.split(r'\\\[', mdtex, 1) if len(parts) > 1 and not found: found = True result = convert(parts[0]) + '\n' parts = re.split(r'\\\]', parts[1], 1) try: result += '<div class="blockformula">' + tex2mathml( parts[0]) + '</div>\n' except: result += '<div class="blockformula">' + convError + '</div>' if len(parts) == 2: result += convert(parts[1]) else: result += '<div class="blockformula">' + incomplete + '</div>' # else find first \(..\)-equation: else: parts = re.split(r'\\\(', mdtex, 1) if len(parts) > 1 and not found: found = True subp = re.split(r'\\\)', parts[1], 1) try: mathml = tex2mathml(subp[0]) except: mathml = convError if parts[0].endswith('\n\n') or parts[ 0] == '': # make sure textblock starts before formula! parts[0] = parts[0] + ' ' if len(subp) == 2: result = convert(parts[0] + mathml + subp[1]) else: result = convert(parts[0] + mathml + incomplete) if not found: # no more formulas found result = md2html(mdtex) return result
def markdown(text): return md2html(text.replace("\n", "\n\n"))
def convert(mdtex, extensions=[], splitParagraphs=True): ''' converts recursively the Markdown-LaTeX-mixture to HTML with MathML ''' found = False # entirely skip code-blocks: parts = re.split('```', mdtex, 2) if len(parts) > 1: found = True result = convert(parts[0], extensions, splitParagraphs=False) + '\n' result += md2html('```' + parts[1] + '```', extensions=extensions) + '\n' if len(parts) == 3: result += convert(parts[2], extensions, splitParagraphs=False) return result # handle all paragraphs separately (prevents follow-up rendering errors) if splitParagraphs: parts = re.split("\n\n", mdtex) result = '' for part in parts: result += convert(part, extensions, splitParagraphs=False) return result # skip code-spans: parts = re.split('`', mdtex, 2) if len(parts) > 1: found = True codehtml = md2html('`' + parts[1] + '`', extensions=extensions) codehtml = re.sub('^<[a-z]+>', '', codehtml) # remove opening tag codehtml = re.sub('</[a-z]+>$', '', codehtml) # remove closing tag ranString = ''.join( random.choice(string.ascii_letters) for i in range(16)) if len(parts) == 3: result = convert(parts[0] + 'CoDeRePlAcEmEnT' + ranString + parts[2], extensions, splitParagraphs=False) else: result = convert(parts[0] + 'CoDeRePlAcEmEnT' + ranString, extensions, splitParagraphs=False) result = result.replace('CoDeRePlAcEmEnT' + ranString, codehtml) # find first $$-formula: else: parts = re.split('\${2}', mdtex, 2) if len(parts) > 1 and not found: found = True result = convert(parts[0], extensions, splitParagraphs=False) + '\n' try: result += '<div class="blockformula">' + tex2mathml( parts[1]) + '</div>\n' except: result += '<div class="blockformula">' + convError + '</div>' if len(parts) == 3: result += convert(parts[2], extensions, splitParagraphs=False) else: result += '<div class="blockformula">' + incomplete + '</div>' # else find first $-formulas: else: parts = re.split('\${1}', mdtex, 2) if len(parts) > 1 and not found: found = True try: mathml = tex2mathml(parts[1]) except: mathml = convError if parts[0].endswith('\n\n') or parts[ 0] == '': # make sure textblock starts before formula! parts[0] = parts[0] + '​' if len(parts) == 3: result = convert(parts[0] + mathml + parts[2], extensions, splitParagraphs=False) else: result = convert(parts[0] + mathml + incomplete, extensions, splitParagraphs=False) # else find first \[..\]-equation: else: parts = re.split(r'\\\[', mdtex, 1) if len(parts) > 1 and not found: found = True result = convert(parts[0], extensions, splitParagraphs=False) + '\n' parts = re.split(r'\\\]', parts[1], 1) try: result += '<div class="blockformula">' + tex2mathml( parts[0]) + '</div>\n' except: result += '<div class="blockformula">' + convError + '</div>' if len(parts) == 2: result += convert(parts[1], extensions, splitParagraphs=False) else: result += '<div class="blockformula">' + incomplete + '</div>' # else find first \(..\)-equation: else: parts = re.split(r'\\\(', mdtex, 1) if len(parts) > 1 and not found: found = True subp = re.split(r'\\\)', parts[1], 1) try: mathml = tex2mathml(subp[0]) except: mathml = convError if parts[0].endswith('\n\n') or parts[ 0] == '': # make sure textblock starts before formula! parts[0] = parts[0] + '​' if len(subp) == 2: result = convert(parts[0] + mathml + subp[1], extensions, splitParagraphs=False) else: result = convert(parts[0] + mathml + incomplete, extensions, splitParagraphs=False) if not found: # no more formulas found result = md2html(mdtex, extensions=extensions) return result