project.html 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546
  1. <?xml version="1.0" encoding="iso-8859-5"?>
  2. <!--
  3. Metrix++, Copyright 2009-2013, Metrix++ Project
  4. Link: http://metrixplusplus.sourceforge.net
  5. This file is part of Metrix++ Tool.
  6. Metrix++ is free software: you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation, version 3 of the License.
  9. Metrix++ is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with Metrix++. If not, see <http://www.gnu.org/licenses/>.
  15. -->
  16. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  17. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  18. <html xmlns="http://www.w3.org/1999/xhtml">
  19. <head>
  20. <meta http-equiv="cache-control" content="max-age=0" />
  21. <meta http-equiv="cache-control" content="no-cache" />
  22. <meta http-equiv="expires" content="0" />
  23. <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
  24. <meta http-equiv="pragma" content="no-cache" />
  25. <meta http-equiv="content-type" content="text/html; charset=iso-8859-5" />
  26. <title>Metrix++ Project</title>
  27. <link href="style.css" rel="stylesheet" type="text/css" />
  28. </head>
  29. <body>
  30. <table border="0" align="center" cellpadding="0" cellspacing="0" width="800">
  31. <tbody>
  32. <tr>
  33. <td></td>
  34. <td valign="middle"></td>
  35. </tr>
  36. <tr>
  37. <td><img src="logo_project.png" alt="Software Index Project Page" /></td>
  38. <td valign="top">
  39. <div align="right">
  40. <p align="center"><a
  41. href="http://sourceforge.net/projects/metrixplusplus"
  42. class="lowImportance"><img
  43. src="http://sflogo.sourceforge.net/sflogo.php?group_id=275605&amp;type=13"
  44. alt="Get Software Index at SourceForge.net. Fast, secure and Free Open Source software downloads"
  45. border="0" /></a></p>
  46. <p align="center"><script type="text/javascript"
  47. src="http://www.ohloh.net/p/485947/widgets/project_users_logo.js">
  48. </script>
  49. </p>
  50. </div>
  51. </td>
  52. </tr>
  53. <tr>
  54. <td colspan="2"><hr />
  55. </td>
  56. </tr>
  57. <tr>
  58. <td colspan="2" class="highImportance"
  59. style="text-align:center;margin-left:auto;margin-right:0;"><a
  60. href="#Overview">Overview</a> | <a href="#Download">Download</a> | <a
  61. href="#Documentation">Documentation</a> | <a href="#Support">Bur
  62. report</a> | <a href="#Support">Feature request</a> | <a
  63. href="#Createplugin">Create plugin</a></td>
  64. </tr>
  65. <tr>
  66. <td colspan="2"><hr />
  67. </td>
  68. </tr>
  69. <tr>
  70. <td colspan="2" valign="top">
  71. <table width="100%" border="0" cellspacing="0" cellpadding="10">
  72. <tbody>
  73. <tr>
  74. <td valign="top"><h3 id="Overview">Overview</h3>
  75. <p><span class="normalImportance">Metrix++</span> is the
  76. platform to collect and analyse code metrics.</p>
  77. <ul>
  78. <li>It has got plugin based architecture, so it is easy to
  79. add support for new languages and/or define new metrics
  80. and/or create new pre- and post-processing tools.</li>
  81. <li>Every metric has got 'turn-on' and other configuration
  82. options.</li>
  83. <li>There is no predefined thresholds for metrics or rules.
  84. You can choose and configure any limit you want.</li>
  85. <li>It scales well and support big code bases. For example
  86. initial parsing of about 10000 files takes 2-3 minutes on
  87. average PC, and ONLY 10-20 seconds for iterative re-run.
  88. Reporting, analysis and other postprocessings of results
  89. take few seconds.</li>
  90. <li>It can compare results for 2 code snapshots (collections)
  91. and differentiate added regions (classes, functions, etc.),
  92. modified regions and unchanged regions.</li>
  93. <li>As a result, easy deployment is guaranteed into legacy
  94. software, helping you to deal with legacy code effiently -
  95. either enforce 'make it [legacy code] not worse' or
  96. 're-factor if it is touched' policies.</li>
  97. </ul>
  98. <h4>Standard Plugins</h4>
  99. <p>The distributive includes a set of standard plugins:</p>
  100. <ul>
  101. <li><h4>Code parsers</h4>
  102. <ul>
  103. <li><span class="normalImportance">C/C++</span> parser
  104. recognises definition of namespaces, definition of
  105. classes/structs (including enclosed in functions),
  106. templates and definition of functions/operators</li>
  107. <li><span class="normalImportance">C#</span> parser
  108. recognises definition of namespaces, definition of
  109. classes/structs (including enclosed in functions),
  110. interfaces, generics, definition of
  111. functions/operators</li>
  112. <li><span class="normalImportance">Java</span> parser
  113. recognises definition of classes (including local in
  114. functions), interfaces, generics and functions</li>
  115. </ul>
  116. </li>
  117. <li><h4>Metrics</h4>
  118. <ul>
  119. <li><span class="normalImportance">cyclomatic
  120. complexity</span> (by McCabe) per function <span
  121. class="lowImportance">[supports C/C++, C#, Java
  122. languages]</span></li>
  123. <li><span class="normalImportance">processing
  124. errors</span> per file <span
  125. class="lowImportance">[supports any file
  126. type]</span></li>
  127. <li><span class="normalImportance">processing time</span>
  128. per file <span class="lowImportance">[supports any file
  129. type]</span></li>
  130. </ul>
  131. </li>
  132. <li><h4>Analysis tools</h4>
  133. <ul>
  134. <li><span class="normalImportance">export</span> -
  135. exporter to xml, python or plain text of detailed
  136. information per file and/or aggregated information per
  137. file or directory <span
  138. class="lowImportance">[aggregated data includes <span
  139. class="normalImportance">sum</span>, <span
  140. class="normalImportance">maximum</span>, <span
  141. class="normalImportance">minimum</span>, <span
  142. class="normalImportance">average</span> within a subset
  143. of selected files or directories]</span></li>
  144. <li><span class="normalImportance">limit</span> - a tool
  145. to report regions exceeding speified thresholds, which
  146. are configurable <span class="lowImportance">[output is
  147. plain text with metadata compatible with gcc compiler
  148. warning messages]</span></li>
  149. <li><span class="normalImportance">info</span> - a tool
  150. to show file metadata, such as properties, namespaces
  151. and fields recorded, files processed</li>
  152. </ul>
  153. </li>
  154. </ul>
  155. <h3 id="Download">Download &amp; Installation</h3>
  156. <p>For the installation of the <span
  157. class="normalImportance">Metrix++</span> <a
  158. href="http://sourceforge.net/projects/metrixplusplus/files/">download
  159. the archive</a> with <span class="highImportance">the latest
  160. stable version</span> and unpack it to some folder.
  161. Corresponding checkout from the version control system:</p>
  162. <p><pre>&gt; svn checkout <a href="https://metrixplusplus.svn.sourceforge.net/svnroot/metrixplusplus/releases/">https://metrixplusplus.svn.sourceforge.net/svnroot/metrixplusplus/releases/</a>&lt;version&gt;</pre>
  163. </p>
  164. <p>Alternatively, there is an option to <a
  165. href="http://metrixplusplus.svn.sourceforge.net/viewvc/metrixplusplus/mainline/?view=tar">download
  166. tarball file</a> with <span class="highImportance">the latest
  167. development version</span> of the tool or checkout this version
  168. of <a
  169. href="http://metrixplusplus.svn.sourceforge.net/viewvc/metrixplusplus/">source
  170. code</a> from the version conrol system:</p>
  171. <p><pre>&gt; svn checkout <a href="https://metrixplusplus.svn.sourceforge.net/svnroot/metrixplusplus/mainline/">https://metrixplusplus.svn.sourceforge.net/svnroot/metrixplusplus/mainline/</a></pre>
  172. </p>
  173. <h4>Prerequisites:</h4>
  174. <p>Python Runtime Environment (version 2.7.* or later, version
  175. 3.* has not been tested)</p>
  176. <h4>License:</h4>
  177. <p>This program is free software; you can redistribute it
  178. and/or modify it under the terms of the GNU General Public
  179. License as published by the Free Software Foundation; version 3
  180. of the License.</p>
  181. <p>This program is distributed in the hope that it will be
  182. useful, but WITHOUT ANY WARRANTY; without even the implied
  183. warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  184. PURPOSE. See the GNU General Public License for more
  185. details.</p>
  186. <p>You should have received a copy of the GNU General Public
  187. License along with the <span
  188. class="normalImportance">Metriix++</span>; if not, contact <a
  189. href="mailto:avkonst@users.sourceforge.net">Project
  190. Administrator</a> and write to the Free Software Foundation,
  191. Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
  192. USA.</p>
  193. <h3 id="Documentation">Documentation</h3>
  194. <p>Tools are self-descriptive and have got comprehensive
  195. context help. Type in the command line: python metrixpp.py
  196. &lt;tool-name&gt; --help</p>
  197. <h4>Known Limitations</h4>
  198. <p>Check 'doc/limitations.txt' file distributed with the tool
  199. or browse for recent version <a
  200. href="http://metrixplusplus.svn.sourceforge.net/viewvc/metrixplusplus/mainline/doc/limitations.txt">online</a>.</p>
  201. <h4>Basic Workflow</h4>
  202. <p>Assuming that you opened a terminal and your current working
  203. directory is in the root folder of the tool installed.</p>
  204. <p><strong>I.</strong> Start with running a collector tool,
  205. enabling a collection of cyclomatic complexity:</p>
  206. <p><pre>&gt; python metixpp.py <span class="highImportance">collect</span> <span class="normalImportance">--std.code.complexity.on</span> -- /path/to/your/project ../../path/to/some/other/project</pre>
  207. </p>
  208. <p>It will generate a database file in working directory with
  209. default name. In order to change the name or location, use
  210. corresponding command line option. Depending on a size of code
  211. base, collection may take seconds or minutes, but it is very
  212. fast in general. In order to achive the highest performance (~
  213. to calculation of crc32) for iterative re-scans, point out to
  214. the dabase file collected for the previous code revision:</p>
  215. <p><pre>&gt; python metrixpp.py <span class="highImportance">collect</span> --std.code.complexity.on <span class="highImportance normalImportance">--general.db-file-prev=metrixpp-prev.db</span> --
  216. /path/to/your/project</pre>
  217. </p>
  218. <p>Paths are optional. If you do not specify a path, it will
  219. scan files in the current working directory. Check other
  220. available options for the tool by executing:</p>
  221. <p><pre>&gt; python metrixpp.py <span class="highImportance">collect</span> <span class="normalImportance">--help</span></pre>
  222. </p>
  223. <p><strong>II.</strong> Secondly, export data using export
  224. tool.</p>
  225. <p><pre>&gt; python metrixpp.py <span class="highImportance">export</span> --general.format=<span class="normalImportance">xml</span> --
  226. <span class="lowImportance">&lt;export&gt;
  227. &lt;data&gt;
  228. &lt;info path="" id="1" /&gt;
  229. &lt;file-data /&gt;
  230. &lt;subfiles&gt;
  231. &lt;/subfiles&gt;
  232. &lt;subdirs&gt;
  233. &lt;subdir&gt;path&lt;/subdir&gt;
  234. &lt;/subdirs&gt;
  235. &lt;aggregated-data&gt;
  236. &lt;<span class="normalImportance">std.code.complexity</span>&gt;
  237. &lt;cyclomatic max="2" total="14.0" avg="0.168674698795" min="0" /&gt;
  238. &lt;/<span class="normalImportance">std.code.complexity</span>&gt;
  239. &lt;/aggregated-data&gt;
  240. &lt;/data&gt;
  241. &lt;/export&gt;</span>
  242. </pre>
  243. </p>
  244. <p>By default, it exports all aggregated data for all files
  245. scanned. In order to narrow the scope, specify a path to
  246. directory or a file. In order to export only subset of metrics,
  247. specify them as well. It is also possible to change output
  248. format too.</p>
  249. <p><pre>&gt; python metrixpp.py <span class="highImportance">export</span> --general.format=<span class="normalImportance">python</span> --general.namespaces=<span class="normalImportance">std.code.complexity</span> --
  250. <span class="normalImportance">/path/to/your/project/subdir</span>
  251. <span class="lowImportance"> ...</span></pre>
  252. </p>
  253. <p>If you have got results collected for previous version,
  254. point out to the file using the corresponding option and the
  255. tool will add diff data.</p>
  256. <p><pre>&gt; python metrixpp.py <span class="highImportance">export</span> --general.format=<span class="normalImportance">xml</span> --general.namespaces=<span class="normalImportance">std.code.complexity</span> --general.db-file-prev=<span class="normalImportance">metrixpp-prev.db</span> --
  257. <span class="lowImportance">&lt;export&gt;
  258. &lt;data&gt;
  259. &lt;info path="" id="1" /&gt;
  260. &lt;file-data /&gt;
  261. &lt;subfiles&gt;
  262. &lt;/subfiles&gt;
  263. &lt;subdirs&gt;
  264. &lt;subdir&gt;path&lt;/subdir&gt;
  265. &lt;/subdirs&gt;
  266. &lt;aggregated-data&gt;
  267. &lt;<span class="normalImportance">std.code.complexity</span>&gt;
  268. &lt;cyclomatic max="2" total="14.0" avg="0.168674698795" min="0"&gt;
  269. &lt;<span class="normalImportance">__diff__ max="0" total="0.0" avg="0.0" min="0"</span> /&gt;
  270. &lt;/cyclomatic&gt;
  271. &lt;/<span class="normalImportance">std.code.complexity</span>&gt;
  272. &lt;/aggregated-data&gt;
  273. &lt;/data&gt;
  274. &lt;/export&gt;</span>
  275. </pre>
  276. </p>
  277. <p>Check other available options for the tool by executing:</p>
  278. <p><pre>&gt; python metrixpp.py <span class="highImportance">export</span> <span class="normalImportance">--help</span></pre>
  279. </p>
  280. <p><strong>III.</strong> Finally, identify code regions which
  281. exceed a specified limit, applying it to all scanned files:</p>
  282. <p><pre>&gt; python metrixpp.py <span class="highImportance">limit</span> --general.max-limit=<span class="normalImportance">std.code.complexity</span><strong>:</strong><span class="normalImportance">cyclomatic</span><strong>:</strong><span class="normalImportance">7</span><strong> </strong>--
  283. <span class="lowImportance">/path/to/your/project/ui/notifications.cpp:72: warning: Metric '<span class="normalImportance">std.code.complexity</span>/<span class="normalImportance">cyclomatic</span>' for
  284. region 'doFont' exceeds the limit.
  285. Metric name : <span class="normalImportance">std.code.complexity</span>/<span class="normalImportance">cyclomatic</span>
  286. Region name : doFont
  287. Metric value : 10
  288. Modified : None
  289. Change trend : None
  290. Limit : 7
  291. /path/to/your/project/ui/notifications.cpp:144: warning: Metric '<span class="normalImportance">std.code.complexity</span>/<span class="normalImportance">cyclomatic</span>' for
  292. region 'doStyle' exceeds the limit.
  293. Metric name : <span class="normalImportance">std.code.complexity</span>/<span class="normalImportance">cyclomatic</span>
  294. Region name : doStyle
  295. Metric value : 9
  296. Modified : None
  297. Change trend : None
  298. Limit : 7</span></pre>
  299. </p>
  300. <p>You can limit the scope of analysis by defining paths to
  301. directories or files. If you have got results collected for
  302. previous version, point out to the file using the corresponding
  303. option and the tool will inform about change trends:</p>
  304. <p><pre>&gt; python <span class="highImportance">limit.py</span> --general.max-limit=std.code.complexity<strong>:</strong>cyclomatic<strong>:</strong>7
  305. --general.db-file-prev=<span class="normalImportance">metrixpp-prev.db</span> --
  306. <span class="lowImportance normalImportance">/path/to/your/project/ui/notifications.cpp:72: warning: Metric 'std.code.complexity/cyclomatic' for
  307. region 'doFont' exceeds the limit.
  308. Metric name : std.code.complexity/cyclomatic
  309. Region name : doFont
  310. Metric value : 10
  311. Modified : <span class="normalImportance">True</span>
  312. Change trend : <span class="normalImportance">0</span>
  313. Limit : 7
  314. /path/to/your/project/ui/notifications.cpp:144: warning: Metric 'std.code.complexity/cyclomatic' for
  315. region 'doStyle' exceeds the limit.
  316. Metric name : std.code.complexity/cyclomatic
  317. Region name : doStyle
  318. Metric value : 9
  319. Modified : <span class="normalImportance">True</span>
  320. Change trend : <span class="normalImportance">+1</span>
  321. Limit : 7</span></pre>
  322. </p>
  323. <p>Another useful option for this tool helps you to <span
  324. class="highImportance">deal with legacy code</span>. It is
  325. normal that you have got enormous number of warnings for the
  326. code designed in the past, which has not be profiled/targeted
  327. to specific metric limits. By default the tool warns about all
  328. code regions, ignoring their change status. You can reconfigure
  329. it to one of the following:</p>
  330. <ul>
  331. <li>warn only about <span class="normalImportance">new</span>
  332. code regions (functions, classes):</li>
  333. </ul>
  334. <p><pre>&gt; python metrixpp.py <span class="highImportance">limit</span> --general.max-limit=std.code.complexity<strong>:</strong>cyclomatic<strong>:</strong>7
  335. --general.db-file-prev=metrixpp-prev.db <span class="normalImportance">--general.warn=<strong>new</strong></span> --</pre>
  336. </p>
  337. <ul>
  338. <li>warn about <span class="normalImportance">new</span> code
  339. regions and <span class="normalImportance">modifed regions
  340. <strong>regressing</strong> the metric</span> (enforces the
  341. rule 'leave not worse than it was before'):</li>
  342. </ul>
  343. <p><pre>&gt; python metrixpp.py <span class="highImportance">limit</span> --general.max-limit=std.code.complexity<strong>:</strong>cyclomatic<strong>:</strong>7
  344. --general.db-file-prev=metrixpp-prev.db <span class="normalImportance">--general.warn=<strong>trend</strong></span> --
  345. <span class="lowImportance normalImportance">/path/to/your/project/ui/notifications.cpp:144: warning: Metric 'std.code.complexity/cyclomatic' for
  346. region 'doStyle' exceeds the limit.
  347. Metric name : std.code.complexity/cyclomatic
  348. Region name : doStyle
  349. Metric value : 9
  350. Modified : <span class="normalImportance">True</span>
  351. Change trend : <span class="normalImportance"><strong>+1</strong></span>
  352. Limit : 7</span></pre>
  353. </p>
  354. <ul>
  355. <li>warn about <span class="normalImportance">new</span> and
  356. <span class="normalImportance">all modified regions</span>
  357. (motivates for refactoring of legacy code): </li>
  358. </ul>
  359. <p><pre>&gt; python metrixpp.py <span class="highImportance">limit</span> --general.max-limit=std.code.complexity<strong>:</strong>cyclomatic<strong>:</strong>7
  360. --general.db-file-prev=metrixpp-prev.db <span class="normalImportance">--general.warn=<strong>touched</strong></span> --
  361. <span class="lowImportance normalImportance">/path/to/your/project/ui/notifications.cpp:72: warning: Metric 'std.code.complexity/cyclomatic' for
  362. region 'doFont' exceeds the limit.
  363. Metric name : std.code.complexity/cyclomatic
  364. Region name : doFont
  365. Metric value : 10
  366. Modified : <span class="normalImportance"><strong>True</strong></span>
  367. Change trend : <span class="normalImportance">0</span>
  368. Limit : 7
  369. /path/to/your/project/ui/notifications.cpp:144: warning: Metric 'std.code.complexity/cyclomatic' for
  370. region 'doStyle' exceeds the limit.
  371. Metric name : std.code.complexity/cyclomatic
  372. Region name : doStyle
  373. Metric value : 9
  374. Modified : <strong><span class="normalImportance">True</span></strong>
  375. Change trend : <span class="normalImportance">+1</span>
  376. Limit : 7</span></pre>
  377. </p>
  378. <p>Check other available options for the tool by executing:</p>
  379. <p><pre>&gt; python metrixpp.py <span class="highImportance">limit</span> <span class="normalImportance">--help</span></pre>
  380. </p>
  381. <h3 id="Support">Bug Report &amp; Feature Request</h3>
  382. <p>Any types of enquiries are welcomed by e-mail to <a
  383. href="mailto:avkonst@users.sourceforge.net">project
  384. administrator</a>.</p>
  385. <h3 id="Createplugin">Create Plugin</h3>
  386. <p>Please, consider to join the project and <span
  387. class="normalImportance">contribute to the development</span>
  388. of the engine or <span class="normalImportance">include you
  389. plugins into the standard set</span> of plugins distributed
  390. together with this tool. Contact <a
  391. href="mailto:avkonst@users.sourceforge.net">project
  392. administrator</a> by e-mail.</p>
  393. <h4>New Metric</h4>
  394. <p>Unfortunately, there is no rich documentation at this stage.
  395. Briefly, any new plugin starts with creating 2 new files: 'ini'
  396. and 'py'. You can copy from other avaialble (for example, <a
  397. href="http://metrixplusplus.svn.sourceforge.net/viewvc/metrixplusplus/mainline/ext/std/code/complexity.ini">ini</a>
  398. and <a
  399. href="http://metrixplusplus.svn.sourceforge.net/viewvc/metrixplusplus/mainline/ext/std/code/complexity.py">py</a>
  400. files for the standard complexity plugin) and impelement the
  401. logic related to the new metric.</p>
  402. <h4>New Analysis Tool</h4>
  403. <p>Unfortunately, there is no rich documentation at this stage.
  404. Briefly, database API (class Loader implemented in '<a
  405. href="http://metrixplusplus.svn.sourceforge.net/viewvc/metrixplusplus/mainline/core/db/loader.py">core.db.loader</a>')
  406. is a starting point for any new post-analysis tool. There are 2
  407. standard tools (<a
  408. href="http://metrixplusplus.svn.sourceforge.net/viewvc/metrixplusplus/mainline/tools/export.py">export</a>
  409. and <a
  410. href="http://metrixplusplus.svn.sourceforge.net/viewvc/metrixplusplus/mainline/tools/limit.py">limit</a>)
  411. available which use this API.</p>
  412. <h4>New Language Support</h4>
  413. <p>Unfortunately, there is no rich documentation at this stage.
  414. Briefly:</p>
  415. <ul>
  416. <li>a plugin is registered in the same way as a plugin for
  417. new metric</li>
  418. <li>it subscribes to directory reader plugin</li>
  419. <li>parses a file in a callback, called by directory
  420. reader</li>
  421. <li>parser needs to identify markers (like comments, strings,
  422. preprocessor) and regions (like functions, classes, etc.)
  423. and tell about this to file data object passed as an
  424. argument for the callback.</li>
  425. </ul>
  426. <p>Parser for C/C++ language can serve as <a
  427. href="http://metrixplusplus.svn.sourceforge.net/viewvc/metrixplusplus/mainline/ext/std/code/cpp.py">an
  428. example</a>. There useful options and tools are avaialble for
  429. trobuleshooting purposes during development:</p>
  430. <ul>
  431. <li><span class="normalImportance">metrixpp.py debug</span>
  432. tool is helpful troubleshooting tool. In mode 'dumphtml' it
  433. generates html code showing code highlightings</li>
  434. <li><span
  435. class="normalImportance">--general.nest-regions</span> for
  436. export tool forces exporting of code structure in tree
  437. format. It can be helpful for analysis of parser's
  438. internals</li>
  439. <li><span
  440. class="normalImportance">--general.log-level</span>=GENERAL.LOG_LEVEL
  441. for any tool is helpful to trace execution </li>
  442. </ul>
  443. <p>Finally, if there are any questions or enquires, please,
  444. feel free to contact <a
  445. href="mailto:avkonst@users.sourceforge.net">project
  446. administrator</a> by e-mail.</p>
  447. <h4>Source Code Repository</h4>
  448. <p>Source code is in the Subversion repository <a
  449. href="http://metrixplusplus.svn.sourceforge.net/viewvc/metrixplusplus/mainline/">(browse
  450. online)</a> used by the project. Corresponding checkout command
  451. is the following:</p>
  452. <p><pre>&gt; svn checkout <a href="https://metrixplusplus.svn.sourceforge.net/svnroot/metrixplusplus/mainline/">https://metrixplusplus.svn.sourceforge.net/svnroot/metrixplusplus/mainline/</a></pre>
  453. </p>
  454. <h4></h4>
  455. </td>
  456. </tr>
  457. </tbody>
  458. </table>
  459. <hr />
  460. </td>
  461. </tr>
  462. <tr>
  463. <td colspan="2">
  464. <div align="center">
  465. <p align="right">Copyright <strong>&copy; </strong>2009 - 2013<br />
  466. <a href="mailto:avkonst@users.sourceforge.net"><span
  467. class="normalImportance">Metrix++</span> Project</a></p>
  468. <p align="right">License: <a
  469. href="http://www.gnu.org/licenses/gpl.txt">GPL</a></p>
  470. </div>
  471. </td>
  472. </tr>
  473. </tbody>
  474. </table>
  475. </body>
  476. </html>