owlscribble 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY ADDED
@@ -0,0 +1,12 @@
1
+ == 0.9.0 / 2007-November-25
2
+
3
+ * Added each_wiki_link and each_wiki_command to handle these during processing
4
+ instead of forcing the user to change the document after it's been created.
5
+
6
+ * Added support for [[[Odd! Page Name]] some link text] page links.
7
+
8
+ * Updated to use TagTreeScanner v0.8 so controlling tag attributes is simpler.
9
+
10
+ == 0.8.0 / 2005-July-4
11
+
12
+ * First public release
data/Manifest.txt ADDED
@@ -0,0 +1,15 @@
1
+ HISTORY
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ TODO
6
+ examples/markup.html
7
+ examples/markup.owl
8
+ examples/scribblify.rb
9
+ examples/template.rhtml
10
+ lib/owlscribble.rb
11
+ test/test_lists.html
12
+ test/test_lists.owl
13
+ test/test_owlscribble.rb
14
+ test/test_toc.html
15
+ test/test_toc.owl
data/README.txt ADDED
@@ -0,0 +1,180 @@
1
+ = OWLScribble
2
+ Author:: Gavin Kistner (mailto:phrogz@mac.com)
3
+ Copyright:: Copyright (c)2005-2007 Gavin Kistner
4
+ License:: MIT License
5
+ Version:: 0.9.0 (2007-November-25)
6
+
7
+ == Overview
8
+
9
+ OWLScribble converts a specific set of wiki text markup into HTML.
10
+ (The syntax used in the markup is a knockoff of the markup used by OpenWiki;
11
+ the 'OWL' in OWLScribble means "OpenWiki-like".)
12
+
13
+ The OWLScribble.each_wiki_link method provides a way to customize the HTML
14
+ produced for individual in-wiki page links. (Since the URLs for such links
15
+ is custom to each site, and the user may wish to perform DB queries to control
16
+ the display and/or linking of various links.)
17
+
18
+ The OWLScribble.each_wiki_command method provides a way to handle special
19
+ processing instructions used in the markup.
20
+
21
+
22
+ == Features
23
+
24
+ * Automatically wraps logical document sections in HTML tags for CSS styling.
25
+
26
+ * Flexible markup allows non-standard wiki page names, with optional
27
+ alternative text displayed for wiki links.
28
+
29
+ * Control over the HTML used for wiki links via custom block processing.
30
+
31
+ * Mixed bulleted and numbered lists, with many list numbering styles.
32
+
33
+ * HTML table support.
34
+
35
+ * Arbitrary processing directives with a block to control the produced HTML.
36
+
37
+ * Built-in ##TableOfContents## directive uses the nested headings in the
38
+ document to produce a hierarchical hyperlinked TOC.
39
+
40
+ * Access to a DOM-like tag hierarchy after parsing the markup but prior to
41
+ generating HTML, allowing arbitrary changes as necessary.
42
+
43
+
44
+ == Example Usage
45
+
46
+ require 'owlscribble'
47
+
48
+ # Tell the library how to handle links the way I like them:
49
+ OWLScribble.each_wiki_link do |tag, page_name, link_text|
50
+ tag.name = "a"
51
+ tag.href = "page/view/#{CGI.escape(page_name)}"
52
+ tag.title = "View #{page_name.dewikiword}"
53
+ # tag.text is already set to something reasonable
54
+ end
55
+
56
+ # Tell the library how to handle commands the way I need:
57
+ OWLScribble.each_wiki_command do |tag, command, params|
58
+ case command
59
+ when 'Include' # Include(page_name) or Include(page_name,rev)
60
+ tag.name = 'div'
61
+ tag.class = 'sub_page'
62
+ page_name, revision = params
63
+ # All elements in the params array are strings
64
+ revision = Integer( revision ) rescue nil
65
+ tag.text = fetch_page( page_name, revision )
66
+ else
67
+ tag.name = 'span'
68
+ tag.class = 'unhandled_command'
69
+ tag.text = "###{command}( #{params.join ', '} )##"
70
+ end
71
+ end
72
+ end
73
+
74
+ owl = OWLScribble.new( the_string_to_parse )
75
+ puts owl.to_html
76
+
77
+ == Markup
78
+
79
+ See the link:../examples/markup.html file for documentation on the markup itself.
80
+
81
+ This page itself was produced using OWL markup; see link:../examples/markup.owl to see the
82
+ source.
83
+
84
+ == Customizing the Document
85
+ === Wiki Links
86
+ OWLScribble supports three ways to specify a link to a specific 'page', indicated by name:
87
+ * <b><tt>WikiWords</tt></b> <i>(aka CamelCase)</i> are assumed to be page links.
88
+ * <b><tt>[WikiWord some other text]</tt></b> creates a link to a page with alternate text.
89
+ * <b><tt>[[Some Page! Name]]</tt></b> allows link creation to pages whose names are not WikiWords.
90
+ <i>(For more information on creating links, see the link:../docs/markup.html documentation.)</i>
91
+
92
+ Because OWLScribble cannot know how to create URLs for such items, you must either supply an
93
+ _each_wiki_link_ block _before intitialization_ (see example above) to transform tags on the fly,
94
+ or else spin through the <tt>wiki_links</tt> property on the OWLScribble instance to manipulate
95
+ them before creating the final HTML.
96
+
97
+ If you don't supply an _each_wiki_link_ block, the following example shows how to mutate these
98
+ non-HTML tags into HTML anchors with a custom url, leaving the text of the link untouched:
99
+
100
+ require 'cgi'
101
+ owl.wiki_links.each{ |tag|
102
+ tag.name = :a
103
+ page = tag.attributes[ :page ]
104
+ tag.attributes[ :href ] = "view?#{CGI.escape(page)}"
105
+ tag.attributes.delete( :page )
106
+ }
107
+
108
+ === Wiki Commands
109
+ In addition to links to wiki pages, OWLScribble allows the user to
110
+ specify ommands using the following format. For example:
111
+ * <tt>##TableOfContents##</tt> - include a table of contents here
112
+ * <tt>##DEPRECATED##</tt> - mark this page for future deletion
113
+ * <tt>##Include(PageName)##</tt> - include the contents of another page at this location
114
+ * <tt>##RedirectTo(PageName)##</tt> - show the specified page instead
115
+ * <tt>##AnyCommand(Param1,Param2,Param3)##</tt> - anything you want
116
+
117
+ OWLScribble handles the +TableOfContents+ command automatically, building a table of contents
118
+ from the hierarchy of heading levels and replacing any <tt>##TableOfContents##</tt>
119
+ commands with copies of that TOC. Additionally, every section following
120
+ a header tag is wrapped in a <tt><div class="section">...</div></tt> block,
121
+ providing a nested hierarchy of sections in the page itself. (This is
122
+ primarily useful for applying CSS to sections, such as visual indentation.)
123
+
124
+ For the other commands, it is up to you to handle them. The simplest method is (as with links)
125
+ to supply an _each_wiki_command_ block to the OWLScribble class before creating any instances.
126
+ (See the example above.) Also as with with the links, you may also choose to run through the
127
+ +wiki_commands+ array after initialization but before calling #to_html, changing the non-HTML
128
+ <tt>"wiki_command"</tt> tags into something else.
129
+
130
+ With the default _each_wiki_command_ block, these tags have a <tt>:do</tt> attribute
131
+ which is the string name of the command, and may have a <tt>:params</tt> attribute that
132
+ contains a comma-delimited list of parameters supplied by the user. If they are not removed or
133
+ changed, these tags will show up in the HTML output. For example, this input text:
134
+ == Engineering ==
135
+ Here's the home page from engineering:
136
+
137
+ ##Include(EngineeringHome)##
138
+
139
+ will produce the following HTML:
140
+ <h2 id="Engineering">Engineering</h2>
141
+ <div class="section">
142
+ <p>Here's the home page from engineering:</p>
143
+ <wiki_command do="Include" param="EngineeringHome">##Include(EngineeringHome)##</wiki_command>
144
+ </div>
145
+
146
+ The presence of these tags should not affect the functioning or rendering
147
+ of the produced HTML in any modern browser, but it will be syntactically invalid.
148
+
149
+
150
+ == Requirements
151
+
152
+ * OWLScribble is based on (and hence requires) the +TagTreeScanner+ library
153
+ (http://tagtreescanner.rubyforge.org). Installing this gem should have
154
+ already informed you of the requirement and given you a chance to install it.
155
+
156
+
157
+ == License
158
+
159
+ (The MIT License)
160
+
161
+ Copyright (c) 2005-2007 Gavin Kistner
162
+
163
+ Permission is hereby granted, free of charge, to any person obtaining
164
+ a copy of this software and associated documentation files (the
165
+ 'Software'), to deal in the Software without restriction, including
166
+ without limitation the rights to use, copy, modify, merge, publish,
167
+ distribute, sublicense, and/or sell copies of the Software, and to
168
+ permit persons to whom the Software is furnished to do so, subject to
169
+ the following conditions:
170
+
171
+ The above copyright notice and this permission notice shall be
172
+ included in all copies or substantial portions of the Software.
173
+
174
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
175
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
176
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
177
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
178
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
179
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
180
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require './lib/owlscribble.rb'
6
+
7
+ Hoe.new('owlscribble', OWLScribble::VERSION) do |p|
8
+ p.rubyforge_name = 'owlscribble'
9
+ p.author = 'Gavin Kistner'
10
+ p.email = 'phrogz@mac.com'
11
+ p.summary = "Converts a specific syntax of text markup into HTML. (The syntax is similar to OpenWiki's.)"
12
+ p.description = IO.read( 'README.txt' )[ /= Overview\n(.+?)^=/m, 1 ].rstrip
13
+ p.changes = IO.read( 'HISTORY' )[ /^=[^\n]+\n+(.+?)(?:^=|\Z)/m, 1 ].rstrip
14
+ p.remote_rdoc_dir = ''
15
+ end
16
+
17
+ # vim: syntax=Ruby
data/TODO ADDED
@@ -0,0 +1,7 @@
1
+ * Speed optimizations, once it's feature-complete
2
+
3
+ * Process indented paragraphs like lists, just to calculate minimal depth from many spaces
4
+
5
+ * Inline commands for <br>? Some auto-br inclusion?
6
+
7
+ * More unit tests (especially around each_wiki_link and each_wiki_command)
@@ -0,0 +1,343 @@
1
+ <html><head><title>Welcome to the Jungle</title>
2
+ <style type="text/css">
3
+ body { margin:1em 2em; font-size:90%; font-family:'Trebuchet MS', serif; margin-bottom:30em }
4
+
5
+ a:link, a:visited { color:#009 }
6
+ a.newwikilink { color:#900 }
7
+
8
+ h1,h2,h3,h4,h5,h6 { margin-bottom:0.2em; margin-top:2em; border-bottom:1px solid #999; font-family:sans-serif }
9
+ h1 { font-size:120% }
10
+ h2 { font-size:110% }
11
+ h3,h4 { font-size:100% }
12
+ h5,h6 { font-size:90% }
13
+ h4,h5,h6 { font-style:italic }
14
+
15
+ ul, ol { margin:0; padding:0; margin-left:1.5em; margin-bottom:0.8em }
16
+ ul ol, ol ul, ul ul, ol ol { margin-left:1.5em }
17
+ li { margin-bottom:0 }
18
+ p { margin:0; margin-bottom:0.7em }
19
+ pre { background:#ffd; padding:0.5em; border:1px solid #993 }
20
+ .todo { font-weight:bold; color:#900 }
21
+ .section { margin-left:1em }
22
+ table { border-collapse:collapse; margin-bottom:1em }
23
+ td { border:1px solid #ccc; padding:0.1em 0.5em; font-size:85% }
24
+ pre, code, tt { color:#060 }
25
+
26
+ dt { font-weight:bold }
27
+
28
+ .indent1 { margin-left:2em }
29
+ .indent2 { margin-left:4em }
30
+ .indent3 { margin-left:6em }
31
+ .indent4 { margin-left:8em }
32
+ .indent5 { margin-left:10em }
33
+ .indent6 { margin-left:12em }
34
+ </style>
35
+ </head><body>
36
+ <h1 id="TableofContents">Table of Contents</h1>
37
+ <div class="section">
38
+ <div class="toc"><ul><li><a href="#TableofContents">Table of Contents</a></li><li><a href="#WelcometoOWLScribble">Welcome to OWLScribble!</a><ul><li><a href="#WhatisOWLScribble">What is OWLScribble?</a></li><li><a href="#SupportedMarkup">Supported Markup</a><ul><li><a href="#Paragraphs">Paragraphs</a><ul><li><a href="#IndentedParagraphs">Indented Paragraphs</a></li></ul></li><li><a href="#PreformattedText">Preformatted Text</a></li><li><a href="#BasicInlineStyling">Basic Inline Styling</a></li><li><a href="#Headings">Headings</a></li><li><a href="#Linking">Linking</a><ul><li><a href="#PreventingLinking">Preventing Linking</a></li></ul></li><li><a href="#Lists">Lists</a><ul><li><a href="#BulletedLists">Bulleted Lists</a></li><li><a href="#NumberedLists">Numbered Lists</a></li><li><a href="#MixingLists">Mixing Lists</a></li><li><a href="#DefinitionLists">Definition Lists</a></li></ul></li><li><a href="#Tables">Tables</a></li></ul></li><li><a href="#ProcessingDirectives">Processing Directives</a></li><li><a href="#Miscellaneous">Miscellaneous</a></li></ul></li></ul></div>
39
+ </div>
40
+ <h1 id="WelcometoOWLScribble">Welcome to OWLScribble!</h1>
41
+ <div class="section">
42
+ <p><i>An introduction to the <span>OWLScribble</span> markup language.</i></p>
43
+ <h2 id="WhatisOWLScribble">What is OWLScribble?</h2>
44
+ <div class="section">
45
+ <p><span>OWLScribble</span> is a wiki markup language <i>based on</i> the markup used by <a href="hTTp://www.openwiki.org/">OpenWiki</a>. It was designed for use with the <span>SewWiki</span> project by <a href="dummylinktopage?GavinKistner" class="newwikilink">Gavin Kistner</a>.</p>
46
+ </div>
47
+ <h2 id="SupportedMarkup">Supported Markup</h2>
48
+ <div class="section">
49
+ <h3 id="Paragraphs">Paragraphs</h3>
50
+ <div class="section">
51
+ <pre>Paragraphs start on a line of their own
52
+ and may be continued onto multiple
53
+ consecutive lines.
54
+
55
+ A double line break indicates the start
56
+ of a new paragraph.
57
+
58
+ If the start of the text is indented at all,
59
+ however, then it is treated as preformatted
60
+ text.</pre>
61
+ <p>Paragraphs start on a line of their own
62
+ and may be continued onto multiple
63
+ consecutive lines.</p>
64
+ <p>A double line break indicates the start
65
+ of a new paragraph.</p>
66
+ <pre>If the start of the text is indented at all,
67
+ however, then it is treated as preformatted
68
+ text.
69
+ </pre>
70
+ <h4 id="IndentedParagraphs">Indented Paragraphs</h4>
71
+ <div class="section">
72
+ <pre> : An exception to the indented-paragraph rule is this.
73
+ : Paragraphs (on a single line)
74
+ : with whitespace preceding a colon
75
+ : are indented based on the amount of space
76
+ : But, as seen here, each line is its own paragraph.</pre>
77
+ <p class="indent1">An exception to the indented-paragraph rule is this.</p>
78
+ <p class="indent2">Paragraphs (on a single line)</p>
79
+ <p class="indent2">with whitespace preceding a colon</p>
80
+ <p class="indent2">are indented based on the amount of space</p>
81
+ <p class="indent1">But, as seen here, each line is its own paragraph.</p>
82
+ </div>
83
+ </div>
84
+ <h3 id="PreformattedText">Preformatted Text</h3>
85
+ <div class="section">
86
+ <pre> {{{
87
+ for ( var i=0; i&lt;10; ++i ){
88
+ alert( 'hi!' );
89
+ }
90
+ }}}</pre>
91
+ <pre>for ( var i=0; i&lt;10; ++i ){
92
+ alert( 'hi!' );
93
+ }</pre>
94
+ <p>To be clear about the start and end, you may
95
+ specify preformatted text by wrapping it in
96
+ <tt>{{{...}}}</tt> over multiple lines.</p>
97
+ <p>Such text is automatically unindented by the
98
+ amount of indentation on the end markers.</p>
99
+ </div>
100
+ <h3 id="BasicInlineStyling">Basic Inline Styling</h3>
101
+ <div class="section">
102
+ <pre>This text **is bold**, this //is italic//,
103
+ and --this has been struck--.
104
+
105
+ //You can start a paragraph with an inline
106
+ style, but you cannot wrap it across lines.//
107
+
108
+ This is a @@code reference@@,
109
+ as is {{{this text}}}.
110
+
111
+ A double-exclamation point is a special
112
+ 'todo' item. !!Add more examples!!
113
+
114
+ You can also ^^superscript^^ and
115
+ __subscript__ text, like H__2__O
116
+ or e^^pi*i^^.</pre>
117
+ <p>This text <b>is bold</b>, this <i>is italic</i>,
118
+ and <strike>this has been struck</strike>.</p>
119
+ <p><i>You can start a paragraph with an inline</i>
120
+ style, but you cannot wrap it across lines.<i></i></p>
121
+ <p>This is a <tt>code reference</tt>,
122
+ as is <tt>this text</tt>.</p>
123
+ <p>A double-exclamation point is a special
124
+ 'todo' item. <span class="todo">TODO - Add more examples</span></p>
125
+ <p>You can also <sup>superscript</sup> and
126
+ <sub>subscript</sub> text, like H<sub>2</sub>O
127
+ or e<sup>pi*i</sup>.</p>
128
+ <ul>
129
+ <li><i>Unlike <span>OpenWiki</span>, you are not allowed to underline text. Sorry, but underlining is reserved for links in hyperlinked documents.</i></li>
130
+ </ul>
131
+ </div>
132
+ <h3 id="Headings">Headings</h3>
133
+ <div class="section">
134
+ <pre>= Heading Level 1 =
135
+ == Heading Level 2 ==
136
+ === Heading Level 3 ===
137
+ ==== Heading Level 4 ====
138
+ ===== Heading Level 5 =====
139
+ ====== Heading Level 6 ======</pre>
140
+ <p>Headings must begin at the start of the line. Markup inside headings is ignored. (For example,
141
+ <tt>== My //Sweet// Heading ==</tt> will not make the word italic, but will instead show the <tt>//</tt> characters in the output.)</p>
142
+ </div>
143
+ <h3 id="Linking">Linking</h3>
144
+ <div class="section">
145
+ <pre> * Visit SiteMap, HomePage, or WhereDoIBegin to get started.
146
+ * Visit the [[What is a Wiki?]] page if you're really lost.
147
+ * Visit hTTp://www.google.com to find stuff on the web.
148
+ * The [hTTp://www.microsoft.com company that shall not be named] thinks they can beat Google.
149
+ * This page was edited by [GavinKistner the Wiki Gardener].
150
+ * See [[[Foo/Bar/Jim/Jam]] the Jam page] for more deliciousness.</pre>
151
+ <ul>
152
+ <li>Visit <a href="dummylinktopage?SiteMap" class="newwikilink">Site Map</a>, <a href="dummylinktopage?HomePage" class="newwikilink">Home Page</a>, or <a href="dummylinktopage?WhereDoIBegin" class="newwikilink">Where Do I Begin</a> to get started.</li>
153
+ <li>Visit the <a href="dummylinktopage?What+is+a+Wiki%3F" class="newwikilink">What is a Wiki?</a> page if you're really lost.</li>
154
+ <li>Visit <a href="hTTp://www.google.com">www.google.com</a> to find stuff on the web.</li>
155
+ <li>The <a href="hTTp://www.microsoft.com">company that shall not be named</a> thinks they can beat Google.</li>
156
+ <li>This page was edited by <a href="dummylinktopage?GavinKistner" class="newwikilink">the Wiki Gardener</a>.</li>
157
+ <li>See <a href="dummylinktopage?Foo%2FBar%2FJim%2FJam" class="newwikilink">the Jam page</a> for more deliciousness.</li>
158
+ </ul>
159
+ <p><span>OWLScribble</span> supports three styles of specifying a link:</p>
160
+ <ol>
161
+ <li>Text that looks like <span>URLs</span> are automatically linked. You must use a capital 'T' and lowercase letters in the protocol to get it recognized. (It's annoying, but designed to stop spam bots.) So <span>http://www.google.com/</span> will not be linked, but <tt>hTTp://www.google.com</tt> will yield: <a href="hTTp://www.google.com">www.google.com</a><ul>
162
+ <li><i>Supported protocols are http, https, and ftp.</i></li>
163
+ </ul></li>
164
+ <li><b><span>WikiWords</span></b> are automatically treated as links to other pages in the Wiki, and expanded out. For example, typing <tt>CapitalizedWordsScrunchedTogether</tt> produces "<a href="dummylinktopage?CapitalizedWordsScrunchedTogether" class="newwikilink">Capitalized Words Scrunched Together</a>".<ul>
165
+ <li><i>The <span>OWLScribble</span> class simply turns the above into the 'HTML' code: <tt>&lt;wiki_link page="CapitalizedWordsScrunchedTogether"&gt;Capitalized Words Scrunched Together&lt;/wiki_link&gt;</tt>. It is up to the consumer of <span>OWLScribble</span> to run through the <tt>#wiki_links</tt> collection and replace the above with something reasonable (such as an HTML anchor) after doing whatever it needs to do (such as a db lookup).</i></li>
166
+ </ul></li>
167
+ <li>If you want to create a wiki page whose name doesn't look like a <span>WikiWord</span>, you can wrap it in double square brackets, like <tt>See the [[Table of Contents]] page</tt>.<ul>
168
+ <li><i>Again, <span>OWLScribble</span> turns the above into: <tt>&lt;wiki_link page="Table of Contents"&gt;Table of Contents&lt;/wiki_link&gt;</tt>, leaving it up to the consumer of <span>OWLScribble</span> to change that tag into something better.</i></li>
169
+ <li>As seen in the last example above, you can use the double-square-bracket wiki link style along with outer brackets to supply different page text. <span>OWLScribble</span> turns the last example above into: <tt>&lt;wiki_link page="Foo/Bar/Jim/Jam"&gt;the Jam page&lt;/wiki_link&gt;</tt>.<i></i></li>
170
+ </ul></li>
171
+ </ol>
172
+ <p>With either <span>URLs</span> or <span>WikiWords</span>, you can optionally use an alternative description for the link text. As shown above, place a single set of square brackets around what you want linked, with the URL or <span>WikiWord</span> as the first item.</p>
173
+ <h4 id="PreventingLinking">Preventing Linking</h4>
174
+ <div class="section">
175
+ <pre>Sometimes you want to write something that looks like a
176
+ ~WikiWord (such as ~OpenWiki) but you don't want it to
177
+ appear as a link to a page in the wiki.
178
+
179
+ You can either wrap it in preformatted text delimiters
180
+ like @@{{{OpenWiki}}}@@, or place a tilde (~) character right
181
+ before it, as in {{{~OpenWiki}}}.</pre>
182
+ <p>Sometimes you want to write something that looks like a
183
+ <span>WikiWord</span> (such as <span>OpenWiki</span>) but you don't want it to
184
+ appear as a link to a page in the wiki.</p>
185
+ <p>You can either wrap it in preformatted text delimiters
186
+ like <tt>{{{OpenWiki}}}</tt>, or place a tilde (~) character right
187
+ before it, as in <tt>~OpenWiki</tt>.</p>
188
+ </div>
189
+ </div>
190
+ <h3 id="Lists">Lists</h3>
191
+ <div class="section">
192
+ <h4 id="BulletedLists">Bulleted Lists</h4>
193
+ <div class="section">
194
+ <pre> 1 2 3 4 5 6
195
+ 12345678901234567890123456789012345678901234567890123456789012345
196
+ * Bullet lists need **at least one space** before the asterisk.
197
+ * **A space** must appear after the asterisk.
198
+ * They may be nested to an arbitrary depth.
199
+ * Tabs may also be used for indentation.
200
+ * Mixing tabs and spaces is asking for trouble.</pre>
201
+ <ul>
202
+ <li>Bullet lists need <b>at least one space</b> before the asterisk.<ul>
203
+ <li><b>A space</b> must appear after the asterisk.<ul>
204
+ <li>They may be nested to an arbitrary depth.</li>
205
+ </ul></li>
206
+ </ul></li>
207
+ <li>Tabs may also be used for indentation.</li>
208
+ <li>Mixing tabs and spaces is asking for trouble.</li>
209
+ </ul>
210
+ </div>
211
+ <h4 id="NumberedLists">Numbered Lists</h4>
212
+ <div class="section">
213
+ <pre> 1 2 3 4 5 6
214
+ 12345678901234567890123456789012345678901234567890123456789012345
215
+ 1. Numbered lists must also have a space before the number.
216
+ 1. The actual number doesn't matter...
217
+ 3. ...but the period after the number does.
218
+ 1. As well as the space after the period.
219
+ # You can also use the 'octothorp' if you like.
220
+ # //(A fancy name for the 'sharp' or 'pound' symbol.)
221
+ # Other types of numbered lists are supported beyond arabic.
222
+ a. For arabic lists, you can use 1, 2, 3, ... 23, etc.
223
+ a. but for the following, you must use the actual character.
224
+ a. A lowercase 'a' is for lowercase alphabetical lists.
225
+ A. An uppercase 'A' is for uppercase alphabetical lists.
226
+ i. A lowercase 'i' is for lowercase roman numeral lists.
227
+ I. An uppercase 'I' is for uppercase roman numeral lists.</pre>
228
+ <ol>
229
+ <li>Numbered lists must also have a space before the number.</li>
230
+ <li>The actual number doesn't matter...<ol>
231
+ <li>...but the period after the number does.</li>
232
+ <li>As well as the space after the period.</li>
233
+ </ol></li>
234
+ <li>You can also use the 'octothorp' if you like.<ol>
235
+ <li><i>(A fancy name for the 'sharp' or 'pound' symbol.)</i></li>
236
+ </ol></li>
237
+ <li>Other types of numbered lists are supported beyond arabic.<ol>
238
+ <li type="a">For arabic lists, you can use 1, 2, 3, ... 23, etc.</li>
239
+ <li type="a">but for the following, you must use the actual character.</li>
240
+ <li type="a">A lowercase 'a' is for lowercase alphabetical lists.</li>
241
+ <li type="A">An uppercase 'A' is for uppercase alphabetical lists.</li>
242
+ <li type="i">A lowercase 'i' is for lowercase roman numeral lists.</li>
243
+ <li type="I">An uppercase 'I' is for uppercase roman numeral lists.</li>
244
+ </ol></li>
245
+ </ol>
246
+ </div>
247
+ <h4 id="MixingLists">Mixing Lists</h4>
248
+ <div class="section">
249
+ <pre> 1 2 3 4 5
250
+ 12345678901234567890123456789012345678901234567890123456789
251
+ * Bulleted and numbered lists may be alternately nested
252
+ 1. And (as seen above)...
253
+ i. ...you can mix numbered list styles on the fly
254
+ * But woe unto you if you try to mix a bullet...
255
+ 1. ...and a number in the same list.
256
+ * //Sorry buddy, but that doesn't fly.//</pre>
257
+ <ul>
258
+ <li>Bulleted and numbered lists may be alternately nested<ol>
259
+ <li>And (as seen above)...</li>
260
+ <li type="i">...you can mix numbered list styles on the fly</li>
261
+ </ol></li>
262
+ <li>But woe unto you if you try to mix a bullet...</li>
263
+ <li>...and a number in the same list.<ul>
264
+ <li><i>Sorry buddy, but that doesn't fly.</i></li>
265
+ </ul></li>
266
+ </ul>
267
+ </div>
268
+ <h4 id="DefinitionLists">Definition Lists</h4>
269
+ <div class="section">
270
+ <pre> 1 2 3 4 5
271
+ 12345678901234567890123456789012345678901234567890123456789
272
+ ; Semantic : of or relating to meaning in language
273
+ ; Grok : to understand //completely//
274
+ ; : to inherently and almost intuitively comprehend</pre>
275
+ <dl>
276
+ <dt>Semantic</dt>
277
+ <dd>of or relating to meaning in language</dd>
278
+ <dt>Grok</dt>
279
+ <dd>to understand <i>completely</i></dd>
280
+ <dd>to inherently and almost intuitively comprehend</dd>
281
+ </dl>
282
+ <ul>
283
+ <li><i>Unlike <span>OpenWiki</span>, you cannot 'nest' or indent definition lists.</i></li>
284
+ </ul>
285
+ </div>
286
+ </div>
287
+ <h3 id="Tables">Tables</h3>
288
+ <div class="section">
289
+ <pre>|| **Age** || **Sex** || **Weight** ||
290
+ || 32 || M || 180 ||
291
+ || 30 || F || 150 ||
292
+ |||| //average// || **165** ||</pre>
293
+ <table>
294
+ <tr>
295
+ <td><b>Age</b></td>
296
+ <td><b>Sex</b></td>
297
+ <td><b>Weight</b></td>
298
+ </tr>
299
+ <tr>
300
+ <td>32</td>
301
+ <td>M</td>
302
+ <td>180</td>
303
+ </tr>
304
+ <tr>
305
+ <td>30</td>
306
+ <td>F</td>
307
+ <td>150</td>
308
+ </tr>
309
+ <tr>
310
+ <td colspan="2"><i>average</i></td>
311
+ <td><b>165</b></td>
312
+ </tr>
313
+ </table>
314
+ <p>You don't have to line up the bars from one row to the next, but you may
315
+ if you want the text representation to look clean. As seen above,
316
+ you can cause a cell to span multiple columns.</p>
317
+ </div>
318
+ </div>
319
+ <h2 id="ProcessingDirectives">Processing Directives</h2>
320
+ <div class="section">
321
+ <p>A processing directive appears as a pair of pound symbols with a command
322
+ inside, optionally followed by parameters to that command inside
323
+ parentheses. For example:</p>
324
+ <pre>##TableOfContents##
325
+ ##IncludePage(ProcessingDirectives)##</pre>
326
+ <p><span>OWLScribble</span> currently recognizes the following directives:</p>
327
+ <ul>
328
+ <li><tt>##TableOfContents##</tt> - replaces the directive with a nested list representing the hierarchy of headers in the document, with links to those headers</li>
329
+ <li><tt>##DEPRECATED##</tt> - indicates that the document is no longer needed, and should be removed</li>
330
+ <li><tt>##BALETED##</tt> - <i>same as DEPRECATED</i></li>
331
+ <li><tt>##IncludePage(PageName)##</tt> - indicates that the contents of the other page should be included in this location</li>
332
+ </ul>
333
+ <p>Note that <span>OWLScribble</span> only handles the <tt>TableOfContents</tt> directive natively. The other directives are replaced with an empty non-HTML 'wiki_command' tag, such as <tt>&lt;wiki_command do="TableOfContents" /&gt;</tt> or <tt>&lt;wiki_command do="IncludePage" param="CommonFooter" /&gt;</tt>. It is up to the consumer of <span>OWLScribble</span> to handle and/or replace such tags with meaningful information.</p>
334
+ <p class="indent1"><i>There are two ways to handle these tags. One way is to parse and modify the HTML produced by <span>OWLScribble</span> as a string. This is effective, but not recommended.</i></p>
335
+ <p class="indent1"><i>The recommended mechanism for handling processing directives is to spin through the <tt>#wiki_commands</tt> collection of the <span>OWLScribble</span> object after initialization, processing the commands and replacing the tags as desired. Once this is done, call the <tt>#to_s</tt> or <tt>#to_html</tt> methods on the <span>OWLScribble</span> instance to get the final output.</i></p>
336
+ </div>
337
+ <h2 id="Miscellaneous">Miscellaneous</h2>
338
+ <div class="section">
339
+ <p>HTML entities are not needed (and do not work) inside <span>OWLScribble</span>; you can type <tt>"this &amp; that"</tt> and it will produce the HTML <tt>this &amp;amp; that</tt>, displaying as "this &amp; that". Typing <tt>&amp;amp;</tt> will actually show "&amp;amp;".</p>
340
+ </div>
341
+ </div>
342
+
343
+ </body></html>