[DOC-CVS] [phd] master: Read acronyms from translatable acronym.* entities (#262)
[email protected] (Jordi Kroon via GitHub) Tue, 28 Jul 2026 14:27:45 +0000
| Newsgroups | php.doc.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: Jordi Kroon (jordikroon) Committer: GitHub (web-flow) Pusher: jordikroon Date: 2026-07-28T16:27:42+02:00 Commit: https://github.com/php/phd/commit/1a70b5bd531e4687b64447d0c0a3e33cb9c98714 Raw diff: https://github.com/php/phd/commit/1a70b5bd531e4687b64447d0c0a3e33cb9c98714.diff Read acronyms from translatable acronym.* entities (#262) * Read acronyms from translatable acronym.* entities Co-authored-by: Louis-Arnaud <[email protected]> Changed paths: A tests/package/php/acronym_info_001.phpt A tests/package/php/data/entities.acronyms.ent D tests/package/php/data/acronyms.xml M phpdotnet/phd/Package/PHP/XHTML.php M render.php Diff: diff --git a/phpdotnet/phd/Package/PHP/XHTML.php b/phpdotnet/phd/Package/PHP/XHTML.php index 9e83ed256..53a78c9c6 100644 --- a/phpdotnet/phd/Package/PHP/XHTML.php +++ b/phpdotnet/phd/Package/PHP/XHTML.php @@ -336,31 +336,30 @@ public static function generateAcronymInfo($filename) { if ($info) { return $info; } + if (!is_file($filename)) { trigger_error(vsprintf("Can't find acronym file (%s), skipping", [$filename]), E_USER_WARNING); return array(); } - $r = new \XMLReader; - if (!$r->open($filename)) { - throw new \Error(vsprintf('Could not open file for accessing acronym information (%s)', [$filename])); + $useInternalErrors = libxml_use_internal_errors(true); + $entities = simplexml_load_file($filename); + libxml_clear_errors(); + libxml_use_internal_errors($useInternalErrors); + if ($entities === false) { + trigger_error(vsprintf("Can't parse acronym file (%s), skipping", [$filename]), E_USER_WARNING); + return []; } - $acronyms = array(); - $k = ""; - while ($r->read()) { - if ($r->nodeType != \XMLReader::ELEMENT) { - continue; - } - if ($r->name == "term") { - $r->read(); - $k = $r->value; - $acronyms[$k] = ""; - } else if ($r->name == "simpara") { - $r->read(); - $acronyms[$k] = $r->value; + $acronyms = []; + foreach ($entities as $entity) { + $name = (string) $entity["name"]; + if (str_starts_with($name, "acronym.expansion.")) { + $acronyms[substr($name, strlen("acronym.expansion."))] = trim(preg_replace('/\s+/', ' ', (string) $entity)); } } + + ksort($acronyms); $info = $acronyms; return $acronyms; } diff --git a/render.php b/render.php index 94c9e0967..15f8c7b87 100644 --- a/render.php +++ b/render.php @@ -61,12 +61,21 @@ // This needs to be moved. Preferably into the PHP package. if (!$conf) { + // Acronym expansions come from the translatable entity file in the + // language checkout (e.g. en/, it/), languages without a + // translated copy fall back to the English one. + $acronymFilename = dirname($config->xmlRoot) . DIRECTORY_SEPARATOR . $config->language + . DIRECTORY_SEPARATOR . 'entities' . DIRECTORY_SEPARATOR . 'entities.acronyms.ent'; + if (!is_file($acronymFilename)) { + $acronymFilename = dirname($config->xmlRoot) . DIRECTORY_SEPARATOR . 'en' + . DIRECTORY_SEPARATOR . 'entities' . DIRECTORY_SEPARATOR . 'entities.acronyms.ent'; + } $config->init(array( "langDir" => __INSTALLDIR__ . DIRECTORY_SEPARATOR . "phpdotnet" . DIRECTORY_SEPARATOR . "phd" . DIRECTORY_SEPARATOR . "data" . DIRECTORY_SEPARATOR . "langs" . DIRECTORY_SEPARATOR, "phpwebVersionFilename" => $config->xmlRoot . DIRECTORY_SEPARATOR . 'version.xml', - "phpwebAcronymFilename" => $config->xmlRoot . DIRECTORY_SEPARATOR . 'entities' . DIRECTORY_SEPARATOR . 'acronyms.xml', + "phpwebAcronymFilename" => $acronymFilename, "phpwebSourcesFilename" => $config->xmlRoot . DIRECTORY_SEPARATOR . 'sources.xml', "phpwebHistoryFilename" => $config->xmlRoot . DIRECTORY_SEPARATOR . 'fileModHistory.php', )); @@ -108,7 +117,7 @@ $outputHandler->v("Indexing...", VERBOSE_INDEXING); // Create indexer $format = new Index($config->indexCache, $config, $outputHandler); - + $render->attach($format); $outputHandler->v("Running full build", VERBOSE_RENDER_STYLE); diff --git a/tests/package/php/acronym_info_001.phpt b/tests/package/php/acronym_info_001.phpt new file mode 100644 index 000000000..b015243d2 --- /dev/null +++ b/tests/package/php/acronym_info_001.phpt @@ -0,0 +1,23 @@ +--TEST-- +Acronym info 001 - Acronyms are read from acronym.expansion.* entity elements +--FILE-- +<?php +namespace phpdotnet\phd; + +require_once __DIR__ . "/../../setup.php"; + +$acronyms = Package_PHP_XHTML::generateAcronymInfo(__DIR__ . "/data/entities.acronyms.ent"); + +var_dump($acronyms); +?> +--EXPECT-- +array(4) { + ["API"]=> + string(33) "Application Programming Interface" + ["CSPRNG"]=> + string(54) "Cryptographically Secure PseudoRandom Number Generator" + ["PHP"]=> + string(27) "PHP: Hypertext Preprocessor" + ["cURL"]=> + string(18) "Client URL Library" +} diff --git a/tests/package/php/data/acronyms.xml b/tests/package/php/data/acronyms.xml deleted file mode 100644 index 0120d0892..000000000 --- a/tests/package/php/data/acronyms.xml +++ /dev/null @@ -1,368 +0,0 @@ -<?xml version='1.0' encoding='iso-8859-1'?> -<!-- $Revision: 283873 $ --> - -<!-- All Acronyms should be listed in Alphabetical order --> -<section xml:id="acronyms"> - <title>Acronyms</title> - <variablelist> - <varlistentry> - <term>API</term> - <listitem> - <simpara>Application Programming Interface</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>ASCII</term> - <listitem> - <simpara>American Standard Code for Information Interchange</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>BMP</term> - <listitem> - <simpara>Bitmap</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>CGI</term> - <listitem> - <simpara>Common Gateway Interface</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>CLI</term> - <listitem> - <simpara>Command Line Interpreter/Interface</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>CSS</term> - <listitem> - <simpara>Cascading Style Sheets</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>CSV</term> - <listitem> - <simpara>Comma Separated Value</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>CVS</term> - <listitem> - <simpara>Concurrent Versions System</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>DLL</term> - <listitem> - <simpara>Dynamic Link Library</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>DSSSL</term> - <listitem> - <simpara>Document Style Semantics and Specification Language</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>EXIF</term> - <listitem> - <simpara>Exchangeable Image File </simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>EOF</term> - <listitem> - <simpara>End Of File</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>FAQ</term> - <listitem> - <simpara>Frequently Asked Questions</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>FTP</term> - <listitem> - <simpara>File Transfer Protocol</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>GD</term> - <listitem> - <simpara>Graphics Draw</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>GIF</term> - <listitem> - <simpara>Graphic Interchange Format</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>GMP</term> - <listitem> - <simpara>GNU Multiple Precision</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>HIS</term> - <listitem> - <simpara>Hyperwave Information Server</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>HTML</term> - <listitem> - <simpara>Hyper Text Markup Language</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>HTTP</term> - <listitem> - <simpara>Hypertext Transfer Protocol</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>IDE</term> - <listitem> - <simpara>Integrated Development Environment</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>IFD</term> - <listitem> - <simpara>Image File Directory</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>IFF</term> - <listitem> - <simpara>Interchange File Format</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>IMAP</term> - <listitem> - <simpara>Internet Message Access Protocol</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>JB2</term> - <listitem> - <simpara>Joint Bilevel Image Experts Group</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>JP2</term> - <listitem> - <simpara>JPEG-2000</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>JPC</term> - <listitem> - <simpara>Japan Picture</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>JPEG</term> - <listitem> - <simpara>Joint Photographic Experts Group</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>MIME</term> - <listitem> - <simpara>Multipurpose Internet Mail Extensions</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>MP</term> - <listitem> - <simpara>Multiple Precision</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>MSDN</term> - <listitem> - <simpara>Microsoft Developer Network</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>NNTP</term> - <listitem> - <simpara>Network News Transfer Protocol</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>PDF</term> - <listitem> - <simpara>Portable Document Format</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>PECL</term> - <listitem> - <simpara>PHP Extension and Application Repository</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>PHP</term> - <listitem> - <simpara>PHP: Hypertext Preprocessor</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>PNG</term> - <listitem> - <simpara>Portable Network Graphics</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>POP3</term> - <listitem> - <simpara>Post Office Protocol version 3</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>POSIX</term> - <listitem> - <simpara>Portable Operating System Interface</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>PSD</term> - <listitem> - <simpara>Photoshop Document</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>RGB</term> - <listitem> - <simpara>Red-Green-Blue</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>SAPI</term> - <listitem> - <simpara>Server Application Programming Interface</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>SASL</term> - <listitem> - <simpara>Simple Authentication and Security Layer</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>SWF</term> - <listitem> - <simpara>Shockwave Flash</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>TCP</term> - <listitem> - <simpara>Transmission Control Protocol</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>TIFF</term> - <listitem> - <simpara>Tagged Image File Format</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>TNS</term> - <listitem> - <simpara>Transparent Network Substrate</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>UDF</term> - <listitem> - <simpara>User Defined Functions</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>Unicode</term> - <listitem> - <simpara>Unique, Universal, and Uniform character enCoding</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>URI</term> - <listitem> - <simpara>Uniform Resource Identifier</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>URL</term> - <listitem> - <simpara>Uniform Resource Locator</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>WBMP</term> - <listitem> - <simpara>Wireless Bitmap</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>XBM</term> - <listitem> - <simpara>X Bitmap</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>XML</term> - <listitem> - <simpara>eXtensible Markup Language</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>XPath</term> - <listitem> - <simpara>XML Path Language</simpara> - </listitem> - </varlistentry> - <varlistentry> - <term>XSLT</term> - <listitem> - <simpara>eXtensible Stylesheet Language Transformations</simpara> - </listitem> - </varlistentry> - <!-- - <varlistentry> - <term></term> - <listitem> - <simpara></simpara> - </listitem> - </varlistentry> - --> - </variablelist> -</section> - -<!-- Keep this comment at the end of the file -Local variables: -mode: sgml -sgml-omittag:t -sgml-shorttag:t -sgml-minimize-attributes:nil -sgml-always-quote-attributes:t -sgml-indent-step:1 -sgml-indent-data:t -indent-tabs-mode:nil -sgml-parent-document:nil -sgml-default-dtd-file:"../../../../manual.ced" -sgml-exposed-tags:nil -sgml-local-catalogs:nil -sgml-local-ecat-files:nil -End: -vim600: syn=xml fen fdm=syntax fdl=2 si -vim: et tw=78 syn=sgml -vi: ts=1 sw=1 ---> diff --git a/tests/package/php/data/entities.acronyms.ent b/tests/package/php/data/entities.acronyms.ent new file mode 100644 index 000000000..a657a3cff --- /dev/null +++ b/tests/package/php/data/entities.acronyms.ent @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- $Revision$ --> + +<entities xmlns = "http://docbook.org/ns/docbook" + xmlns:xlink = "http://www.w3.org/1999/xlink" + translate = "yes"> + +<entity name="sample.other">Some other, non acronym, entity</entity> + +<entity name="php"><acronym>PHP</acronym></entity> + +<entity name="acronym.expansion.API">Application Programming Interface</entity> + +<entity name="acronym.expansion.CSPRNG"> + Cryptographically Secure + PseudoRandom Number Generator +</entity> + +<entity name="acronym.expansion.PHP">PHP: Hypertext Preprocessor</entity> + +<entity name="acronym.expansion.cURL">Client URL Library</entity> + +</entities>