Version 1
[yaffs-website] / vendor / consolidation / annotated-command / src / Help / HelpDocument.php
diff --git a/vendor/consolidation/annotated-command/src/Help/HelpDocument.php b/vendor/consolidation/annotated-command/src/Help/HelpDocument.php
new file mode 100644 (file)
index 0000000..67609d6
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+namespace Consolidation\AnnotatedCommand\Help;
+
+use Consolidation\OutputFormatters\StructuredData\Xml\DomDataInterface;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Descriptor\XmlDescriptor;
+
+class HelpDocument implements DomDataInterface
+{
+    /** var Command */
+    protected $command;
+
+    /** var \DOMDocument */
+    protected $dom;
+
+    /**
+     * Create a help document from a Symfony Console command
+     */
+    public function __construct(Command $command)
+    {
+        $dom = $this->generateBaseHelpDom($command);
+        $dom = $this->alterHelpDocument($command, $dom);
+
+        $this->command = $command;
+        $this->dom = $dom;
+    }
+
+    /**
+     * Convert data into a \DomDocument.
+     *
+     * @return \DomDocument
+     */
+    public function getDomData()
+    {
+        return $this->dom;
+    }
+
+    /**
+     * Create the base help DOM prior to alteration by the Command object.
+     * @param Command $command
+     * @return \DomDocument
+     */
+    protected function generateBaseHelpDom(Command $command)
+    {
+        // Use Symfony to generate xml text. If other formats are
+        // requested, convert from xml to the desired form.
+        $descriptor = new XmlDescriptor();
+        return $descriptor->getCommandDocument($command);
+    }
+
+    /**
+     * Alter the DOM document per the command object
+     * @param Command $command
+     * @param \DomDocument $dom
+     * @return \DomDocument
+     */
+    protected function alterHelpDocument(Command $command, \DomDocument $dom)
+    {
+        if ($command instanceof HelpDocumentAlter) {
+            $dom = $command->helpAlter($dom);
+        }
+        return $dom;
+    }
+}