Mercurial > hg > isophonics-drupal-site
comparison vendor/consolidation/annotated-command/src/Help/HelpDocumentBuilder.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
16:c2387f117808 | 17:129ea1e6d783 |
---|---|
1 <?php | |
2 namespace Consolidation\AnnotatedCommand\Help; | |
3 | |
4 use Symfony\Component\Console\Application; | |
5 use Symfony\Component\Console\Descriptor\XmlDescriptor; | |
6 use Symfony\Component\Console\Input\InputInterface; | |
7 use Symfony\Component\Console\Output\OutputInterface; | |
8 use Consolidation\AnnotatedCommand\AnnotatedCommand; | |
9 | |
10 class HelpDocumentBuilder | |
11 { | |
12 public static function alter(\DomDocument $originalDom, AnnotatedCommand $command) | |
13 { | |
14 $dom = new \DOMDocument('1.0', 'UTF-8'); | |
15 $dom->appendChild($commandXML = $dom->createElement('command')); | |
16 $commandXML->setAttribute('id', $command->getName()); | |
17 $commandXML->setAttribute('name', $command->getName()); | |
18 | |
19 // Get the original <command> element and its top-level elements. | |
20 $originalCommandXML = static::getSingleElementByTagName($dom, $originalDom, 'command'); | |
21 $originalUsagesXML = static::getSingleElementByTagName($dom, $originalCommandXML, 'usages'); | |
22 $originalDescriptionXML = static::getSingleElementByTagName($dom, $originalCommandXML, 'description'); | |
23 $originalHelpXML = static::getSingleElementByTagName($dom, $originalCommandXML, 'help'); | |
24 $originalArgumentsXML = static::getSingleElementByTagName($dom, $originalCommandXML, 'arguments'); | |
25 $originalOptionsXML = static::getSingleElementByTagName($dom, $originalCommandXML, 'options'); | |
26 | |
27 // Keep only the first of the <usage> elements | |
28 $newUsagesXML = $dom->createElement('usages'); | |
29 $firstUsageXML = static::getSingleElementByTagName($dom, $originalUsagesXML, 'usage'); | |
30 $newUsagesXML->appendChild($firstUsageXML); | |
31 | |
32 // Create our own <example> elements | |
33 $newExamplesXML = $dom->createElement('examples'); | |
34 foreach ($command->getExampleUsages() as $usage => $description) { | |
35 $newExamplesXML->appendChild($exampleXML = $dom->createElement('example')); | |
36 $exampleXML->appendChild($usageXML = $dom->createElement('usage', $usage)); | |
37 $exampleXML->appendChild($descriptionXML = $dom->createElement('description', $description)); | |
38 } | |
39 | |
40 // Create our own <alias> elements | |
41 $newAliasesXML = $dom->createElement('aliases'); | |
42 foreach ($command->getAliases() as $alias) { | |
43 $newAliasesXML->appendChild($dom->createElement('alias', $alias)); | |
44 } | |
45 | |
46 // Create our own <topic> elements | |
47 $newTopicsXML = $dom->createElement('topics'); | |
48 foreach ($command->getTopics() as $topic) { | |
49 $newTopicsXML->appendChild($topicXML = $dom->createElement('topic', $topic)); | |
50 } | |
51 | |
52 // Place the different elements into the <command> element in the desired order | |
53 $commandXML->appendChild($newUsagesXML); | |
54 $commandXML->appendChild($newExamplesXML); | |
55 $commandXML->appendChild($originalDescriptionXML); | |
56 $commandXML->appendChild($originalArgumentsXML); | |
57 $commandXML->appendChild($originalOptionsXML); | |
58 $commandXML->appendChild($originalHelpXML); | |
59 $commandXML->appendChild($newAliasesXML); | |
60 $commandXML->appendChild($newTopicsXML); | |
61 | |
62 return $dom; | |
63 } | |
64 | |
65 | |
66 protected static function getSingleElementByTagName($dom, $parent, $tagName) | |
67 { | |
68 // There should always be exactly one '<command>' element. | |
69 $elements = $parent->getElementsByTagName($tagName); | |
70 $result = $elements->item(0); | |
71 | |
72 $result = $dom->importNode($result, true); | |
73 | |
74 return $result; | |
75 } | |
76 } |