Fix ASCII entity resolution (fixes #9)

Entity: line 1: parser error : Couldn't find end of Start Tag ref
=epub%20leseprobe&utm_campaign=m%C3%A4dchen%20mit%20den%20engelsh%C3%A4nden"
^

Change-Id: Ic57b654bbfe37bb5ea2d4307e8e8deb83fb1cf22
diff --git a/Changes b/Changes
index f5904b6..6b6d671 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,5 @@
+2.6.1 2025-04-16
+        - Fix ASCII entity resolution.
         - Make KorAP-Tokenizer heap size configurable via environment
           variable KORAPXMLTEI_TOKENIZER_HEAP_SIZE.
 
diff --git a/Readme.pod b/Readme.pod
index 35f643e..c097fd2 100644
--- a/Readme.pod
+++ b/Readme.pod
@@ -302,7 +302,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2021-2024, L<IDS Mannheim|https://www.ids-mannheim.de/>
+Copyright (C) 2021-2025, L<IDS Mannheim|https://www.ids-mannheim.de/>
 
 Author: Peter Harders
 
diff --git a/lib/KorAP/XML/TEI.pm b/lib/KorAP/XML/TEI.pm
index f7768e7..8fa2aae 100644
--- a/lib/KorAP/XML/TEI.pm
+++ b/lib/KorAP/XML/TEI.pm
@@ -169,11 +169,12 @@
 # Replace all entities, except %ent
 sub replace_entities {
   $_= shift;
-  s/&#x22;/&quot;/gi;
-  s/&#x26;/&amp;/gi;
-  s/&#x27;/&apos;/gi;
-  s/&#x3c;/&lt;/gi;
-  s/&#x3e;/&gt;/gi;
+  return ($_) if index($_,'&') < 0;
+  s/&#(?:34|x22);/&quot;/gi;
+  s/&#(?:38|x26);/&amp;/gi;
+  s/&#(?:39|x27);/&apos;/gi;
+  s/&#(?:60|x3c);/&lt;/gi;
+  s/&#(?:62|x3e);/&gt;/gi;
   s/[&]#(x[0-9A-Fa-f]+);/chr(hex("0$1"))/ge;
   s/[&]#(\d+);/chr($1)/ge;
   s/\&(alpha|ap|bdquo|blk12|blk14|blk34|block|boxDL|boxdl|boxdr|boxDR|boxH|boxh|boxhd|boxHD|boxhu|boxHU|boxUL|boxul|boxur|boxUR|boxv|boxV|boxvh|boxVH|boxvl|boxVL|boxVR|boxvr|bull|caron|ccaron|circ|dagger|Dagger|ecaron|euro|fnof|hellip|Horbar|inodot|iota|ldquo|ldquor|lhblk|lsaquo|lsquo|lsquor|mdash|ndash|nu|oelig|OElig|omega|Omega|permil|phi|pi|piv|rcaron|rdquo|rho|rsaquo|rsquo|rsquor|scaron|Scaron|sigma|squ|squb|squf|sub|tilde|trade|uhblk|Yuml|zcaron|Zcaron);/$html_entities{$1}/ge;
diff --git a/lib/KorAP/XML/TEI/Tokenizer/KorAP.pm b/lib/KorAP/XML/TEI/Tokenizer/KorAP.pm
index ba39fc7..ac5aae8 100644
--- a/lib/KorAP/XML/TEI/Tokenizer/KorAP.pm
+++ b/lib/KorAP/XML/TEI/Tokenizer/KorAP.pm
@@ -4,7 +4,7 @@
 use warnings;
 use File::Share ':all';
 
-our $VERSION = '2.6.0';
+our $VERSION = '2.6.1';
 my $MIN_JAVA_VERSION = 17;
 
 use constant {
diff --git a/script/tei2korapxml b/script/tei2korapxml
index 7d9cfbd..3e5b335 100755
--- a/script/tei2korapxml
+++ b/script/tei2korapxml
@@ -25,7 +25,7 @@
 use KorAP::XML::TEI::Header;
 use KorAP::XML::TEI::Inline;
 
-our $VERSION = '2.6.0';
+our $VERSION = '2.6.1';
 
 our $VERSION_MSG = "\ntei2korapxml - v$VERSION\n";
 
@@ -813,7 +813,7 @@
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (C) 2021-2024, L<IDS Mannheim|https://www.ids-mannheim.de/>
+Copyright (C) 2021-2025, L<IDS Mannheim|https://www.ids-mannheim.de/>
 
 Author: Peter Harders
 
diff --git a/t/data/wdd_sample.i5.xml b/t/data/wdd_sample.i5.xml
index 669f1e3..9935921 100644
--- a/t/data/wdd_sample.i5.xml
+++ b/t/data/wdd_sample.i5.xml
@@ -491,7 +491,12 @@
       <div id="i.10317_5" type="thread" part="N" org="uniform" sample="complete" complete="y">
        <head>Öffentliche Dienstleistungen, Ver-/Entsorgung</head>
        <posting id="i.10317_5_1" indentLevel="0" when-iso="2017-07-09T17:53+02" who="WU00003189">
-        <p part="N"> Dieser Bereich unterliegt, sofern er in öffentlicher Hand ist, dem Preisgesetz.<s> Durch eine PPP fällt die Bindung an das Preisgesetz weg, mit der Folge, dass die Kosten frei kalkuliert werden können, regelmäßige weitere Folge: Preissteigerungen!</s> 
+        <p>
+         <hi rend="_9_italic">Mehr unter</hi>
+           <ref target="http://forever.ullstein.de/ebook/das-maedchen-mit-den-engelshaenden/?utm_source=sog%20des%20todes&amp;utm_medium=ebook&amp;utm_term=epub%20leseprobe&amp;utm_campaign=m%C3%A4dchen%20mit%20den%20engelsh%C3%A4nden&#34;">
+           </ref>
+        </p>
+        <p part="N"> Dieser Bereich unterliegt, sofern er in öffentlicher Hand ist, dem Preisgesetz.<s> Durch eine PPP fällt die Bindung an das Preisgesetz weg, mit der Folge, dass die Kosten frei kalkuliert werden können, regelmäßige weitere Folge: Preissteigerungen!</s>
          <s>Vgl. http://www.econstor.eu/bitstream/10419/85329/1/770675158.pdf Möglicherweise wird diese "Flucht aus dem Preisrecht" (Greiffenhagen) durch die derzeit in Vorbereitung befindliche Novellierung des Preisgesetzes verhindert oder zumindest erschwert.</s>
          <s>--</s>
          <autoSignature type="signed">Karl 3 <timestamp>17:53, 9. Jul. 2017 (CEST)</timestamp>
diff --git a/t/tei.t b/t/tei.t
index 98b945e..f5fa39e 100644
--- a/t/tei.t
+++ b/t/tei.t
@@ -140,7 +140,11 @@
   is(replace_entities('&#65;'), 'A');
   is(replace_entities('&#171;'), replace_entities('&#x00AB;'));
   is(replace_entities('&#x41;'), 'A');
-  is(replace_entities('&amp;&lt;&gt;'), '&amp;&lt;&gt;')
+  is(replace_entities('&amp;&lt;&gt;'), '&amp;&lt;&gt;');
+  is(replace_entities('&#34;'), '&quot;');
+  is(replace_entities('&#38;'), '&amp;');
+  is(replace_entities('&#39;'), '&apos;');
+  is(replace_entities('&#60;'), '&lt;');
 };
 
 done_testing;