Skip to content

Commit 3b01992

Browse files
committed
refactor: rename citations extension
1 parent 86a6a95 commit 3b01992

4 files changed

Lines changed: 23 additions & 22 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ $html = $converter->convert('Hello *world*!');
3333
- **Advanced**: Footnotes, math expressions, symbols, block attributes, raw HTML blocks, comments
3434
- **Smart typography**: Curly quotes, en/em dashes, ellipsis
3535
- **Multiple renderers**: HTML, plain text, Markdown, ANSI terminal output
36-
- **Extensions**: Built-in extensions for external links, TOC, heading permalinks, @mentions, autolinks, default attributes, and experimental citations
36+
- **Extensions**: Built-in extensions for external links, TOC, heading permalinks, @mentions, autolinks, default attributes, and citations
3737
- **Extensible**: Custom inline/block patterns, render events
3838
- **File support**: Parse and convert files directly
3939
- **CLI tools**: `bin/djot` (one-shot convert) and `bin/djot-watch` (live-reload preview server) — see [CLI reference](https://php-collective.github.io/djot-php/reference/cli)

docs/extensions/index.md

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Extensions provide a clean way to bundle related customizations together. Each e
1010
| [AutolinkExtension](#autolinkextension) | Auto-links bare URLs and email addresses |
1111
| [CodeGroupExtension](#codegroupextension) | Transforms code-group divs into tabbed code block interfaces |
1212
| [DefaultAttributesExtension](#defaultattributesextension) | Adds default attributes to elements by type |
13+
| [CitationsExtension](#citationsextension) | Parses experimental Pandoc/Citum-style citation groups into semantic inline spans |
1314
| [ExternalLinksExtension](#externallinksextension) | Adds `target="_blank"` and `rel` attributes to external links |
1415
| [FrontmatterExtension](#frontmatterextension) | Parses YAML/NEON/TOML/JSON frontmatter at document start |
1516
| [HeadingReferenceExtension](#headingreferenceextension) | Resolves `[[Heading Text]]` links to headings in the current document |
@@ -602,7 +603,7 @@ Thanks @johndoe for the help!
602603
<p>Thanks <a href="/users/view/johndoe" data-username="johndoe" class="mention">@johndoe</a> for the help!</p>
603604
```
604605

605-
## ExperimentalCitationsExtension
606+
## CitationsExtension
606607

607608
Parses experimental Pandoc/Citum-style citations into semantic inline spans.
608609

@@ -613,12 +614,12 @@ This extension is intentionally narrow:
613614
- It is explicitly experimental because Djot does not have an official citation syntax yet.
614615

615616
```php
616-
use Djot\Extension\ExperimentalCitationsExtension;
617+
use Djot\Extension\CitationsExtension;
617618

618-
$converter->addExtension(new ExperimentalCitationsExtension());
619+
$converter->addExtension(new CitationsExtension());
619620

620621
// Optional: resolve parsed groups to rendered inline strings
621-
$converter->addExtension(new ExperimentalCitationsExtension(
622+
$converter->addExtension(new CitationsExtension(
622623
resolver: function (array $groups, \Djot\Node\Document $document): array {
623624
$resolved = [];
624625
foreach ($groups as $group) {
@@ -659,9 +660,9 @@ The resolver callback receives the full list of parsed citation groups in docume
659660

660661
```php
661662
use Djot\Extension\CitationGroup;
662-
use Djot\Extension\ExperimentalCitationsExtension;
663+
use Djot\Extension\CitationsExtension;
663664

664-
$converter->addExtension(new ExperimentalCitationsExtension(
665+
$converter->addExtension(new CitationsExtension(
665666
resolver: function (array $groups, \Djot\Node\Document $document): array {
666667
return array_reduce(
667668
$groups,

src/Extension/ExperimentalCitationsExtension.php renamed to src/Extension/CitationsExtension.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
use JsonException;
1515

1616
/**
17-
* Experimental Pandoc/Citum-style citations for Djot.
17+
* Pandoc/Citum-style citations for Djot.
1818
*
1919
* Supported forms:
2020
* - [@key]
@@ -26,7 +26,7 @@
2626
* This extension only parses and semantically marks citation groups. Proper
2727
* bibliography processing remains the responsibility of an external engine.
2828
*/
29-
class ExperimentalCitationsExtension implements ExtensionInterface, BeforeRenderExtensionInterface
29+
class CitationsExtension implements ExtensionInterface, BeforeRenderExtensionInterface
3030
{
3131
protected ?InlineParser $inlineParser = null;
3232

tests/TestCase/Extension/ExperimentalCitationsExtensionTest.php renamed to tests/TestCase/Extension/CitationsExtensionTest.php

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66

77
use Djot\DjotConverter;
88
use Djot\Extension\CitationGroup;
9-
use Djot\Extension\ExperimentalCitationsExtension;
9+
use Djot\Extension\CitationsExtension;
1010
use Djot\Node\Document;
1111
use PHPUnit\Framework\TestCase;
1212

13-
class ExperimentalCitationsExtensionTest extends TestCase
13+
class CitationsExtensionTest extends TestCase
1414
{
1515
public function testParentheticalCitation(): void
1616
{
1717
$converter = new DjotConverter();
18-
$converter->addExtension(new ExperimentalCitationsExtension());
18+
$converter->addExtension(new CitationsExtension());
1919

2020
$html = $converter->convert('Parenthetical: [@kuhn1962].');
2121

@@ -28,7 +28,7 @@ public function testParentheticalCitation(): void
2828
public function testIntegralCitation(): void
2929
{
3030
$converter = new DjotConverter();
31-
$converter->addExtension(new ExperimentalCitationsExtension());
31+
$converter->addExtension(new CitationsExtension());
3232

3333
$html = $converter->convert('[+@smith2010, p. 10] argues the point.');
3434

@@ -40,7 +40,7 @@ public function testIntegralCitation(): void
4040
public function testSuppressAuthorCitation(): void
4141
{
4242
$converter = new DjotConverter();
43-
$converter->addExtension(new ExperimentalCitationsExtension());
43+
$converter->addExtension(new CitationsExtension());
4444

4545
$html = $converter->convert('[-@watson1953, p. 737].');
4646

@@ -50,7 +50,7 @@ public function testSuppressAuthorCitation(): void
5050
public function testMultiCitation(): void
5151
{
5252
$converter = new DjotConverter();
53-
$converter->addExtension(new ExperimentalCitationsExtension());
53+
$converter->addExtension(new CitationsExtension());
5454

5555
$html = $converter->convert('[@kuhn1962; @watson1953, ch. 2]');
5656

@@ -64,7 +64,7 @@ public function testMultiCitation(): void
6464
public function testCitationResolverCanReplaceRenderedText(): void
6565
{
6666
$converter = new DjotConverter();
67-
$converter->addExtension(new ExperimentalCitationsExtension(
67+
$converter->addExtension(new CitationsExtension(
6868
resolver: static function (array $groups, Document $document): array {
6969
$resolved = [];
7070
foreach ($groups as $group) {
@@ -90,7 +90,7 @@ public function testResolverReceivesDistinctIdsForRepeatedCitationGroups(): void
9090
$seenIds = [];
9191

9292
$converter = new DjotConverter();
93-
$converter->addExtension(new ExperimentalCitationsExtension(
93+
$converter->addExtension(new CitationsExtension(
9494
resolver: static function (array $groups, Document $document) use (&$seenIds): array {
9595
$resolved = [];
9696
foreach ($groups as $group) {
@@ -111,7 +111,7 @@ public function testResolverReceivesDistinctIdsForRepeatedCitationGroups(): void
111111
public function testCitationLikeBracketFollowedByLinkDestinationStillParsesAsLink(): void
112112
{
113113
$converter = new DjotConverter();
114-
$converter->addExtension(new ExperimentalCitationsExtension());
114+
$converter->addExtension(new CitationsExtension());
115115

116116
$html = $converter->convert('Read [+@kuhn1962](https://example.com).');
117117

@@ -122,7 +122,7 @@ public function testCitationLikeBracketFollowedByLinkDestinationStillParsesAsLin
122122
public function testNonCitationBracketStaysPlainText(): void
123123
{
124124
$converter = new DjotConverter();
125-
$converter->addExtension(new ExperimentalCitationsExtension());
125+
$converter->addExtension(new CitationsExtension());
126126

127127
$html = $converter->convert('[not a citation]');
128128

@@ -134,7 +134,7 @@ public function testResolverCanInspectStructuredGroups(): void
134134
$captured = [];
135135

136136
$converter = new DjotConverter();
137-
$converter->addExtension(new ExperimentalCitationsExtension(
137+
$converter->addExtension(new CitationsExtension(
138138
resolver: static function (array $groups, Document $document) use (&$captured): array {
139139
$captured = $groups;
140140

@@ -163,7 +163,7 @@ public function testResolverReceivesDocumentContext(): void
163163
$seenDocument = null;
164164

165165
$converter = new DjotConverter();
166-
$converter->addExtension(new ExperimentalCitationsExtension(
166+
$converter->addExtension(new CitationsExtension(
167167
resolver: static function (array $groups, Document $document) use (&$seenDocument): array {
168168
$seenDocument = $document;
169169

@@ -180,7 +180,7 @@ public function testResolverReceivesDocumentContext(): void
180180
public function testResolverMayReturnEmptyMap(): void
181181
{
182182
$converter = new DjotConverter();
183-
$converter->addExtension(new ExperimentalCitationsExtension(
183+
$converter->addExtension(new CitationsExtension(
184184
resolver: static fn (array $groups, Document $document): array => [],
185185
));
186186

0 commit comments

Comments
 (0)