flavoured_markdown 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Lawrence Pit
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.markdown ADDED
@@ -0,0 +1,78 @@
1
+ Flavoured Markdown
2
+ ==================
3
+
4
+ *Websafe Markdown with some extra flavour.*
5
+
6
+ Markdown is a way to use an easy-to-read, easy-to-write plain text format that is turned into valid XHTML or HTML. See the <a href='http://daringfireball.net/projects/markdown/syntax'>Markdown Syntax</a> at Daring Fireball.
7
+
8
+ It's important to realize that Markdown by default accepts any HTML code as its source. If you use Markdown as a way for your users to enter text easily via a web interface, providing easy markup capabilities, they could potentially enter harmful code (javascripts, styles, etc.). Flavoured Markdown escapes all HTML code by default.
9
+
10
+ The extra flavors provided by Flavoured Markdown:
11
+
12
+ * Do not allow javascript, styles and HTML codes
13
+ * Except for A tags that have no on* attributes
14
+ * And except for BR tags
15
+ * HTML entities are alllowed (e.g.: &copy;, &amp;, etc.)
16
+ * URLs and emails are automatically hyperlinked. Long hyperlinks are automatically limited to 55 characters.
17
+ * Three consecutive dots are replaced by an ellipsis character
18
+ * Fancy pants mode
19
+ * Prevents paragraphs and list items from having an <a href='http://en.wikipedia.org/wiki/Widows_and_orphans'>orphan</a>.
20
+
21
+
22
+ Usage
23
+ -----
24
+
25
+ flavoured_markdown("# Hello World #\n----\n* Item A\n* Item B")
26
+
27
+
28
+ Requirements
29
+ ------------
30
+
31
+ This gem/plugin depends on the rdiscount and actionpack gems. To install, run:
32
+
33
+ $ sudo gem install rdiscount
34
+ $ sudo gem install actionpack
35
+
36
+
37
+ Installation
38
+ ------------
39
+
40
+ #### As a Gem
41
+
42
+ Use this if you prefer to use versioned releases of Flavoured Markdown.
43
+ Specify the gem dependency in your config/environment.rb file:
44
+
45
+ Rails::Initializer.run do |config|
46
+ config.gem "flavoured_markdown", :source => "http://gemcutter.org"
47
+ end
48
+
49
+ Then:
50
+
51
+ $ rake gems:install
52
+ $ rake gems:unpack
53
+
54
+ #### As a Rails Plugin
55
+
56
+ Use this if you prefer to use the edge version of Flavoured Markdown within a Rails application:
57
+
58
+ $ script/plugin install git://github.com/lawrencepit/flavoured_markdown.git
59
+
60
+
61
+ Options
62
+ -------
63
+
64
+ No options. Hack it.
65
+
66
+
67
+ Credits
68
+ -------
69
+
70
+ Written by [Lawrence Pit](http://lawrencepit.com).
71
+
72
+ Thanks to GitHub for their amazing services!
73
+ GitHub has it's own <a href='http://github.github.com/github-flavored-markdown/'>GitHub Flavored Markdown</a>.
74
+ You can have yours too.
75
+
76
+
77
+ ----
78
+ Copyright (c) 2009 Lawrence Pit, released under the MIT license
data/init.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'flavoured_markdown'
2
+ ActionView::Base.send(:include, ActionView::Helpers::Markdown)
@@ -0,0 +1,91 @@
1
+ require 'rdiscount'
2
+ require 'digest/md5'
3
+ require 'action_view'
4
+
5
+ module ActionView
6
+ module Helpers
7
+ module Markdown
8
+ include TagHelper
9
+ include TextHelper
10
+ include CaptureHelper
11
+ include UrlHelper
12
+
13
+ def flavoured_markdown(str)
14
+ str = RDiscount.new(str, :smart, :filter_styles, :filter_html).to_html
15
+
16
+ # Extract pre blocks
17
+ str = extract_markup(str, :pre)
18
+
19
+ # Undo markdown's html encoding of breaks
20
+ str.gsub!(%r{&lt;br\s*\/?>}m, "<br/>")
21
+
22
+ # Undo markdowns' html encoding of hyperlinks, except for those that
23
+ # contain an on* attribute which may contain javascript code.
24
+ str.gsub!(%r{&lt;a\s(.*?)&lt;/a>}m) do
25
+ match = $1
26
+ match =~ %r{\son\w}m ? "&lt;a #{match}&lt;/a>" : "<a #{match}</a>"
27
+ end
28
+
29
+ # Extract hyperlink html code
30
+ str = extract_markup(str, :a)
31
+
32
+ # Auto hyperlink urls and email addresses
33
+ str = auto_link(str, :all) do |txt|
34
+ txt.size < 55 ? txt : truncate(txt, :length => 50, :omission => "...")
35
+ end
36
+
37
+ # Extract the new hyperlinks
38
+ str = extract_markup(str, :a)
39
+
40
+ # preserve whitespace for haml
41
+ #str = str.chomp("\n").gsub(/\n/, '&#x000A;').gsub(/\r/, '')
42
+
43
+ # Prevent an orphan for P and LI tags
44
+ str.gsub!(%r{<(p|li)\b[^>]*>(.*?)</\1>}m) do |match|
45
+ last_space_index = match.rindex(' ')
46
+ if last_space_index
47
+ match = match.slice(0, last_space_index) + "&#160;" + match.slice(last_space_index + 1, match.length - last_space_index - 1)
48
+ end
49
+ match
50
+ end
51
+
52
+ # Add css class "last" to last P tag if it's the last element
53
+ str.sub!(%r{<p>(.*?)</p>\Z}, "<p class=\"last\">\\1</p>")
54
+
55
+ # Turn 3 consecutive dot characters into an ellipsis character
56
+ str = hellip(str)
57
+
58
+ # Put back in the previously extracted markup
59
+ str = add_extracted_markup(str)
60
+
61
+ str
62
+ end
63
+ alias_method :flavored_markdown, :flavoured_markdown
64
+
65
+ private
66
+ # Parts from Github Flavored Markdown
67
+ # http://github.github.com/github-flavored-markdown/
68
+ def extract_markup(str, mode = :a)
69
+ regexp = mode == :pre ? %r{<pre>.*?</pre>}m : %r{<a\s(.*?)>(.*?)</a>}m
70
+ @extractions ||= {}
71
+ str.gsub(regexp) do |match|
72
+ match = "<a #{$1}>#{hellip($2)}</a>" if mode == :a
73
+ md5 = Digest::MD5.hexdigest(match)
74
+ @extractions[md5] = match
75
+ "{extraction-#{md5}}"
76
+ end
77
+ end
78
+
79
+ # Insert back the extracted markup
80
+ def add_extracted_markup(str)
81
+ str.gsub(/\{extraction-([0-9a-f]{32})\}/) do
82
+ @extractions[$1]
83
+ end
84
+ end
85
+
86
+ def hellip(str)
87
+ str.gsub(%r{\b\.\.\.}m, "&hellip;")
88
+ end
89
+ end
90
+ end
91
+ end
data/rails/init.rb ADDED
@@ -0,0 +1 @@
1
+ Kernel.load File.join(File.dirname(__FILE__), '..', 'init.rb')
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flavoured_markdown
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.3
5
+ platform: ruby
6
+ authors:
7
+ - Lawrence Pit
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-10 00:00:00 +11:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: lawrence.pit@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - README.markdown
26
+ - MIT-LICENSE
27
+ - init.rb
28
+ - rails/init.rb
29
+ - lib/flavoured_markdown.rb
30
+ has_rdoc: true
31
+ homepage: http://github.com/lawrencepit/flavoured_markdown
32
+ licenses: []
33
+
34
+ post_install_message:
35
+ rdoc_options: []
36
+
37
+ require_paths:
38
+ - lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ version:
51
+ requirements: []
52
+
53
+ rubyforge_project:
54
+ rubygems_version: 1.3.5
55
+ signing_key:
56
+ specification_version: 3
57
+ summary: Websafe markdown with some extra flavour.
58
+ test_files: []
59
+