octopress-ink 1.0.0.alpha.31 → 1.0.0.alpha.32

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/lib/octopress-ink.rb +92 -37
  3. data/lib/octopress-ink/assets.rb +12 -10
  4. data/lib/octopress-ink/assets/asset.rb +91 -80
  5. data/lib/octopress-ink/assets/config.rb +29 -27
  6. data/lib/octopress-ink/assets/include.rb +11 -9
  7. data/lib/octopress-ink/assets/javascript.rb +7 -4
  8. data/lib/octopress-ink/assets/layout.rb +16 -11
  9. data/lib/octopress-ink/assets/page.rb +32 -30
  10. data/lib/octopress-ink/assets/root.rb +17 -15
  11. data/lib/octopress-ink/assets/sass.rb +48 -46
  12. data/lib/octopress-ink/assets/stylesheet.rb +25 -23
  13. data/lib/octopress-ink/commands.rb +23 -0
  14. data/lib/octopress-ink/commands/helpers.rb +19 -0
  15. data/lib/octopress-ink/commands/info.rb +24 -0
  16. data/lib/octopress-ink/filters.rb +112 -109
  17. data/lib/octopress-ink/generators/plugin_assets.rb +8 -6
  18. data/lib/octopress-ink/helpers.rb +7 -5
  19. data/lib/octopress-ink/helpers/conditional.rb +16 -14
  20. data/lib/octopress-ink/helpers/content_for.rb +23 -20
  21. data/lib/octopress-ink/helpers/path.rb +51 -48
  22. data/lib/octopress-ink/helpers/var.rb +82 -80
  23. data/lib/octopress-ink/jekyll/hooks.rb +2 -2
  24. data/lib/octopress-ink/jekyll/page.rb +38 -35
  25. data/lib/octopress-ink/jekyll/static_file.rb +18 -16
  26. data/lib/octopress-ink/jekyll/static_file_content.rb +8 -6
  27. data/lib/octopress-ink/plugin.rb +189 -144
  28. data/lib/octopress-ink/plugins.rb +249 -230
  29. data/lib/octopress-ink/plugins/stylesheets.rb +37 -35
  30. data/lib/octopress-ink/tags.rb +16 -14
  31. data/lib/octopress-ink/tags/abort.rb +15 -12
  32. data/lib/octopress-ink/tags/assign.rb +21 -19
  33. data/lib/octopress-ink/tags/capture.rb +26 -24
  34. data/lib/octopress-ink/tags/content_for.rb +15 -12
  35. data/lib/octopress-ink/tags/filter.rb +16 -13
  36. data/lib/octopress-ink/tags/include.rb +40 -38
  37. data/lib/octopress-ink/tags/javascript.rb +6 -4
  38. data/lib/octopress-ink/tags/line_comment.rb +6 -3
  39. data/lib/octopress-ink/tags/render.rb +53 -51
  40. data/lib/octopress-ink/tags/return.rb +12 -9
  41. data/lib/octopress-ink/tags/stylesheet.rb +6 -4
  42. data/lib/octopress-ink/tags/wrap.rb +62 -60
  43. data/lib/octopress-ink/tags/yield.rb +23 -20
  44. data/lib/octopress-ink/version.rb +1 -1
  45. data/octopress-ink.gemspec +1 -1
  46. data/test/Gemfile +3 -2
  47. data/test/_config.yml +2 -0
  48. data/test/plugins/awesome-sauce/plugin.rb +3 -2
  49. data/test/plugins/test-theme/plugin.rb +3 -2
  50. metadata +7 -4
@@ -1,9 +1,12 @@
1
1
  module Octopress
2
- module Assets
3
- class Javascript < Asset
4
- def tag
5
- "<script src='#{Filters.expand_url(File.join(@dir, @file))}'></script>"
2
+ module Ink
3
+ module Assets
4
+ class Javascript < Asset
5
+ def tag
6
+ "<script src='#{Filters.expand_url(File.join(@dir, @file))}'></script>"
7
+ end
6
8
  end
7
9
  end
8
10
  end
9
11
  end
12
+
@@ -1,19 +1,24 @@
1
1
  module Octopress
2
- module Assets
3
- class Layout < Asset
2
+ module Ink
3
+ module Assets
4
+ class Layout < Asset
4
5
 
5
- def register
6
- name = "#{@plugin.namespace}:#{@file}"
7
- name = name.split(".")[0..-2].join(".")
6
+ def register
7
+ file = user_path
8
+ dir = user_dir
9
+ if !exists?(file)
10
+ file = plugin_path
11
+ dir = plugin_dir
12
+ end
8
13
 
9
- file = user_path
10
- dir = user_dir
11
- if !exists?(file)
12
- file = plugin_path
13
- dir = plugin_dir
14
+ Plugins.site.layouts[name] = Jekyll::Layout.new(Plugins.site, dir, @file)
14
15
  end
15
16
 
16
- Plugins.site.layouts[name] = Jekyll::Layout.new(Plugins.site, dir, @file)
17
+ def name
18
+ name = "#{@plugin.slug}:#{@file}"
19
+ # remove extension
20
+ name = name.split(".")[0..-2].join(".")
21
+ end
17
22
  end
18
23
  end
19
24
  end
@@ -2,38 +2,40 @@
2
2
  # Use root assets for files like robots.text or favicon.ico
3
3
 
4
4
  module Octopress
5
- module Assets
6
- class PageAsset < Asset
7
-
8
- def initialize(plugin, type, file)
9
- @root = plugin.assets_path
10
- @plugin = plugin
11
- @type = type
12
- @dir = File.dirname(file)
13
- @file = File.basename(file)
14
- @exists = {}
15
- file_check
16
- end
17
-
18
- def page_dir
19
- @dir == '.' ? '' : @dir
20
- end
21
-
22
- def plugin_path
23
- File.join(plugin_dir, @dir, @file)
24
- end
25
-
26
- def page
27
- @page ||= Page.new(Plugins.site, plugin_dir, page_dir, @file, @plugin.config)
28
- end
5
+ module Ink
6
+ module Assets
7
+ class PageAsset < Asset
8
+
9
+ def initialize(plugin, type, file)
10
+ @root = plugin.assets_path
11
+ @plugin = plugin
12
+ @type = type
13
+ @dir = File.dirname(file)
14
+ @file = File.basename(file)
15
+ @exists = {}
16
+ file_check
17
+ end
18
+
19
+ def page_dir
20
+ @dir == '.' ? '' : @dir
21
+ end
22
+
23
+ def plugin_path
24
+ File.join(plugin_dir, @dir, @file)
25
+ end
26
+
27
+ def page
28
+ @page ||= Page.new(Plugins.site, plugin_dir, page_dir, @file, @plugin.config)
29
+ end
30
+
31
+ # Add page to Jekyll pages if no other page has a conflicting destination
32
+ #
33
+ def copy
34
+ return unless page.url
35
+ Plugins.site.pages << page unless Helpers::Path.find_page(page)
36
+ end
29
37
 
30
- # Add page to Jekyll pages if no other page has a conflicting destination
31
- #
32
- def copy
33
- return unless page.url
34
- Plugins.site.pages << page unless Helpers::Path.find_page(page)
35
38
  end
36
-
37
39
  end
38
40
  end
39
41
  end
@@ -2,25 +2,27 @@
2
2
  # Use root assets for files like robots.text or favicon.ico
3
3
 
4
4
  module Octopress
5
- module Assets
6
- class RootAsset < Asset
5
+ module Ink
6
+ module Assets
7
+ class RootAsset < Asset
7
8
 
8
- def initialize(plugin, type, file)
9
- @root = plugin.assets_path
10
- @plugin = plugin
11
- @dir = ''
12
- @type = type
13
- @file = file
14
- @exists = {}
15
- file_check
16
- end
9
+ def initialize(plugin, type, file)
10
+ @root = plugin.assets_path
11
+ @plugin = plugin
12
+ @dir = ''
13
+ @type = type
14
+ @file = file
15
+ @exists = {}
16
+ file_check
17
+ end
17
18
 
18
- def copy
19
- unless exists? local_plugin_path
20
- Plugins.site.static_files << StaticFile.new(plugin_path, destination)
19
+ def copy
20
+ unless exists? local_plugin_path
21
+ Plugins.site.static_files << StaticFile.new(plugin_path, destination)
22
+ end
21
23
  end
22
- end
23
24
 
25
+ end
24
26
  end
25
27
  end
26
28
  end
@@ -1,60 +1,62 @@
1
1
  module Octopress
2
- module Assets
3
- class Sass < Stylesheet
4
- def initialize(plugin, type, file, media)
5
- @plugin = plugin
6
- @type = type
7
- @file = file
8
- @media = media || 'all'
9
- @root = plugin.assets_path
10
- @dir = File.join(plugin.namespace, type)
11
- @exists = {}
12
- file_check
13
- end
2
+ module Ink
3
+ module Assets
4
+ class Sass < Stylesheet
5
+ def initialize(plugin, type, file, media)
6
+ @plugin = plugin
7
+ @type = type
8
+ @file = file
9
+ @media = media || 'all'
10
+ @root = plugin.assets_path
11
+ @dir = File.join(plugin.slug, type)
12
+ @exists = {}
13
+ file_check
14
+ end
14
15
 
15
- def tag
16
- "<link href='#{Filters.expand_url(File.join(@dir, @file))}' media='#{media}' rel='stylesheet' type='text/css'>"
17
- end
16
+ def tag
17
+ "<link href='#{Filters.expand_url(File.join(@dir, @file))}' media='#{media}' rel='stylesheet' type='text/css'>"
18
+ end
18
19
 
19
- # TODO: see if this is done TODO: choose user path before local path.
20
- def user_load_path
21
- File.join(Plugins.site.source, Plugins.custom_dir, @dir, File.dirname(@file)).sub /\/\.$/, ''
22
- end
20
+ # TODO: see if this is done TODO: choose user path before local path.
21
+ def user_load_path
22
+ File.join(Plugins.site.source, Plugins.custom_dir, @dir, File.dirname(@file)).sub /\/\.$/, ''
23
+ end
23
24
 
24
- def theme_load_path
25
- File.expand_path(File.join(@root, @type))
26
- end
25
+ def theme_load_path
26
+ File.expand_path(File.join(@root, @type))
27
+ end
27
28
 
28
- def compile
29
- unless @compiled
30
- options = Plugins.sass_options
31
- if @plugin.type == 'local_plugin'
32
- @compiled = Plugins.compile_sass_file(path.to_s, options)
33
- else
34
- # If the plugin isn't a local plugin, add source paths to allow overrieds on @imports.
35
- #
36
- options[:load_paths] = [user_load_path, theme_load_path]
37
- @compiled = Plugins.compile_sass(path.read, options)
29
+ def compile
30
+ unless @compiled
31
+ options = Plugins.sass_options
32
+ if @plugin.type == 'local_plugin'
33
+ @compiled = Plugins.compile_sass_file(path.to_s, options)
34
+ else
35
+ # If the plugin isn't a local plugin, add source paths to allow overrieds on @imports.
36
+ #
37
+ options[:load_paths] = [user_load_path, theme_load_path]
38
+ @compiled = Plugins.compile_sass(path.read, options)
39
+ end
38
40
  end
41
+ @compiled
39
42
  end
40
- @compiled
41
- end
42
43
 
43
- def user_override_path
44
- # Allow Sass overrides to use either syntax
45
- if @file =~ /s[ac]ss$/
46
- [File.join(user_dir, @file), File.join(user_dir, alt_syntax_file)]
47
- else
48
- File.join user_dir, @file
44
+ def user_override_path
45
+ # Allow Sass overrides to use either syntax
46
+ if @file =~ /s[ac]ss$/
47
+ [File.join(user_dir, @file), File.join(user_dir, alt_syntax_file)]
48
+ else
49
+ File.join user_dir, @file
50
+ end
49
51
  end
50
- end
51
52
 
52
- def destination
53
- File.join(@dir, @file.sub(/s.ss/, 'css'))
54
- end
53
+ def destination
54
+ File.join(@dir, @file.sub(/s.ss/, 'css'))
55
+ end
55
56
 
56
- def copy
57
- Plugins.site.static_files << StaticFileContent.new(compile, destination)
57
+ def copy
58
+ Plugins.site.static_files << StaticFileContent.new(compile, destination)
59
+ end
58
60
  end
59
61
  end
60
62
  end
@@ -1,31 +1,33 @@
1
1
  module Octopress
2
- module Assets
3
- class Stylesheet < Asset
4
- def initialize(plugin, type, file, media)
5
- @plugin = plugin
6
- @file = file
7
- @type = type
8
- @media = media || 'all'
9
- @root = plugin.assets_path
10
- @dir = File.join(plugin.namespace, type)
11
- @exists = {}
12
- file_check
13
- end
2
+ module Ink
3
+ module Assets
4
+ class Stylesheet < Asset
5
+ def initialize(plugin, type, file, media)
6
+ @plugin = plugin
7
+ @file = file
8
+ @type = type
9
+ @media = media || 'all'
10
+ @root = plugin.assets_path
11
+ @dir = File.join(plugin.slug, type)
12
+ @exists = {}
13
+ file_check
14
+ end
14
15
 
15
- def media
16
- m = @media
17
- if @file =~ /@(.+?)\./
18
- m = $1
16
+ def media
17
+ m = @media
18
+ if @file =~ /@(.+?)\./
19
+ m = $1
20
+ end
21
+ m
19
22
  end
20
- m
21
- end
22
23
 
23
- def destination
24
- File.join(@dir, @file.sub(/@(.+?)\./,'.'))
25
- end
24
+ def destination
25
+ File.join(@dir, @file.sub(/@(.+?)\./,'.'))
26
+ end
26
27
 
27
- def tag
28
- "<link href='#{Filters.expand_url(File.join(@dir, @file))}' media='#{media}' rel='stylesheet' type='text/css'>"
28
+ def tag
29
+ "<link href='#{Filters.expand_url(File.join(@dir, @file))}' media='#{media}' rel='stylesheet' type='text/css'>"
30
+ end
29
31
  end
30
32
  end
31
33
  end
@@ -0,0 +1,23 @@
1
+ module Octopress
2
+ module Ink
3
+ module Commands
4
+ require 'octopress-ink/commands/info'
5
+
6
+ class Ink < Octopress::Command
7
+
8
+ def self.init_with_program(p)
9
+ p.command(:ink) do |c|
10
+ c.syntax "octopress ink [options]"
11
+ c.description "Get about octopress ink plugins"
12
+
13
+ Info.process_command(c)
14
+
15
+ c.action do |args, options|
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
@@ -0,0 +1,19 @@
1
+ module Octopress
2
+ module Ink
3
+ module Commands
4
+ module CommandHelpers
5
+ def self.add_asset_options(c)
6
+ c.option "layouts", "--layouts", "List only layouts"
7
+ c.option "includes", "--includes", "List only includes"
8
+ c.option "pages", "--pages", "List only pages"
9
+ c.option "stylesheets", "--stylesheets", "List only stylesheets"
10
+ c.option "sass", "--sass", "List only Sass files"
11
+ c.option "javascripts", "--javascripts", "List only Javascripts"
12
+ c.option "images", "--images", "List only images"
13
+ c.option "fonts", "--fonts", "List only fonts"
14
+ c.option "files", "--files", "List only files"
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ module Octopress
2
+ module Ink
3
+ module Commands
4
+ class Info
5
+ def self.process_command(p)
6
+ p.command(:info) do |c|
7
+ c.syntax "octopress ink info [plugin] [options]"
8
+ c.description "Get info about octopress ink plugins"
9
+ CommandHelpers.add_asset_options(c)
10
+
11
+ c.action do |args, options|
12
+ if args.empty?
13
+ Octopress::Ink.info
14
+ else
15
+ name = args.first
16
+ puts Octopress::Ink.plugin_info(name, options)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,130 +1,133 @@
1
1
  module Octopress
2
- module Filters
3
-
2
+ module Ink
3
+ module Filters
4
+
4
5
 
5
- # Returns the site's config root or '/' if the config isn't set
6
- #
7
- def root
8
- root_url = Plugins.site.config['root']
9
- root_url.nil? ? '/' : File.join('/', root_url)
10
- end
6
+ # Returns the site's config root or '/' if the config isn't set
7
+ #
8
+ def root
9
+ root_url = Plugins.site.config['root']
10
+ root_url.nil? ? '/' : File.join('/', root_url)
11
+ end
11
12
 
12
- # Prepends input with a url fragment
13
- #
14
- # input - An absolute url, e.g. /images/awesome.gif
15
- # url - The fragment to prepend the input, e.g. /blog
16
- #
17
- # Returns the modified url, e.g /blog
18
- #
19
- def expand_url(input, url=nil)
20
- url ||= root
21
- if input =~ /^#{url}/
22
- input
23
- else
24
- File.join(url, input)
13
+ # Prepends input with a url fragment
14
+ #
15
+ # input - An absolute url, e.g. /images/awesome.gif
16
+ # url - The fragment to prepend the input, e.g. /blog
17
+ #
18
+ # Returns the modified url, e.g /blog
19
+ #
20
+ def expand_url(input, url=nil)
21
+ url ||= root
22
+ if input =~ /^#{url}/
23
+ input
24
+ else
25
+ File.join(url, input)
26
+ end
25
27
  end
26
- end
27
28
 
28
- # Prevent orphans in text by inserting a non-breaking space between the two last words of a string.
29
- def unorphan(input)
30
- input.sub(/\s+(\S+)\s*$/, '&nbsp;\1')
31
- end
29
+ # Prevent orphans in text by inserting a non-breaking space between the two last words of a string.
30
+ def unorphan(input)
31
+ input.sub(/\s+(\S+)\s*$/, '&nbsp;\1')
32
+ end
32
33
 
33
- # Prepend all absolute urls with a url fragment
34
- #
35
- # input - The content of a page or post
36
- # url - The fragment to prepend absolute urls
37
- #
38
- # Returns input with modified urls
39
- #
40
- def expand_urls(input, url=nil)
41
- url ||= root
42
- input.gsub /(\s+(href|src)\s*=\s*["|']{1})(\/[^\"'>]*)/ do
43
- $1 + expand_url($3, url)
34
+ # Prepend all absolute urls with a url fragment
35
+ #
36
+ # input - The content of a page or post
37
+ # url - The fragment to prepend absolute urls
38
+ #
39
+ # Returns input with modified urls
40
+ #
41
+ def expand_urls(input, url=nil)
42
+ url ||= root
43
+ input.gsub /(\s+(href|src)\s*=\s*["|']{1})(\/[^\"'>]*)/ do
44
+ $1 + expand_url($3, url)
45
+ end
44
46
  end
45
- end
46
47
 
47
- # Prepend all urls with the full site url
48
- #
49
- # input - The content of a page or post
50
- #
51
- # Returns input with all urls expanded to include the full site url
52
- # e.g. /images/awesome.gif => http://example.com/images/awesome.gif
53
- #
54
- def full_urls(input)
55
- url = Plugins.site.config['url']
56
- if url.nil?
57
- raise IOError.new "Could not expand urls: Please add your published url to your _config.yml, eg url: http://example.com/"
58
- else
59
- expand_urls(input, url)
48
+ # Prepend all urls with the full site url
49
+ #
50
+ # input - The content of a page or post
51
+ #
52
+ # Returns input with all urls expanded to include the full site url
53
+ # e.g. /images/awesome.gif => http://example.com/images/awesome.gif
54
+ #
55
+ def full_urls(input)
56
+ url = Plugins.site.config['url']
57
+ if url.nil?
58
+ raise IOError.new "Could not expand urls: Please add your published url to your _config.yml, eg url: http://example.com/"
59
+ else
60
+ expand_urls(input, url)
61
+ end
60
62
  end
61
- end
62
-
63
- # Prepend a url with the full site url
64
- #
65
- # input - a url
66
- #
67
- # Returns input with all urls expanded to include the full site url
68
- # e.g. /images/awesome.gif => http://example.com/images/awesome.gif
69
- #
70
- def full_url(input)
71
- url = Plugins.site.config['url']
72
- if url.nil?
73
- raise IOError.new "Could not expand url in #{input}: Please add your site's published url to your _config.yml, eg url: http://example.com/"
74
- else
75
- expand_url(input, url)
63
+
64
+ # Prepend a url with the full site url
65
+ #
66
+ # input - a url
67
+ #
68
+ # Returns input with all urls expanded to include the full site url
69
+ # e.g. /images/awesome.gif => http://example.com/images/awesome.gif
70
+ #
71
+ def full_url(input)
72
+ url = Plugins.site.config['url']
73
+ if url.nil?
74
+ raise IOError.new "Could not expand url in #{input}: Please add your site's published url to your _config.yml, eg url: http://example.com/"
75
+ else
76
+ expand_url(input, url)
77
+ end
76
78
  end
77
- end
78
79
 
79
- # Truncate a string at the <!--more--> marker
80
- # input - The content of a post or page
81
- #
82
- # Returns only the content preceeding the marker
83
- #
84
- def excerpt(input)
85
- if input.index(/<!--\s*more\s*-->/i)
86
- input.split(/<!--\s*more\s*-->/i)[0]
87
- else
88
- input
80
+ # Truncate a string at the <!--more--> marker
81
+ # input - The content of a post or page
82
+ #
83
+ # Returns only the content preceeding the marker
84
+ #
85
+ def excerpt(input)
86
+ if input.index(/<!--\s*more\s*-->/i)
87
+ input.split(/<!--\s*more\s*-->/i)[0]
88
+ else
89
+ input
90
+ end
89
91
  end
90
- end
91
92
 
92
- # Checks for excerpt markers (helpful for template conditionals)
93
- #
94
- # input - The content of a page or post
95
- #
96
- # Returns true/false if the excerpt marker is found
97
- #
98
- def has_excerpt(input)
99
- input =~ /<!--\s*more\s*-->/i ? true : false
100
- end
93
+ # Checks for excerpt markers (helpful for template conditionals)
94
+ #
95
+ # input - The content of a page or post
96
+ #
97
+ # Returns true/false if the excerpt marker is found
98
+ #
99
+ def has_excerpt(input)
100
+ input =~ /<!--\s*more\s*-->/i ? true : false
101
+ end
101
102
 
102
- # Escapes HTML content for XML
103
- def cdata_escape(input)
104
- input.gsub(/<!\[CDATA\[/, '&lt;![CDATA[').gsub(/\]\]>/, ']]&gt;')
105
- end
103
+ # Escapes HTML content for XML
104
+ def cdata_escape(input)
105
+ input.gsub(/<!\[CDATA\[/, '&lt;![CDATA[').gsub(/\]\]>/, ']]&gt;')
106
+ end
106
107
 
107
- # Returns a title cased string based on John Gruber's title case http://daringfireball.net/2008/08/title_case_update
108
- def titlecase(input)
109
- input.titlecase
110
- end
108
+ # Returns a title cased string based on John Gruber's title case http://daringfireball.net/2008/08/title_case_update
109
+ def titlecase(input)
110
+ input.titlecase
111
+ end
111
112
 
112
- # Formats a string for use as a css classname, removing illegal characters
113
- def classify(input)
114
- input.gsub(/ /,'-').gsub(/[^\w-]/,'').downcase
115
- end
113
+ # Formats a string for use as a css classname, removing illegal characters
114
+ def classify(input)
115
+ input.gsub(/ /,'-').gsub(/[^\w-]/,'').downcase
116
+ end
116
117
 
117
- # Remove empty lines
118
- def compact_newlines(input)
119
- input.gsub(/\n{2,}/, "\n").gsub(/^ +\n/,"")
120
- end
118
+ # Remove empty lines
119
+ def compact_newlines(input)
120
+ input.gsub(/\n{2,}/, "\n").gsub(/^ +\n/,"")
121
+ end
121
122
 
122
- # Join newlines
123
- def join_lines(input, separator='')
124
- compact_newlines(input).strip.gsub(/\s*\n\s*/, separator)
125
- end
123
+ # Join newlines
124
+ def join_lines(input, separator='')
125
+ compact_newlines(input).strip.gsub(/\s*\n\s*/, separator)
126
+ end
126
127
 
127
- module_function :root, :expand_url, :expand_urls, :full_url, :full_urls, :excerpt, :cdata_escape, :titlecase, :classify, :join_lines, :compact_newlines, :unorphan
128
- public :expand_url, :expand_urls, :full_url, :full_urls, :excerpt, :cdata_escape, :titlecase, :classify, :join_lines, :compact_newlines, :unorphan
128
+ module_function :root, :expand_url, :expand_urls, :full_url, :full_urls, :excerpt, :cdata_escape, :titlecase, :classify, :join_lines, :compact_newlines, :unorphan
129
+ public :expand_url, :expand_urls, :full_url, :full_urls, :excerpt, :cdata_escape, :titlecase, :classify, :join_lines, :compact_newlines, :unorphan
130
+ end
129
131
  end
130
132
  end
133
+