Skip to content

Custom entry types matching special-command prefixes are misclassified #568

Description

@claell

Describe the bug

The splitter classifies block types with startswith, so valid custom entry
types whose names begin with comment, preamble, or string are routed to a
special-command parser instead of the ordinary entry parser.

For example, @commentary, @preamble_study, and @string_theory do not become
entries even though only the exact case-insensitive names comment, preamble,
and string should select those special block forms.

Reproducing

Version: current main (08e370a)

Code:

from bibtexparser import parse_string

for entry_type in ("commentary", "preamble_study", "string_theory"):
    library = parse_string(
        f"@{entry_type}{{key, title = {{Custom entry type}}}}"
    )
    assert [(entry.entry_type, entry.key) for entry in library.entries] == [
        (entry_type, "key")
    ]

The assertions fail on current main because the blocks are treated as special
commands rather than custom entries.

Expected behavior

Special-command dispatch should use an exact case-insensitive type comparison.
Longer custom type names should remain ordinary entries.

Workaround

Rename custom entry types so they do not begin with a special command name.

Remaining Questions (Optional)

  • I would be willing to contribute a PR to fix this issue.
  • This issue is a blocker, I'd be grateful for an early fix.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions