Exemplo n.º 1
0
    def __repr__(self):
        """Convert note to Markdown format"""
        from apy.convert import is_generated_html
        from apy.convert import html_to_screen

        lines = [
            f'# Note ID: {self.n.id}',
            f'model: {self.model_name}',
        ]

        if self.a.n_decks > 1:
            lines += [f'deck: {self.get_deck()}']

        lines += [f'tags: {self.get_tag_string()}']

        if not any([is_generated_html(x) for x in self.n.values()]):
            lines += ['markdown: false']

        lines += ['']

        for key, val in self.n.items():
            if is_generated_html(val):
                key += ' (md)'

            lines.append('## ' + key)
            lines.append(html_to_screen(val, parseable=True))
            lines.append('')

        return '\n'.join(lines)
Exemplo n.º 2
0
Arquivo: note.py Projeto: Aylexx/apy
    def get_template(self):
        """Convert note to Markdown format as a template for new notes"""
        lines = [f'model: {self.model_name}']

        if self.a.n_decks > 1:
            lines += [f'deck: {self.get_deck()}']

        lines += [f'tags: {self.get_tag_string()}']

        if not any([is_generated_html(x) for x in self.n.values()]):
            lines += ['markdown: false']

        lines += ['']
        lines += ['# Note']
        lines += ['']

        for key, val in self.n.items():
            if is_generated_html(val):
                key += ' (md)'

            lines.append('## ' + key)
            lines.append(html_to_screen(val, parseable=True))
            lines.append('')

        return '\n'.join(lines)
Exemplo n.º 3
0
    def print(self, pprint=True):
        """Print to screen (similar to __repr__ but with colors)"""
        lines = [click.style('# Note', fg='green')]

        types = ', '.join({['new', 'learning', 'review', 'relearning'][c.type]
                           for c in self.n.cards()})

        lines += [
            click.style('nid: ', fg='yellow') + f'{self.n.id}' +
            click.style('    card type(s): ', fg='yellow') + types
        ]

        lines += [
            click.style('model: ', fg='yellow') +
            f'{self.model_name} ({len(self.n.cards())} cards)'
        ]

        if self.a.n_decks > 1:
            lines += [click.style('deck: ', fg='yellow') + self.get_deck()]

        lines += [click.style('tags: ', fg='yellow') + self.get_tag_string()]

        flags = [c.template()["name"] for c in self.n.cards() if c.flags > 0]
        if flags:
            flags = [click.style(x, fg='magenta') for x in flags]
            lines += [
                f"{click.style('flagged:', fg='yellow')} {', '.join(flags)}"
            ]

        if not any([is_generated_html(x) for x in self.n.values()]):
            lines += [f"{click.style('markdown:', fg='yellow')} false"]

        if self.suspended:
            lines[0] += f" ({click.style('suspended', fg='red')})"

        lines += ['']

        latex_imgs = []
        for key, html in self.n.items():
            # Render LaTeX if necessary
            latex.render_latex(html, self.n.model(), self.a.col)
            latex_imgs += _get_imgs_from_html_latex(html, self.a,
                                                    self.n.model())

            lines.append(click.style('## ' + key, fg='blue'))
            lines.append(html_to_screen(html, pprint))
            lines.append('')

        if latex_imgs:
            lines.append(click.style('LaTeX sources', fg='blue'))
            for line in latex_imgs:
                lines.append('- ' + str(line))
            lines.append('')

        click.echo('\n'.join(lines))
Exemplo n.º 4
0
    def print(self):
        """Print to screen (similar to __repr__ but with colors)"""
        import click

        from apy.convert import is_generated_html
        from apy.convert import html_to_screen

        lines = [
            click.style(f'# Note ID: {self.n.id}', fg='green'),
            click.style('model: ', fg='yellow') +
            f'{self.model_name} ({len(self.n.cards())} cards)',
        ]

        if self.a.n_decks > 1:
            lines += [click.style('deck: ', fg='yellow') + self.get_deck()]

        lines += [click.style('tags: ', fg='yellow') + self.get_tag_string()]

        if not any([is_generated_html(x) for x in self.n.values()]):
            lines += [f"{click.style('markdown:', fg='yellow')} false"]

        if self.suspended:
            lines[0] += f" ({click.style('suspended', fg='red')})"

        lines += ['']

        for key, val in self.n.items():
            if is_generated_html(val):
                key += ' (md)'

            lines.append(click.style('# ' + key, fg='blue'))
            lines.append(html_to_screen(val))
            lines.append('')

            latex_tags = self.get_lateximg_from_field(val)
            if latex_tags:
                lines.append('LaTeX sources:')
                for line in latex_tags:
                    lines.append('- ' + line)
                lines.append('')

        click.echo('\n'.join(lines))
Exemplo n.º 5
0
Arquivo: note.py Projeto: Aylexx/apy
    def get_field(self, index_or_name):
        """Return field with given index or name"""
        if isinstance(index_or_name, str):
            index = self.fields.index(index_or_name)
        else:
            index = index_or_name

        reply = self.n.fields[index]

        if is_generated_html(reply):
            reply = html_to_markdown(reply)

        return reply
Exemplo n.º 6
0
Arquivo: note.py Projeto: Aylexx/apy
    def toggle_markdown(self, index=None):
        """Toggle markdown on a field"""
        if index is None:
            fields = self.fields
            field = choose(fields, 'Toggle markdown for field:')
            index = fields.index(field)

        field_value = self.n.fields[index]

        if is_generated_html(field_value):
            self.n.fields[index] = html_to_markdown(field_value)
        else:
            self.n.fields[index] = markdown_to_html(field_value)

        self.n.flush()
        self.a.modified = True
Exemplo n.º 7
0
Arquivo: note.py Projeto: ckp95/apy
    def print(self):
        """Print to screen (similar to __repr__ but with colors)"""
        lines = [
            click.style(f'# Note ID: {self.n.id}', fg='green'),
            click.style('model: ', fg='yellow')
            + f'{self.model_name} ({len(self.n.cards())} cards)',
        ]

        if self.a.n_decks > 1:
            lines += [click.style('deck: ', fg='yellow')+self.get_deck()]

        lines += [click.style('tags: ', fg='yellow')
                  + self.get_tag_string()]

        if not any([is_generated_html(x) for x in self.n.values()]):
            lines += [f"{click.style('markdown:', fg='yellow')} false"]

        if any([c.flags > 0 for c in self.n.cards()]):
            lines += [f"{click.style('flagged', fg='red')}"]

        if self.suspended:
            lines[0] += f" ({click.style('suspended', fg='red')})"

        lines += ['']

        latex_imgs = []
        for key, html in self.n.items():
            # Render LaTeX if necessary
            latex.render_latex(html, self.n.model(), self.a.col)
            latex_imgs += self.get_lateximg_from_field(html)

            lines.append(click.style('## ' + key, fg='blue'))
            lines.append(html_to_screen(html))
            lines.append('')

        if latex_imgs:
            lines.append(click.style('LaTeX sources', fg='blue'))
            for line in latex_imgs:
                lines.append('- ' + str(line))
            lines.append('')

        click.echo('\n'.join(lines))
Exemplo n.º 8
0
Arquivo: note.py Projeto: lervag/apy
    def change_model(self):
        """Change the note type"""
        click.clear()
        click.secho('Warning!', fg='red')
        click.echo(
            '\nThe note type is changed by creating a new note with the selected'
            '\ntype and then deleting the old note. This means that the review'
            '\nprogress is lost!'
        )
        if not click.confirm('\nContinue?'):
            return False

        models = list(self.a.model_names)
        models.sort()
        while True:
            click.clear()
            click.echo('Please choose new model:')
            for n, m in enumerate(models):
                click.echo(f'  {n+1}: {m}')
            index = click.prompt('>>> ', prompt_suffix='', type=int) - 1
            try:
                new_model = models[index]
                self.a.set_model(new_model)
                model = self.a.get_model(new_model)
                break
            except IndexError:
                continue

        fields = ['' for _ in range(len(model['flds']))]
        for key, val in self.n.items():
            fields[0] += f'### {key}\n{val}\n'

        tags = ', '.join(self.n.tags)
        is_markdown = any([is_generated_html(x) for x in self.n.values()])

        # pylint: disable=protected-access
        new_note = self.a._add_note(fields, tags, is_markdown)
        new_note.edit()
        # pylint: enable=protected-access
        self.a.delete_notes(self.n.id)

        return True
Exemplo n.º 9
0
    def toggle_markdown(self, index=None):
        """Toggle markdown on a field"""
        from apy.utilities import choose
        from apy.convert import is_generated_html
        from apy.convert import html_to_markdown
        from apy.convert import markdown_to_html

        if index is None:
            fields = self.fields
            field = choose(fields, 'Toggle markdown for field:')
            index = fields.index(field)

        field_value = self.n.fields[index]

        if is_generated_html(field_value):
            self.n.fields[index] = html_to_markdown(field_value)
        else:
            self.n.fields[index] = markdown_to_html(field_value)

        self.n.flush()
        self.a.modified = True