Add a citation help partial with corpus, KorAP and annotation parts

Add a citation help partial that lists how to cite a KorAP instance: the
corpus it serves, KorAP itself, and the annotation and classification
tools its data was prepared with. Instances include it wherever they
present citation information, e.g. on a documentation page.

It is assembled from three parts -- corpus, korap and annotation -- so
that an instance can replace individual parts and inherit the rest.
Kalamar ships no corpus of its own, so the corpus part is a placeholder
that instances replace by the citations for their corpus, while the
korap and annotation parts are normally inherited unchanged.

Every entry carries a COinS (Z3988) span, which lets reference managers
such as Zotero import it with one click. The section headings are
localized in kalamar.dict and kept free of corpus-specific names.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Change-Id: Ib9ccc607fe5387027b8d151901d364f6589b62ac
diff --git a/t/citation.t b/t/citation.t
new file mode 100644
index 0000000..fc8c086
--- /dev/null
+++ b/t/citation.t
@@ -0,0 +1,26 @@
+use Mojo::Base -strict;
+use Test::More;
+use Test::Mojo;
+use Mojo::File qw/curfile/;
+
+my $t = Test::Mojo->new('Kalamar');
+push @{$t->app->renderer->paths}, curfile->dirname;
+
+my $c = $t->app->build_controller;
+
+# By default all three shipped parts are used; Kalamar ships no corpus, so
+# the corpus part is a placeholder.
+my $default = $c->include('partial/citation');
+like($default, qr/Under Construction/, 'corpus part is a placeholder by default');
+like($default, qr/KorAP architecture/, 'korap part is shipped');
+like($default, qr/MaltParser/, 'annotation part is shipped');
+
+# Each part can be replaced by an instance template.
+my $custom = $c->include('partial/citation',
+  corpus_citation => 'custom/partial/citation/corpus');
+like($custom, qr/The Example Corpus/, 'corpus part replaced by the instance template');
+unlike($custom, qr/Under Construction/, 'placeholder no longer rendered');
+like($custom, qr/KorAP architecture/, 'korap part still inherited');
+like($custom, qr/MaltParser/, 'annotation part still inherited');
+
+done_testing;