<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/rss.xsl.xml"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
    <title>Changes in helper.php</title>
    <description></description>
    <language>en</language>
    <copyright>Copyright 2025</copyright>
    <generator>Java</generator><item>
        <title>0fbee1892eb8b7339ce48e27e48e3fc821a8695f - Return body text and metadata from a single extraction</title>
        <link>http://127.0.0.1:8080/history/plugin/totext/helper.php#0fbee1892eb8b7339ce48e27e48e3fc821a8695f</link>
        <description>Return body text and metadata from a single extractionEvery extractor now returns an ExtractionResult (body text plus anormalised metadata map) from one parse of the file, instead of just atext string. Metadata keys are a single canonical vocabulary sharedacross all formats - Title, Author, Subject, Keywords, Description,Created, Modified, Language, Producer, plus Copyright (image-only) - soconsumers never have to special-case the source format.- ExtractionResult: final readonly value object carrying $text,  $metadata and a per-half ?Throwable $textError / $metadataError (with  isComplete()). Text and metadata are extracted independently: an  extractor throws only at its total-failure gate (container won&apos;t unzip,  PDF won&apos;t parse, file unreadable) and otherwise records a failed half&apos;s  error while still returning the salvaged half.- OOXML/ODF metadata: new AbstractOoxmlExtractor and AbstractOdfExtractor  intermediaries declare each family&apos;s source map once (docProps/core.xml  + app.xml; meta.xml); the concrete extractors only switch their extends  clause. AbstractZipXmlExtractor gains a generic mapMetadataFromXml()  walker.- PDF: reads the Info dictionary (Title/Author/Subject/Keywords/Created/  Modified/Producer-else-Creator) alongside the body text from the same  parse. normalizePdfString() is a temporary shim for UTF-16BE literal  strings that prinsfrank &lt;= v3.1.0 returns mojibake-expanded.- Images: now metadata-only (text is &apos;&apos;); field-map keys renamed to the  canonical vocabulary (Caption-&gt;Description, Date-&gt;Created,  Camera-&gt;Producer).- helper: extract() and extractMetadata() added; extractText() keeps its  string return and its throw-on-failure contract (rethrows textError),  so the docsearch plugin keeps working unchanged.- cli: prints body text followed by metadata by default; --text/-t and  --meta/-m restrict to one. A salvaged-but-partial extraction warns on  STDERR and exits 0; nothing usable exits non-zero.- ExtractionException::wrap() centralises wrapping a caught error as an  ExtractionException (passing one through if it already is).Tests assert the real Tika samples&apos; embedded metadata and thepartial-failure paths. The pre-existing PDF body-text Form-XObjectfailure is unchanged.

            List of files:
            /plugin/totext/helper.php</description>
        <pubDate>Mon, 22 Jun 2026 13:32:54 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;gohr@cosmocode.de&gt;</dc:creator>
    </item>
<item>
        <title>ca76a2e67052f7370ed3571784ecdc865c0c30b4 - Initial implementation of the totext plugin</title>
        <link>http://127.0.0.1:8080/history/plugin/totext/helper.php#ca76a2e67052f7370ed3571784ecdc865c0c30b4</link>
        <description>Initial implementation of the totext pluginExtract plain text from various file formats using PHP only (no shell-outs,no external binaries). Provides a CLI component (cli_plugin_totext) and ahelper component (helper_plugin_totext).Supported formats:- OOXML: docx, xlsx, pptx- OpenDocument: odt, ods, odp- PDF (via bundled smalot/pdfparser)- Plain-text family: txt, csv, md, markdown, log, text- Image metadata (EXIF/IPTC): jpg, jpeg, tif, tiffIncludes a fixture-based test suite covering every extractor, the factoryrouting, and the helper end to end.

            List of files:
            /plugin/totext/helper.php</description>
        <pubDate>Wed, 17 Jun 2026 11:42:17 +0000</pubDate>
        <dc:creator>Andreas Gohr &lt;gohr@cosmocode.de&gt;</dc:creator>
    </item>
</channel>
</rss>
