Upgraded RedCloth to 3.0.3

This commit is contained in:
Alexey Verkhovsky 2005-02-10 23:11:47 +00:00
parent 2aa1aa8fad
commit bb2d16c8a1
27 changed files with 1844 additions and 1092 deletions

View file

@ -1,4 +1,5 @@
HEAD:
RedCloth 3.0.3 (read: mixing Textile and Markdown in the same page)
Files/pictures can be uploaded to a wiki and served from / displayed in wiki pages
Wiki link syntax doesn't conflict with Textile hyperlink syntax. Therefore
"textile link":LinkToSomePlace will not look insane.

View file

@ -31,7 +31,7 @@ unless defined? ADDITIONAL_LOAD_PATHS
ADDITIONAL_LOAD_PATHS.concat %w(
vendor/bluecloth-1.0.0/lib
vendor/madeleine-0.7.1/lib
vendor/redcloth-2.0.11/lib
vendor/RedCloth-3.0.3/lib
vendor/rubyzip-0.5.6
vendor/actionpack/lib
vendor/activesupport/lib

View file

@ -27,7 +27,7 @@ Rake::TestTask.new { |t|
t.libs << 'app/models'
t.libs << 'vendor/bluecloth-1.0.0/lib'
t.libs << 'vendor/madeleine-0.7.1/lib'
t.libs << 'vendor/redcloth-2.0.11/lib'
t.libs << 'vendor/RedCloth-3.0.3/lib'
t.libs << 'vendor/rubyzip-0.5.6'
t.pattern = 'test/**/*_test.rb'
t.verbose = true

View file

@ -18,7 +18,7 @@ ADDITIONAL_LOAD_PATHS.concat %w(
ADDITIONAL_LOAD_PATHS.concat %w(
vendor/bluecloth-1.0.0/lib
vendor/madeleine-0.7.1/lib
vendor/redcloth-2.0.11/lib
vendor/RedCloth-3.0.3/lib
vendor/rubyzip-0.5.6
vendor/actionpack/lib
vendor/activesupport/lib

View file

@ -116,7 +116,7 @@ class RevisionTest < Test::Unit::TestCase
def test_content_with_pre_blocks
assert_markup_parsed_as(
'A <code>class SmartEngine end</code> would not mark up <pre>CodeBlocks</pre>',
'<p>A <code>class SmartEngine end</code> would not mark up <pre>CodeBlocks</pre></p>',
'A <code>class SmartEngine end</code> would not mark up <pre>CodeBlocks</pre>')
end
@ -168,7 +168,7 @@ class RevisionTest < Test::Unit::TestCase
def test_double_replacing
@revision.content = "VersionHistory\r\n\r\ncry VersionHistory"
assert_equal '<p><span class="newWikiWord">Version History' +
"<a href=\"../show/VersionHistory\">?</a></span></p>\n\n\t<p>cry " +
"<a href=\"../show/VersionHistory\">?</a></span></p>\n\n\n\t<p>cry " +
'<span class="newWikiWord">Version History<a href="../show/VersionHistory">?</a>' +
'</span></p>',
@revision.display_content
@ -176,8 +176,8 @@ class RevisionTest < Test::Unit::TestCase
@revision.clear_display_cache
@revision.content = "f\r\nVersionHistory\r\n\r\ncry VersionHistory"
assert_equal "<p>f<br />\n<span class=\"newWikiWord\">Version History" +
"<a href=\"../show/VersionHistory\">?</a></span></p>\n\n\t<p>cry " +
assert_equal "<p>f\n<span class=\"newWikiWord\">Version History" +
"<a href=\"../show/VersionHistory\">?</a></span></p>\n\n\n\t<p>cry " +
"<span class=\"newWikiWord\">Version History<a href=\"../show/VersionHistory\">?</a>" +
"</span></p>",
@revision.display_content

52
vendor/RedCloth-3.0.3/RedCloth.gemspec vendored Normal file
View file

@ -0,0 +1,52 @@
require 'rubygems'
spec = Gem::Specification.new do |s|
## Basic Information
s.name = 'RedCloth'
s.version = "3.0.3"
s.platform = Gem::Platform::RUBY
s.summary = <<-TXT
RedCloth is a module for using Textile and Markdown in Ruby. Textile and Markdown are text formats.
A very simple text format. Another stab at making readable text that can be converted to HTML.
TXT
s.description = <<-TXT
No need to use verbose HTML to build your docs, your blogs, your pages. Textile gives you readable text while you're writing and beautiful text for your readers. And if you need to break out into HTML, Textile will allow you to do so.
Textile also handles some subtleties of formatting which will enhance your document's readability:
* Single- and double-quotes around words or phrases are converted to curly quotations, much easier on
the eye. "Observe!"
* Double hyphens are replaced with an em-dash. Observe -- very nice!
* Single hyphens are replaced with en-dashes. Observe - so cute!
* Triplets of periods become an ellipsis. Observe...
* The letter 'x' becomes a dimension sign when used alone. Observe: 2 x 2.
* Conversion of ==(TM)== to (TM), ==(R)== to (R), ==(C)== to (C).
For more on Textile's language, hop over to "A Textile Reference":http://hobix.com/textile/. For more
on Markdown, see "Daring Fireball's page":http://daringfireball.net/projects/markdown/.
TXT
## Include tests, libs, docs
s.files = ['bin/**/*', 'tests/**/*', 'lib/**/*', 'docs/**/*', 'run-tests.rb'].collect do |dirglob|
Dir.glob(dirglob)
end.flatten.delete_if {|item| item.include?("CVS")}
## Load-time details
s.require_path = 'lib'
s.autorequire = 'redcloth'
## Author and project details
s.author = "Why the Lucky Stiff"
s.email = "why@ruby-lang.org"
s.rubyforge_project = "redcloth"
s.homepage = "http://www.whytheluckystiff.net/ruby/redcloth/"
end

3
vendor/RedCloth-3.0.3/bin/redcloth vendored Normal file
View file

@ -0,0 +1,3 @@
#!/usr/local/bin/ruby18
require 'redcloth'
puts RedCloth.new( ARGF.read ).to_html

View file

@ -1,4 +1,42 @@
--- %YAML:1.0
- version: 3.0.3
date: 2005-02-06
changes:
- Stack overflow regexp on code inlines obliterated.
- Citations scaled back.
- Toggle span tags on CAPS with :no_span_tags accessor.
- version: 3.0.2
date: 2005-02-02
changes:
- Stack overflow Regexps replaced.
- All code blocks protected from formatting.
- Hard breaks working.
- Filter HTML now uses detailed cleaner.
- version: 3.0.1
date: 2004-11-15
changes:
- Using `float' rather than `text-align' to align image blocks.
- Shelving more HTML attributes to prevent them from clashing with Textile glyphs.
- Simplifying the block regexp.
- version: 3.0
date: 2004-10-26
changes:
- Broke up the Textile engine into smaller parts, recoded central block parser.
- Added preliminary support for Markdown.
- Added support for custom Textile prefixes.
- RedCloth now generates XHTML fragments.
- Complete HTML documents should now work, RedCloth ignores complex HTML.
- version: 2.0.12
date: 2004-08-09
changes:
- Escaping tighter for <pre> tags that share a single line.
- No more String#htmlesc!. Moved to RedCloth#htmlesc.
- Pruned out the code that was handling multibyte.
- version: 2.0.11
date: 2004-06-01
changes:

View file

View file

@ -1,17 +1,19 @@
p=. !redcloth-title.png!
p=. !redcloth3-title.png!
<div id="sidebar">
h4. Get RedCloth
h4. Get RedCloth 3
p(example1). *Latest version:* "2.0.10":http://rubyforge.org/frs/download.php/670/redcloth-2.0.10.tar.gz
p(example1). *Stable version:* "2.0.11":http://rubyforge.org/frs/download.php/698/redcloth-2.0.11.tar.gz
p(example1). *Unstable version:* "3.0.2":http://rubyforge.org/frs/download.php/2852/RedCloth-3.0.2.tar.gz
Take a complete tour of Textile at "A Textile Reference":http://hobix.com/textile/.
For fast syntax checking, try the "Quick Reference":http://hobix.com/textile/quick.html.
p(example1). Upgrade with RubyGems! Try:
@gem -Ri RedCloth@.
p(example1). Upgrade with "RubyGems":http://rubygems.rubyforge.org/! Try:
@gem install RedCloth@.
See the "project page":http://rubyforge.org/projects/redcloth/ for bug reporting, old releases and CVS instructions. "Documentation":http://redcloth.rubyforge.org/rdoc/ is also hosted at RubyForge.
@ -38,10 +40,10 @@ Textile is a simple markup language.
table{width:400px}.
|_. textile|_. to|_. html|
| ==_a phrase_== |->|_a phrase_|
| ==*a phrase*== |->|*a phrase*|
| ==_*a phrase*_== |->|_*a phrase*_|
| =="Google":http://google.com== |->|"Google":http://google.com|
| <notextile>_a phrase_</notextile> |->|_a phrase_|
| <notextile>*a phrase*</notextile> |->|*a phrase*|
| <notextile>_*a phrase*_</notextile> |->|_*a phrase*_|
| <notextile>"Google":http://google.com</notextile> |->|"Google":http://google.com|
No need to use verbose HTML to build your docs, your blogs, your pages. Textile gives you readable text while you're writing and beautiful text for your readers. And if you need to break out into HTML, Textile will allow you to do so.
@ -58,7 +60,7 @@ Textile also handles some subtleties of formatting which will enhance your docum
* The letter 'x' becomes a dimension sign when used alone. Observe: 2 x 2.
* Conversion of ==(TM)== to (TM), ==(R)== to (R), ==(C)== to (C).
* Conversion of <notextile>(TM)</notextile> to (TM), <notextile>(R)</notextile> to (R), <notextile>(C)</notextile> to (C).
For more on Textile's language, hop over to "A Textile Reference":http://hobix.com/textile/.
@ -86,10 +88,10 @@ h2. Installing RedCloth
To install RedCloth via RubyGems:
<pre>
gem -Ri RedCloth
gem install RedCloth
</pre>
Or "download RedCloth":http://rubyforge.org/frs/download.php/670/redcloth-2.0.10.tar.gz and simply run the install.rb like so:
Or "download RedCloth":http://rubyforge.org/frs/download.php/2852/RedCloth-3.0.2.tar.gz and simply run the install.rb like so:
<pre>
ruby install.rb config

View file

View file

@ -1,6 +1,20 @@
$:.unshift '../lib'
require 'yaml'
require 'redcloth'
class String
#
# Flexible HTML escaping
#
def htmlesc!( mode )
gsub!( '&', '&amp;' )
gsub!( '"', '&quot;' ) if mode != :NoQuotes
gsub!( "'", '&#039;' ) if mode == :Quotes
gsub!('<', '&lt;')
gsub!('>', '&gt;')
end
end
def a_name( phrase )
phrase.downcase.
gsub( /\W+/, '-' )
@ -119,8 +133,8 @@ when 'QUICK-REFERENCE'
sections.shift
puts <<-HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@ -221,8 +235,8 @@ when 'REFERENCE'
sections.shift
puts <<-HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

View file

1113
vendor/RedCloth-3.0.3/lib/redcloth.rb vendored Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,12 +1,20 @@
#!/usr/bin/env ruby
require 'redcloth'
require 'lib/redcloth'
require 'yaml'
Dir["tests/*.yml"].each do |testfile|
YAML::load_documents( File.open( testfile ) ) do |doc|
if doc['in'] and doc['out']
html = RedCloth.new( doc['in'] ).to_html
red = RedCloth.new( doc['in'] )
html = if testfile =~ /markdown/
red.to_html( :markdown )
else
red.to_html
end
puts "---"
html.gsub!( /\n+/, "\n" )
doc['out'].gsub!( /\n+/, "\n" )
if html == doc['out']
puts "success: true"
else

View file

@ -24,6 +24,7 @@ in: |-
out: |-
<p>Testing nested pre tags&#8230;</p>
<pre>
<code>
Good code here.
@ -64,3 +65,41 @@ out: '<p><strong>this <span>test</span> is strong</strong></p>'
---
in: <pre class="code"> __inline__</pre>
out: <pre class="code"> __inline__</pre>
---
in: |-
* @foo@
* @bar@
* and @x@ is also.
out: "<ul>\n\t<li><code>foo</code></li>\n\t\t<li><code>bar</code></li>\n\t\t<li>and <code>x</code> is also.</li>\n\t</ul>"
---
in: |-
<pre class="code"> <hello> </pre>
<pre class="code"> <hello> </pre>
out: |-
<pre class="code"> &lt;hello&gt; </pre>
<pre class="code"> &lt;hello&gt; </pre>
---
in: |
Test of Markdown-style indented code.
a = [1, 2, 3]
a.each do |x|
puts "test number", x,
"and more!"
end
Paragraph 2.
Paragraph 3.
out: |-
<p>Test of Markdown-style indented code.</p>
<pre><code>a = [1, 2, 3]
a.each do |x|
puts "test number", x,
"and more!"
end</code></pre>
<p>Paragraph 2.</p>
<p>Paragraph 3.</p>

View file

@ -27,145 +27,145 @@ in: This is not an image!!!
out: <p>This is not an image!!!</p>
---
in: This is an !http://example.com/i/image.jpg!:#1
out: <p>This is an <a href="#1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="#1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:#a
out: <p>This is an <a href="#a"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="#a"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:#a1
out: <p>This is an <a href="#a1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="#a1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:#a10
out: <p>This is an <a href="#a10"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="#a10"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:index.html
out: <p>This is an <a href="index.html"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="index.html"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:index.html#1
out: <p>This is an <a href="index.html#1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="index.html#1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:index.html#a1
out: <p>This is an <a href="index.html#a1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="index.html#a1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:index.html#a10
out: <p>This is an <a href="index.html#a10"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="index.html#a10"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:index.html?foo=bar
out: <p>This is an <a href="index.html?foo=bar"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="index.html?foo=bar"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:index.html?foo=bar#1
out: <p>This is an <a href="index.html?foo=bar#1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="index.html?foo=bar#1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:index.html?foo=bar#a
out: <p>This is an <a href="index.html?foo=bar#a"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="index.html?foo=bar#a"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:index.html?foo=bar#a1
out: <p>This is an <a href="index.html?foo=bar#a1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="index.html?foo=bar#a1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:index.html?foo=bar#a10
out: <p>This is an <a href="index.html?foo=bar#a10"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="index.html?foo=bar#a10"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/
out: <p>This is an <a href="http://example.com/"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/#1
out: <p>This is an <a href="http://example.com/#1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/#1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/#a
out: <p>This is an <a href="http://example.com/#a"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/#a"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/#a1
out: <p>This is an <a href="http://example.com/#a1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/#a1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/#a10
out: <p>This is an <a href="http://example.com/#a10"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/#a10"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html
out: <p>This is an <a href="http://example.com/index.html"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html#1
out: <p>This is an <a href="http://example.com/index.html#1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html#1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html#a
out: <p>This is an <a href="http://example.com/index.html#a"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html#a"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html#a1
out: <p>This is an <a href="http://example.com/index.html#a1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html#a1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html#a10
out: <p>This is an <a href="http://example.com/index.html#a10"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html#a10"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar
out: <p>This is an <a href="http://example.com/index.html?foo=bar"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar#1
out: <p>This is an <a href="http://example.com/index.html?foo=bar#1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar#1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar#a
out: <p>This is an <a href="http://example.com/index.html?foo=bar#a"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar#a"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar#a1
out: <p>This is an <a href="http://example.com/index.html?foo=bar#a1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar#a1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar#a10
out: <p>This is an <a href="http://example.com/index.html?foo=bar#a10"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar#a10"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#1
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a1
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a1"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a10
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a10"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a></p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a10"><img src="http://example.com/i/image.jpg" alt="" /></a></p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b.
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>.</p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b"><img src="http://example.com/i/image.jpg" alt="" /></a>.</p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#1.
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>.</p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#1"><img src="http://example.com/i/image.jpg" alt="" /></a>.</p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a.
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>.</p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a"><img src="http://example.com/i/image.jpg" alt="" /></a>.</p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a1.
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>.</p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a1"><img src="http://example.com/i/image.jpg" alt="" /></a>.</p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a10.
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a10"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>.</p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a10"><img src="http://example.com/i/image.jpg" alt="" /></a>.</p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b, but this is not.
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>, but this is not.</p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b"><img src="http://example.com/i/image.jpg" alt="" /></a>, but this is not.</p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#1, but this is not.
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>, but this is not.</p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#1"><img src="http://example.com/i/image.jpg" alt="" /></a>, but this is not.</p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a, but this is not.
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>, but this is not.</p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a"><img src="http://example.com/i/image.jpg" alt="" /></a>, but this is not.</p>
---
in: This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a1, but this is not.
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>, but this is not.</p>
out: <p>This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a1"><img src="http://example.com/i/image.jpg" alt="" /></a>, but this is not.</p>
---
in: (This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a10) This is not.
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a10"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>) This is not.</p>
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a10"><img src="http://example.com/i/image.jpg" alt="" /></a>) This is not.</p>
---
in: (This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b) This is not.
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>) This is not.</p>
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b"><img src="http://example.com/i/image.jpg" alt="" /></a>) This is not.</p>
---
in: (This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#1) This is not.
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>) This is not.</p>
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#1"><img src="http://example.com/i/image.jpg" alt="" /></a>) This is not.</p>
---
in: (This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a) This is not.
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>) This is not.</p>
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a"><img src="http://example.com/i/image.jpg" alt="" /></a>) This is not.</p>
---
in: (This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a1) This is not.
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a1"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>) This is not.</p>
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a1"><img src="http://example.com/i/image.jpg" alt="" /></a>) This is not.</p>
---
in: (This is an !http://example.com/i/image.jpg!:http://example.com/index.html?foo=bar&a=b#a10) This is not.
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a10"><img src="http://example.com/i/image.jpg" alt="" border="0" /></a>) This is not.</p>
out: <p>(This is an <a href="http://example.com/index.html?foo=bar&#38;a=b#a10"><img src="http://example.com/i/image.jpg" alt="" /></a>) This is not.</p>

View file

@ -18,17 +18,19 @@ out: '<p><span style="color:red;">nested span because of <span><span class="newW
---
in: |-
h2. Version History
* "Version
* "Version
0.0":http://www.threewordslong.com/render-0-8-9b.patch - Early version using MD5 hashes.
* "Version
* "Version
0.1":http://www.threewordslong.com/chunk-0-1.patch.gz - First cut of new system. Much cleaner.
* "Version 0.2":http://www.threewordslong.com/chunk-0-2.patch.gz - Fixed problem with "authors" page and some tests.
out: |-
<h2>Version History</h2>
<ul>
<li><a href="http://www.threewordslong.com/render-0-8-9b.patch">Version <br />
<li><a href="http://www.threewordslong.com/render-0-8-9b.patch">Version
0.0</a> &#8211; Early version using <span class="caps">MD5</span> hashes.</li>
<li><a href="http://www.threewordslong.com/chunk-0-1.patch.gz">Version <br />
<li><a href="http://www.threewordslong.com/chunk-0-1.patch.gz">Version
0.1</a> &#8211; First cut of new system. Much cleaner.</li>
<li><a href="http://www.threewordslong.com/chunk-0-2.patch.gz">Version 0.2</a> &#8211; Fixed problem with &#8220;authors&#8221; page and some tests.</li>
</ul>

View file

@ -150,3 +150,6 @@ out: <p>Go to <a href="http://www.dreammoods.com/cgibin/cutecast/cutecast.pl?for
---
in: '* "rubylang":http://www.ruby-lang.org/en/'
out: "<ul>\n\t<li><a href=\"http://www.ruby-lang.org/en/\">rubylang</a></li>\n\t</ul>"
---
in: 'The ION coding style document found at "IONCodingStyleGuide.doc":http://perforce:8081/@md=d&cd=//&c=82E@//depot/systest/system/main/pub/doc/IONCodingStyleGuide.doc?ac=22 codifies a couple of rules to ensure reasonably consistent code and documentation of libraries in ION. Test text'
out: <p>The <span class="caps">ION</span> coding style document found at <a href="http://perforce:8081/@md=d&#38;cd=//&#38;c=82E@//depot/systest/system/main/pub/doc/IONCodingStyleGuide.doc?ac=22">IONCodingStyleGuide.doc</a> codifies a couple of rules to ensure reasonably consistent code and documentation of libraries in <span class="caps">ION</span>. Test text</p>

View file

@ -24,11 +24,10 @@ in: |-
p. end
out: |-
<p>start</p>
<ul>
<li>one<br />
<li>one
and one</li>
<li>two<br />
<li>two
and two</li>
<li>three</li>
</ul>
@ -46,13 +45,11 @@ in: |-
yeah number
#* bullet
*** okay
****# what
out: |-
<p>Funky:</p>
<ul>
<li>Testing
<ol>
@ -62,13 +59,12 @@ out: |-
</ul>
</li>
<li>number</li>
<li>number<br />
<li>number
yeah number</li>
<ul>
<li>bullet
<ul>
<li>okay
<ol>
<li>what</li>
</ul></li>

218
vendor/RedCloth-3.0.3/tests/markdown.yml vendored Normal file
View file

@ -0,0 +1,218 @@
in: |
This is a regular paragraph.
<table>
<tr>
<td>Foo</td>
</tr>
</table>
This is another regular paragraph.
out: |-
<p>This is a regular paragraph.</p>
<table>
<tr>
<td>Foo</td>
</tr>
</table>
<p>This is another regular paragraph.</p>
---
in: '"Larry Bird":http://images.google.com/images?num=30&q=larry+bird'
out: '<p>"Larry Bird":http://images.google.com/images?num=30&#38;q=larry+bird</p>'
---
in: '&copy;'
out: <p>&copy;</p>
---
in: AT&T
out: <p>AT&#38;T</p>
# We don't do this.
# ---
# in: 4 < 5
# out: 4 &lt; 5
---
in: |
This is an H1
=============
This is an H2
-------------
out: |-
<h1>This is an H1</h1>
<h2>This is an H2</h2>
---
in: |
# This is an H1
## This is an H2
###### This is an H6
out: |-
<h1>This is an H1</h1>
<h2>This is an H2</h2>
<h6>This is an H6</h6>
---
in: |
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
> consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
> Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
>
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
> id sem consectetuer libero luctus adipiscing.
out: |-
<blockquote>
<p>This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.</p>
<p>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
id sem consectetuer libero luctus adipiscing.</p>
</blockquote>
---
in: |
> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
>
> Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
id sem consectetuer libero luctus adipiscing.
out: |-
<blockquote>
<p>This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.</p>
<p>Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
id sem consectetuer libero luctus adipiscing.</p>
</blockquote>
---
in: |
> This is the first level of quoting.
>
> > This is nested blockquote.
>
> Back to the first level.
out: |-
<blockquote>
<p>This is the first level of quoting.</p>
<blockquote>
<p>This is nested blockquote.</p>
</blockquote>
<p>Back to the first level.</p>
</blockquote>
---
in: |
> ## This is a header.
>
> 1. This is the first list item.
> 2. This is the second list item.
>
> Here's some example code:
>
> return shell_exec("echo $input | $markdown_script");
out: |-
<blockquote>
<h2>This is a header.</h2>
<p>1. This is the first list item.
2. This is the second list item.</p>
<p>Here's some example code:</p>
<pre><code>return shell_exec("echo $input | $markdown_script");</code></pre>
</blockquote>
---
in: |
* * *
***
*****
- - -
---------------------------------------
_ _ _
out: |-
<hr />
<hr />
<hr />
<hr />
<hr />
<hr />
---
in: |
This is [an example](http://example.com/ "Title") inline link.
[This link](http://example.net/) has no title attribute.
out: |-
<p>This is <a href="http://example.com/" title="Title">an example</a> inline link.</p>
<p><a href="http://example.net/">This link</a> has no title attribute.</p>
---
in: See my [About](/about/) page for details.
out: <p>See my <a href="/about/">About</a> page for details.</p>
---
in: |
This is [an example][id] reference-style link.
This is [an example] [id] reference-style link.
[id]: http://example.com/ "Optional Title Here"
out: |-
<p>This is <a href="http://example.com/" title="Optional Title Here">an example</a> reference-style link.</p>
<p>This is <a href="http://example.com/" title="Optional Title Here">an example</a> reference-style link.</p>
---
in: |
[Google][]
[Google]: http://google.com/
out: <p><a href="http://google.com/">Google</a></p>
---
in: |
Visit [Daring Fireball][] for more information.
[Daring Fireball]: http://daringfireball.net/
out: <p>Visit <a href="http://daringfireball.net/">Daring Fireball</a> for more information.</p>
---
in: |
I get 10 times more traffic from [Google] [1] than from
[Yahoo] [2] or [MSN] [3].
[1]: http://google.com/ "Google"
[2]: http://search.yahoo.com/ "Yahoo Search"
[3]: http://search.msn.com/ "MSN Search"
out: |-
<p>I get 10 times more traffic from <a href="http://google.com/" title="Google">Google</a> than from
<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
---
in: |
I get 10 times more traffic from [Google][] than from
[Yahoo][] or [MSN][].
[google]: http://google.com/ "Google"
[yahoo]: http://search.yahoo.com/ "Yahoo Search"
[msn]: http://search.msn.com/ "MSN Search"
out: |-
<p>I get 10 times more traffic from <a href="http://google.com/" title="Google">Google</a> than from
<a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>

View file

@ -0,0 +1,64 @@
--- # Tests from the (Poignant Guide)
in: >
h3. False
!<i/blix-neg.gif(Shape of a cat.)!
_The cat Trady Blix. Frozen in emptiness. Immaculate whiskers rigid. Placid
eyes of lake. Tail of warm icicle. Sponsored by a Very Powerful Pause Button._
The darkness surrounding Blix can be called *negative space*. Hang on to that phrase.
Let it suggest that the emptiness has a negative connotation. In a similar way,
@nil@ has a slightly sour note that it whistles.
Generally speaking, everything in Ruby has a positive charge to it. This spark
flows through strings, numbers, regexps, all of it. Only two keywords wear a
shady cloak: @nil@ and @false@ draggin us down.
You can test that charge with an @if@ keyword. It looks very much like the
@do@ blocks we saw in the last chapter, in that both end with an @end@.
<pre>
if plastic_cup
print "Plastic cup is on the up 'n' up!"
end
</pre>
If @plastic_cup@ contains either @nil@ or @false@, you won't see anything print
to the screen. They're not on the @if@ guest list. So @if@ isn't going to run
any of the code it's protecting.
But @nil@ and @false@ need not walk away in shame. They may be of questionable
character, but @unless@ runs a smaller establishment that caters to the bedraggled.
The @unless@ keyword has a policy of only allowing those with a negative charge in.
Who are: @nil@ and @false@.
<pre>
unless plastic_cup
print "Plastic cup is on the down low."
end
</pre>
You can also use @if@ and @unless@ at the end of a single line of code, if that's
all that is being protected.
<pre>
print "Yeah, plastic cup is up again!" if plastic_cup
print "Hardly. It's down." unless plastic_cup
</pre>
Now that you've met @false@, I'm sure you can see what's on next.
out: "<h3>False</h3>\n\n\t<p style=\"float:left\"><img src=\"i/blix-neg.gif\" title=\"Shape of a cat.\" alt=\"Shape of a cat.\" /></p>\n\n\t<p><em>The cat Trady Blix. Frozen in emptiness. Immaculate whiskers rigid. Placid eyes of lake. Tail of warm icicle. Sponsored by a Very Powerful Pause Button.</em></p>\n\n\t<p>The darkness surrounding Blix can be called <strong>negative space</strong>. Hang on to that phrase. Let it suggest that the emptiness has a negative connotation. In a similar way, <code>nil</code> has a slightly sour note that it whistles.</p>\n\n\t<p>Generally speaking, everything in Ruby has a positive charge to it. This spark flows through strings, numbers, regexps, all of it. Only two keywords wear a shady cloak: <code>nil</code> and <code>false</code> draggin us down.</p>\n\n\t<p>You can test that charge with an <code>if</code> keyword. It looks very much like the <code>do</code> blocks we saw in the last chapter, in that both end with an <code>end</code>.</p>\n\n\n<pre>\n if plastic_cup\n print \"Plastic cup is on the up 'n' up!\" \n end\n</pre>\n\t<p>If <code>plastic_cup</code> contains either <code>nil</code> or <code>false</code>, you won&#8217;t see anything print to the screen. They&#8217;re not on the <code>if</code> guest list. So <code>if</code> isn&#8217;t going to run any of the code it&#8217;s protecting.</p>\n\n\t<p>But <code>nil</code> and <code>false</code> need not walk away in shame. They may be of questionable character, but <code>unless</code> runs a smaller establishment that caters to the bedraggled. The <code>unless</code> keyword has a policy of only allowing those with a negative charge in. Who are: <code>nil</code> and <code>false</code>.</p>\n\n\n<pre>\n unless plastic_cup\n print \"Plastic cup is on the down low.\" \n end\n</pre>\n\t<p>You can also use <code>if</code> and <code>unless</code> at the end of a single line of code, if that&#8217;s all that is being protected.</p>\n\n\n<pre>\n print \"Yeah, plastic cup is up again!\" if plastic_cup\n print \"Hardly. It's down.\" unless plastic_cup\n</pre>\n\t<p>Now that you&#8217;ve met <code>false</code>, I&#8217;m sure you can see what&#8217;s on next.</p>"

198
vendor/RedCloth-3.0.3/tests/table.yml vendored Normal file
View file

@ -0,0 +1,198 @@
in: |
{background:#ddd}. |S|Target|Complete|App|Milestone|
|!/i/g.gif!|11/18/04|11/18/04|070|XML spec complete|
|!/i/g.gif!|11/29/04|11/29/04|011|XML spec complete (KH is on schedule)|
|!/i/g.gif!|11/29/04|11/29/04|051|XML spec complete (KH is on schedule)|
|!/i/g.gif!|11/29/04|11/29/04|081|XML spec complete (KH is on schedule)|
|!/i/g.gif!|11/19/04|11/22/04|070|Preprocessor complete|
|!/i/g.gif!|11/22/04|11/22/04|070|Dialog pass 1 builds an index file|
|!/i/g.gif!|11/24/04|11/24/04|070|Dialog pass 2 98% complete|
|!/i/g.gif!|11/30/04|11/30/04|070|Feature complete. Passes end-to-end smoke test.|
|!/i/g.gif!|11/30/04|11/30/04|011|Preprocessor updates complete|
|!/i/g.gif!|11/30/04|11/30/04|051|Preprocessor updates complete|
|!/i/g.gif!|11/30/04|11/29/04|081|Preprocessor updates complete|
|!/i/w.gif!|12/02/04|.|011|Dialog pass 1 and 2 complete (98+%)|
|!/i/w.gif!|12/02/04|.|051|Dialog pass 1 and 2 complete (98+%)|
|!/i/w.gif!|12/02/04|.|081|Dialog pass 1 and 2 complete (98+%)|
|!/i/w.gif!|12/03/04|.|011|Feature complete|
|!/i/w.gif!|12/03/04|.|051|Feature complete|
|!/i/w.gif!|12/03/04|.|081|Feature complete|
|!/i/w.gif!|12/10/04|.|011|Deployed to Napa test workstation. Passes smoke test.|
|!/i/w.gif!|12/10/04|.|051|Deployed to Napa test workstation. Passes smoke test.|
|!/i/w.gif!|12/10/04|.|081|Deployed to Napa test workstation. Passes smoke test.|
|!/i/w.gif!|12/10/04|.|070|Deployed to Napa test workstation. Passes smoke test.|
|!/i/w.gif!|12/17/04|.|011|System testing complete. Begin testing with live customer data.|
|!/i/w.gif!|12/17/04|.|051|System testing complete. Begin testing with live customer data.|
|!/i/w.gif!|12/17/04|.|081|System testing complete. Begin testing with live customer data.|
|!/i/w.gif!|12/17/04|.|070|System testing complete. Begin testing with live customer data.|
out: |-
<table>
<tr style="background:#ddd;">
<td>S</td>
<td>Target</td>
<td>Complete</td>
<td>App</td>
<td>Milestone</td>
</tr>
<tr>
<td><img src="/i/g.gif" alt="" /></td>
<td>11/18/04</td>
<td>11/18/04</td>
<td>070</td>
<td>XML spec complete</td>
</tr>
<tr>
<td><img src="/i/g.gif" alt="" /></td>
<td>11/29/04</td>
<td>11/29/04</td>
<td>011</td>
<td>XML spec complete (KH is on schedule)</td>
</tr>
<tr>
<td><img src="/i/g.gif" alt="" /></td>
<td>11/29/04</td>
<td>11/29/04</td>
<td>051</td>
<td>XML spec complete (KH is on schedule)</td>
</tr>
<tr>
<td><img src="/i/g.gif" alt="" /></td>
<td>11/29/04</td>
<td>11/29/04</td>
<td>081</td>
<td>XML spec complete (KH is on schedule)</td>
</tr>
<tr>
<td><img src="/i/g.gif" alt="" /></td>
<td>11/19/04</td>
<td>11/22/04</td>
<td>070</td>
<td>Preprocessor complete</td>
</tr>
<tr>
<td><img src="/i/g.gif" alt="" /></td>
<td>11/22/04</td>
<td>11/22/04</td>
<td>070</td>
<td>Dialog pass 1 builds an index file</td>
</tr>
<tr>
<td><img src="/i/g.gif" alt="" /></td>
<td>11/24/04</td>
<td>11/24/04</td>
<td>070</td>
<td>Dialog pass 2 98% complete</td>
</tr>
<tr>
<td><img src="/i/g.gif" alt="" /></td>
<td>11/30/04</td>
<td>11/30/04</td>
<td>070</td>
<td>Feature complete. Passes end-to-end smoke test.</td>
</tr>
<tr>
<td><img src="/i/g.gif" alt="" /></td>
<td>11/30/04</td>
<td>11/30/04</td>
<td>011</td>
<td>Preprocessor updates complete</td>
</tr>
<tr>
<td><img src="/i/g.gif" alt="" /></td>
<td>11/30/04</td>
<td>11/30/04</td>
<td>051</td>
<td>Preprocessor updates complete</td>
</tr>
<tr>
<td><img src="/i/g.gif" alt="" /></td>
<td>11/30/04</td>
<td>11/29/04</td>
<td>081</td>
<td>Preprocessor updates complete</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/02/04</td>
<td>011</td>
<td>Dialog pass 1 and 2 complete (98+%)</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/02/04</td>
<td>051</td>
<td>Dialog pass 1 and 2 complete (98+%)</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/02/04</td>
<td>081</td>
<td>Dialog pass 1 and 2 complete (98+%)</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/03/04</td>
<td>011</td>
<td>Feature complete</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/03/04</td>
<td>051</td>
<td>Feature complete</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/03/04</td>
<td>081</td>
<td>Feature complete</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/10/04</td>
<td>011</td>
<td>Deployed to Napa test workstation. Passes smoke test.</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/10/04</td>
<td>051</td>
<td>Deployed to Napa test workstation. Passes smoke test.</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/10/04</td>
<td>081</td>
<td>Deployed to Napa test workstation. Passes smoke test.</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/10/04</td>
<td>070</td>
<td>Deployed to Napa test workstation. Passes smoke test.</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/17/04</td>
<td>011</td>
<td>System testing complete. Begin testing with live customer data.</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/17/04</td>
<td>051</td>
<td>System testing complete. Begin testing with live customer data.</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/17/04</td>
<td>081</td>
<td>System testing complete. Begin testing with live customer data.</td>
</tr>
<tr>
<td><img src="/i/w.gif" alt="" /></td>
<td>12/17/04</td>
<td>070</td>
<td>System testing complete. Begin testing with live customer data.</td>
</tr>
</table>

View file

@ -114,7 +114,7 @@ in: h3=. centered header
out: <h3 style="text-align:center;">centered header</h3>
---
in: '!>/image.gif! right-aligned image'
out: <p><img src="/image.gif" align="right" alt="" /> right-aligned image</p>
out: <p style="float:right"><img src="/image.gif" alt="" /> right-aligned image</p>
---
in: p[no]{color:red}. A Norse of a different colour.
out: <p style="color:red;" lang="no">A Norse of a different colour.</p>
@ -255,7 +255,7 @@ in: |-
# Yes they do
# But you knew that
Some more text of dubious character. Here is a noisome string of CAPITAL letters. Here is something we want to _emphasize_.
Some more text of dubious character. Here is a noisome string of CAPITAL letters. Here is something we want to _emphasize_.
That was a linebreak. And something to indicate *strength*. Of course I could use <em>my own HTML tags</em> if I <strong>felt</strong> like it.
h3. Coding
@ -287,13 +287,12 @@ out: |-
<h3>This is a subhead</h3>
<p style="color:red;">This is some text of dubious character. Isn&#8217;t the use of &#8220;quotes&#8221; just lazy writing&#8212;and theft of &#8216;intellectual property&#8217; besides? I think the time has come to see a block quote.</p>
<blockquote>
<p lang="fr">This is a block quote. I&#8217;ll admit it&#8217;s not the most exciting block quote ever devised.</p>
</blockquote>
<p>Simple list:</p>
<ol style="color:blue;">
<li>one</li>
<li>two</li>
@ -301,7 +300,6 @@ out: |-
</ol>
<p>Multi-level list:</p>
<ol>
<li>one
<ol>
@ -320,7 +318,6 @@ out: |-
</ol>
<p>Mixed list:</p>
<ul>
<li>Point one</li>
<li>Point two
@ -340,7 +337,7 @@ out: |-
<p>Well, that went well. How about we insert an <a href="/" title="watch out">old-fashioned hypertext link</a>? Will the quote marks in the tags get messed up? No!</p>
<p><a href="http://www.textism.com" title="optional title">This is a link</a></p>
<table style="border:1px solid black;">
<tr>
<th>this</th>
@ -361,23 +358,25 @@ out: |-
</tr>
</table>
<p>An image:</p>
<p><img src="/common/textist.gif" title="optional alt text" alt="optional alt text" /></p>
<ol>
<li>Librarians rule</li>
<li>Yes they do</li>
<li>But you knew that</li>
</ol>
<p>Some more text of dubious character. Here is a noisome string of <span class="caps">CAPITAL</span> letters. Here is something we want to <em>emphasize</em>. <br />
<p>Some more text of dubious character. Here is a noisome string of <span class="caps">CAPITAL</span> letters. Here is something we want to <em>emphasize</em>.
That was a linebreak. And something to indicate <strong>strength</strong>. Of course I could use <em>my own <span class="caps">HTML</span> tags</em> if I <strong>felt</strong> like it.</p>
<h3>Coding</h3>
<p>This <code>is some code, "isn't it"</code>. Watch those quote marks! Now for some preformatted text:</p>
<pre>
<code>
$text = str_replace("&lt;p&gt;%::%&lt;/p&gt;","",$text);
@ -386,11 +385,9 @@ out: |-
</code>
</pre>
<p>This isn&#8217;t code.</p>
<p>So you see, my friends:</p>
<ul>
<li>The time is now</li>
<li>The time is not later</li>
@ -398,7 +395,3 @@ out: |-
<li>We must act</li>
</ul>

View file

@ -1,34 +0,0 @@
require 'rubygems'
spec = Gem::Specification.new do |s|
## Basic Information
s.name = 'RedCloth'
s.version = "2.0.11"
s.platform = Gem::Platform::RUBY
s.summary = <<-TXT
RedCloth is a module for using Textile in Ruby. Textile is a text format.
A very simple text format. Another stab at making readable text that can be converted to HTML.
TXT
## Include tests, libs, docs
s.files = ['tests/**/*', 'lib/**/*', 'docs/**/*', 'run-tests.rb'].collect do |dirglob|
Dir.glob(dirglob)
end.flatten.delete_if {|item| item.include?("CVS")}
## Load-time details
s.require_path = 'lib'
s.autorequire = 'redcloth'
## Author and project details
s.author = "Why the Lucky Stiff"
s.email = "why@ruby-lang.org"
s.rubyforge_project = "redcloth"
s.homepage = "http://www.whytheluckystiff.net/ruby/redcloth/"
end
if $0==__FILE__
Gem::Builder.new(spec).build
end

View file

@ -1,894 +0,0 @@
# vim:ts=4:sw=4:
# = RedCloth - Textile for Ruby
#
# Homepage:: http://whytheluckystiff.net/ruby/redcloth/
# Author:: why the lucky stiff (http://whytheluckystiff.net/)
# Copyright:: (c) 2004 why the lucky stiff (and his puppet organizations.)
# License:: BSD
#
# (see http://hobix.com/textile/ for a Textile Reference.)
#
# Based on (and also inspired by) both:
#
# PyTextile: http://diveintomark.org/projects/textile/textile.py.txt
# Textism for PHP: http://www.textism.com/tools/textile/
#
#
class String
#
# Flexible HTML escaping
#
def htmlesc!( mode )
gsub!( '&', '&amp;' )
gsub!( '"', '&quot;' ) if mode != :NoQuotes
gsub!( "'", '&#039;' ) if mode == :Quotes
gsub!('<', '&lt;')
gsub!('>', '&gt;')
end
end
# = RedCloth
#
# RedCloth is a Ruby library for converting Textile
# into HTML.
#
# == What is Textile?
#
# Textile is a simple formatting style for text
# documents, loosely based on some HTML conventions.
#
# == Sample Textile Text
#
# h2. This is a title
#
# h3. This is a subhead
#
# This is a bit of paragraph.
#
# bq. This is a blockquote.
#
# = Writing Textile
#
# A Textile document consists of paragraphs. Paragraphs
# can be specially formatted by adding a small instruction
# to the beginning of the paragraph.
#
# h[n]. Header of size [n].
# bq. Blockquote.
# # Numeric list.
# * Bulleted list.
#
# == Quick Phrase Modifiers
#
# Quick phrase modifiers are also included, to allow formatting
# of small portions of text within a paragraph.
#
# \_emphasis\_
# \_\_italicized\_\_
# \*strong\*
# \*\*bold\*\*
# ??citation??
# -deleted text-
# +inserted text+
# ^superscript^
# ~subscript~
# @code@
# %(classname)span%
#
# ==notextile== (leave text alone)
#
# == Links
#
# To make a hypertext link, put the link text in "quotation
# marks" followed immediately by a colon and the URL of the link.
#
# Optional: text in (parentheses) following the link text,
# but before the closing quotation mark, will become a Title
# attribute for the link, visible as a tool tip when a cursor is above it.
#
# Example:
#
# "This is a link (This is a title) ":http://www.textism.com
#
# Will become:
#
# <a href="http://www.textism.com" title="This is a title">This is a link</a>
#
# == Images
#
# To insert an image, put the URL for the image inside exclamation marks.
#
# Optional: text that immediately follows the URL in (parentheses) will
# be used as the Alt text for the image. Images on the web should always
# have descriptive Alt text for the benefit of readers using non-graphical
# browsers.
#
# Optional: place a colon followed by a URL immediately after the
# closing ! to make the image into a link.
#
# Example:
#
# !http://www.textism.com/common/textist.gif(Textist)!
#
# Will become:
#
# <img src="http://www.textism.com/common/textist.gif" alt="Textist" />
#
# With a link:
#
# !/common/textist.gif(Textist)!:http://textism.com
#
# Will become:
#
# <a href="http://textism.com"><img src="/common/textist.gif" alt="Textist" /></a>
#
# == Defining Acronyms
#
# HTML allows authors to define acronyms via the tag. The definition appears as a
# tool tip when a cursor hovers over the acronym. A crucial aid to clear writing,
# this should be used at least once for each acronym in documents where they appear.
#
# To quickly define an acronym in Textile, place the full text in (parentheses)
# immediately following the acronym.
#
# Example:
#
# ACLU(American Civil Liberties Union)
#
# Will become:
#
# <acronym title="American Civil Liberties Union">ACLU</acronym>
#
# == Adding Tables
#
# In Textile, simple tables can be added by seperating each column by
# a pipe.
#
# |a|simple|table|row|
# |And|Another|table|row|
#
# Attributes are defined by style definitions in parentheses.
#
# table(border:1px solid black).
# (background:#ddd;color:red). |{}| | | |
#
# == Using RedCloth
#
# RedCloth is simply an extension of the String class, which can handle
# Textile formatting. Use it like a String and output HTML with its
# RedCloth#to_html method.
#
# doc = RedCloth.new "
#
# h2. Test document
#
# Just a simple test."
#
# puts doc.to_html
class RedCloth < String
VERSION = '2.0.11'
#
# Two accessor for setting security restrictions.
#
# This is a nice thing if you're using RedCloth for
# formatting in public places (e.g. Wikis) where you
# don't want users to abuse HTML for bad things.
#
# If +:filter_html+ is set, HTML which wasn't
# created by the Textile processor will be escaped.
#
# If +:filter_styles+ is set, it will also disable
# the style markup specifier. ('{color: red}')
#
attr_accessor :filter_html, :filter_styles
#
# Accessor for toggling line folding.
#
# If +:fold_lines+ is set, single newlines will
# not be converted to break tags.
#
attr_accessor :fold_lines
#
# Returns a new RedCloth object, based on _string_ and
# enforcing all the included _restrictions_.
#
# r = RedCloth.new( "h1. A <b>bold</b> man", [:filter_html] )
# r.to_html
# #=>"<h1>A &lt;b&gt;bold&lt;/b&gt; man</h1>"
#
def initialize( string, restrictions = [] )
@lite = false
restrictions.each { |r| method( "#{ r }=" ).call( true ) }
super( string )
end
#
# Generates HTML from the Textile contents. The _lite_ flag
# may be used to honor only inline markup, ignoring lists, tables,
# and block formatting.
#
# r = RedCloth.new( "And then? She *fell*!" )
# r.to_html( true )
# #=>"And then? She <strong>fell</strong>!"
#
def to_html( lite = nil )
@lite = lite unless lite.nil?
# make our working copy
text = self.dup
@urlrefs = {}
@shelf = []
incoming_entities text
## encode_entities text
## fix_entities text
clean_white_space text
get_refs text
no_textile text
inline text
unless @lite
fold text
block text
end
retrieve text
text.gsub!( /<\/?notextile>/, '' )
text.gsub!( /x%x%/, '&#38;' )
text.gsub!( /<br \/>/, "<br />\n" )
text.strip!
text
end
#######
private
#######
#
# Mapping of 8-bit ASCII codes to HTML numerical entity equivalents.
# (from PyTextile)
#
TEXTILE_TAGS =
[[128, 8364], [129, 0], [130, 8218], [131, 402], [132, 8222], [133, 8230],
[134, 8224], [135, 8225], [136, 710], [137, 8240], [138, 352], [139, 8249],
[140, 338], [141, 0], [142, 0], [143, 0], [144, 0], [145, 8216], [146, 8217],
[147, 8220], [148, 8221], [149, 8226], [150, 8211], [151, 8212], [152, 732],
[153, 8482], [154, 353], [155, 8250], [156, 339], [157, 0], [158, 0], [159, 376]].
collect! do |a, b|
[a.chr, ( b.zero? and "" or "&#{ b };" )]
end
#
# Regular expressions to convert to HTML.
#
A_HLGN = /(?:(?:<>|<|>|\=|[()]+)+)/
A_VLGN = /[\-^~]/
C_CLAS = '(?:\([^)]+\))'
C_LNGE = '(?:\[[^\]]+\])'
C_STYL = '(?:\{[^}]+\})'
S_CSPN = '(?:\\\\\d+)'
S_RSPN = '(?:/\d+)'
A = "(?:#{A_HLGN}?#{A_VLGN}?|#{A_VLGN}?#{A_HLGN}?)"
S = "(?:#{S_CSPN}?#{S_RSPN}|#{S_RSPN}?#{S_CSPN}?)"
C = "(?:#{C_CLAS}?#{C_STYL}?#{C_LNGE}?|#{C_STYL}?#{C_LNGE}?#{C_CLAS}?|#{C_LNGE}?#{C_STYL}?#{C_CLAS}?)"
# PUNCT = Regexp::quote( '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' )
PUNCT = Regexp::quote( '!"#$%&\'*+,-./:;=?@\\^_`|~' )
HYPERLINK = '(\S+?)([^\w\s/;=\?]*?)(\s|$)'
GLYPHS = [
# [ /([^\s\[{(>])?\'([dmst]\b|ll\b|ve\b|\s|:|$)/, '\1&#8217;\2' ], # single closing
[ /([^\s\[{(>])\'/, '\1&#8217;' ], # single closing
[ /\'(?=\s|s\b|[#{PUNCT}])/, '&#8217;' ], # single closing
[ /\'/, '&#8216;' ], # single opening
# [ /([^\s\[{(])?"(\s|:|$)/, '\1&#8221;\2' ], # double closing
[ /([^\s\[{(>])"/, '\1&#8221;' ], # double closing
[ /"(?=\s|[#{PUNCT}])/, '&#8221;' ], # double closing
[ /"/, '&#8220;' ], # double opening
[ /\b( )?\.{3}/, '\1&#8230;' ], # ellipsis
[ /\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/, '<acronym title="\2">\1</acronym>' ], # 3+ uppercase acronym
[ /(^|[^"][>\s])([A-Z][A-Z0-9 ]{2,})([^<a-z0-9]|$)/, '\1<span class="caps">\2</span>\3' ], # 3+ uppercase caps
[ /(\.\s)?\s?--\s?/, '\1&#8212;' ], # em dash
[ /\s->\s/, ' &rarr; ' ], # en dash
[ /\s-\s/, ' &#8211; ' ], # en dash
[ /(\d+) ?x ?(\d+)/, '\1&#215;\2' ], # dimension sign
[ /\b ?[(\[]TM[\])]/i, '&#8482;' ], # trademark
[ /\b ?[(\[]R[\])]/i, '&#174;' ], # registered
[ /\b ?[(\[]C[\])]/i, '&#169;' ] # copyright
]
I_ALGN_VALS = {
'<' => 'left',
'=' => 'center',
'>' => 'right'
}
H_ALGN_VALS = {
'<' => 'left',
'=' => 'center',
'>' => 'right',
'<>' => 'justify'
}
V_ALGN_VALS = {
'^' => 'top',
'-' => 'middle',
'~' => 'bottom'
}
QTAGS = [
['**', 'b'],
['*', 'strong'],
['??', 'cite'],
['-', 'del'],
['__', 'i'],
['_', 'em'],
['%', 'span'],
['+', 'ins'],
['^', 'sup'],
['~', 'sub']
].collect do |rc, ht|
ttr = Regexp.quote(rc)
punct = PUNCT.sub( Regexp::quote(rc), '' )
re = /(^|[\s\>#{punct}{(\[])
#{ttr}
(#{C})
(?::(\S+?))?
([^\s#{ttr}]+?(?:[^\n]|\n(?!\n))*?)
([#{punct}]*?)
#{ttr}
(?=[\s\])}<#{punct}]|$)/xm
[re, ht]
end
def pgl( text )
GLYPHS.each do |re, resub|
text.gsub! re, resub
end
end
def pba( text_in, element = "" )
return '' unless text_in
style = []
text = text_in.dup
if element == 'td'
colspan = $1 if text =~ /\\(\d+)/
rowspan = $1 if text =~ /\/(\d+)/
style << "vertical-align:#{ v_align( $& ) };" if text =~ A_VLGN
end
style << "#{ $1 };" if not @filter_styles and
text.sub!( /\{([^}]*)\}/, '' )
lang = $1 if
text.sub!( /\[([^)]+?)\]/, '' )
cls = $1 if
text.sub!( /\(([^()]+?)\)/, '' )
style << "padding-left:#{ $1.length }em;" if
text.sub!( /([(]+)/, '' )
style << "padding-right:#{ $1.length }em;" if text.sub!( /([)]+)/, '' )
style << "text-align:#{ h_align( $& ) };" if text =~ A_HLGN
cls, id = $1, $2 if cls =~ /^(.*?)#(.*)$/
atts = ''
atts << " style=\"#{ style.join }\"" unless style.empty?
atts << " class=\"#{ cls }\"" unless cls.to_s.empty?
atts << " lang=\"#{ lang }\"" if lang
atts << " id=\"#{ id }\"" if id
atts << " colspan=\"#{ colspan }\"" if colspan
atts << " rowspan=\"#{ rowspan }\"" if rowspan
atts
end
TABLE_RE = /^(?:table(_?#{S}#{A}#{C})\. ?\n)?^(#{A}#{C}\.? ?\|.*?\|)(\n\n|\Z)/m
def table( text )
text.gsub!( TABLE_RE ) do |matches|
tatts, fullrow = $~[1..2]
tatts = pba( tatts, 'table' )
rows = []
fullrow.
split( /\|$/m ).
delete_if { |x| x.empty? }.
each do |row|
ratts, row = pba( $1, 'tr' ), $2 if row =~ /^(#{A}#{C}\. )(.*)/m
cells = []
row.split( '|' ).each do |cell|
ctyp = 'd'
ctyp = 'h' if cell =~ /^_/
catts = ''
catts, cell = pba( $1, 'td' ), $2 if cell =~ /^(_?#{S}#{A}#{C}\. )(.*)/
unless cell.strip.empty?
cells << "\t\t\t<t#{ ctyp }#{ catts }>#{ cell }</t#{ ctyp }>"
end
end
rows << "\t\t<tr#{ ratts }>\n#{ cells.join( "\n" ) }\n\t\t</tr>"
end
"\t<table#{ tatts }>\n#{ rows.join( "\n" ) }\n\t</table>\n\n"
end
end
LISTS_RE = /^([#*]+?#{C} .*?)$(?![^#*])/m
LISTS_CONTENT_RE = /^([#*]+)(#{A}#{C}) (.*)$/m
def lists( text )
text.gsub!( LISTS_RE ) do |match|
lines = match.split( /\n/ )
last_line = -1
depth = []
lines.each_with_index do |line, line_id|
if line =~ LISTS_CONTENT_RE
tl,atts,content = $~[1..3]
if depth.last
if depth.last.length > tl.length
(depth.length - 1).downto(0) do |i|
break if depth[i].length == tl.length
lines[line_id - 1] << "</li>\n\t</#{ lT( depth[i] ) }l>\n\t"
depth.pop
end
end
if depth.last.length == tl.length
lines[line_id - 1] << '</li>'
end
end
unless depth.last == tl
depth << tl
atts = pba( atts )
lines[line_id] = "\t<#{ lT(tl) }l#{ atts }>\n\t<li>#{ content }"
else
lines[line_id] = "\t\t<li>#{ content }"
end
last_line = line_id
elsif line =~ /^\s+\S/
last_line = line_id
elsif line_id - last_line < 2 and line =~ /^\S/
last_line = line_id
end
if line_id - last_line > 1 or line_id == lines.length - 1
depth.delete_if do |v|
lines[last_line] << "</li>\n\t</#{ lT( v ) }l>"
end
end
end
lines.join( "\n" )
end
end
def lT( text )
text =~ /\#$/ ? 'o' : 'u'
end
def fold( text )
text.gsub!( /(.+)\n(?![#*\s|])/, "\\1#{ @fold_lines ? ' ' : '<br />' }" )
end
BLOCK_RE = ['bq','h[1-6]','fn\d+','p'].collect!{|stag|
[stag,
/^(#{ stag })(#{A}#{C})\.(?::(\S+))? (.*)$/]
}
def block( text )
pre = false
find = ['bq','h[1-6]','fn\d+','p']
lines = text.split( /\n/ ) + [' ']
new_text =
lines.collect do |line|
pre = true if line =~ /<(pre|notextile)[^>]*>/i
BLOCK_RE.each do |stag, ctag|
line.gsub!( ctag ) do |m|
tag,atts,cite,content = $~[1..4]
atts = pba( atts )
if tag =~ /fn(\d+)/
tag = 'p';
atts << " id=\"fn#{ $1 }\""
content = "<sup>#{ $1 }</sup> #{ content }"
end
start = "\t<#{ tag }"
tend = "</#{ tag }>"
if tag == "bq"
cite = check_refs( cite )
cite = " cite=\"#{ cite }\"" if cite
start = "\t<blockquote#{ cite }>\n\t\t<p";
tend = "</p>\n\t</blockquote>";
end
"#{ start }#{ atts }>#{ content }#{ tend }"
end unless pre
end
line.gsub!( /^(?!\t|<\/?div|<\/?pre|<\/?notextile|<\/?code|$| )(.*)/, "\t<p>\\1</p>" ) unless pre
line.gsub!( "<br />", "\n" ) if pre
pre = false if line =~ /<\/(pre|notextile)>/i
line
end.join( "\n" )
text.replace( new_text )
end
def span( text )
QTAGS.each do |ttr, ht|
text.gsub!(ttr) do |m|
start,atts,cite,content,tend = $~[1..5]
atts = pba( atts )
atts << " cite=\"#{ cite }\"" if cite
"#{ start }<#{ ht }#{ atts }>#{ content }#{ tend }</#{ ht }>"
end
end
end
LINK_RE = /
([\s\[{(]|[#{PUNCT}])? # $pre
" # start
(#{C}) # $atts
([^"]+?) # $text
\s?
(?:\(([^)]+?)\)(?="))? # $title
":
(\S+?) # $url
(\/)? # $slash
([^\w\/;]*?) # $post
(?=<|\s|$)
/x
def links( text )
text.gsub!( LINK_RE ) do |m|
pre,atts,text,title,url,slash,post = $~[1..7]
url = check_refs( url )
atts = pba( atts )
atts << " title=\"#{ title }\"" if title
atts = shelve( atts ) if atts
"#{ pre }<a href=\"#{ url }#{ slash }\"#{ atts }>#{ text }</a>#{ post }"
end
end
REFS_RE = /(^|\s)\[(.+?)\]((?:http:\/\/|javascript:|ftp:\/\/|\/)\S+?)(?=\s|$)/
def get_refs( text )
text.gsub!( REFS_RE ) do |m|
flag, url = $~[2..3]
@urlrefs[flag] = url
nil
end
end
def check_refs( text )
@urlrefs[text] || text
end
IMAGE_RE = /
\! # opening
(\<|\=|\>)? # optional alignment atts
(#{C}) # optional style,class atts
(?:\. )? # optional dot-space
([^\s(!]+?) # presume this is the src
\s? # optional space
(?:\(((?:[^\(\)]|\([^\)]+\))+?)\))? # optional title
\! # closing
(?::#{ HYPERLINK })? # optional href
/x
def image( text )
text.gsub!( IMAGE_RE ) do |m|
algn,atts,url,title,href,href_a1,href_a2 = $~[1..7]
atts = pba( atts )
atts << " align=\"#{ i_align( algn ) }\"" if algn
atts << " title=\"#{ title }\"" if title
atts << " alt=\"#{ title }\""
# size = @getimagesize($url);
# if($size) $atts.= " $size[3]";
href = check_refs( href ) if href
url = check_refs( url )
atts << " border=\"0\"" if href
out = ''
out << "<a href=\"#{ href }\">" if href
out << "<img src=\"#{ url }\"#{ atts } />"
out << "</a>#{ href_a1 }#{ href_a2 }" if href
out
end
end
CODE_RE = /
(^|[\s>#{PUNCT}{(\[]) # 1 open bracket?
@ # opening
(?:\|(\w+?)\|)? # 2 language
(\S(?:[^\n]|\n(?!\n))*?) # 3 code
@ # closing
(?=[\s\]}\)<#{PUNCT}]|$) # 4 closing bracket?
/x
def code( text )
text.gsub!( CODE_RE ) do |m|
before,lang,code,after = $~[1..4]
lang = " language=\"#{ lang }\"" if lang
"#{ before }<code#{ lang }>#{ code }</code>#{ after }"
end
end
def shelve( val )
@shelf << val
" <#{ @shelf.length }>"
end
def retrieve( text )
@shelf.each_with_index do |r, i|
text.gsub!( " <#{ i + 1 }>", r )
end
end
def incoming_entities( text )
## turn any incoming ampersands into a dummy character for now.
## This uses a negative lookahead for alphanumerics followed by a semicolon,
## implying an incoming html entity, to be skipped
text.gsub!( /&(?![#a-z0-9]+;)/i, "x%x%" )
end
def encode_entities( text )
## Convert high and low ascii to entities.
# if $-K == "UTF-8"
# encode_high( text )
# else
text.htmlesc!( :NoQuotes )
# end
end
def fix_entities( text )
## de-entify any remaining angle brackets or ampersands
text.gsub!( "&gt;", ">" )
text.gsub!( "&lt;", "<" )
text.gsub!( "&amp;", "&" )
end
def clean_white_space( text )
text.gsub!( /\r\n/, "\n" )
text.gsub!( /\t/, '' )
text.gsub!( /\n{3,}/, "\n\n" )
text.gsub!( /\n *\n/, "\n\n" )
text.gsub!( /"$/, "\" " )
end
def no_textile( text )
text.gsub!( /(^|\s)==(.*?)==(\s|$)?/,
'\1<notextile>\2</notextile>\3' )
end
def footnote_ref( text )
text.gsub!( /\b\[([0-9]+?)\](\s)?/,
'<sup><a href="#fn\1">\1</a></sup>\2' )
end
OFFTAGS = /(code|pre|kbd|notextile)/
OFFTAG_MATCH = /(?:(<\/#{ OFFTAGS }>)|(<#{ OFFTAGS }[^>]*>))(.*?)(?=<\/?#{ OFFTAGS }>|\Z)/mi
OFFTAG_OPEN = /<#{ OFFTAGS }/
OFFTAG_CLOSE = /<\/?#{ OFFTAGS }/
HASTAG_MATCH = /(<\/?\w[^\n]*?>)/m
ALLTAG_MATCH = /(<\/?\w[^\n]*?>)|.*?(?=<\/?\w[^\n]*?>|$)/m
def glyphs( text, level = 0 )
if text !~ HASTAG_MATCH
pgl text
footnote_ref text
else
codepre = 0
text.gsub!( ALLTAG_MATCH ) do |line|
## matches are off if we're between <code>, <pre> etc.
if $1
if @filter_html
line.htmlesc!( :NoQuotes )
elsif line =~ OFFTAG_OPEN
codepre += 1
elsif line =~ OFFTAG_CLOSE
codepre -= 1
codepre = 0 if codepre < 0
end
## do htmlspecial if between <code>
elsif codepre.zero?
glyphs( line, level + 1 )
else
line.htmlesc!( :NoQuotes )
end
## p [level, codepre, orig_line, line]
line
end
end
end
def rip_offtags( text )
pre_list = []
if text =~ /<.*>/
## strip and encode <pre> content
codepre, used_offtags = 0, {}
text.gsub!( OFFTAG_MATCH ) do |line|
if $3
offtag, aftertag = $4, $5
codepre += 1
used_offtags[offtag] = true
if codepre - used_offtags.length > 0
line.htmlesc!( :NoQuotes )
pre_list.last << line
line = ""
else
aftertag.htmlesc!( :NoQuotes ) if aftertag
line = "<redpre##{ pre_list.length }>"
pre_list << "#{ $3 }#{ aftertag }"
end
elsif $1 and codepre > 0
if codepre - used_offtags.length > 0
line.htmlesc!( :NoQuotes )
pre_list.last << line
line = ""
end
codepre -= 1 unless codepre.zero?
used_offtags = {} if codepre.zero?
end
line
end
end
pre_list
end
def smooth_offtags( text, pre_list )
unless pre_list.empty?
## replace <pre> content
text.gsub!( /<redpre#(\d+)>/ ) { pre_list[$1.to_i] }
end
end
def inline( text )
text.gsub!( /"\z/, "\" " )
pre_list = rip_offtags text
## apply inline markup
unless @lite
lists text
table text
end
image text
links text
code text
span text
## replace entities
glyphs text
smooth_offtags text, pre_list
end
def i_align( text )
I_ALGN_VALS[text]
end
def h_align( text )
H_ALGN_VALS[text]
end
def v_align( text )
V_ALGN_VALS[text]
end
def encode_high( text )
## mb_encode_numericentity($text, $cmap, $charset);
end
def decode_high( text )
## mb_decode_numericentity($text, $cmap, $charset);
end
def textile_popup_help( name, helpvar, windowW, windowH )
' <a target="_blank" href="http://www.textpattern.com/help/?item=' + helpvar + '" onclick="window.open(this.href, \'popupwindow\', \'width=' + windowW + ',height=' + windowH + ',scrollbars,resizable\'); return false;">' + name + '</a><br />'
end
CMAP = [
160, 255, 0, 0xffff,
402, 402, 0, 0xffff,
913, 929, 0, 0xffff,
931, 937, 0, 0xffff,
945, 969, 0, 0xffff,
977, 978, 0, 0xffff,
982, 982, 0, 0xffff,
8226, 8226, 0, 0xffff,
8230, 8230, 0, 0xffff,
8242, 8243, 0, 0xffff,
8254, 8254, 0, 0xffff,
8260, 8260, 0, 0xffff,
8465, 8465, 0, 0xffff,
8472, 8472, 0, 0xffff,
8476, 8476, 0, 0xffff,
8482, 8482, 0, 0xffff,
8501, 8501, 0, 0xffff,
8592, 8596, 0, 0xffff,
8629, 8629, 0, 0xffff,
8656, 8660, 0, 0xffff,
8704, 8704, 0, 0xffff,
8706, 8707, 0, 0xffff,
8709, 8709, 0, 0xffff,
8711, 8713, 0, 0xffff,
8715, 8715, 0, 0xffff,
8719, 8719, 0, 0xffff,
8721, 8722, 0, 0xffff,
8727, 8727, 0, 0xffff,
8730, 8730, 0, 0xffff,
8733, 8734, 0, 0xffff,
8736, 8736, 0, 0xffff,
8743, 8747, 0, 0xffff,
8756, 8756, 0, 0xffff,
8764, 8764, 0, 0xffff,
8773, 8773, 0, 0xffff,
8776, 8776, 0, 0xffff,
8800, 8801, 0, 0xffff,
8804, 8805, 0, 0xffff,
8834, 8836, 0, 0xffff,
8838, 8839, 0, 0xffff,
8853, 8853, 0, 0xffff,
8855, 8855, 0, 0xffff,
8869, 8869, 0, 0xffff,
8901, 8901, 0, 0xffff,
8968, 8971, 0, 0xffff,
9001, 9002, 0, 0xffff,
9674, 9674, 0, 0xffff,
9824, 9824, 0, 0xffff,
9827, 9827, 0, 0xffff,
9829, 9830, 0, 0xffff,
338, 339, 0, 0xffff,
352, 353, 0, 0xffff,
376, 376, 0, 0xffff,
710, 710, 0, 0xffff,
732, 732, 0, 0xffff,
8194, 8195, 0, 0xffff,
8201, 8201, 0, 0xffff,
8204, 8207, 0, 0xffff,
8211, 8212, 0, 0xffff,
8216, 8218, 0, 0xffff,
8218, 8218, 0, 0xffff,
8220, 8222, 0, 0xffff,
8224, 8225, 0, 0xffff,
8240, 8240, 0, 0xffff,
8249, 8250, 0, 0xffff,
8364, 8364, 0, 0xffff
]
end

View file

@ -1,64 +0,0 @@
--- # Tests from the (Poignant Guide)
in: >
h3. False
!<i/blix-neg.gif(Shape of a cat.)!
_The cat Trady Blix. Frozen in emptiness. Immaculate whiskers rigid. Placid
eyes of lake. Tail of warm icicle. Sponsored by a Very Powerful Pause Button._
The darkness surrounding Blix can be called *negative space*. Hang on to that phrase.
Let it suggest that the emptiness has a negative connotation. In a similar way,
@nil@ has a slightly sour note that it whistles.
Generally speaking, everything in Ruby has a positive charge to it. This spark
flows through strings, numbers, regexps, all of it. Only two keywords wear a
shady cloak: @nil@ and @false@ draggin us down.
You can test that charge with an @if@ keyword. It looks very much like the
@do@ blocks we saw in the last chapter, in that both end with an @end@.
<pre>
if plastic_cup
print "Plastic cup is on the up 'n' up!"
end
</pre>
If @plastic_cup@ contains either @nil@ or @false@, you won't see anything print
to the screen. They're not on the @if@ guest list. So @if@ isn't going to run
any of the code it's protecting.
But @nil@ and @false@ need not walk away in shame. They may be of questionable
character, but @unless@ runs a smaller establishment that caters to the bedraggled.
The @unless@ keyword has a policy of only allowing those with a negative charge in.
Who are: @nil@ and @false@.
<pre>
unless plastic_cup
print "Plastic cup is on the down low."
end
</pre>
You can also use @if@ and @unless@ at the end of a single line of code, if that's
all that is being protected.
<pre>
print "Yeah, plastic cup is up again!" if plastic_cup
print "Hardly. It's down." unless plastic_cup
</pre>
Now that you've met @false@, I'm sure you can see what's on next.
out: "<h3>False</h3>\n\n\t<p><img src=\"i/blix-neg.gif\" align=\"left\" title=\"Shape of a cat.\" alt=\"Shape of a cat.\" /></p>\n\n\t<p><em>The cat Trady Blix. Frozen in emptiness. Immaculate whiskers rigid. Placid eyes of lake. Tail of warm icicle. Sponsored by a Very Powerful Pause Button.</em></p>\n\n\t<p>The darkness surrounding Blix can be called <strong>negative space</strong>. Hang on to that phrase. Let it suggest that the emptiness has a negative connotation. In a similar way, <code>nil</code> has a slightly sour note that it whistles.</p>\n\n\t<p>Generally speaking, everything in Ruby has a positive charge to it. This spark flows through strings, numbers, regexps, all of it. Only two keywords wear a shady cloak: <code>nil</code> and <code>false</code> draggin us down.</p>\n\n\t<p>You can test that charge with an <code>if</code> keyword. It looks very much like the <code>do</code> blocks we saw in the last chapter, in that both end with an <code>end</code>.</p>\n\n<pre>\n if plastic_cup\n print \"Plastic cup is on the up 'n' up!\" \n end\n</pre>\n\n\t<p>If <code>plastic_cup</code> contains either <code>nil</code> or <code>false</code>, you won&#8217;t see anything print to the screen. They&#8217;re not on the <code>if</code> guest list. So <code>if</code> isn&#8217;t going to run any of the code it&#8217;s protecting.</p>\n\n\t<p>But <code>nil</code> and <code>false</code> need not walk away in shame. They may be of questionable character, but <code>unless</code> runs a smaller establishment that caters to the bedraggled. The <code>unless</code> keyword has a policy of only allowing those with a negative charge in. Who are: <code>nil</code> and <code>false</code>.</p>\n\n<pre>\n unless plastic_cup\n print \"Plastic cup is on the down low.\" \n end\n</pre>\n\n\t<p>You can also use <code>if</code> and <code>unless</code> at the end of a single line of code, if that&#8217;s all that is being protected.</p>\n\n<pre>\n print \"Yeah, plastic cup is up again!\" if plastic_cup\n print \"Hardly. It's down.\" unless plastic_cup\n</pre>\n\n\t<p>Now that you&#8217;ve met <code>false</code>, I&#8217;m sure you can see what&#8217;s on next.<br />\n</p>"