<!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/html;charset=UTF-8"/> <title>tclap: StdOutput.h Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.6.0 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</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> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <h1>StdOutput.h</h1><a href="StdOutput_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// -*- Mode: c++; c-basic-offset: 4; tab-width: 4; -*-</span> <a name="l00002"></a>00002 <a name="l00003"></a>00003 <span class="comment">/****************************************************************************** </span> <a name="l00004"></a>00004 <span class="comment"> * </span> <a name="l00005"></a>00005 <span class="comment"> * file: StdOutput.h</span> <a name="l00006"></a>00006 <span class="comment"> * </span> <a name="l00007"></a>00007 <span class="comment"> * Copyright (c) 2004, Michael E. Smoot</span> <a name="l00008"></a>00008 <span class="comment"> * All rights reverved.</span> <a name="l00009"></a>00009 <span class="comment"> * </span> <a name="l00010"></a>00010 <span class="comment"> * See the file COPYING in the top directory of this distribution for</span> <a name="l00011"></a>00011 <span class="comment"> * more information.</span> <a name="l00012"></a>00012 <span class="comment"> * </span> <a name="l00013"></a>00013 <span class="comment"> * THE SOFTWARE IS PROVIDED _AS IS_, WITHOUT WARRANTY OF ANY KIND, EXPRESS </span> <a name="l00014"></a>00014 <span class="comment"> * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, </span> <a name="l00015"></a>00015 <span class="comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL </span> <a name="l00016"></a>00016 <span class="comment"> * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER </span> <a name="l00017"></a>00017 <span class="comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING </span> <a name="l00018"></a>00018 <span class="comment"> * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER </span> <a name="l00019"></a>00019 <span class="comment"> * DEALINGS IN THE SOFTWARE. </span> <a name="l00020"></a>00020 <span class="comment"> * </span> <a name="l00021"></a>00021 <span class="comment"> *****************************************************************************/</span> <a name="l00022"></a>00022 <a name="l00023"></a>00023 <span class="preprocessor">#ifndef TCLAP_STDCMDLINEOUTPUT_H</span> <a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define TCLAP_STDCMDLINEOUTPUT_H</span> <a name="l00025"></a>00025 <span class="preprocessor"></span> <a name="l00026"></a>00026 <span class="preprocessor">#include <string></span> <a name="l00027"></a>00027 <span class="preprocessor">#include <vector></span> <a name="l00028"></a>00028 <span class="preprocessor">#include <list></span> <a name="l00029"></a>00029 <span class="preprocessor">#include <iostream></span> <a name="l00030"></a>00030 <span class="preprocessor">#include <algorithm></span> <a name="l00031"></a>00031 <a name="l00032"></a>00032 <span class="preprocessor">#include <<a class="code" href="CmdLineInterface_8h.html">tclap/CmdLineInterface.h</a>></span> <a name="l00033"></a>00033 <span class="preprocessor">#include <<a class="code" href="CmdLineOutput_8h.html">tclap/CmdLineOutput.h</a>></span> <a name="l00034"></a>00034 <span class="preprocessor">#include <<a class="code" href="XorHandler_8h.html">tclap/XorHandler.h</a>></span> <a name="l00035"></a>00035 <span class="preprocessor">#include <<a class="code" href="Arg_8h.html">tclap/Arg.h</a>></span> <a name="l00036"></a>00036 <a name="l00037"></a>00037 <span class="keyword">namespace </span>TCLAP { <a name="l00038"></a>00038 <a name="l00043"></a><a class="code" href="classTCLAP_1_1StdOutput.html">00043</a> <span class="keyword">class </span><a class="code" href="classTCLAP_1_1StdOutput.html" title="A class that isolates any output from the CmdLine object so that it may be easily...">StdOutput</a> : <span class="keyword">public</span> <a class="code" href="classTCLAP_1_1CmdLineOutput.html" title="The interface that any output object must implement.">CmdLineOutput</a> <a name="l00044"></a>00044 { <a name="l00045"></a>00045 <a name="l00046"></a>00046 <span class="keyword">public</span>: <a name="l00047"></a>00047 <a name="l00053"></a>00053 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classTCLAP_1_1StdOutput.html#aeb10eb400e0ee45f2cde689bef606b49" title="Prints the usage to stdout.">usage</a>(<a class="code" href="classTCLAP_1_1CmdLineInterface.html" title="The base class that manages the command line definition and passes along the parsing...">CmdLineInterface</a>& c); <a name="l00054"></a>00054 <a name="l00060"></a>00060 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classTCLAP_1_1StdOutput.html#a768111a59af4753ac6e5ace3ec99482e" title="Prints the version to stdout.">version</a>(<a class="code" href="classTCLAP_1_1CmdLineInterface.html" title="The base class that manages the command line definition and passes along the parsing...">CmdLineInterface</a>& c); <a name="l00061"></a>00061 <a name="l00068"></a>00068 <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classTCLAP_1_1StdOutput.html#a9afc267e012c3ac42c8b1afe01f98556" title="Prints (to stderr) an error message, short usage Can be overridden to produce alternative...">failure</a>(<a class="code" href="classTCLAP_1_1CmdLineInterface.html" title="The base class that manages the command line definition and passes along the parsing...">CmdLineInterface</a>& c, <a name="l00069"></a>00069 <a class="code" href="classTCLAP_1_1ArgException.html" title="A simple class that defines and argument exception.">ArgException</a>& e ); <a name="l00070"></a>00070 <a name="l00071"></a>00071 <span class="keyword">protected</span>: <a name="l00072"></a>00072 <a name="l00078"></a>00078 <span class="keywordtype">void</span> <a class="code" href="classTCLAP_1_1StdOutput.html#a60fa57587838d506d907f08800f2631c" title="Writes a brief usage message with short args.">_shortUsage</a>( <a class="code" href="classTCLAP_1_1CmdLineInterface.html" title="The base class that manages the command line definition and passes along the parsing...">CmdLineInterface</a>& c, std::ostream& os ) <span class="keyword">const</span>; <a name="l00079"></a>00079 <a name="l00086"></a>00086 <span class="keywordtype">void</span> <a class="code" href="classTCLAP_1_1StdOutput.html#ace725aebd685c16f464d697e85e0327d" title="Writes a longer usage message with long and short args, provides descriptions and...">_longUsage</a>( <a class="code" href="classTCLAP_1_1CmdLineInterface.html" title="The base class that manages the command line definition and passes along the parsing...">CmdLineInterface</a>& c, std::ostream& os ) <span class="keyword">const</span>; <a name="l00087"></a>00087 <a name="l00099"></a>00099 <span class="keywordtype">void</span> <a class="code" href="classTCLAP_1_1StdOutput.html#a38661be8895e07c442c2c3138b7444a2" title="This function inserts line breaks and indents long strings according the params input...">spacePrint</a>( std::ostream& os, <a name="l00100"></a>00100 <span class="keyword">const</span> std::string& s, <a name="l00101"></a>00101 <span class="keywordtype">int</span> maxWidth, <a name="l00102"></a>00102 <span class="keywordtype">int</span> indentSpaces, <a name="l00103"></a>00103 <span class="keywordtype">int</span> secondLineOffset ) <span class="keyword">const</span>; <a name="l00104"></a>00104 <a name="l00105"></a>00105 }; <a name="l00106"></a>00106 <a name="l00107"></a>00107 <a name="l00108"></a><a class="code" href="classTCLAP_1_1StdOutput.html#a768111a59af4753ac6e5ace3ec99482e">00108</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classTCLAP_1_1StdOutput.html#a768111a59af4753ac6e5ace3ec99482e" title="Prints the version to stdout.">StdOutput::version</a>(<a class="code" href="classTCLAP_1_1CmdLineInterface.html" title="The base class that manages the command line definition and passes along the parsing...">CmdLineInterface</a>& _cmd) <a name="l00109"></a>00109 { <a name="l00110"></a>00110 std::string progName = _cmd.<a class="code" href="classTCLAP_1_1CmdLineInterface.html#a1a5672df72a6b5021cd70b37c4dbd0a7" title="Returns the program name string.">getProgramName</a>(); <a name="l00111"></a>00111 std::string xversion = _cmd.<a class="code" href="classTCLAP_1_1CmdLineInterface.html#a0a552fa57212800dfb8aec84fb07b8bb" title="Returns the version string.">getVersion</a>(); <a name="l00112"></a>00112 <a name="l00113"></a>00113 std::cout << std::endl << progName << <span class="stringliteral">" version: "</span> <a name="l00114"></a>00114 << xversion << std::endl << std::endl; <a name="l00115"></a>00115 } <a name="l00116"></a>00116 <a name="l00117"></a><a class="code" href="classTCLAP_1_1StdOutput.html#aeb10eb400e0ee45f2cde689bef606b49">00117</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classTCLAP_1_1StdOutput.html#aeb10eb400e0ee45f2cde689bef606b49" title="Prints the usage to stdout.">StdOutput::usage</a>(<a class="code" href="classTCLAP_1_1CmdLineInterface.html" title="The base class that manages the command line definition and passes along the parsing...">CmdLineInterface</a>& _cmd ) <a name="l00118"></a>00118 { <a name="l00119"></a>00119 std::cout << std::endl << <span class="stringliteral">"USAGE: "</span> << std::endl << std::endl; <a name="l00120"></a>00120 <a name="l00121"></a>00121 <a class="code" href="classTCLAP_1_1StdOutput.html#a60fa57587838d506d907f08800f2631c" title="Writes a brief usage message with short args.">_shortUsage</a>( _cmd, std::cout ); <a name="l00122"></a>00122 <a name="l00123"></a>00123 std::cout << std::endl << std::endl << <span class="stringliteral">"Where: "</span> << std::endl << std::endl; <a name="l00124"></a>00124 <a name="l00125"></a>00125 <a class="code" href="classTCLAP_1_1StdOutput.html#ace725aebd685c16f464d697e85e0327d" title="Writes a longer usage message with long and short args, provides descriptions and...">_longUsage</a>( _cmd, std::cout ); <a name="l00126"></a>00126 <a name="l00127"></a>00127 std::cout << std::endl; <a name="l00128"></a>00128 <a name="l00129"></a>00129 } <a name="l00130"></a>00130 <a name="l00131"></a><a class="code" href="classTCLAP_1_1StdOutput.html#a9afc267e012c3ac42c8b1afe01f98556">00131</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classTCLAP_1_1StdOutput.html#a9afc267e012c3ac42c8b1afe01f98556" title="Prints (to stderr) an error message, short usage Can be overridden to produce alternative...">StdOutput::failure</a>( <a class="code" href="classTCLAP_1_1CmdLineInterface.html" title="The base class that manages the command line definition and passes along the parsing...">CmdLineInterface</a>& _cmd, <a name="l00132"></a>00132 <a class="code" href="classTCLAP_1_1ArgException.html" title="A simple class that defines and argument exception.">ArgException</a>& e ) <a name="l00133"></a>00133 { <a name="l00134"></a>00134 std::string progName = _cmd.<a class="code" href="classTCLAP_1_1CmdLineInterface.html#a1a5672df72a6b5021cd70b37c4dbd0a7" title="Returns the program name string.">getProgramName</a>(); <a name="l00135"></a>00135 <a name="l00136"></a>00136 std::cerr << <span class="stringliteral">"PARSE ERROR: "</span> << e.<a class="code" href="classTCLAP_1_1ArgException.html#a18ffd1ad34c1799865f8e03df4ebdff1" title="Returns the argument id.">argId</a>() << std::endl <a name="l00137"></a>00137 << <span class="stringliteral">" "</span> << e.<a class="code" href="classTCLAP_1_1ArgException.html#a0656dab88a7129bc288821bacd653d08" title="Returns the error text.">error</a>() << std::endl << std::endl; <a name="l00138"></a>00138 <a name="l00139"></a>00139 <span class="keywordflow">if</span> ( _cmd.<a class="code" href="classTCLAP_1_1CmdLineInterface.html#a441b06b764836a62083b163508210905" title="Indicates whether or not the help and version switches were created automatically...">hasHelpAndVersion</a>() ) <a name="l00140"></a>00140 { <a name="l00141"></a>00141 std::cerr << <span class="stringliteral">"Brief USAGE: "</span> << std::endl; <a name="l00142"></a>00142 <a name="l00143"></a>00143 <a class="code" href="classTCLAP_1_1StdOutput.html#a60fa57587838d506d907f08800f2631c" title="Writes a brief usage message with short args.">_shortUsage</a>( _cmd, std::cerr ); <a name="l00144"></a>00144 <a name="l00145"></a>00145 std::cerr << std::endl << <span class="stringliteral">"For complete USAGE and HELP type: "</span> <a name="l00146"></a>00146 << std::endl << <span class="stringliteral">" "</span> << progName << <span class="stringliteral">" --help"</span> <a name="l00147"></a>00147 << std::endl << std::endl; <a name="l00148"></a>00148 } <a name="l00149"></a>00149 <span class="keywordflow">else</span> <a name="l00150"></a>00150 <a class="code" href="classTCLAP_1_1StdOutput.html#aeb10eb400e0ee45f2cde689bef606b49" title="Prints the usage to stdout.">usage</a>(_cmd); <a name="l00151"></a>00151 <a name="l00152"></a>00152 <span class="keywordflow">throw</span> <a class="code" href="classTCLAP_1_1ExitException.html">ExitException</a>(1); <a name="l00153"></a>00153 } <a name="l00154"></a>00154 <a name="l00155"></a>00155 <span class="keyword">inline</span> <span class="keywordtype">void</span> <a name="l00156"></a><a class="code" href="classTCLAP_1_1StdOutput.html#a60fa57587838d506d907f08800f2631c">00156</a> <a class="code" href="classTCLAP_1_1StdOutput.html#a60fa57587838d506d907f08800f2631c" title="Writes a brief usage message with short args.">StdOutput::_shortUsage</a>( <a class="code" href="classTCLAP_1_1CmdLineInterface.html" title="The base class that manages the command line definition and passes along the parsing...">CmdLineInterface</a>& _cmd, <a name="l00157"></a>00157 std::ostream& os )<span class="keyword"> const</span> <a name="l00158"></a>00158 <span class="keyword"></span>{ <a name="l00159"></a>00159 std::list<Arg*> argList = _cmd.<a class="code" href="classTCLAP_1_1CmdLineInterface.html#a4de8d988f5a6f3007c4dfb0fc9dad476" title="Returns the argList.">getArgList</a>(); <a name="l00160"></a>00160 std::string progName = _cmd.<a class="code" href="classTCLAP_1_1CmdLineInterface.html#a1a5672df72a6b5021cd70b37c4dbd0a7" title="Returns the program name string.">getProgramName</a>(); <a name="l00161"></a>00161 <a class="code" href="classTCLAP_1_1XorHandler.html" title="This class handles lists of Arg&#39;s that are to be XOR&#39;d on the command line...">XorHandler</a> xorHandler = _cmd.<a class="code" href="classTCLAP_1_1CmdLineInterface.html#a11ce9c77a1111960741f05e343849e4e" title="Returns the XorHandler.">getXorHandler</a>(); <a name="l00162"></a>00162 std::vector< std::vector<Arg*> > xorList = xorHandler.<a class="code" href="classTCLAP_1_1XorHandler.html#a0e0d95c697d227cc51f82424b8530182">getXorList</a>(); <a name="l00163"></a>00163 <a name="l00164"></a>00164 std::string s = progName + <span class="stringliteral">" "</span>; <a name="l00165"></a>00165 <a name="l00166"></a>00166 <span class="comment">// first the xor</span> <a name="l00167"></a>00167 <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(i) < xorList.size(); i++ ) <a name="l00168"></a>00168 { <a name="l00169"></a>00169 s += <span class="stringliteral">" {"</span>; <a name="l00170"></a>00170 <span class="keywordflow">for</span> ( <a class="code" href="namespaceTCLAP.html#a04213af1ffc3178ce5f771d21d5164a2" title="Typedef of an Arg vector iterator.">ArgVectorIterator</a> it = xorList[i].begin(); <a name="l00171"></a>00171 it != xorList[i].end(); it++ ) <a name="l00172"></a>00172 s += (*it)->shortID() + <span class="stringliteral">"|"</span>; <a name="l00173"></a>00173 <a name="l00174"></a>00174 s[s.length()-1] = <span class="charliteral">'}'</span>; <a name="l00175"></a>00175 } <a name="l00176"></a>00176 <a name="l00177"></a>00177 <span class="comment">// then the rest</span> <a name="l00178"></a>00178 <span class="keywordflow">for</span> (<a class="code" href="namespaceTCLAP.html#aa7d6a803e0690c3c8b1db57c145648c5" title="Typedef of an Arg list iterator.">ArgListIterator</a> it = argList.begin(); it != argList.end(); it++) <a name="l00179"></a>00179 <span class="keywordflow">if</span> ( !xorHandler.<a class="code" href="classTCLAP_1_1XorHandler.html#a1a74fab4667cc591a1e3094c91bc942d" title="Simply checks whether the Arg is contained in one of the arg lists.">contains</a>( (*it) ) ) <a name="l00180"></a>00180 s += <span class="stringliteral">" "</span> + (*it)->shortID(); <a name="l00181"></a>00181 <a name="l00182"></a>00182 <span class="comment">// if the program name is too long, then adjust the second line offset </span> <a name="l00183"></a>00183 <span class="keywordtype">int</span> secondLineOffset = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(progName.length()) + 2; <a name="l00184"></a>00184 <span class="keywordflow">if</span> ( secondLineOffset > 75/2 ) <a name="l00185"></a>00185 secondLineOffset = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(75/2); <a name="l00186"></a>00186 <a name="l00187"></a>00187 <a class="code" href="classTCLAP_1_1StdOutput.html#a38661be8895e07c442c2c3138b7444a2" title="This function inserts line breaks and indents long strings according the params input...">spacePrint</a>( os, s, 75, 3, secondLineOffset ); <a name="l00188"></a>00188 } <a name="l00189"></a>00189 <a name="l00190"></a>00190 <span class="keyword">inline</span> <span class="keywordtype">void</span> <a name="l00191"></a><a class="code" href="classTCLAP_1_1StdOutput.html#ace725aebd685c16f464d697e85e0327d">00191</a> <a class="code" href="classTCLAP_1_1StdOutput.html#ace725aebd685c16f464d697e85e0327d" title="Writes a longer usage message with long and short args, provides descriptions and...">StdOutput::_longUsage</a>( <a class="code" href="classTCLAP_1_1CmdLineInterface.html" title="The base class that manages the command line definition and passes along the parsing...">CmdLineInterface</a>& _cmd, <a name="l00192"></a>00192 std::ostream& os )<span class="keyword"> const</span> <a name="l00193"></a>00193 <span class="keyword"></span>{ <a name="l00194"></a>00194 std::list<Arg*> argList = _cmd.<a class="code" href="classTCLAP_1_1CmdLineInterface.html#a4de8d988f5a6f3007c4dfb0fc9dad476" title="Returns the argList.">getArgList</a>(); <a name="l00195"></a>00195 std::string message = _cmd.<a class="code" href="classTCLAP_1_1CmdLineInterface.html#a30175a2567f7ab78a2c6bbea9269a2fa" title="Returns the message string.">getMessage</a>(); <a name="l00196"></a>00196 <a class="code" href="classTCLAP_1_1XorHandler.html" title="This class handles lists of Arg&#39;s that are to be XOR&#39;d on the command line...">XorHandler</a> xorHandler = _cmd.<a class="code" href="classTCLAP_1_1CmdLineInterface.html#a11ce9c77a1111960741f05e343849e4e" title="Returns the XorHandler.">getXorHandler</a>(); <a name="l00197"></a>00197 std::vector< std::vector<Arg*> > xorList = xorHandler.<a class="code" href="classTCLAP_1_1XorHandler.html#a0e0d95c697d227cc51f82424b8530182">getXorList</a>(); <a name="l00198"></a>00198 <a name="l00199"></a>00199 <span class="comment">// first the xor </span> <a name="l00200"></a>00200 <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(i) < xorList.size(); i++ ) <a name="l00201"></a>00201 { <a name="l00202"></a>00202 <span class="keywordflow">for</span> ( <a class="code" href="namespaceTCLAP.html#a04213af1ffc3178ce5f771d21d5164a2" title="Typedef of an Arg vector iterator.">ArgVectorIterator</a> it = xorList[i].begin(); <a name="l00203"></a>00203 it != xorList[i].end(); <a name="l00204"></a>00204 it++ ) <a name="l00205"></a>00205 { <a name="l00206"></a>00206 <a class="code" href="classTCLAP_1_1StdOutput.html#a38661be8895e07c442c2c3138b7444a2" title="This function inserts line breaks and indents long strings according the params input...">spacePrint</a>( os, (*it)->longID(), 75, 3, 3 ); <a name="l00207"></a>00207 <a class="code" href="classTCLAP_1_1StdOutput.html#a38661be8895e07c442c2c3138b7444a2" title="This function inserts line breaks and indents long strings according the params input...">spacePrint</a>( os, (*it)->getDescription(), 75, 5, 0 ); <a name="l00208"></a>00208 <a name="l00209"></a>00209 <span class="keywordflow">if</span> ( it+1 != xorList[i].end() ) <a name="l00210"></a>00210 <a class="code" href="classTCLAP_1_1StdOutput.html#a38661be8895e07c442c2c3138b7444a2" title="This function inserts line breaks and indents long strings according the params input...">spacePrint</a>(os, <span class="stringliteral">"-- OR --"</span>, 75, 9, 0); <a name="l00211"></a>00211 } <a name="l00212"></a>00212 os << std::endl << std::endl; <a name="l00213"></a>00213 } <a name="l00214"></a>00214 <a name="l00215"></a>00215 <span class="comment">// then the rest</span> <a name="l00216"></a>00216 <span class="keywordflow">for</span> (<a class="code" href="namespaceTCLAP.html#aa7d6a803e0690c3c8b1db57c145648c5" title="Typedef of an Arg list iterator.">ArgListIterator</a> it = argList.begin(); it != argList.end(); it++) <a name="l00217"></a>00217 <span class="keywordflow">if</span> ( !xorHandler.<a class="code" href="classTCLAP_1_1XorHandler.html#a1a74fab4667cc591a1e3094c91bc942d" title="Simply checks whether the Arg is contained in one of the arg lists.">contains</a>( (*it) ) ) <a name="l00218"></a>00218 { <a name="l00219"></a>00219 <a class="code" href="classTCLAP_1_1StdOutput.html#a38661be8895e07c442c2c3138b7444a2" title="This function inserts line breaks and indents long strings according the params input...">spacePrint</a>( os, (*it)->longID(), 75, 3, 3 ); <a name="l00220"></a>00220 <a class="code" href="classTCLAP_1_1StdOutput.html#a38661be8895e07c442c2c3138b7444a2" title="This function inserts line breaks and indents long strings according the params input...">spacePrint</a>( os, (*it)->getDescription(), 75, 5, 0 ); <a name="l00221"></a>00221 os << std::endl; <a name="l00222"></a>00222 } <a name="l00223"></a>00223 <a name="l00224"></a>00224 os << std::endl; <a name="l00225"></a>00225 <a name="l00226"></a>00226 <a class="code" href="classTCLAP_1_1StdOutput.html#a38661be8895e07c442c2c3138b7444a2" title="This function inserts line breaks and indents long strings according the params input...">spacePrint</a>( os, message, 75, 3, 0 ); <a name="l00227"></a>00227 } <a name="l00228"></a>00228 <a name="l00229"></a><a class="code" href="classTCLAP_1_1StdOutput.html#a38661be8895e07c442c2c3138b7444a2">00229</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classTCLAP_1_1StdOutput.html#a38661be8895e07c442c2c3138b7444a2" title="This function inserts line breaks and indents long strings according the params input...">StdOutput::spacePrint</a>( std::ostream& os, <a name="l00230"></a>00230 <span class="keyword">const</span> std::string& s, <a name="l00231"></a>00231 <span class="keywordtype">int</span> maxWidth, <a name="l00232"></a>00232 <span class="keywordtype">int</span> indentSpaces, <a name="l00233"></a>00233 <span class="keywordtype">int</span> secondLineOffset )<span class="keyword"> const</span> <a name="l00234"></a>00234 <span class="keyword"></span>{ <a name="l00235"></a>00235 <span class="keywordtype">int</span> len = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(s.length()); <a name="l00236"></a>00236 <a name="l00237"></a>00237 <span class="keywordflow">if</span> ( (len + indentSpaces > maxWidth) && maxWidth > 0 ) <a name="l00238"></a>00238 { <a name="l00239"></a>00239 <span class="keywordtype">int</span> allowedLen = maxWidth - indentSpaces; <a name="l00240"></a>00240 <span class="keywordtype">int</span> start = 0; <a name="l00241"></a>00241 <span class="keywordflow">while</span> ( start < len ) <a name="l00242"></a>00242 { <a name="l00243"></a>00243 <span class="comment">// find the substring length</span> <a name="l00244"></a>00244 <span class="comment">// int stringLen = std::min<int>( len - start, allowedLen );</span> <a name="l00245"></a>00245 <span class="comment">// doing it this way to support a VisualC++ 2005 bug </span> <a name="l00246"></a>00246 <span class="keyword">using namespace </span>std; <a name="l00247"></a>00247 <span class="keywordtype">int</span> stringLen = min<int>( len - start, allowedLen ); <a name="l00248"></a>00248 <a name="l00249"></a>00249 <span class="comment">// trim the length so it doesn't end in middle of a word</span> <a name="l00250"></a>00250 <span class="keywordflow">if</span> ( stringLen == allowedLen ) <a name="l00251"></a>00251 <span class="keywordflow">while</span> ( stringLen >= 0 && <a name="l00252"></a>00252 s[stringLen+start] != <span class="charliteral">' '</span> && <a name="l00253"></a>00253 s[stringLen+start] != <span class="charliteral">','</span> && <a name="l00254"></a>00254 s[stringLen+start] != <span class="charliteral">'|'</span> ) <a name="l00255"></a>00255 stringLen--; <a name="l00256"></a>00256 <a name="l00257"></a>00257 <span class="comment">// ok, the word is longer than the line, so just split </span> <a name="l00258"></a>00258 <span class="comment">// wherever the line ends</span> <a name="l00259"></a>00259 <span class="keywordflow">if</span> ( stringLen <= 0 ) <a name="l00260"></a>00260 stringLen = allowedLen; <a name="l00261"></a>00261 <a name="l00262"></a>00262 <span class="comment">// check for newlines</span> <a name="l00263"></a>00263 <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; i < stringLen; i++ ) <a name="l00264"></a>00264 <span class="keywordflow">if</span> ( s[start+i] == <span class="charliteral">'\n'</span> ) <a name="l00265"></a>00265 stringLen = i+1; <a name="l00266"></a>00266 <a name="l00267"></a>00267 <span class="comment">// print the indent </span> <a name="l00268"></a>00268 <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; i < indentSpaces; i++ ) <a name="l00269"></a>00269 os << <span class="stringliteral">" "</span>; <a name="l00270"></a>00270 <a name="l00271"></a>00271 <span class="keywordflow">if</span> ( start == 0 ) <a name="l00272"></a>00272 { <a name="l00273"></a>00273 <span class="comment">// handle second line offsets</span> <a name="l00274"></a>00274 indentSpaces += secondLineOffset; <a name="l00275"></a>00275 <a name="l00276"></a>00276 <span class="comment">// adjust allowed len</span> <a name="l00277"></a>00277 allowedLen -= secondLineOffset; <a name="l00278"></a>00278 } <a name="l00279"></a>00279 <a name="l00280"></a>00280 os << s.substr(start,stringLen) << std::endl; <a name="l00281"></a>00281 <a name="l00282"></a>00282 <span class="comment">// so we don't start a line with a space</span> <a name="l00283"></a>00283 <span class="keywordflow">while</span> ( s[stringLen+start] == <span class="charliteral">' '</span> && start < len ) <a name="l00284"></a>00284 start++; <a name="l00285"></a>00285 <a name="l00286"></a>00286 start += stringLen; <a name="l00287"></a>00287 } <a name="l00288"></a>00288 } <a name="l00289"></a>00289 <span class="keywordflow">else</span> <a name="l00290"></a>00290 { <a name="l00291"></a>00291 <span class="keywordflow">for</span> ( <span class="keywordtype">int</span> i = 0; i < indentSpaces; i++ ) <a name="l00292"></a>00292 os << <span class="stringliteral">" "</span>; <a name="l00293"></a>00293 os << s << std::endl; <a name="l00294"></a>00294 } <a name="l00295"></a>00295 } <a name="l00296"></a>00296 <a name="l00297"></a>00297 } <span class="comment">//namespace TCLAP</span> <a name="l00298"></a>00298 <span class="preprocessor">#endif </span> </pre></div></div> <hr size="1"/><address style="text-align: right;"><small>Generated on Sat Apr 16 15:34:24 2011 for tclap by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.0 </small></address> </body> </html>
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 16129 | tjuricek |
Rename/move files again... this time to the hyphenated-approach. |
||
//guest/tjuricek/file_system_client/main/vendor/tclap-1.2.1/docs/html/StdOutput_8h_source.html | |||||
#1 | 16119 | tjuricek | Rename/move to meet workshop project conventions. | ||
//guest/tjuricek/fsclient/vendor/tclap-1.2.1/docs/html/StdOutput_8h_source.html | |||||
#1 | 16118 | tjuricek |
FSClient initial version: handles add, edit This is a proof-of-concept app that mirrors an existing Perforce workspace to handle running commands like "p4 add" and "p4 edit" automatically when your apps add and write files. See the readme for more information. |