Verified Commit bb20c827 authored by Jakob Moser's avatar Jakob Moser
Browse files

Make code shorter and more cryptic

I don't know if it's better this way. At least it is shorter, so it might be a bit easier for me to reason about later.

I suppose there will be more refactorings to come for this.
parent a576b863
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ def _get_table_of_contents(document: Pandoc) -> BulletList:
    offset = 1 if document_type == DocumentType.MEETING_MINUTES else 0

    table_of_contents = make_toc(
        (level, content) for (level, attrs, content) in headers[offset:]
        Node(level, content) for (level, attrs, content) in headers[offset:]
    )

    def make_bullet_list(node: Node[list[Block]]) -> BulletList:
+10 −31
Original line number Diff line number Diff line
@@ -9,38 +9,17 @@ class Node[T]:
    level: int | float
    content: T | None

    parent: Node[T] | None = field(repr=False)
    children: list[Node[T]] = field(default_factory=list)
    parent: Node[T] | None = field(default=None, repr=False, init=False)
    children: list[Node[T]] = field(default_factory=list, init=False)

    def can_nurse_at(self, level: int) -> bool:
        """Return if the given level is greater than one's own level, i.e., if content with this level
        could be a child of this node.
        """
        return level > self.level

    def _nurse(self, level: int, content: T) -> Node[T]:
        """
        Append the given content with the given level as child of this node, without looking at the level.

        You probably want to use `append` instead, which takes care of inserting at the correct level
        (and doesn't just mindlessly append whatever you give it).
        """
        node = Node(level, content, self)
    def append(self, node: Node[T]) -> Node[T]:
        if node.level > self.level:
            self.children.append(node)
            node.parent = self
            return node

    def append(self, level: int, content: T) -> Node[T]:
        """
        If this node can nurse this entry (consisting of a level and content), nurse it.
        Otherwise, find a parent among this node's parents who can nurse the entry.

        :return: the newly nursed node
        """
        if self.can_nurse_at(level):
            return self._nurse(level, content)
        else:
            return self.parent.append(level, content)
            return self.parent.append(node)

    @classmethod
    def new_root(cls) -> Node[T]:
        return cls(-inf, None, None)
        return cls(-inf, None)
+3 −7
Original line number Diff line number Diff line
from collections.abc import Iterable
from functools import reduce

from coliverter.toc.Node import Node

type Level = int
type Entry[T] = tuple[Level, T]


def make_toc[T](entries: Iterable[Entry[T]]) -> Node[T]:
def make_toc[T](nodes: Iterable[Node[T]]) -> Node[T]:
    root = Node.new_root()
    prime_possible_parent = root

    for entry in entries:
        prime_possible_parent = prime_possible_parent.append(*entry)
    reduce(Node.append, nodes, root)

    return root
+1 −1
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ wheels = [

[[package]]
name = "coliverter"
version = "0.3.3"
version = "0.3.4"
source = { editable = "." }
dependencies = [
    { name = "pandoc" },