diff --git a/README.md b/README.md new file mode 100644 index 000000000..2a3c72e20 --- /dev/null +++ b/README.md @@ -0,0 +1,227 @@ +gollum -- A wiki built on top of Git +==================================== + +## DESCRIPTION + +Gollum is a simple wiki that uses Git for storage and revision histories. It +is designed so that you can create a compliant Git repository (known as a +Gollum repository) either by hand, by calling API methods, or via the web +interface. + + +## REPO STRUCTURE + +A Gollum repository's contents are designed to be human editable. Page content +is written in `page files` and may be organized into directories any way you +choose. Other content (images, CSS, JavaScript, PDFs, etc) may also be +present and organized in the same way. + +Page files may be written in formats that render to HTML. Currently supported +formats are Markdown, Textile, and HTML. They must have the proper file +extension that corresponds to the format of the content: + + * Markdown: .markdown, .mkdn, .md + * Textile: .textile + * HTML: .html + +Even though page files may be placed in any directory, there is still only a +single namespace for page names, so all page files should have globally unique +names regardless of where there are located in the repository. + +CSS and JavaScript (.css and .js) files are automatically detected and +injected into page files that live at the same directory level or lower. This +allows you to easily apply CSS and JS to specific sets of pages. + + +## WIKI LINKS + +Wiki links in Gollum are processed before page content is converted into HTML. +They take the following form: + + [[Page Name]] + +If you'd like the link text to be something other than the page name, you can +use the advanced form: + + [[Page Name | Alternate Text]] + +The above wiki links will create a link to the corresponding page file named +`page-name.ext` where `ext` may be any of the allowed extension types. The +conversion is as follows: + + 1. Replace any non-alpha characters with a dash + 2. Lowercase all alpha characters + +Here are a few more examples: + + [[Tom "TPW" Preston-Werner]] -> tom--tpw--preston-werner.ext + [[Quantum Physics | quantum]] -> quantum-physics.ext + +The page file may exist anywhere in the directory structure of the repository. +Gollum does a breadth first search and uses the first match that it finds. + +## STATIC LINKS + +To link to static files that are contained in the Gollum repository you should +use the static link tag. Because this tag produces a URL instead of a full +link tag, it is contained within single brackets. It uses the `file:` +identifier to mark the contents as a static file reference. Static links are +processed before page content is converted into HTML. + +You can use either absolute or relative paths to specify the file location. +Absolute paths (that start with a slash) are bound to the repository root. + + [file:/gollum.pdf] + [file:/docs/gollum.pdf] + +Relative paths (without a beginning slash) are referenced from the location of +the page file. For example, if your page file is `documentation.md` and is +stored in the `docs` directory under the repository root, then the following +link in `documentation.md` will produce a URL to `/docs/gollum.pdf`: + + [file:gollum.pdf] + +In Markdown, a link would take the following form: + + [Gollum Manual]([file:gollum.pdf]) + +In Textile, it would look like this: + + "Gollum Manual":[file:gollum.pdf] + +And in HTML, like so: + + Gollum Manual + + +## ESCAPING WIKI AND STATIC LINKS + +If you need the literal text of a wiki or static link to show up in your final +wiki page, simply preface the link with a single quote (like in LISP): + + '[[Wiki Link]] + '[file:foo.jpg] + +This is useful for writing about the link syntax in your wiki pages. + + +## SYNTAX HIGHLIGHTING + +In Markdown and Textile page files you can get automatic syntax highlighting +for a wide range of languages (courtesy of Pygments) by using the following +syntax: + + ```ruby``` + def foo + puts 'bar' + end + ``` + +The block must start with three backticks (as the first characters on the +line). After that comes the name of the language that is contained by the +block. The language must be one of the `short name` lexer strings supported by +Pygments. See the [list of lexers](http://pygments.org/docs/lexers/) for valid +options. Following the language name you may add an additional three backticks +for aesthetic reasons (but this is not required). The block must end with at +least three backticks as the first characters on a line. You may add more +backticks for balance if you like. + + +## API DOCUMENTATION + +The Gollum API allows you to retrieve raw or formatted wiki content from a Git +repository, write new content to the repository, and collect various meta data +about the wiki as a whole. + +Initialize the Gollum::Repo object: + + # Require rubygems if necessary + require 'rubygems' + + # Require the Gollum library + require 'gollum' + + # Create a new Gollum object by initializing it with the path to the + # Git repository. + gollum = Gollum.new("my-gollum-repo.git") + # => + +Get the latest HTML formatted version of the given canonical page name: + + page = gollum.formatted_page('page-name') + # => + + page.data + # => "

My wiki page

" + + page.format + # => :markdown + + vsn = page.version + # => + + vsn.id + # => '3ca43e12377ea1e32ea5c9ce5992ec8bf266e3e5' + +Get the latest raw version of the given canonical page name: + + gollum.raw_page('page-name') + # => + + page.data + # => "# My wiki page" + + page.format + # => :markdown + + page.version + # => + +Get a list of versions for a given canonical page name: + + vsns = gollum.page_versions('page-name') + # => [] + + vsns.first.id + # => '3ca43e12377ea1e32ea5c9ce5992ec8bf266e3e5' + + vsns.first.date + # => Sun Mar 28 19:11:21 -0700 2010 + +Get a specific version of a given canonical page file: + + gollum.formatted_page('page-name', '5ec521178e0eec4dc39741a8978a2ba6616d0f0a') + gollum.raw_page('page-name', '5ec521178e0eec4dc39741a8978a2ba6616d0f0a') + +Get the latest version of a given static file: + + file = gollum.static_file('asset.js') + # => + + file.data + # => "alert('hello');" + + file.version + # => + +Get a specific version of a given static file: + + gollum.static_file('asset.js', '5ec521178e0eec4dc39741a8978a2ba6616d0f0a') + +Write a new version of a given canonical page file (the file will be created +if it does not already exist) and commit the change. + + gollum.write_page('page-name', 'My wiki page contents') + +Write a new version of a given canonical page file and specify a commit +message: + + gollum.write_page('page-name', 'My wiki page contents', 'commit message') + +To delete a page and commit the change: + + gollum.delete_page('page-name') + +Once again, you can optionally specify a commit message: + + gollum.delete_page('page-name', 'commit message') \ No newline at end of file