Drush: commands/core/helpsingle.drush.inc Source File

1 <?php
2 
3 /**
4  * Implementation of hook_drush_command().
5  *
6  * In this hook, you specify which commands your
7  * drush module makes available, what it does and
8  * description.
9  *
10  * Notice how this structure closely resembles how
11  * you define menu hooks.
12  *
13  * @return
14  * An associative array describing your command(s).
15  */
16 function helpsingle_drush_command() {
17  $items = array();
18  $items['helpsingle'] = array(
19  'description' => 'Print help for a single command',
20  'bootstrap' => DRUSH_BOOTSTRAP_NONE,
21  'allow-additional-options' => TRUE,
22  'hidden' => TRUE,
23  'arguments' => array(
24  'command' => 'A command name, or command alias.',
25  ),
26  'examples' => array(
27  'drush help pm-download' => 'Show help for one command.',
28  'drush help dl' => 'Show help for one command using an alias.',
29  ),
30  'topics' => array('docs-readme'),
31  );
32  return $items;
33 }
34 
35 /**
36  * Command callback. Show help for a single command.
37  */
38 function drush_core_helpsingle($commandstring) {
39  // First check and see if the command can already be found.
40  $commands = drush_get_commands();
41  if (!array_key_exists($commandstring, $commands)) {
42  // If the command cannot be found, then bootstrap so that
43  // additional commands will be brought in.
44  // TODO: We need to do a full bootstrap in order to find module service
45  // commands. We only need to do this for Drupal 8, though; 7 and earlier
46  // can stop at DRUSH_BOOTSTRAP_DRUPAL_SITE. Perhaps we could use command
47  // caching to avoid bootstrapping, if we have collected the commands for
48  // this site once already.
50  $commands = drush_get_commands();
51  }
52  if (array_key_exists($commandstring, $commands)) {
53  $command = $commands[$commandstring];
54 
56 
57  drush_print_help($command);
58  return TRUE;
59  }
60  $shell_aliases = drush_get_context('shell-aliases', array());
61  if (array_key_exists($commandstring, $shell_aliases)) {
62  $msg = dt("'@alias-name' is a shell alias. Its value is: !name. See `drush topic docs-shell-aliases` and `drush shell-alias` for more information.", array('@alias-name' => $commandstring, '!name' => $shell_aliases[$commandstring]));
63  drush_log($msg, 'ok');
64  return TRUE;
65  }
66  return drush_set_error('DRUSH_COMMAND_NOT_FOUND', dt('Invalid command !command.', array('!command' => $commandstring)));
67 }
68 
69 /**
70  * Print the help for a single command to the screen.
71  *
72  * @param array $command
73  * A fully loaded $command array.
74  */
75 function drush_print_help($command) {
77 
78  if (!$help = drush_command_invoke_all('drush_help', 'drush:'. $command['command'])) {
79  $help = array($command['description']);
80  }
81 
82  if ($command['strict-option-handling']) {
83  $command['topics'][] = 'docs-strict-options';
84  }
85 
86  // Give commandfiles an opportunity to add examples and options to the command.
89  drush_command_invoke_all_ref('drush_help_alter', $command);
90 
91  drush_print(wordwrap(implode("\n", $help), drush_get_context('DRUSH_COLUMNS', 80)));
92  drush_print();
93 
94  $global_options = drush_get_global_options();
95  foreach ($command['global-options'] as $global_option) {
96  $command['options'][$global_option] = $global_options[$global_option];
97  }
98 
99  // Sort command options.
100  uksort($command['options'], '_drush_help_sort_command_options');
101 
102  // Print command sections help.
103  foreach ($command['sections'] as $key => $value) {
104  if (!empty($command[$key])) {
105  $rows = drush_format_help_section($command, $key);
106  if ($rows) {
107  drush_print(dt($value) . ':');
108  drush_print_table($rows, FALSE, array('label' => 40));
109  unset($rows);
110  drush_print();
111  }
112  }
113  }
114 
115  // Append aliases if any.
116  if ($command['aliases']) {
117  drush_print(dt("Aliases: ") . implode(', ', $command['aliases']));
118  }
119 }
120 
121 /**
122  * Sort command options alphabetically. Engine options at the end.
123  */
124 function _drush_help_sort_command_options($a, $b) {
125  $engine_a = strpos($a, '=');
126  $engine_b = strpos($b, '=');
127  if ($engine_a && !$engine_b) {
128  return 1;
129  }
130  else if (!$engine_a && $engine_b) {
131  return -1;
132  }
133  elseif ($engine_a && $engine_b) {
134  if (substr($a, 0, $engine_a) == substr($b, 0, $engine_b)) {
135  return 0;
136  }
137  }
138  return ($a < $b) ? -1 : 1;
139 }
140 
141 /**
142  * Check to see if the specified command contains an 'allow-additional-options'
143  * record. If it does, find the additional options that are allowed, and
144  * add in the help text for the options of all of the sub-commands.
145  */
146 function _drush_help_merge_subcommand_information(&$command) {
147  // 'allow-additional-options' will either be FALSE (default),
148  // TRUE ("allow anything"), or an array that lists subcommands
149  // that are or may be called via drush_invoke by this command.
150  if (is_array($command['allow-additional-options'])) {
151  $implemented = drush_get_commands();
152  foreach ($command['allow-additional-options'] as $subcommand_name) {
153  if (array_key_exists($subcommand_name, $implemented)) {
154  $command['options'] += $implemented[$subcommand_name]['options'];
155  $command['sub-options'] = array_merge_recursive($command['sub-options'], $implemented[$subcommand_name]['sub-options']);
156  if (empty($command['arguments'])) {
157  $command['arguments'] = $implemented[$subcommand_name]['arguments'];
158  }
159  $command['topics'] = array_merge($command['topics'], $implemented[$subcommand_name]['topics']);
160  }
161  }
162  }
163 }
164 
165 /**
166  * Format one named help section from a command record
167  *
168  * @param $command
169  * A command record with help information
170  * @param $section
171  * The name of the section to format ('options', 'topic', etc.)
172  * @returns array
173  * Formatted rows, suitable for printing via drush_print_table. The returned
174  * array can be empty.
175  */
176 function drush_format_help_section($command, $section) {
177  $rows = array();
178  $formatter = (function_exists('drush_help_section_formatter_' . $section)) ? 'drush_help_section_formatter_' . $section : 'drush_help_section_default_formatter';
179  foreach ($command[$section] as $name => $help_attributes) {
180  if (!is_array($help_attributes)) {
181  $help_attributes = array('description' => $help_attributes);
182  }
183  $help_attributes['label'] = $name;
184  call_user_func_array($formatter, array($command, &$help_attributes));
185  if (empty($help_attributes['hidden'])) {
186  $rows[] = array('label' => $help_attributes['label'], 'description' => $help_attributes['description']);
187  // Process the subsections too, if any
188  if (!empty($command['sub-' . $section]) && array_key_exists($name, $command['sub-' . $section])) {
189  $rows = array_merge($rows, _drush_format_help_subsection($command, $section, $name, $formatter));
190  }
191  }
192  }
193  return $rows;
194 }
195 
196 /**
197  * Format one named portion of a subsection from a command record.
198  * Subsections allow related parts of a help record to be grouped
199  * together. For example, in the 'options' section, sub-options that
200  * are related to a particular primary option are stored in a 'sub-options'
201  * section whose name == the name of the primary option.
202  *
203  * @param $command
204  * A command record with help information
205  * @param $section
206  * The name of the section to format ('options', 'topic', etc.)
207  * @param $subsection
208  * The name of the subsection (e.g. the name of the primary option)
209  * @param $formatter
210  * The name of a function to use to format the rows of the subsection
211  * @param $prefix
212  * Characters to prefix to the front of the label (for indentation)
213  * @returns array
214  * Formatted rows, suitable for printing via drush_print_table.
215  */
216 function _drush_format_help_subsection($command, $section, $subsection, $formatter, $prefix = ' ') {
217  $rows = array();
218  foreach ($command['sub-' . $section][$subsection] as $name => $help_attributes) {
219  if (!is_array($help_attributes)) {
220  $help_attributes = array('description' => $help_attributes);
221  }
222  $help_attributes['label'] = $name;
223  call_user_func_array($formatter, array($command, &$help_attributes));
224  if (!array_key_exists('hidden', $help_attributes)) {
225  $rows[] = array('label' => $prefix . $help_attributes['label'], 'description' => $help_attributes['description']);
226  // Process the subsections too, if any
227  if (!empty($command['sub-' . $section]) && array_key_exists($name, $command['sub-' . $section])) {
228  $rows = array_merge($rows, _drush_format_help_subsection($command, $section, $name, $formatter, $prefix . ' '));
229  }
230  }
231  }
232  return $rows;
233 }
234 
235 /**
236  * The options section formatter. Adds a "--" in front of each
237  * item label. Also handles short-form and example-value
238  * components in the help attributes.
239  */
240 function drush_help_section_formatter_options($command, &$help_attributes) {
241  if ($help_attributes['label'][0] == '-') {
242  drush_log(dt("Option '!option' of command !command should instead be declared as '!fixed'", array('!option' => $help_attributes['label'], '!command' => $command['command'], '!fixed' => preg_replace('/^--*/', '', $help_attributes['label']))), 'debug');
243  }
244  else {
245  $help_attributes['label'] = '--' . $help_attributes['label'];
246  }
247  if (!empty($help_attributes['required'])) {
248  $help_attributes['description'] .= " " . dt("Required.");
249  }
250 
251  $prefix = '<';
252  $suffix = '>';
253  if (array_key_exists('example-value', $help_attributes)) {
254  if (isset($help_attributes['value']) && $help_attributes['value'] == 'optional') {
255  $prefix = '[';
256  $suffix = ']';
257  }
258  $help_attributes['label'] .= '=' . $prefix . $help_attributes['example-value'] . $suffix;
259 
260  if (array_key_exists('short-form', $help_attributes)) {
261  $help_attributes['short-form'] .= " $prefix" . $help_attributes['example-value'] . $suffix;
262  }
263  }
264  if (array_key_exists('short-form', $help_attributes)) {
265  $help_attributes['label'] = '-' . $help_attributes['short-form'] . ', ' . $help_attributes['label'];
266  }
267  drush_help_section_default_formatter($command, $help_attributes);
268 }
269 
270 /**
271  * The default section formatter. Replaces '[command]' with the
272  * command name.
273  */
274 function drush_help_section_default_formatter($command, &$help_attributes) {
275  // '[command]' is a token representing the current command. @see pm_drush_engine_version_control().
276  $help_attributes['label'] = str_replace('[command]', $command['command'], $help_attributes['label']);
277 }

File

doxygen/html/helpsingle_8drush_8inc_source.html
View source
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>Drush: commands/core/helpsingle.drush.inc Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">Drush
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_afac61274991793aa7e9133a8f4f291e.html">commands</a></li><li class="navelem"><a class="el" href="dir_5762b63965e3a68a35f77c23b4dd4668.html">core</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">helpsingle.drush.inc</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;&lt;?php</div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment"> * Implementation of hook_drush_command().</span></div>
<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment"> * In this hook, you specify which commands your</span></div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment"> * drush module makes available, what it does and</span></div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment"> * description.</span></div>
<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment"> * Notice how this structure closely resembles how</span></div>
<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment"> * you define menu hooks.</span></div>
<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment"> * @return</span></div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment"> *   An associative array describing your command(s).</span></div>
<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="keyword">function</span> helpsingle_drush_command() {</div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;  $items = array();</div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;  $items[<span class="stringliteral">&#39;helpsingle&#39;</span>] = array(</div>
<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;    <span class="stringliteral">&#39;description&#39;</span> =&gt; <span class="stringliteral">&#39;Print help for a single command&#39;</span>,</div>
<div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;    <span class="stringliteral">&#39;bootstrap&#39;</span> =&gt; DRUSH_BOOTSTRAP_NONE,</div>
<div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    <span class="stringliteral">&#39;allow-additional-options&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    <span class="stringliteral">&#39;hidden&#39;</span> =&gt; TRUE,</div>
<div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    <span class="stringliteral">&#39;arguments&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;      <span class="stringliteral">&#39;command&#39;</span> =&gt; <span class="stringliteral">&#39;A command name, or command alias.&#39;</span>,</div>
<div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;    ),</div>
<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    <span class="stringliteral">&#39;examples&#39;</span> =&gt; array(</div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;      <span class="stringliteral">&#39;drush help pm-download&#39;</span> =&gt; <span class="stringliteral">&#39;Show help for one command.&#39;</span>,</div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;      <span class="stringliteral">&#39;drush help dl&#39;</span> =&gt; <span class="stringliteral">&#39;Show help for one command using an alias.&#39;</span>,</div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    ),</div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <span class="stringliteral">&#39;topics&#39;</span> =&gt; array(<span class="stringliteral">&#39;docs-readme&#39;</span>),</div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;  );</div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;  <span class="keywordflow">return</span> $items;</div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;}</div>
<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment"> * Command callback. Show help for a single command.</span></div>
<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">function</span> drush_core_helpsingle($commandstring) {</div>
<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;  <span class="comment">// First check and see if the command can already be found.</span></div>
<div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;  $commands = <a class="code" href="command_8inc.html#af0c377881e5c9c772f0cad80ea016452">drush_get_commands</a>();</div>
<div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;  <span class="keywordflow">if</span> (!array_key_exists($commandstring, $commands)) {</div>
<div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="comment">// If the command cannot be found, then bootstrap so that</span></div>
<div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="comment">// additional commands will be brought in.</span></div>
<div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="comment">// TODO: We need to do a full bootstrap in order to find module service</span></div>
<div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    <span class="comment">// commands. We only need to do this for Drupal 8, though; 7 and earlier</span></div>
<div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="comment">// can stop at DRUSH_BOOTSTRAP_DRUPAL_SITE. Perhaps we could use command</span></div>
<div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="comment">// caching to avoid bootstrapping, if we have collected the commands for</span></div>
<div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <span class="comment">// this site once already.</span></div>
<div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    drush_bootstrap_max();</div>
<div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    $commands = <a class="code" href="command_8inc.html#af0c377881e5c9c772f0cad80ea016452">drush_get_commands</a>();</div>
<div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  }</div>
<div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  <span class="keywordflow">if</span> (array_key_exists($commandstring, $commands)) {</div>
<div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    $command = $commands[$commandstring];</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;</div>
<div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <a class="code" href="annotationcommand__adapter_8inc.html#a62441a9c8bf3e543e36281d156beb63c">annotationcommand_adapter_add_hook_options</a>($command);</div>
<div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div>
<div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    drush_print_help($command);</div>
<div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="keywordflow">return</span> TRUE;</div>
<div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;  }</div>
<div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  $shell_aliases = <a class="code" href="context_8inc.html#ad25559f8d7d753f636fbeac347c29fc5">drush_get_context</a>(<span class="stringliteral">&#39;shell-aliases&#39;</span>, array());</div>
<div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;  <span class="keywordflow">if</span> (array_key_exists($commandstring, $shell_aliases)) {</div>
<div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    $msg = <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&quot;&#39;@alias-name&#39; is a shell alias.  Its value is: !name. See `drush topic docs-shell-aliases` and `drush shell-alias` for more information.&quot;</span>, array(<span class="stringliteral">&#39;@alias-name&#39;</span> =&gt; $commandstring, <span class="stringliteral">&#39;!name&#39;</span> =&gt; $shell_aliases[$commandstring]));</div>
<div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <a class="code" href="group__logging.html#ga47324b65808524558a488916b150dd51">drush_log</a>($msg, <span class="stringliteral">&#39;ok&#39;</span>);</div>
<div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="keywordflow">return</span> TRUE;</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  }</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;  <span class="keywordflow">return</span> <a class="code" href="group__errorhandling.html#ga23fe9e1e8c1e5ade39256106044b6da4">drush_set_error</a>(<span class="stringliteral">&#39;DRUSH_COMMAND_NOT_FOUND&#39;</span>, <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&#39;Invalid command !command.&#39;</span>, array(<span class="stringliteral">&#39;!command&#39;</span> =&gt; $commandstring)));</div>
<div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;}</div>
<div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="comment"> * Print the help for a single command to the screen.</span></div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="comment"> * @param array $command</span></div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment"> *   A fully loaded $command array.</span></div>
<div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;<span class="keyword">function</span> drush_print_help($command) {</div>
<div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;  _drush_help_merge_subcommand_information($command);</div>
<div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  <span class="keywordflow">if</span> (!$help = <a class="code" href="command_8inc.html#a19eba9666aba673a64fbd78a2c5ef4f9">drush_command_invoke_all</a>(<span class="stringliteral">&#39;drush_help&#39;</span>, <span class="stringliteral">&#39;drush:&#39;</span>. $command[<span class="stringliteral">&#39;command&#39;</span>])) {</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    $help = array($command[<span class="stringliteral">&#39;description&#39;</span>]);</div>
<div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  }</div>
<div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;</div>
<div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;  <span class="keywordflow">if</span> ($command[<span class="stringliteral">&#39;strict-option-handling&#39;</span>]) {</div>
<div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    $command[<span class="stringliteral">&#39;topics&#39;</span>][] = <span class="stringliteral">&#39;docs-strict-options&#39;</span>;</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  }</div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;  <span class="comment">// Give commandfiles an opportunity to add examples and options to the command.</span></div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;  drush_bootstrap_max(DRUSH_BOOTSTRAP_DRUPAL_SITE);</div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;  <a class="code" href="engines_8inc.html#a4f5313a2d79cd6fbcde3d30b361e306e">drush_engine_add_help_topics</a>($command);</div>
<div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;  <a class="code" href="command_8inc.html#a74995cc76034e90a39baee51111b20be">drush_command_invoke_all_ref</a>(<span class="stringliteral">&#39;drush_help_alter&#39;</span>, $command);</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>(wordwrap(implode(<span class="stringliteral">&quot;\n&quot;</span>, $help), <a class="code" href="context_8inc.html#ad25559f8d7d753f636fbeac347c29fc5">drush_get_context</a>(<span class="stringliteral">&#39;DRUSH_COLUMNS&#39;</span>, 80)));</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;  <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>();</div>
<div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div>
<div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;  $global_options = <a class="code" href="drush_8inc.html#acb0a26e79bcbdd1152d59a6916a35aae">drush_get_global_options</a>();</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;  <span class="keywordflow">foreach</span> ($command[<span class="stringliteral">&#39;global-options&#39;</span>] as $global_option) {</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    $command[<span class="stringliteral">&#39;options&#39;</span>][$global_option] = $global_options[$global_option];</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  }</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;  <span class="comment">// Sort command options.</span></div>
<div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  uksort($command[<span class="stringliteral">&#39;options&#39;</span>], <span class="stringliteral">&#39;_drush_help_sort_command_options&#39;</span>);</div>
<div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;</div>
<div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;  <span class="comment">// Print command sections help.</span></div>
<div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;  <span class="keywordflow">foreach</span> ($command[<span class="stringliteral">&#39;sections&#39;</span>] as $key =&gt; $value) {</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    <span class="keywordflow">if</span> (!empty($command[$key])) {</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;      $rows = drush_format_help_section($command, $key);</div>
<div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;      <span class="keywordflow">if</span> ($rows) {</div>
<div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>(<a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>($value) . <span class="charliteral">&#39;:&#39;</span>);</div>
<div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        <a class="code" href="group__outputfunctions.html#ga2dfb80176f98c67097334acfa98211cd">drush_print_table</a>($rows, FALSE, array(<span class="stringliteral">&#39;label&#39;</span> =&gt; 40));</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        unset($rows);</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>();</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;      }</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    }</div>
<div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;  }</div>
<div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div>
<div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;  <span class="comment">// Append aliases if any.</span></div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  <span class="keywordflow">if</span> ($command[<span class="stringliteral">&#39;aliases&#39;</span>]) {</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <a class="code" href="group__outputfunctions.html#ga63acbb94925d6d2693e235e966bba740">drush_print</a>(<a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&quot;Aliases: &quot;</span>) . implode(<span class="stringliteral">&#39;, &#39;</span>, $command[<span class="stringliteral">&#39;aliases&#39;</span>]));</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;  }</div>
<div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;}</div>
<div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="comment"> * Sort command options alphabetically. Engine options at the end.</span></div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;<span class="keyword">function</span> _drush_help_sort_command_options($a, $b) {</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;  $engine_a = strpos($a, <span class="charliteral">&#39;=&#39;</span>);</div>
<div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;  $engine_b = strpos($b, <span class="charliteral">&#39;=&#39;</span>);</div>
<div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;  <span class="keywordflow">if</span> ($engine_a &amp;&amp; !$engine_b) {</div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="keywordflow">return</span> 1;</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;  }</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!$engine_a &amp;&amp; $engine_b) {</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">return</span> -1;</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;  }</div>
<div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;  elseif ($engine_a &amp;&amp; $engine_b) {</div>
<div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <span class="keywordflow">if</span> (substr($a, 0, $engine_a) == substr($b, 0, $engine_b)) {</div>
<div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;      <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    }</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  }</div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <span class="keywordflow">return</span> ($a &lt; $b) ? -1 : 1;</div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;}</div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="comment"> * Check to see if the specified command contains an &#39;allow-additional-options&#39;</span></div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="comment"> * record.  If it does, find the additional options that are allowed, and</span></div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="comment"> * add in the help text for the options of all of the sub-commands.</span></div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;<span class="keyword">function</span> _drush_help_merge_subcommand_information(&amp;$command) {</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  <span class="comment">// &#39;allow-additional-options&#39; will either be FALSE (default),</span></div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  <span class="comment">// TRUE (&quot;allow anything&quot;), or an array that lists subcommands</span></div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;  <span class="comment">// that are or may be called via drush_invoke by this command.</span></div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  <span class="keywordflow">if</span> (is_array($command[<span class="stringliteral">&#39;allow-additional-options&#39;</span>])) {</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    $implemented = <a class="code" href="command_8inc.html#af0c377881e5c9c772f0cad80ea016452">drush_get_commands</a>();</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    <span class="keywordflow">foreach</span> ($command[<span class="stringliteral">&#39;allow-additional-options&#39;</span>] as $subcommand_name) {</div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;      <span class="keywordflow">if</span> (array_key_exists($subcommand_name, $implemented)) {</div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;        $command[<span class="stringliteral">&#39;options&#39;</span>] += $implemented[$subcommand_name][<span class="stringliteral">&#39;options&#39;</span>];</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;        $command[<span class="stringliteral">&#39;sub-options&#39;</span>] = array_merge_recursive($command[<span class="stringliteral">&#39;sub-options&#39;</span>], $implemented[$subcommand_name][<span class="stringliteral">&#39;sub-options&#39;</span>]);</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        <span class="keywordflow">if</span> (empty($command[<span class="stringliteral">&#39;arguments&#39;</span>])) {</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;          $command[<span class="stringliteral">&#39;arguments&#39;</span>] = $implemented[$subcommand_name][<span class="stringliteral">&#39;arguments&#39;</span>];</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;        }</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        $command[<span class="stringliteral">&#39;topics&#39;</span>] = array_merge($command[<span class="stringliteral">&#39;topics&#39;</span>], $implemented[$subcommand_name][<span class="stringliteral">&#39;topics&#39;</span>]);</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;      }</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;    }</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  }</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;}</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;<span class="comment"> * Format one named help section from a command record</span></div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<span class="comment"> * @param $command</span></div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;<span class="comment"> *   A command record with help information</span></div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="comment"> * @param $section</span></div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="comment"> *   The name of the section to format (&#39;options&#39;, &#39;topic&#39;, etc.)</span></div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="comment"> * @returns array</span></div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="comment"> *   Formatted rows, suitable for printing via drush_print_table. The returned</span></div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="comment"> *   array can be empty.</span></div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="keyword">function</span> drush_format_help_section($command, $section) {</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;  $rows = array();</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;  $formatter = (function_exists(<span class="stringliteral">&#39;drush_help_section_formatter_&#39;</span> . $section)) ? <span class="stringliteral">&#39;drush_help_section_formatter_&#39;</span> . $section : <span class="stringliteral">&#39;drush_help_section_default_formatter&#39;</span>;</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;  <span class="keywordflow">foreach</span> ($command[$section] as $name =&gt; $help_attributes) {</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="keywordflow">if</span> (!is_array($help_attributes)) {</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;      $help_attributes = array(<span class="stringliteral">&#39;description&#39;</span> =&gt; $help_attributes);</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;    }</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    $help_attributes[<span class="stringliteral">&#39;label&#39;</span>] = $name;</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    call_user_func_array($formatter, array($command, &amp;$help_attributes));</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <span class="keywordflow">if</span> (empty($help_attributes[<span class="stringliteral">&#39;hidden&#39;</span>])) {</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;      $rows[] = array(<span class="stringliteral">&#39;label&#39;</span> =&gt; $help_attributes[<span class="stringliteral">&#39;label&#39;</span>], <span class="stringliteral">&#39;description&#39;</span> =&gt; $help_attributes[<span class="stringliteral">&#39;description&#39;</span>]);</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;      <span class="comment">// Process the subsections too, if any</span></div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;      <span class="keywordflow">if</span> (!empty($command[<span class="stringliteral">&#39;sub-&#39;</span> . $section]) &amp;&amp; array_key_exists($name, $command[<span class="stringliteral">&#39;sub-&#39;</span> . $section])) {</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        $rows = array_merge($rows, _drush_format_help_subsection($command, $section, $name, $formatter));</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;      }</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    }</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;  }</div>
<div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;  <span class="keywordflow">return</span> $rows;</div>
<div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;}</div>
<div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;<span class="comment"> * Format one named portion of a subsection from a command record.</span></div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="comment"> * Subsections allow related parts of a help record to be grouped</span></div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;<span class="comment"> * together.  For example, in the &#39;options&#39; section, sub-options that</span></div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;<span class="comment"> * are related to a particular primary option are stored in a &#39;sub-options&#39;</span></div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;<span class="comment"> * section whose name == the name of the primary option.</span></div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;<span class="comment"> * @param $command</span></div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="comment"> *   A command record with help information</span></div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="comment"> * @param $section</span></div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;<span class="comment"> *   The name of the section to format (&#39;options&#39;, &#39;topic&#39;, etc.)</span></div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;<span class="comment"> * @param $subsection</span></div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;<span class="comment"> *   The name of the subsection (e.g. the name of the primary option)</span></div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;<span class="comment"> * @param $formatter</span></div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;<span class="comment"> *   The name of a function to use to format the rows of the subsection</span></div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="comment"> * @param $prefix</span></div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;<span class="comment"> *   Characters to prefix to the front of the label (for indentation)</span></div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="comment"> * @returns array</span></div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;<span class="comment"> *   Formatted rows, suitable for printing via drush_print_table.</span></div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;<span class="keyword">function</span> _drush_format_help_subsection($command, $section, $subsection, $formatter, $prefix = <span class="stringliteral">&#39;  &#39;</span>) {</div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;  $rows = array();</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;  <span class="keywordflow">foreach</span> ($command[<span class="stringliteral">&#39;sub-&#39;</span> . $section][$subsection] as $name =&gt; $help_attributes) {</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <span class="keywordflow">if</span> (!is_array($help_attributes)) {</div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;      $help_attributes = array(<span class="stringliteral">&#39;description&#39;</span> =&gt; $help_attributes);</div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    }</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    $help_attributes[<span class="stringliteral">&#39;label&#39;</span>] = $name;</div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    call_user_func_array($formatter, array($command, &amp;$help_attributes));</div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    <span class="keywordflow">if</span> (!array_key_exists(<span class="stringliteral">&#39;hidden&#39;</span>, $help_attributes)) {</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;      $rows[] = array(<span class="stringliteral">&#39;label&#39;</span> =&gt; $prefix . $help_attributes[<span class="stringliteral">&#39;label&#39;</span>], <span class="stringliteral">&#39;description&#39;</span> =&gt; $help_attributes[<span class="stringliteral">&#39;description&#39;</span>]);</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;      <span class="comment">// Process the subsections too, if any</span></div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;      <span class="keywordflow">if</span> (!empty($command[<span class="stringliteral">&#39;sub-&#39;</span> . $section]) &amp;&amp; array_key_exists($name, $command[<span class="stringliteral">&#39;sub-&#39;</span> . $section])) {</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;        $rows = array_merge($rows, _drush_format_help_subsection($command, $section, $name, $formatter, $prefix . <span class="stringliteral">&#39;  &#39;</span>));</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;      }</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    }</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;  }</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;  <span class="keywordflow">return</span> $rows;</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;}</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;<span class="comment"> * The options section formatter.  Adds a &quot;--&quot; in front of each</span></div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;<span class="comment"> * item label.  Also handles short-form and example-value</span></div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="comment"> * components in the help attributes.</span></div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;<span class="keyword">function</span> drush_help_section_formatter_options($command, &amp;$help_attributes) {</div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  <span class="keywordflow">if</span> ($help_attributes[<span class="stringliteral">&#39;label&#39;</span>][0] == <span class="charliteral">&#39;-&#39;</span>) {</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <a class="code" href="group__logging.html#ga47324b65808524558a488916b150dd51">drush_log</a>(<a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&quot;Option &#39;!option&#39; of command !command should instead be declared as &#39;!fixed&#39;&quot;</span>, array(<span class="stringliteral">&#39;!option&#39;</span> =&gt; $help_attributes[<span class="stringliteral">&#39;label&#39;</span>], <span class="stringliteral">&#39;!command&#39;</span> =&gt; $command[<span class="stringliteral">&#39;command&#39;</span>], <span class="stringliteral">&#39;!fixed&#39;</span> =&gt; preg_replace(<span class="stringliteral">&#39;/^--*/&#39;</span>, <span class="stringliteral">&#39;&#39;</span>, $help_attributes[<span class="stringliteral">&#39;label&#39;</span>]))), <span class="stringliteral">&#39;debug&#39;</span>);</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;  }</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    $help_attributes[<span class="stringliteral">&#39;label&#39;</span>] = <span class="stringliteral">&#39;--&#39;</span> . $help_attributes[<span class="stringliteral">&#39;label&#39;</span>];</div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;  }</div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;  <span class="keywordflow">if</span> (!empty($help_attributes[<span class="stringliteral">&#39;required&#39;</span>])) {</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    $help_attributes[<span class="stringliteral">&#39;description&#39;</span>] .= <span class="stringliteral">&quot; &quot;</span> . <a class="code" href="group__outputfunctions.html#ga1218abcb1e27dd3bb412113d1e344d96">dt</a>(<span class="stringliteral">&quot;Required.&quot;</span>);</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;  }</div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  $prefix = <span class="charliteral">&#39;&lt;&#39;</span>;</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;  $suffix = <span class="charliteral">&#39;&gt;&#39;</span>;</div>
<div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;  <span class="keywordflow">if</span> (array_key_exists(<span class="stringliteral">&#39;example-value&#39;</span>, $help_attributes)) {</div>
<div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <span class="keywordflow">if</span> (isset($help_attributes[<span class="stringliteral">&#39;value&#39;</span>]) &amp;&amp; $help_attributes[<span class="stringliteral">&#39;value&#39;</span>] == <span class="stringliteral">&#39;optional&#39;</span>) {</div>
<div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;      $prefix = <span class="charliteral">&#39;[&#39;</span>;</div>
<div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;      $suffix = <span class="charliteral">&#39;]&#39;</span>;</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    }</div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    $help_attributes[<span class="stringliteral">&#39;label&#39;</span>] .= <span class="charliteral">&#39;=&#39;</span> . $prefix . $help_attributes[<span class="stringliteral">&#39;example-value&#39;</span>] . $suffix;</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    <span class="keywordflow">if</span> (array_key_exists(<span class="stringliteral">&#39;short-form&#39;</span>, $help_attributes)) {</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;      $help_attributes[<span class="stringliteral">&#39;short-form&#39;</span>] .= <span class="stringliteral">&quot; $prefix&quot;</span> . $help_attributes[<span class="stringliteral">&#39;example-value&#39;</span>] . $suffix;</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    }</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;  }</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;  <span class="keywordflow">if</span> (array_key_exists(<span class="stringliteral">&#39;short-form&#39;</span>, $help_attributes)) {</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    $help_attributes[<span class="stringliteral">&#39;label&#39;</span>] = <span class="charliteral">&#39;-&#39;</span> . $help_attributes[<span class="stringliteral">&#39;short-form&#39;</span>] . <span class="stringliteral">&#39;, &#39;</span> . $help_attributes[<span class="stringliteral">&#39;label&#39;</span>];</div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;  }</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;  drush_help_section_default_formatter($command, $help_attributes);</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;}</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;<span class="comment"></span></div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;<span class="comment">/**</span></div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;<span class="comment"> * The default section formatter.  Replaces &#39;[command]&#39; with the</span></div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;<span class="comment"> * command name.</span></div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;<span class="keyword">function</span> drush_help_section_default_formatter($command, &amp;$help_attributes) {</div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;  <span class="comment">// &#39;[command]&#39; is a token representing the current command. @see pm_drush_engine_version_control().</span></div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  $help_attributes[<span class="stringliteral">&#39;label&#39;</span>] = str_replace(<span class="stringliteral">&#39;[command]&#39;</span>, $command[<span class="stringliteral">&#39;command&#39;</span>], $help_attributes[<span class="stringliteral">&#39;label&#39;</span>]);</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;}</div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Nov 2 2016 07:28:53 for Drush by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.1.2
</small></address>
</body>
</html>