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.
- checksums.yaml +4 -4
- data/lib/octopress-ink.rb +92 -37
- data/lib/octopress-ink/assets.rb +12 -10
- data/lib/octopress-ink/assets/asset.rb +91 -80
- data/lib/octopress-ink/assets/config.rb +29 -27
- data/lib/octopress-ink/assets/include.rb +11 -9
- data/lib/octopress-ink/assets/javascript.rb +7 -4
- data/lib/octopress-ink/assets/layout.rb +16 -11
- data/lib/octopress-ink/assets/page.rb +32 -30
- data/lib/octopress-ink/assets/root.rb +17 -15
- data/lib/octopress-ink/assets/sass.rb +48 -46
- data/lib/octopress-ink/assets/stylesheet.rb +25 -23
- data/lib/octopress-ink/commands.rb +23 -0
- data/lib/octopress-ink/commands/helpers.rb +19 -0
- data/lib/octopress-ink/commands/info.rb +24 -0
- data/lib/octopress-ink/filters.rb +112 -109
- data/lib/octopress-ink/generators/plugin_assets.rb +8 -6
- data/lib/octopress-ink/helpers.rb +7 -5
- data/lib/octopress-ink/helpers/conditional.rb +16 -14
- data/lib/octopress-ink/helpers/content_for.rb +23 -20
- data/lib/octopress-ink/helpers/path.rb +51 -48
- data/lib/octopress-ink/helpers/var.rb +82 -80
- data/lib/octopress-ink/jekyll/hooks.rb +2 -2
- data/lib/octopress-ink/jekyll/page.rb +38 -35
- data/lib/octopress-ink/jekyll/static_file.rb +18 -16
- data/lib/octopress-ink/jekyll/static_file_content.rb +8 -6
- data/lib/octopress-ink/plugin.rb +189 -144
- data/lib/octopress-ink/plugins.rb +249 -230
- data/lib/octopress-ink/plugins/stylesheets.rb +37 -35
- data/lib/octopress-ink/tags.rb +16 -14
- data/lib/octopress-ink/tags/abort.rb +15 -12
- data/lib/octopress-ink/tags/assign.rb +21 -19
- data/lib/octopress-ink/tags/capture.rb +26 -24
- data/lib/octopress-ink/tags/content_for.rb +15 -12
- data/lib/octopress-ink/tags/filter.rb +16 -13
- data/lib/octopress-ink/tags/include.rb +40 -38
- data/lib/octopress-ink/tags/javascript.rb +6 -4
- data/lib/octopress-ink/tags/line_comment.rb +6 -3
- data/lib/octopress-ink/tags/render.rb +53 -51
- data/lib/octopress-ink/tags/return.rb +12 -9
- data/lib/octopress-ink/tags/stylesheet.rb +6 -4
- data/lib/octopress-ink/tags/wrap.rb +62 -60
- data/lib/octopress-ink/tags/yield.rb +23 -20
- data/lib/octopress-ink/version.rb +1 -1
- data/octopress-ink.gemspec +1 -1
- data/test/Gemfile +3 -2
- data/test/_config.yml +2 -0
- data/test/plugins/awesome-sauce/plugin.rb +3 -2
- data/test/plugins/test-theme/plugin.rb +3 -2
- metadata +7 -4
@@ -1,9 +1,12 @@
|
|
1
1
|
module Octopress
|
2
|
-
module
|
3
|
-
|
4
|
-
|
5
|
-
|
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
|
3
|
-
|
2
|
+
module Ink
|
3
|
+
module Assets
|
4
|
+
class Layout < Asset
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
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
|
-
|
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
|
-
|
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
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
6
|
-
|
5
|
+
module Ink
|
6
|
+
module Assets
|
7
|
+
class RootAsset < Asset
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
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
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
25
|
+
def theme_load_path
|
26
|
+
File.expand_path(File.join(@root, @type))
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
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
|
-
|
53
|
-
|
54
|
-
|
53
|
+
def destination
|
54
|
+
File.join(@dir, @file.sub(/s.ss/, 'css'))
|
55
|
+
end
|
55
56
|
|
56
|
-
|
57
|
-
|
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
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
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
|
-
|
24
|
-
|
25
|
-
|
24
|
+
def destination
|
25
|
+
File.join(@dir, @file.sub(/@(.+?)\./,'.'))
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
-
|
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
|
3
|
-
|
2
|
+
module Ink
|
3
|
+
module Filters
|
4
|
+
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
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
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
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*$/, ' \1')
|
32
|
+
end
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
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
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
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
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
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
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
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
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
103
|
+
# Escapes HTML content for XML
|
104
|
+
def cdata_escape(input)
|
105
|
+
input.gsub(/<!\[CDATA\[/, '<![CDATA[').gsub(/\]\]>/, ']]>')
|
106
|
+
end
|
106
107
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
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
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
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
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
118
|
+
# Remove empty lines
|
119
|
+
def compact_newlines(input)
|
120
|
+
input.gsub(/\n{2,}/, "\n").gsub(/^ +\n/,"")
|
121
|
+
end
|
121
122
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
123
|
+
# Join newlines
|
124
|
+
def join_lines(input, separator='')
|
125
|
+
compact_newlines(input).strip.gsub(/\s*\n\s*/, separator)
|
126
|
+
end
|
126
127
|
|
127
|
-
|
128
|
-
|
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
|
+
|