| 1 |
= Ohcount |
|---|
| 2 |
|
|---|
| 3 |
The Ohloh source code line counter |
|---|
| 4 |
|
|---|
| 5 |
This program is free software; you can redistribute it and/or modify |
|---|
| 6 |
it under the terms of the GNU General Public License Version 2 as |
|---|
| 7 |
published by the Free Software Foundation. |
|---|
| 8 |
|
|---|
| 9 |
Ohcount is specifically licensed under GPL v2.0, and no later version. |
|---|
| 10 |
|
|---|
| 11 |
This program is distributed in the hope that it will be useful, |
|---|
| 12 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 13 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|---|
| 14 |
GNU General Public License for more details. |
|---|
| 15 |
|
|---|
| 16 |
You should have received a copy of the GNU General Public License |
|---|
| 17 |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
|---|
| 18 |
|
|---|
| 19 |
== Overview |
|---|
| 20 |
|
|---|
| 21 |
Ohcount is a library for counting lines of source code. |
|---|
| 22 |
It was originally developed at Ohloh, and is used to generate |
|---|
| 23 |
the reports at www.ohloh.net. |
|---|
| 24 |
|
|---|
| 25 |
Ohcount supports multiple languages within a single file: for example, |
|---|
| 26 |
a complex HTML document might include regions of both CSS and JavaScript. |
|---|
| 27 |
|
|---|
| 28 |
Ohcount has two main components: a detector which determines the primary |
|---|
| 29 |
language family used by a particular source file, and a parser which |
|---|
| 30 |
provides a line-by-line breakdown of the contents of a source file. |
|---|
| 31 |
|
|---|
| 32 |
Ohcount includes a command line tool that allows you to count individual |
|---|
| 33 |
files or whole directory trees. It also allows you to find source code |
|---|
| 34 |
files by language family, or to create a detailed annotation of an |
|---|
| 35 |
individual source file. |
|---|
| 36 |
|
|---|
| 37 |
Ohcount includes a Ruby binding which allows you to directly access its |
|---|
| 38 |
language detection features from a Ruby application. |
|---|
| 39 |
|
|---|
| 40 |
== System Requirements |
|---|
| 41 |
|
|---|
| 42 |
Ohcount is supported on Mac OS X 10.4 and Ubuntu 6.06 LTS. Other Linux |
|---|
| 43 |
environments should also work, but your mileage may vary. |
|---|
| 44 |
|
|---|
| 45 |
Ohcount does not support Windows. |
|---|
| 46 |
|
|---|
| 47 |
Ohcount targets Ruby 1.8.6. The build script targets Rake 0.7.3. You will |
|---|
| 48 |
also require a C compiler to build the native extensions. |
|---|
| 49 |
|
|---|
| 50 |
Ohcount requires Ragel (http://research.cs.queensu.ca/~thurston/ragel/) |
|---|
| 51 |
Unfortunately, Ragel 6.2 is not recent enough so you will need the latest |
|---|
| 52 |
version in SVN: svn://mambo.cs.queensu.ca/ragel/trunk/. |
|---|
| 53 |
|
|---|
| 54 |
== Download |
|---|
| 55 |
|
|---|
| 56 |
The source code for ohcount is available as a tarball: |
|---|
| 57 |
|
|---|
| 58 |
http://labs.ohloh.net/download/ohcount-1.0.2.tgz |
|---|
| 59 |
|
|---|
| 60 |
You can also download the source code as a Git repository: |
|---|
| 61 |
|
|---|
| 62 |
git clone http://git.ohloh.net/git/ohcount.git |
|---|
| 63 |
|
|---|
| 64 |
== Installation |
|---|
| 65 |
|
|---|
| 66 |
Ohcount is packaged as a RubyGem. To build and install the gem (you will need |
|---|
| 67 |
root priveleges for the install): |
|---|
| 68 |
|
|---|
| 69 |
$ rake install |
|---|
| 70 |
|
|---|
| 71 |
To uninstall the RubyGem: |
|---|
| 72 |
|
|---|
| 73 |
$ gem uninstall ohcount |
|---|
| 74 |
|
|---|
| 75 |
If you do not want to install the gem, you can simply build and run it like this: |
|---|
| 76 |
|
|---|
| 77 |
$ rake |
|---|
| 78 |
$ bin/ohcount |
|---|
| 79 |
|
|---|
| 80 |
== First Steps |
|---|
| 81 |
|
|---|
| 82 |
To measure the lines of code, simply pass filenames or directory names |
|---|
| 83 |
to the +ohcount+ script: |
|---|
| 84 |
|
|---|
| 85 |
$ ohcount helloworld.c |
|---|
| 86 |
|
|---|
| 87 |
Directories will be probed recursively. If you do not pass any parameters, |
|---|
| 88 |
the current directory tree will be counted. |
|---|
| 89 |
|
|---|
| 90 |
You can use the ohcount +detect+ option to simply determine the language |
|---|
| 91 |
family of each source file. The files will not be parsed or counted. |
|---|
| 92 |
For example, to find all of the ruby files in the current directory tree: |
|---|
| 93 |
|
|---|
| 94 |
$ ohcount --detect | grep ^ruby |
|---|
| 95 |
|
|---|
| 96 |
The +annotate+ option presents a line-by-line accounting |
|---|
| 97 |
of the languages used in a source code file. For example: |
|---|
| 98 |
|
|---|
| 99 |
$ ohcount --annotate ./test/src_dir/php1.php |
|---|
| 100 |
|
|---|
| 101 |
== Loading ohcount from Ruby |
|---|
| 102 |
|
|---|
| 103 |
If you have installed ohcount as a gem, you can load it like this: |
|---|
| 104 |
|
|---|
| 105 |
require 'rubygems' |
|---|
| 106 |
require 'ohcount' |
|---|
| 107 |
|
|---|
| 108 |
If you have not installed the gem, you'll have to make sure that |
|---|
| 109 |
ohcount is on your ruby load path and then require: |
|---|
| 110 |
|
|---|
| 111 |
require 'ohcount' |
|---|
| 112 |
|
|---|
| 113 |
The <tt>bin/ohcount</tt> script shows examples of calling the ohcount |
|---|
| 114 |
libraries from Ruby. |
|---|
| 115 |
|
|---|
| 116 |
== How to Add a New Language |
|---|
| 117 |
|
|---|
| 118 |
These are the steps required to add a new language to ohcount: |
|---|
| 119 |
|
|---|
| 120 |
* Update Ohcount::Detector to identify files that use the new language. |
|---|
| 121 |
* Update Ohcount::DetectorTest to confirm the Detector changes. |
|---|
| 122 |
* Follow the detailed instructions in PARSER_DOC. |
|---|
| 123 |
* In Ohcount::SlocInfo, provide a "nice name" and category (procedural |
|---|
| 124 |
code vs. markup) for the new language. |
|---|
| 125 |
* Create a new Ohcount::Test to verify the parser. |
|---|
| 126 |
|
|---|
| 127 |
== Contact Ohloh |
|---|
| 128 |
|
|---|
| 129 |
For more information visit the Ohloh website: |
|---|
| 130 |
http://labs.ohloh.net |
|---|
| 131 |
|
|---|
| 132 |
You can reach Ohloh via email at: |
|---|
| 133 |
info@ohloh.net |
|---|