示例#1
0
def _equation_processor(equation_index, equation_div_contents):
    within_div_tag = equation_div_contents.split(">", 1)[0]
    has_label = Flag()
    id_block_single_quotation_marks = find_block.Block(
        "id='", "'", lambda id_contents: _equation_reference(
            equation_index, id_contents, has_label), False)
    id_block_double_quotation_marks = find_block.Block(
        "id=\"", "\"", lambda id_contents: _equation_reference(
            equation_index, id_contents, has_label), False)
    within_div_tag_processor = find_block.Processor(
        [id_block_single_quotation_marks, id_block_double_quotation_marks])
    within_div_tag_processor.process(within_div_tag)
    if not has_label.is_set:
        return equation_div_contents
    equation_numbering_block_single_quotation_marks = find_block.Block(
        "<span class='maruku-eq-number'>", "</span>", lambda span_content:
        ("<span class='maruku-eq-number'>" + "(" + str(equation_index.index) +
         ")" + "</span>"), True)
    equation_numbering_block_double_quotation_marks = find_block.Block(
        "<span class=\"maruku-eq-number\">", "</span>", lambda span_content:
        ("<span class=\"maruku-eq-number\">" + "(" + str(equation_index.index)
         + ")" + "</span>"), True)
    entire_div_processor = find_block.Processor([
        equation_numbering_block_single_quotation_marks,
        equation_numbering_block_double_quotation_marks
    ])
    processed_div_contents = entire_div_processor.process(
        equation_div_contents)
    return processed_div_contents
示例#2
0
def process_tex_theorem_environments(page_content):
    preliminary_theorem_environment_blocks = list(
        theorem_environment_blocks.define_all_preliminary())
    preliminary_theorem_environment_blocks.extend(
        list(table_of_contents_block.define_all_sections()))
    preliminary_theorem_environment_processor = find_block.Processor(
        preliminary_theorem_environment_blocks)
    processed_content = preliminary_theorem_environment_processor.process(
        page_content)
    processed_content = _process_references(processed_content)
    theorem_environment_processor = find_block.Processor(
        list(theorem_environment_blocks.define_all()))
    return theorem_environment_processor.process(processed_content)
示例#3
0
def handle_tikz_diagrams(content):
    processor = find_block.Processor([
        define_tikz(),
        define_tikz_commutative_diagram(),
        nowiki_block.define(True)
    ])
    return processor.process(content)
示例#4
0
def handle_xypic_diagrams(content):
    processor = find_block.Processor([
        define_xymatrix(),
        define_xymatrix_default_size(),
        define_xymatrix_document_parameters(),
        nowiki_block.define(True) ])
    return processor.process(content)
示例#5
0
def extract_tikz_libraries(tikz_diagram):
    libraries = []
    tikz_library_block = find_block.Block(
        "\\usetikzlibrary{",
        "}",
        lambda library: libraries.append(
            "\\usetikzlibrary{" + library + "}"),
        False)
    tikz_library_processor = find_block.Processor([tikz_library_block])
    without_tikz_libraries = tikz_library_processor.process(tikz_diagram)
    library_lines = "\n".join(libraries)
    return library_lines, without_tikz_libraries
def _label(block_contents):
   label = Label()
   label_block = find_block.Block(
       "\\label{",
       "}",
       lambda label_block_contents: label.set_to(label_block_contents),
       True)
   label_processor = find_block.Processor([label_block])
   block_contents_without_label = label_processor.process(block_contents)
   if block_contents_without_label:
       block_contents_without_label = block_contents_without_label.strip()
   return label.get(), block_contents_without_label
示例#7
0
def add_placeholder(page_content, placeholder, table_of_contents_flag,
                    need_to_render_for_toc_flag):
    header_block = find_block.Block(
        "\n##", " ",
        lambda header: _find_header_which_needs_rendering_processor(
            header, need_to_render_for_toc_flag), True)
    placeholder_block = find_block.Block(
        placeholder, None,
        lambda found_placeholder: _process_table_of_contents_block(
            placeholder + "\n\n", table_of_contents_flag), True)
    processor = find_block.Processor([
        table_of_contents_block.define(placeholder, table_of_contents_flag),
        placeholder_block, header_block
    ])
    return processor.process(page_content)
示例#8
0
def render(page_id, page_content):
    _check_for_scripting(page_content)
    page_content = centre_block.handle_initial_centring(page_content)
    page_content = tikz_diagram_block.handle_tikz_diagrams(page_content)
    page_content = xypic_diagram_block.handle_xypic_diagrams(page_content)
    pages_to_re_render_and_expire = []
    pages_to_render_to_include = []
    references_before_rendering = _references_before_rendering(page_id)
    page_name = _name_of_page(page_id)
    rendering_web_id = _web_id_of_page(page_id)
    pages_to_re_render_and_expire.extend(_pages_which_require(page_name))
    blocks = [
        include_block.define(page_id, rendering_web_id,
                             references_before_rendering,
                             pages_to_render_to_include),
        redirects_block.define(page_id, rendering_web_id,
                               references_before_rendering,
                               pages_to_re_render_and_expire),
        link_block.define(page_id, rendering_web_id,
                          references_before_rendering),
        category_block.define(page_id, rendering_web_id,
                              references_before_rendering),
        nowiki_block.define(),
        reference_block.define(),
        tex_block.define_single(page_id),
        tex_block.define_double(page_id),
        script_block.define_script_tags(),
        script_block.define_javascript_prefix()
    ]
    processor = find_block.Processor(blocks)
    processed_content = processor.process(page_content)
    processed_content = _surround_tables_with_blank_lines(processed_content)
    references_before_rendering = _remove_references_not_from_rendering_web(
        references_before_rendering, rendering_web_id)
    if references_before_rendering:
        logger.info("On page with ID " + str(page_id) +
                    " the following references no longer exist: " +
                    str(references_before_rendering))
    _delete_references_which_no_longer_exist(references_before_rendering,
                                             pages_to_re_render_and_expire)
    pages_to_re_render_and_expire.extend(pages_to_render_to_include)
    pages_to_re_render_and_expire.extend(_pages_included_in(page_name))
    pages_to_re_render_and_expire = list(set(pages_to_re_render_and_expire))
    if pages_to_render_to_include:
        pages_to_re_render_and_expire.append(page_id)
    return processed_content, pages_to_re_render_and_expire
示例#9
0
def reference_equations(page_content, web_address, page_content_file_name):
    root_page_content_directory = os.environ["NLAB_PAGE_CONTENT_DIRECTORY"]
    page_content_directory = os.path.join(root_page_content_directory,
                                          web_address)
    equation_references_directory = os.path.join(page_content_directory,
                                                 "equation_references")
    equation_references_path = os.path.join(equation_references_directory,
                                            page_content_file_name + ".json")
    with open(equation_references_path, "r") as equation_references_file:
        equation_references = json.load(equation_references_file)
    processor = find_block.Processor([
        _equation_reference_block(equation_references),
        _maruku_equation_reference_block_single_quotation_marks(
            equation_references),
        _maruku_equation_reference_block_double_quotation_marks(
            equation_references)
    ])
    return processor.process(page_content)
示例#10
0
def extract_document_parameters(diagram):
    split_at_first_curly_brace = diagram.split("{", 1)
    document_parameters = {
        "font_size": "",
        "document_header_parameters": ["12pt"] }
    document_parameters_block = find_block.Block(
        "[",
        "]",
        lambda within_square_brackets: document_parameters.update(
            parse_document_parameters(within_square_brackets)),
        False)
    document_parameters_processor = find_block.Processor([
        document_parameters_block])
    processed_preamble = document_parameters_processor.process(
        split_at_first_curly_brace[0])
    return (
        document_parameters,
        processed_preamble + "{" + split_at_first_curly_brace[1])
示例#11
0
def add_table_of_contents(page_content):
    table_of_contents_flag = Flag()
    table_of_contents_placeholder = "[[!table_of_contents]]"
    # Maruku typically surrounds \tableofcontents with a
    # paragraph
    page_content = re.sub(r'<p>\s*\\tableofcontents\s*</p>',
                          r'\\tableofcontents', page_content)
    processor = find_block.Processor([
        table_of_contents_block.define_maruku_single_quotation_marks(
            table_of_contents_placeholder, table_of_contents_flag),
        table_of_contents_block.define_maruku_double_quotation_marks(
            table_of_contents_placeholder, table_of_contents_flag),
        table_of_contents_block.define_tex(table_of_contents_placeholder,
                                           table_of_contents_flag)
    ])
    page_content_with_table_of_contents_placeholder = processor.process(
        page_content)
    if not table_of_contents_flag.is_set:
        return page_content
    return table_of_contents.add_to(
        page_content_with_table_of_contents_placeholder,
        table_of_contents_placeholder)
示例#12
0
def number_equations(page_content, web_address, page_content_file_name):
    equation_index = _EquationIndex()
    processor = find_block.Processor([
        _equation_block_single_quotation_marks(equation_index),
        _equation_block_double_quotation_marks(equation_index)
    ])
    processed_content = processor.process(page_content)
    root_page_content_directory = os.environ["NLAB_PAGE_CONTENT_DIRECTORY"]
    page_content_directory = os.path.join(root_page_content_directory,
                                          web_address)
    equation_references_directory = os.path.join(page_content_directory,
                                                 "equation_references")
    try:
        os.mkdir(equation_references_directory)
    except OSError as osError:
        if osError.errno != errno.EEXIST:
            raise osError
    equation_references_path = os.path.join(equation_references_directory,
                                            page_content_file_name + ".json")
    with open(equation_references_path, "w") as equation_references_file:
        equation_references_file.write(
            json.dumps(equation_index.reference_dictionary, indent=2))
    return processed_content
示例#13
0
def handle_initial_centring(content):
    processor = find_block.Processor(
        [define_center(),
         define_centre(),
         nowiki_block.define(True)])
    return processor.process(content)
示例#14
0
def parse_to_html(tex_string):
    tex_processor = find_block.Processor([_mathcal_block()])
    processed_tex = tex_processor.process(tex_string)
    processed_tex = _process_symbols(processed_tex)
    return ("<span class='mathematics'>" + processed_tex + "</span>")
示例#15
0
def handle_post_centring(content):
    centre_paragraph_block = find_block.Block("<p>for_centring",
                                              "/for_centring</p>",
                                              post_centre_processor, True)
    return find_block.Processor([centre_paragraph_block]).process(content)
示例#16
0
def correct_svg_header(page_content):
    svg_header_processor = find_block.Processor([svg_header_block.define()])
    return svg_header_processor.process(page_content)
示例#17
0
def post_process_tex(page_content):
    tex_parser_blocks = [tex_block.define_tex_post()]
    tex_parser_processor = find_block.Processor(tex_parser_blocks)
    return tex_parser_processor.process(page_content)
def _add_placeholder(page_content, placeholder, table_of_contents_flag):
    processor = find_block.Processor(
        [table_of_contents_block.define(placeholder, table_of_contents_flag)])
    return processor.process(page_content)
示例#19
0
def _process_references(page_content):
    references_processor = find_block.Processor([reference_block.define()])
    return references_processor.process(page_content)