texttube 5.1.1 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,61 +0,0 @@
1
- # encoding: UTF-8
2
- require_relative "../filterable.rb"
3
-
4
- module TextTube
5
-
6
- # Embed some audio via [audio[link|name]]
7
- module EmbeddingAudio
8
- extend TextTube::Filterable
9
-
10
- filter_with :embeddingaudio do |text|
11
- TextTube::EmbeddingAudio.run text
12
- end
13
-
14
- # default attributes
15
- DEFAULTS = {
16
- src_base: "/streams/",
17
- preload: "metadata",
18
- fallback_text: "Your browser does not support HTML5, update your browser you fool!",
19
- controls: "controls",
20
- }
21
-
22
- # [audio[link|name]]
23
- R_link = / # [audio[url|description]]
24
- \[audio\[ # opening square brackets
25
- ([^\|]+) # link
26
- \| # separator
27
- ([^\[]+) # description
28
- \]\] # closing square brackets
29
- /x
30
-
31
-
32
- # @param [String] content
33
- # @param [Hash] options
34
- # @return [String]
35
- def self.run(content, options={})
36
- options ||= {}
37
- attributes = DEFAULTS.merge options
38
-
39
- content.gsub( R_link ) { |m|
40
- url,desc = $1,$2
41
- EmbeddingAudio::render_tag(url,desc,attributes)
42
- }
43
- end
44
-
45
-
46
- # Does the grunt work of rendering the tag.
47
- # @private
48
- # @param [String] link
49
- # @param [String] desc
50
- # @param [Hash] attributes
51
- def self.render_tag(link,desc,attributes)
52
- fallback_text = attributes.delete(:fallback_text)
53
- src_base = attributes.delete(:src_base)
54
- make_inner = ->(lnk){%Q!<source src='#{src_base}#{lnk}' type='audio/#{File.extname(lnk)[1..-1]}' />!}
55
- inner = make_inner.( link )
56
- inner += make_inner.( link.sub(/m4a$/, "ogg") ) if File.extname(link) == ".m4a"
57
- %Q!<div class='audio'><h3>#{desc}</h3><audio #{attributes.map{|(k,v)| "#{k}='#{v}'" }.join(" ")}>#{inner}#{fallback_text}</audio></div>!.strip.gsub /\s+/, " "
58
- end
59
-
60
- end # class
61
- end # module
@@ -1,111 +0,0 @@
1
- # encoding: UTF-8
2
- require_relative "../filterable.rb"
3
-
4
- module TextTube
5
-
6
- # Embed video via [embed_SIZE[url|description]]
7
- module EmbeddingVideo
8
- extend TextTube::Filterable
9
-
10
- filter_with :embeddingvideo do |text|
11
- TextTube::EmbeddingVideo.run text
12
- end
13
-
14
- # List of available sites.
15
- SITES = {
16
- # "video.google".to_sym => ['http://www.video.google.com/',->(w,h,url){ %Q!! }],
17
- # :brightcove => ['http://www.brightcove.com/',->(w,h,url){ %Q!! }],
18
- # :photobucket => ['http://www.photobucket.com/',->(w,h,url){ %Q!! }],
19
- :youtube => {
20
- name: 'http://www.youtube.com/',
21
- html: ->(w,h,url){ %Q!<iframe title="YouTube video player" class="youtube-player" type="text/html" width="#{w}" height="#{h}" src="#{url}" frameborder="0"></iframe>!.strip},
22
- url_morph: ->(orig){ orig.sub( %r{watch\?v=}, 'embed/') }
23
- },
24
- # :dailymotion => ['http://dailymotion.com/',->(w,h,url){ %Q!! }],
25
- # :ifilm => ['http://ifilm.com/',->(w,h,url){ %Q!! }],
26
- # :break => ['http://break.com/',->(w,h,url){ %Q!! }],
27
- # :blip => ['http://blip.tv/',->(w,h,url){ %Q!! }],
28
- # :grindtv => ['http://www.grindtv.com/',->(w,h,url){ %Q!! }],
29
- # :metacafe => ['http://metacafe.com/',->(w,h,url){ %Q!! }],
30
- # :myspace => ['http://vids.myspace.com/',->(w,h,url){ %Q!! }],
31
- # :vimeo => ['http://vimeo.com/',->(w,h,url){ %Q!! }],
32
- # :buzznet => ['http://buzznet.com/',->(w,h,url){ %Q!! }],
33
- # :liveleak => ['http://www.liveleak.com/',->(w,h,url){ %Q!! }],
34
- # :stupidvideos => ['http://stupidvideos.com/',->(w,h,url){ %Q!! }],
35
- # :flixya => ['http://www.flixya.com/',->(w,h,url){ %Q!! }],
36
- # :gofish => ['http://gofish.com/',->(w,h,url){ %Q!! }],
37
- # :kewego => ['http://kewego.com/',->(w,h,url){ %Q!! }],
38
- # :lulu => ['http://lulu.tv/',->(w,h,url){ %Q!! }],
39
- # :pandora => ['http://pandora.tv/',->(w,h,url){ %Q!! }],
40
- # :viddler => ['http://www.viddler.com/',->(w,h,url){ %Q!! }],
41
- # :myheavy => ['http://myheavy.com/',->(w,h,url){ %Q!! }],
42
- # :putfile => ['http://putfile.com/',->(w,h,url){ %Q!! }],
43
- # :stupidvideos => ['http://stupidvideos.com/',->(w,h,url){ %Q!! }],
44
- # :vmix => ['http://vmix.com/',->(w,h,url){ %Q!! }],
45
- # :zippyvideos => ['http://zippyvideos.com/',->(w,h,url){ %Q!! }],
46
- # :castpost => ['http://castpost.com/',->(w,h,url){ %Q!! }],
47
- # :dotv => ['http://dotv.com/',->(w,h,url){ %Q!! }],
48
- # :famster => ['http://famster.com/',->(w,h,url){ %Q!! }],
49
- # :gawkk => ['http://gawkk.com/',->(w,h,url){ %Q!! }],
50
- # :tubetorial => ['http://tubetorial.com/',->(w,h,url){ %Q!! }],
51
- # :MeraVideo => ['http://MeraVideo.com/',->(w,h,url){ %Q!! }],
52
- # :Porkolt => ['http://Porkolt.com/',->(w,h,url){ %Q!! }],
53
- # :VideoWebTown => ['http://VideoWebTown.com/',->(w,h,url){ %Q!! }],
54
- # :Vidmax => ['http://Vidmax.com/',->(w,h,url){ %Q!! }],
55
- # :clipmoon => ['http://www.clipmoon.com/',->(w,h,url){ %Q!! }],
56
- # :motorsportmad => ['http://motorsportmad.com/',->(w,h,url){ %Q!! }],
57
- # :thatshow => ['http://www.thatshow.com/',->(w,h,url){ %Q!! }],
58
- # :clipchef => ['http://clipchef.com/',->(w,h,url){ %Q!! }],
59
- }
60
-
61
- # Some standard player sizes.
62
- SIZES = {
63
- small: [560,345],
64
- medium: [640,390],
65
- large: [853,510],
66
- largest: [1280,750] }
67
-
68
-
69
-
70
- # r_url = %r{
71
- # http(?:s)?\:// #http https ://
72
- # (?:(?:www|vids)\.)? # www. vids.
73
- # (.+?) # domain name (hopefully)
74
- # \.(?:com|tv) # .com .tv
75
- # /? # optional trailing slash
76
- # }x
77
-
78
- # Pattern for deconstructing [embed_SIZE[url|description]]
79
- R_link = / # [embed_SIZE[url|description]]
80
- \[embed\_?([a-z]+)?\[ # opening square brackets
81
- (\S+) # link
82
- \| # separator
83
- ([^\[]+) # description
84
- \]\] # closing square brackets
85
- /x
86
-
87
-
88
- # @param [String] content
89
- # @param [Hash] options
90
- # @return [String]
91
- def self.run(content, options={})
92
- options ||= {}
93
- content.gsub( R_link ) { |m|
94
- size,url,desc = $1,$2,$3
95
-
96
- unless size.nil?
97
- res = SIZES[size.to_sym] || SIZES[:medium] #resolution
98
- else
99
- res = SIZES[:medium]
100
- end
101
-
102
- #"res: #{res.inspect} size: #{size}, url:#{url}, desc:#{desc}"
103
-
104
- emb_url = SITES[:youtube][:url_morph].(url)
105
- SITES[:youtube][:html].(res.first, res.last, emb_url )
106
- }
107
-
108
- end
109
-
110
- end # class
111
- end # module
@@ -1,35 +0,0 @@
1
- # encoding: UTF-8
2
- require 'nokogiri'
3
- require_relative "../filterable.rb"
4
-
5
- module TextTube
6
-
7
- # This finds html tags with "markdown='1'" as an attribute, runs markdown over the contents, then removes the markdown attribute, allowing markdown within html blocks
8
- module InsideBlock
9
- extend TextTube::Filterable
10
-
11
- filter_with :insideblock do |text|
12
- TextTube::InsideBlock.run text
13
- end
14
-
15
- # @param [String] content
16
- # @param [Hash] options
17
- # @option options [Constant] The markdown parser to use. I'm not sure this bit really works for other parsers than RDiscount.
18
- def self.run( content, options={})
19
- options ||= {}
20
- if options[:markdown_parser].nil?
21
- require 'rdiscount'
22
- markdown_parser=RDiscount
23
- end
24
- doc = Nokogiri::HTML::fragment(content)
25
-
26
- (doc/"*[@markdown='1']").each do |ele|
27
- ele.inner_html = markdown_parser.new(ele.inner_html).to_html
28
- ele.remove_attribute("markdown")
29
- end
30
-
31
- doc.to_s
32
- end # run
33
-
34
- end # class
35
- end # module
@@ -1,144 +0,0 @@
1
- # encoding: UTF-8
2
- require_relative "../filterable.rb"
3
-
4
- module TextTube
5
-
6
- # @author Iain Barnett
7
- # A class to take links in the format `[[link|description]]` and give them a number reference, then output them in markdown format. Note: this is not the same as reference links in markdown, this is more akin to the way books will refer to references or footnotes with a number.
8
- #P.S. I don't like to make functions private, we're all adults, so to use this call Link_reffing#run, #format_links is for internal use.
9
- module LinkReffing
10
- extend Filterable
11
-
12
- filter_with :linkreffing do |text, options|
13
- TextTube::LinkReffing.run text, options
14
- end
15
-
16
- # These are the html codes for superscript 0 - 9
17
- UNITS = ['&#8304;', '&sup1;', '&sup2;', '&sup3;', '&#8308;', '&#8309;', '&#8310;', '&#8311;', '&#8312;', '&#8313;'] #unicode superscript numbers
18
-
19
- # Matches [[link|description]]
20
- Pattern = /
21
- \[\[ # opening square brackets
22
- (?<link>\S+)
23
- \s*\|\s* # separator
24
- (?<description>[^\[]+)
25
- \]\] # closing square brackets
26
- /x
27
-
28
- # a lambda function to transform a link and a number into a markdown reference link.
29
- # @param [String] lnk The url.
30
- # @param [String] num The reference number.
31
- Reffer = ->(lnk, num){ %Q![#{lnk}](##{num} "Jump to reference")!}
32
-
33
- # A lambda to transform a link and a number to a HTML reference link.
34
- RefHTMLer = ->(lnk, num){ %Q!<a href="##{num}" title="Jump to reference">#{lnk}</a>! }
35
-
36
- # A lambda to transform a href and a description into an HTML link.
37
- HTMLer = ->(lnk, desc){ %Q! <a href="#{lnk}">#{desc}</a>! }
38
-
39
- # A lambda to transform a link and a description into an inline Markdown link.
40
- Markdowner = ->(lnk, desc){ %Q! [#{desc}](#{lnk})! }
41
-
42
- # Noner = ->(_,_) { "" } # this isn't needed but will sit here as a reminder.
43
-
44
-
45
- # Takes markdown content with ref links and turns it into 100% markdown.
46
- # @param [String] content The markdown content with links to ref.
47
- # @option options [#to_s] :format The format of the link you want added. The options are :html, :markdown. The default is :markdown
48
- # @option options [#to_s] :kind The kind of link you want added. The options are :reference, :inline, :none. The default is :reference
49
- # @option options [String,nil] :div_id ID of the div to wrap reference links in. Defaults to "reflinks". Set to nil or false for no div.
50
- # @return [String] The string formatted as markdown e.g. `[http://cheat.errtheblog.com/s/yard/more/and/m...](http://cheat.errtheblog.com/s/yard/more/and/more/and/more/ "http://cheat.errtheblog.com/s/yard/more/and/more/and/more/")`
51
- def self.run(content, options={})
52
- return content if content.blank?
53
- text = content.dup
54
- options ||= {}
55
- kind = options.fetch :kind, :reference
56
- format = options.fetch( :format, :markdown )
57
- formatter = if kind == :inline
58
- if format == :html
59
- HTMLer
60
- else
61
- Markdowner
62
- end
63
- elsif kind == :none
64
- nil # none is needed
65
- else # kind == :reference
66
- if format == :html
67
- RefHTMLer
68
- else
69
- Reffer
70
- end
71
- end
72
-
73
- div_id = options.has_key?(:div_id) ?
74
- options[:div_id] :
75
- :reflinks
76
-
77
- cur = 0 #current number
78
-
79
- # if there are no reflinks found
80
- # this will remain false
81
- # and `divit` won't be run.
82
- has_reflinks = false
83
-
84
- links = [] #to store the matches
85
-
86
- text.gsub! Pattern do |md| #block to pass to gsub
87
- has_reflinks = true
88
- if kind == :inline
89
- formatter.($1,$2)
90
- elsif kind == :none
91
- ""
92
- else # kind == :reference
93
- mags = cur.divmod(10) #get magnitude of number
94
- ref_tag = mags.first >= 1 ?
95
- UNITS[mags.first] :
96
- '' #sort out tens
97
-
98
- ref_tag += UNITS[mags.last] #units
99
- retval = formatter.(ref_tag,cur)
100
-
101
- links << [$1, $2, cur] # add to the words list
102
- cur += 1 #increase current number
103
- retval
104
- end
105
- end
106
-
107
- if !links.empty?
108
- if has_reflinks && div_id
109
- "#{text}\n#{LinkReffing.divit( div_id ) { format_links(links) }}"
110
- else
111
- "#{text}\n#{format_links(links)}"
112
- end
113
- else
114
- text
115
- end
116
- end
117
-
118
-
119
- # This func outputs the link as valid markdown.
120
- # @param [Array<String,String,Integer>] links A list of 2-length arrays containing the url and the description and the reference number.
121
- def self.format_links( links )
122
- links.map{ |(link, description, cur)|
123
- display_link = link.length >= 45 ?
124
- link[0,45] + "..." :
125
- link
126
- %Q!\n<a name="#{cur}"></a>#{LeftSq}#{cur}#{RightSq} [#{display_link}](#{link} "#{link}") #{description}\n\n!
127
- }.join
128
- end
129
-
130
-
131
- # Wraps things in a div. If no id given, no div.
132
- # @param [#to_s] id The ID attribute for the div.
133
- def self.divit( id )
134
- "<div markdown='1' id='#{id}'>#{ yield }</div>"
135
- end
136
-
137
- # HTML code for [
138
- LeftSq = "&#91;"
139
- # HTML code for ]
140
- RightSq = "&#93;"
141
-
142
- end#class
143
-
144
- end#module
@@ -1,42 +0,0 @@
1
- # encoding: UTF-8
2
- require_relative "../filterable.rb"
3
-
4
- module TextTube
5
-
6
- # Will transform the Queen's English into American English for use in CSS, as the current CSS standards prefer ugly words.
7
- # Inspired by visualidiot's SpiffingCSS (see http://spiffingcss.com/)
8
- module Spiffing
9
- extend TextTube::Filterable
10
-
11
- filter_with :spiffing do |text|
12
- TextTube::Spiffing.run text
13
- end
14
-
15
-
16
- # The dictionary.
17
- DICTIONARY = {
18
- # Queen's English # Primitive English from our stateside
19
- # friends from across the pond.
20
- 'colour' => 'color',
21
- 'grey' => 'gray',
22
- '!please' => '!important',
23
- 'transparency' => 'opacity',
24
- 'centre' => 'center',
25
- 'plump' => 'bold',
26
- 'photograph' => 'image',
27
- 'capitalise' => 'capitalize'
28
- }
29
-
30
- # @param [String] content
31
- # @param [Hash] options
32
- def self.run( content, options={})
33
- ugly_child = content.dup
34
- # warn ugly_child
35
- DICTIONARY.each do |english, ugly|
36
- ugly_child.sub! english, ugly
37
- # warn ugly_child
38
- end
39
- ugly_child
40
- end
41
- end
42
- end
data/spec/coderay_spec.rb DELETED
@@ -1,87 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
- require_relative "../lib/texttube.rb"
5
- require_relative "../lib/texttube/filters/coderay.rb"
6
-
7
- module TextTube
8
- describe TextTube do
9
-
10
- let(:coderayed){
11
- %Q!<h2>Hello</h2>\n\n<p>This is some code:</p>\n\n<pre><code class="CodeRay">[<span class="integer">1</span>,<span class="integer">2</span>,<span class="integer">3</span>].map{|x| + <span class="integer">1</span> }\n</code></pre>\n\n<p>And this is the result:\n [2,3,4]</p>\n\n<p>Thankyou</p>\n!
12
- }
13
-
14
- let(:notrayed) {
15
- "<h2>Hello</h2>\n\n<p>This is some code:</p>\n\n<pre><code>[1,2,3].map{|x| + 1 }\n</code></pre>\n\n<p>And this is the result:\n [2,3,4]</p>\n\n<p>Thankyou</p>\n"
16
- }
17
-
18
- describe Coderay do
19
- context "Given some text" do
20
- context "With some code to be rayed in it" do
21
- context "That has a language hint" do
22
- let(:content) { <<CODE
23
- <pre><code>::::ruby
24
- {"one" => 1 }
25
- </code></pre>
26
- CODE
27
- }
28
- let(:expected) { <<HTML
29
- <pre><code class="CodeRay">{<span class="string"><span class="delimiter">"</span><span class="content">one</span><span class="delimiter">"</span></span> =&gt; <span class="integer">1</span> }</code></pre>
30
- HTML
31
- }
32
- let(:wrong) { <<CODE
33
- <pre><code>::::json
34
- {"one" => 1 }
35
- </code></pre>
36
- CODE
37
- }
38
-
39
- subject { TextTube::Coderay.run content }
40
- it { should_not be_nil }
41
- it { should == expected }
42
- it { should_not == TextTube::Coderay.run(wrong) }
43
- end
44
- context "That has no language hint" do
45
- let(:content) { notrayed }
46
- let(:expected) { coderayed }
47
-
48
- subject { TextTube::Coderay.run content }
49
- it { should_not be_nil }
50
- it { should == expected }
51
- end
52
- context "That has a 'skip' language hint" do
53
- let(:content) { <<CODE
54
- <pre><code>::::skip
55
- {"one" => 1 }
56
- </code></pre>
57
- CODE
58
- }
59
- let(:expected) { <<CODE
60
- <pre><code>{"one" =&gt; 1 }</code></pre>
61
- CODE
62
- }
63
-
64
- subject { TextTube::Coderay.run content }
65
- it { should_not be_nil }
66
- it { should == expected }
67
- end
68
- end # context
69
-
70
- context "With no code to be rayed in it" do
71
- let(:content) { %Q$The[UtterFAIL website](http://utterfail.info/ "UtterFAIL!") is good.$ }
72
- let(:expected) { content }
73
- subject { TextTube::Coderay.run content }
74
- it { should_not be_nil }
75
- it { should == expected }
76
- end # context
77
- end # context
78
-
79
- context "Given no text" do
80
- subject { TextTube::Coderay.run "" }
81
- it { should_not be_nil }
82
- it { should == "" }
83
- end # context
84
-
85
- end # describe Coderay
86
- end # describe TextTube
87
- end # module
@@ -1,42 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
- require_relative "../lib/texttube.rb"
5
- require_relative "../lib/texttube/filters/embedding_audio.rb"
6
-
7
-
8
- module TextTube
9
- describe TextTube do
10
-
11
- describe EmbeddingAudio do
12
- context "Given some text" do
13
- let(:content) { "[audio[a24.m4a|A24]]" }
14
- let(:expected) {
15
- %q[<div class='audio'><h3>A24</h3><audio preload='metadata' controls='controls'><source src='/streams/a24.m4a' type='audio/m4a' /><source src='/streams/a24.ogg' type='audio/ogg' />Your browser does not support HTML5, update your browser you fool!</audio></div>]
16
- }
17
- context "containing valid extended markdown for audio" do
18
- context "with no options" do
19
- subject { TextTube::EmbeddingAudio.run content }
20
- it { should_not be_nil }
21
- it { should be == expected }
22
- end
23
- context "with src_base given as an option" do
24
- subject { TextTube::EmbeddingAudio.run content, {src_base: "/files/" } }
25
- it { should_not be_nil }
26
- it { should_not == expected }
27
- it { should match(%r{^.+\ssrc\='/files/\S+?'\s.+$}) }
28
- end
29
- end
30
- context "containing invalid extended markdown for audio" do
31
- let(:content) { "audio[a24.m4a|A24]]" }
32
- subject { TextTube::EmbeddingAudio.run content }
33
- it { should_not be_nil }
34
- it { should_not be == expected }
35
- it { should == content }
36
- end
37
- end
38
-
39
- end # describe
40
-
41
- end # describe TextTube
42
- end
@@ -1,35 +0,0 @@
1
- require 'spec_helper'
2
- require_relative "../lib/texttube.rb"
3
- require_relative "../lib/texttube/filters/inside_block.rb"
4
-
5
- describe "InsideBlock" do
6
- let(:content) { <<HTML
7
- <div class='wrapper' id='sidebar' markdown='1'>
8
- ## This is a sidebar ##
9
-
10
- * Written
11
- * in
12
- * markdown
13
-
14
- Sometimes this is useful.
15
- </div>
16
- HTML
17
- }
18
- let(:expected) { <<HTML
19
- <div class="wrapper" id="sidebar">
20
- <h2>This is a sidebar</h2>
21
-
22
- <ul>
23
- <li>Written</li>
24
- <li>in</li>
25
- <li>markdown</li>
26
- </ul>
27
-
28
-
29
- <p>Sometimes this is useful.</p>
30
- </div>
31
- HTML
32
- }
33
- subject { TextTube::InsideBlock.run content }
34
- it { should == expected }
35
- end
@@ -1,97 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
- require_relative "../lib/texttube.rb"
5
- require_relative "../lib/texttube/filters/link_reffing.rb"
6
-
7
- module TextTube
8
- describe LinkReffing do
9
- context "Given some text" do
10
- context "With a link to be reffed in it" do
11
- shared_examples "outputting links" do
12
- it { should_not be_nil }
13
- it { should == expected }
14
- end
15
-
16
- let(:content) { "The UtterFAIL website[[http://utterfail.info|UtterFAIL!]] is good. My blog[[http://iainbarnett.me.uk|My blog]] is also good." }
17
-
18
- context "and no options" do
19
- subject { TextTube::LinkReffing.run content }
20
- let(:expected) { s = <<HTML
21
- The UtterFAIL website[&#8304;](#0 "Jump to reference") is good. My blog[&sup1;](#1 "Jump to reference") is also good.
22
- <div markdown='1' id='reflinks'>
23
- <a name="0"></a>&#91;0&#93; [http://utterfail.info](http://utterfail.info "http://utterfail.info") UtterFAIL!
24
-
25
-
26
- <a name="1"></a>&#91;1&#93; [http://iainbarnett.me.uk](http://iainbarnett.me.uk "http://iainbarnett.me.uk") My blog
27
-
28
- </div>
29
- HTML
30
- s.strip
31
- }
32
- include_examples "outputting links"
33
- end
34
- context "and an option not to ref the link (i.e. inline)" do
35
- let(:expected) {
36
- "The UtterFAIL website [UtterFAIL!](http://utterfail.info) is good. My blog [My blog](http://iainbarnett.me.uk) is also good."
37
- }
38
- subject {
39
- TextTube::LinkReffing.run content, kind: :inline
40
- }
41
- include_examples "outputting links"
42
- context "and use HTML" do
43
- let(:expected) {
44
- %Q$The UtterFAIL website <a href="http://utterfail.info">UtterFAIL!</a> is good. My blog <a href="http://iainbarnett.me.uk">My blog</a> is also good.$
45
- }
46
- subject {
47
- TextTube::LinkReffing.run content, kind: :inline, format: :html
48
- }
49
- include_examples "outputting links"
50
- end
51
- end
52
- context "and an option to output a link as HTML" do
53
- let(:expected) { s = <<HTML
54
- The UtterFAIL website<a href="#0" title="Jump to reference">&#8304;</a> is good. My blog<a href="#1" title="Jump to reference">&sup1;</a> is also good.
55
- <div markdown='1' id='reflinks'>
56
- <a name="0"></a>&#91;0&#93; [http://utterfail.info](http://utterfail.info "http://utterfail.info") UtterFAIL!
57
-
58
-
59
- <a name="1"></a>&#91;1&#93; [http://iainbarnett.me.uk](http://iainbarnett.me.uk "http://iainbarnett.me.uk") My blog
60
-
61
- </div>
62
- HTML
63
- s.strip
64
- }
65
- subject { TextTube::LinkReffing.run content, format: :html }
66
- include_examples "outputting links"
67
- end
68
- context "and an option to not show the link at all" do
69
- let(:expected) { s = <<HTML
70
- The UtterFAIL website is good. My blog is also good.
71
- HTML
72
- s.strip
73
- }
74
- subject {
75
- TextTube::LinkReffing.run content, kind: :none
76
- }
77
- include_examples "outputting links"
78
- end
79
- end # context
80
-
81
- context "With no link to be reffed in it" do
82
- let(:content) { %Q$The [UtterFAIL website](http://utterfail.info/ "UtterFAIL!") is good.$ }
83
- let(:expected) { content }
84
- subject { TextTube::LinkReffing.run content }
85
- it { should_not be_nil }
86
- it { should == expected }
87
- end # context
88
- end # context
89
-
90
- context "Given no text" do
91
- subject { TextTube::LinkReffing.run "" }
92
- it { should_not be_nil }
93
- it { should == "" }
94
- end # context
95
-
96
- end # describe LinkReffing
97
- end # module