예제 #1
0
파일: answers.py 프로젝트: xclmj/DAPPER
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))
예제 #2
0
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))
예제 #3
0
파일: answers.py 프로젝트: yfa008/DAPPER
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))
예제 #4
0
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))
예제 #5
0
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] + '&#x200b;'
        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] + '&#x200b;'
        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
예제 #6
0
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
예제 #7
0
def markdown(text):
    return md2html(text.replace("\n", "\n\n"))
예제 #8
0
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] + '&#x200b;'
        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] + '&#x200b;'
        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