示例#1
0
def test_parse_cells_horizontal_split():
    split_rules = {SlideType.SUBSLIDE: [Token.SPLIT()]}
    cells = list(parse_cells(TOKENS, split_rules))
    assert cells == [
        Cell('markdown', 'slide', [
            '# 111\n',
            '\n',
            '* bullet point\n',
            '* bullet point 2\n',
            '\n',
            '```python\n',
            'def random():\n',
            '    return 4\n',
            '```',
        ]),
        Cell('markdown', 'subslide', [
            '```python\n',
            'print(random())\n',
            '```',
        ]),
        Cell('markdown', 'subslide', [
            'Text.\n',
            '## 222\n',
            '\n',
            '```python skip\n',
            'import itertools\n',
            '```\n',
            '\n',
            'Hello world.',
        ]),
    ]
示例#2
0
def test_format_doc():
    cells = [
        Cell('markdown', 'fragment', ['foo  \n', '  bar\n']),
        Cell('code', 'subslide', ['def random():\n', '    return 4\n']),
    ]

    doc = format_doc(cells)
    assert doc['cells'] == list(format_cells(cells))
    assert (doc['nbformat'], doc['nbformat_minor']) == (4, 2)
    assert doc['metadata']['celltoolbar'] == 'Slideshow'
    assert doc['metadata']['language_info']['name'] == 'python'
    assert doc['metadata']['livereveal']['autolaunch'] is True

    doc = format_doc(cells, autolaunch=False)
    assert doc['metadata']['livereveal']['autolaunch'] is False
示例#3
0
def test_parse_cells_no_splits():
    cells = list(parse_cells(TOKENS, {}))
    assert cells == [
        Cell('markdown', 'slide', [
            '# 111\n',
            '\n',
            '* bullet point\n',
            '* bullet point 2\n',
            '\n',
            '```python\n',
            'def random():\n',
            '    return 4\n',
            '```\n',
            '\n',
            '---\n',
            '\n',
            '```python\n',
            'print(random())\n',
            '```\n',
            '\n',
            '---\n',
            '\n',
            'Text.\n',
            '## 222\n',
            '\n',
            '```python skip\n',
            'import itertools\n',
            '```\n',
            '\n',
            'Hello world.',
        ]),
    ]
示例#4
0
def test_cell():
    cell1 = Cell()
    assert cell1.cell_type is CellType.MARKDOWN
    assert cell1.slide_type is SlideType.CONTINUE
    assert cell1.source == []

    cell2 = Cell(CellType.CODE, SlideType.SLIDE, ['foo', 'bar'])
    assert cell2.cell_type is CellType.CODE
    assert cell2.slide_type is SlideType.SLIDE
    assert cell2.source == ['foo', 'bar']

    cell3 = Cell('code', 'slide', ['foo', 'bar'])
    assert cell3.cell_type is CellType.CODE
    assert cell3.slide_type is SlideType.SLIDE
    assert cell3.source == ['foo', 'bar']

    assert cell1 != cell2
    assert cell2 == cell3
示例#5
0
def test_format_cell():
    cell = Cell('markdown', 'fragment', ['foo  \n', '  bar\n'])
    assert format_cell(cell) == {
        'cell_type': 'markdown',
        'metadata': {
            'scrolled': True,
            'slideshow': {
                'slide_type': 'fragment',
            },
        },
        'source': ['foo  \n', '  bar\n'],
    }

    cell = Cell('markdown', 'subslide', [])
    assert format_cell(cell) == {
        'cell_type': 'markdown',
        'metadata': {
            'scrolled': True,
            'slideshow': {
                'slide_type': 'subslide',
            },
        },
        'source': [],
    }

    cell = Cell('code', 'subslide', ['def random():\n', '    return 4\n'])
    assert format_cell(cell) == {
        'cell_type': 'code',
        'metadata': {
            'scrolled': True,
            'slideshow': {
                'slide_type': 'subslide',
            },
        },
        'source': ['def random():\n', '    return 4\n'],
        'outputs': [],
        'execution_count': None,
    }
示例#6
0
文件: parser.py 项目: entwanne/lucina
def parse_cells(
    tokens: Iterable[Token],
    split_rules: Dict[SlideType, List[Token]],
) -> Iterable[Cell]:
    slide_type = SlideType.SLIDE
    for cell_type, content in _split_cells(tokens, split_rules):
        if cell_type is None:
            if slide_type is None or content.rank < slide_type.rank:
                slide_type = content
            continue

        source = clean_source(content)
        if source:
            yield Cell(cell_type, slide_type or SlideType.CONTINUE, source)
            slide_type = None
示例#7
0
def test_parse_cells_combine_split():
    split_rules = {
        SlideType.SLIDE: [Token.TITLE(level=1)],
        SlideType.SUBSLIDE: [Token.AFTER_TITLE(level=1),
                             Token.TITLE(level=2)],
        SlideType.FRAGMENT: [Token.SPLIT()],
        SlideType.CONTINUE: [Token.START_CODE(),
                             Token.END_CODE()],
        SlideType.SKIP: [Token.START_CODE(skip=True)],
    }
    cells = list(parse_cells(TOKENS, split_rules))
    assert cells == [
        Cell('markdown', 'slide', ['# 111']),
        Cell('markdown', 'subslide', ['* bullet point\n', '* bullet point 2']),
        Cell('code', '-', ['def random():\n', '    return 4']),
        Cell('code', 'fragment', ['print(random())']),
        Cell('markdown', 'fragment', ['Text.']),
        Cell('markdown', 'subslide', ['## 222']),
        Cell('code', 'skip', ['import itertools']),
        Cell('markdown', '-', ['Hello world.']),
    ]
示例#8
0
def test_parse_cells_code_split():
    split_rules = {
        SlideType.CONTINUE: [Token.START_CODE(),
                             Token.END_CODE()],
        SlideType.SKIP: [Token.START_CODE(skip=True)],
    }
    cells = list(parse_cells(TOKENS, split_rules))
    assert cells == [
        Cell('markdown', 'slide', [
            '# 111\n',
            '\n',
            '* bullet point\n',
            '* bullet point 2',
        ]),
        Cell('code', '-', ['def random():\n', '    return 4']),
        Cell('markdown', '-', ['---']),
        Cell('code', '-', ['print(random())']),
        Cell('markdown', '-', ['---\n', '\n', 'Text.\n', '## 222']),
        Cell('code', 'skip', ['import itertools']),
        Cell('markdown', '-', ['Hello world.']),
    ]
示例#9
0
def test_format_cells():
    c1 = Cell('markdown', 'fragment', ['foo  \n', '  bar\n'])
    c2 = Cell('code', 'subslide', ['def random():\n', '    return 4\n'])

    assert list(format_cells([c1, c2])) == [format_cell(c1), format_cell(c2)]
示例#10
0
def test_parse_cells_slide_hierarchy():
    tokens = [
        Token.TITLE('# 111\n', level=1),
        Token.AFTER_TITLE(level=1),
        Token.SPLIT('---\n'),
        Token.LINE('foo\n'),
        Token.SPLIT('---\n'),
        Token.LINE('bar\n'),
        Token.TITLE('## secret\n', level=2),
        Token.AFTER_TITLE(level=2),
        Token.LINE('baz\n'),
        Token.TITLE('## secret\n', level=2),
        Token.AFTER_TITLE(level=2),
        Token.START_CODE(language='python'),
        Token.LINE('x = 0\n'),
        Token.END_CODE(),
    ]

    split_rules = {
        SlideType.SLIDE: [Token.TITLE(level=1)],
        SlideType.SUBSLIDE: [Token.AFTER_TITLE(level=1)],
        SlideType.FRAGMENT: [Token.SPLIT()],
        SlideType.CONTINUE: [
            Token.TITLE(level=2),
            Token.START_CODE(),
            Token.END_CODE(),
        ],
        SlideType.SKIP: [Token.AFTER_TITLE(level=2)],
    }
    cells = list(parse_cells(tokens, split_rules))
    assert cells == [
        Cell('markdown', 'slide', ['# 111']),
        Cell('markdown', 'subslide', ['foo']),  # Ignore Token.SPLIT
        Cell('markdown', 'fragment', ['bar']),
        Cell('markdown', '-', ['## secret']),
        Cell('markdown', 'skip', ['baz']),
        Cell('markdown', '-', ['## secret']),  # Go back to normal side
        Cell('code', '-', ['x = 0']),  # START_CODE resets slide type
    ]

    split_rules = {
        SlideType.SLIDE: [Token.TITLE(level=1)],
        SlideType.FRAGMENT: [Token.SPLIT()],
        SlideType.CONTINUE: [Token.START_CODE(),
                             Token.END_CODE()],
        SlideType.SKIP: [Token.AFTER_TITLE(level=2)],
    }
    cells = list(parse_cells(tokens, split_rules))
    assert cells == [
        Cell('markdown', 'slide', ['# 111']),
        Cell('markdown', 'fragment', ['foo']),
        Cell('markdown', 'fragment', ['bar\n', '## secret']),
        Cell('markdown', 'skip', ['baz\n', '## secret']),
        Cell('code', '-', ['x = 0']),
    ]
示例#11
0
def test_parse_cells_title_splits():
    split_rules = {
        SlideType.SLIDE: [Token.TITLE(level=1)],
        SlideType.SUBSLIDE: [Token.TITLE(level=2)],
    }
    cells = list(parse_cells(TOKENS, split_rules))
    assert cells == [
        Cell('markdown', 'slide', [
            '# 111\n',
            '\n',
            '* bullet point\n',
            '* bullet point 2\n',
            '\n',
            '```python\n',
            'def random():\n',
            '    return 4\n',
            '```\n',
            '\n',
            '---\n',
            '\n',
            '```python\n',
            'print(random())\n',
            '```\n',
            '\n',
            '---\n',
            '\n',
            'Text.',
        ]),
        Cell('markdown', 'subslide', [
            '## 222\n',
            '\n',
            '```python skip\n',
            'import itertools\n',
            '```\n',
            '\n',
            'Hello world.',
        ]),
    ]

    split_rules = {
        SlideType.SLIDE: [Token.TITLE(level=1)],
        SlideType.SUBSLIDE: [Token.AFTER_TITLE(level=1),
                             Token.TITLE(level=2)],
    }
    cells = list(parse_cells(TOKENS, split_rules))
    assert cells == [
        Cell('markdown', 'slide', ['# 111']),
        Cell('markdown', 'subslide', [
            '* bullet point\n',
            '* bullet point 2\n',
            '\n',
            '```python\n',
            'def random():\n',
            '    return 4\n',
            '```\n',
            '\n',
            '---\n',
            '\n',
            '```python\n',
            'print(random())\n',
            '```\n',
            '\n',
            '---\n',
            '\n',
            'Text.',
        ]),
        Cell('markdown', 'subslide', [
            '## 222\n',
            '\n',
            '```python skip\n',
            'import itertools\n',
            '```\n',
            '\n',
            'Hello world.',
        ]),
    ]