hologram 0.5.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9e4adec839d8a6a2ae3bdb51fad49eae23e42cf6
4
+ data.tar.gz: c49899ab9a578374192073286465bdba4a23f340
5
+ SHA512:
6
+ metadata.gz: 80c5363bd1fef75a8547075b37a933bacf209f65e77896898ebb2d7105dcbe22f3c229a094879c4857fa14d9a69e7fbf6f19ee9145abd26a1b47d73dea6cda20
7
+ data.tar.gz: 9ba3a7facb16ba43a823fcc4d797e8ce95ad824c9a860470b5e065fd8b5a7e57240a8e16ba4d66925724610f70ea6fdad2a2901acc769a83dd8596154c3e6e58
@@ -0,0 +1,21 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .sass-cache
19
+ build
20
+ bin
21
+ !bin/hologram
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hologram.gemspec
4
+ gemspec
@@ -0,0 +1,23 @@
1
+ Copyright (c) 2013, Trulia, Inc.
2
+ All rights reserved.
3
+
4
+ MIT License
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,154 @@
1
+ # Hologram
2
+
3
+ Hologram is a Ruby gem that parses comments in your CSS and turns them into a beautiful style guide.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'hologram'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ If you don't use bundler you can run `gem install hologram`.
16
+
17
+ ## Usage
18
+
19
+ There are two things you need to do to start using hologram:
20
+
21
+ 1. Create a YAML config file for your project
22
+
23
+ 2. Document yourself some code
24
+
25
+ ### Creating a YAML config file
26
+
27
+ Hologram needs a few configuration settings before it can begin to build
28
+ your documentation for you. Once this is set up you can execute hologram by
29
+ simply running:
30
+
31
+ `hologram path/to/your/config.yml` or (using bundler) `bundle exec hologram path/to/your/config.yml`
32
+
33
+ Your config file needs to contain the following key/value pairs
34
+
35
+ * **source**: relative path to your source files
36
+
37
+ * **destination**: relative path to where you want the documentation to be
38
+ built to
39
+
40
+ * **documentation_assets**: The path that contains supporting assets for
41
+ the documentaiton page. This typically includes html fragments (header/footer, etc),
42
+ styleguide specific CSS, javascript and any images.
43
+
44
+ * **custom_markdown**: (optional) this is the filename of a class that extends
45
+ RedCarpet::Render::HTML class. Use this for when you need
46
+ additional classes or html tags for different parts of the page.
47
+
48
+ * **dependencies**: a **list** of relative pathes to a folderes containing any dependencies your style guide has.
49
+ These folders will be copied over into the documentation output directory.
50
+ PUT THE CSS/JS THAT IS ACTUALLY BEING DOCUMENTED HERE
51
+
52
+ ##### Example config file
53
+
54
+ # The directory containing the source files to parse
55
+ source: ../components
56
+
57
+ # The directory that hologram will build to
58
+ destination: ../docs
59
+
60
+ # The assets needed to build/style the docs (includes header.html, footer.html, etc)
61
+ documentation_assets: ../hologram_assets
62
+
63
+ # A custom markdown renderer that extends `RedCarpet::Render::HTML class`
64
+ custom_markdown: trulia_markdown_renderer.rb
65
+
66
+ # Any other asset folders that need to be copied to the destination folder
67
+ # This is where the CSS/JS you are actually documenting should go
68
+ dependencies:
69
+ - ../build
70
+
71
+
72
+
73
+ ###Documenting your styles
74
+
75
+ Hologram will scan any css/scss/less files within your **source** directory.
76
+ It will look for comments that match the following:
77
+
78
+ /*doc
79
+ ---
80
+ title: Buttons
81
+ name: button
82
+ category: Base CSS
83
+ ---
84
+
85
+ Button styles can be applied to any element. Typically you'll want
86
+ to use either a `<button>` or an `<a>` element:
87
+
88
+ ```html_example
89
+ <button class="btn btnDefault">Click</button>
90
+ <a class="btn btnDefault" href="trulia.com">Trulia!</a>
91
+ ```
92
+
93
+ If your button is actually a link to another page, please use the
94
+ `<a>` element, while if your button performs an action, such as
95
+ submitting a form or triggering some javascript event, then use a
96
+ `<button>` element.
97
+
98
+ */
99
+
100
+ The first section of the comment is a yaml block that defines certain
101
+ aspects of the this documentation block. The second part is simply
102
+ markdown as defined by Redcarpet.
103
+
104
+ ####Document YAML section
105
+ The yaml in the doc block can have any key value pair you deem important
106
+ but it specifically looks for the following keys:
107
+
108
+ * **title**: The title to display in the documents
109
+ * **category**: This is the broad category for the component, all
110
+ components in the same category will be written to the same page.
111
+ (Usually named the same as the category but with spaces replaced with
112
+ underscores and lower cased).
113
+ * **name**: This is used for grouping components, by assigning
114
+ a name a component can be referenced in another component as a parent.
115
+ * **parent**: Optional. If this is set the current component will be
116
+ displayed as a section within the parent's documentation.
117
+
118
+
119
+ ###Documentation Assets
120
+
121
+ The documentation assets folder contains the html, css, js and images
122
+ you'll need for making your style guide look beautiful.
123
+
124
+ Hologram doesn't care too much about to what is in here as it is intended
125
+ to be custom for your style guide.
126
+
127
+ However, it does look for two files called header.html and footer.html.
128
+ These are html fragments that will be used when creating a new category page.
129
+ `header.html` will be copied to the beginning to the page and `footer.html`
130
+ will be copied to the bottom of the page. This gives you control of how you
131
+ will navigate your docs and lets you include any css, disclaimer text, and
132
+ whatever else you need on each page.
133
+
134
+ #####Styling Your Code Examples
135
+
136
+ Hologram uses [pygments.rb](https://github.com/tmm1/pygments.rb) gem to provide
137
+ syntax highlighting for code examples. One of the assets that you probably want
138
+ to include in your documentation assets folder is a css file that styles the
139
+ "pygmentized" code examples. We use `github.css` which can be found along with the
140
+ css we use to style code blocks [here](https://github.com/trulia/hologram-example/tree/gh-pages/hologram_assets/doc_assets/css).
141
+
142
+ ## Contributing
143
+
144
+ 1. Fork it
145
+ 2. Create your feature/bug fix branch (`git checkout -b my-new-feature`)
146
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
147
+ 4. Push to the branch (`git push origin my-new-feature`)
148
+ 5. Create new Pull Request
149
+
150
+
151
+ ## License
152
+ [Hologram is licensed under the MIT License](https://github.com/trulia/hologram/blob/master/LICENSE.txt)
153
+
154
+
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'hologram/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "hologram"
8
+ spec.version = Hologram::VERSION
9
+ spec.authors = ["JD Cantrell", "August Flanagan"]
10
+ spec.email = ["jcantrell@trulia.com"]
11
+ spec.description = %q{Build doc type things}
12
+ spec.summary = %q{Build document type things.}
13
+ spec.homepage = "http://trulia.github.io/hologram"
14
+ spec.license = "MIT"
15
+
16
+ spec.add_dependency "redcarpet", "~> 2.2.2"
17
+ spec.add_dependency "sass", "~> 3.2.7"
18
+ spec.add_dependency "pygments.rb", "~> 0.4.2"
19
+
20
+ spec.files = `git ls-files`.split($/)
21
+ spec.executables = ['hologram']
22
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
23
+ spec.require_paths = ["lib"]
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.3"
26
+ spec.add_development_dependency "rake"
27
+ end
@@ -0,0 +1,319 @@
1
+ # Copyright (c) 2013, Trulia, Inc.
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are met:
6
+ # * Redistributions of source code must retain the above copyright
7
+ # notice, this list of conditions and the following disclaimer.
8
+ # * Redistributions in binary form must reproduce the above copyright
9
+ # notice, this list of conditions and the following disclaimer in the
10
+ # documentation and/or other materials provided with the distribution.
11
+ # * Neither the name of the Trulia, Inc. nor the
12
+ # names of its contributors may be used to endorse or promote products
13
+ # derived from this software without specific prior written permission.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
16
+ # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17
+ # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18
+ # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL TRULIA, INC. BE
19
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
22
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24
+ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
+
27
+ require "hologram/version"
28
+
29
+ require 'redcarpet'
30
+ require 'yaml'
31
+ require 'pygments'
32
+ require 'fileutils'
33
+ require 'pathname'
34
+
35
+ require 'hologram_markdown_renderer'
36
+
37
+ module Hologram
38
+
39
+
40
+ class DocumentBlock
41
+ attr_accessor :name, :parent, :children, :title, :category, :markdown, :output_file, :config
42
+
43
+ def initialize(config = nil, markdown = nil)
44
+ @children = {}
45
+ set_members(config, markdown) if config and markdown
46
+ end
47
+
48
+ def set_members(config, markdown)
49
+ @name = config['name']
50
+ @parent = config['parent']
51
+ @category = config['category']
52
+ @title = config['title']
53
+ @markdown = markdown
54
+ end
55
+
56
+ def is_valid?
57
+ @name && @markdown
58
+ end
59
+ end
60
+
61
+
62
+ class Builder
63
+ attr_accessor :doc_blocks, :config, :pages
64
+
65
+ def init(args)
66
+ @doc_blocks, @pages = {}, {}
67
+ begin
68
+ @config = args ? YAML::load_file(args[0]) : YAML::load_file('hologram_config.yml')
69
+ validate_config
70
+
71
+ #TODO: maybe this should move into build_docs
72
+ current_path = Dir.pwd
73
+ base_path = Pathname.new(args[0])
74
+ Dir.chdir(base_path.dirname)
75
+
76
+ build_docs
77
+
78
+ Dir.chdir(current_path)
79
+ puts "Build successful. (-: ".green
80
+ rescue Errno::ENOENT
81
+ display_error("Could not load config file.")
82
+ rescue RuntimeError => e
83
+ display_error("#{e}")
84
+ end
85
+ end
86
+
87
+
88
+ private
89
+ def build_docs
90
+ # Create the output directory if it doesn't exist
91
+ FileUtils.mkdir_p(config['destination']) unless File.directory?(config['destination'])
92
+
93
+ input_directory = Pathname.new(config['source']).realpath
94
+ output_directory = Pathname.new(config['destination']).realpath
95
+ doc_assets = Pathname.new(config['documentation_assets']).realpath
96
+
97
+ process_dir(input_directory)
98
+
99
+ build_pages_from_doc_blocks(@doc_blocks)
100
+ write_docs(output_directory, doc_assets)
101
+
102
+ # Copy over dependencies
103
+ if config['dependencies']
104
+ config['dependencies'].each do |dir|
105
+ dirpath = Pathname.new(dir).realpath
106
+ if Dir.exists?("#{dir}")
107
+ `rm -rf #{output_directory}/#{dirpath.basename}`
108
+ `cp -R #{dirpath} #{output_directory}/#{dirpath.basename}`
109
+ end
110
+ end
111
+ end
112
+
113
+ Dir.foreach(doc_assets) do |item|
114
+ # ignore . and .. directories
115
+ next if item == '.' or item == '..'
116
+ `rm -rf #{output_directory}/#{item}`
117
+ `cp -R #{doc_assets}/#{item} #{output_directory}/#{item}`
118
+ end
119
+ end
120
+
121
+
122
+ def process_dir(base_directory)
123
+ #get all directories in our library folder
124
+ directories = Dir.glob("#{base_directory}/**/*/")
125
+ directories.unshift(base_directory)
126
+
127
+ directories.each do |directory|
128
+ # filter and sort the files in our directory
129
+ files = []
130
+ Dir.foreach(directory).select{ |file| is_supported_file_type?(file) }.each do |file|
131
+ files << file
132
+ end
133
+ files.sort!
134
+ process_files(files, directory)
135
+ end
136
+ end
137
+
138
+
139
+ def process_files(files, directory)
140
+ files.each do |input_file|
141
+ if input_file.end_with?('md')
142
+ @pages[File.basename(input_file, '.md') + '.html'] = File.read("#{directory}/#{input_file}")
143
+ else
144
+ process_file("#{directory}/#{input_file}")
145
+ end
146
+ end
147
+ end
148
+
149
+
150
+ def process_file(file)
151
+ file_str = File.read(file)
152
+ # get any comment blocks that match the pattern /*doc ... */
153
+ hologram_comments = file_str.scan(/^\s*\/\*doc(.*?)\*\//m)
154
+ return unless hologram_comments
155
+
156
+ hologram_comments.each do |comment_block|
157
+ doc_block = build_doc_block(comment_block[0])
158
+ add_doc_block_to_collection(doc_block) if doc_block
159
+ end
160
+ end
161
+
162
+
163
+ # this should throw an error if we have a match, but now yaml_match
164
+ def build_doc_block(comment_block)
165
+ yaml_match = /^\s*---\s(.*?)\s---$/m.match(comment_block)
166
+ return unless yaml_match
167
+ markdown = comment_block.sub(yaml_match[0], '')
168
+ config = YAML::load(yaml_match[0])
169
+ if config['name'].nil?
170
+ puts "Missing required name config value. This hologram comment will be skipped. \n #{config.inspect}"
171
+ else
172
+ doc_block = DocumentBlock.new(config, markdown)
173
+ end
174
+ end
175
+
176
+
177
+ def add_doc_block_to_collection(doc_block)
178
+ return unless doc_block.is_valid?
179
+ if doc_block.parent.nil?
180
+ #parent file
181
+ begin
182
+ doc_block.output_file = get_file_name(doc_block.category)
183
+ rescue NoMethodError => e
184
+ display_error("No output file specified. Missing category? \n #{doc_block.inspect}")
185
+ end
186
+
187
+ @doc_blocks[doc_block.name] = doc_block;
188
+ doc_block.markdown = "\n\n# #{doc_block.title}" + doc_block.markdown
189
+ else
190
+ # child file
191
+ parent_doc_block = @doc_blocks[doc_block.parent]
192
+ if parent_doc_block
193
+ doc_block.markdown = "\n\n## #{doc_block.title}" + doc_block.markdown
194
+ parent_doc_block.children[doc_block.name] = doc_block
195
+ else
196
+ @doc_blocks[doc_block.parent] = DocumentBlock.new()
197
+ end
198
+ end
199
+ end
200
+
201
+
202
+ def build_pages_from_doc_blocks(doc_blocks, output_file = nil)
203
+ doc_blocks.sort.map do |key, doc_block|
204
+ output_file = doc_block.output_file || output_file
205
+ @pages[output_file] ||= ""
206
+ @pages[output_file] << doc_block.markdown
207
+ if doc_block.children
208
+ build_pages_from_doc_blocks(doc_block.children, output_file)
209
+ end
210
+ end
211
+ end
212
+
213
+
214
+ def write_docs(output_directory, doc_assets)
215
+ # load the markdown renderer we are going to use
216
+ renderer = get_markdown_renderer
217
+
218
+ #generate html from markdown
219
+ @pages.each do |file_name, markdown|
220
+ fh = get_fh(output_directory, file_name)
221
+
222
+ # generate doc nav html
223
+ if File.exists?("#{doc_assets}/header.html")
224
+ fh.write(File.read("#{doc_assets}/header.html"))
225
+ end
226
+
227
+ # write the docs
228
+ fh.write(renderer.render(markdown))
229
+
230
+ # write the footer
231
+ if File.exists?("#{doc_assets}/footer.html")
232
+ fh.write(File.read("#{doc_assets}/footer.html"))
233
+ end
234
+ fh.close()
235
+ end
236
+ end
237
+
238
+
239
+ def get_markdown_renderer
240
+ if config['custom_markdown'].nil?
241
+ renderer = Redcarpet::Markdown.new(HologramMarkdownRenderer, { :fenced_code_blocks => true, :tables => true })
242
+ else
243
+ begin
244
+ load config['custom_markdown']
245
+ renderer_class = File.basename(config['custom_markdown'], '.rb').split(/_/).map(&:capitalize).join
246
+ puts "Custom markdown renderer #{renderer_class} loaded."
247
+ renderer = Redcarpet::Markdown.new(Module.const_get(renderer_class), { :fenced_code_blocks => true, :tables => true })
248
+ rescue LoadError => e
249
+ display_error("Could not load #{config['custom_markdown']}.")
250
+ rescue NameError => e
251
+ display_error("Class #{renderer_class} not found in #{config['custom_markdown']}.")
252
+ end
253
+ end
254
+ renderer
255
+ end
256
+
257
+
258
+ def validate_config
259
+ unless @config.key?('source')
260
+ raise "No source directory specified in the config file"
261
+ end
262
+
263
+ unless @config.key?('destination')
264
+ raise "No destination directory specified in the config"
265
+ end
266
+
267
+ unless @config.key?('documentation_assets')
268
+ raise "No documentation assets directory specified"
269
+ end
270
+ end
271
+
272
+
273
+ def is_supported_file_type?(file)
274
+ supported_extensions = ['.css', '.scss', '.less', '.sass', '.js', '.md', '.markdown' ]
275
+ supported_extensions.include?(File.extname(file))
276
+ end
277
+
278
+ def display_error(message)
279
+ puts "(\u{256F}\u{00B0}\u{25A1}\u{00B0}\u{FF09}\u{256F}".green + "\u{FE35} \u{253B}\u{2501}\u{253B} ".yellow + " Build not complete.".red
280
+ puts " #{message}"
281
+ exit 1
282
+ end
283
+
284
+
285
+ def get_file_name(str)
286
+ str = str.gsub(' ', '_').downcase + '.html'
287
+ end
288
+
289
+
290
+ def get_fh(output_directory, output_file)
291
+ File.open("#{output_directory}/#{output_file}", 'w')
292
+ end
293
+ end
294
+
295
+ end
296
+
297
+
298
+ class String
299
+ # colorization
300
+ def colorize(color_code)
301
+ "\e[#{color_code}m#{self}\e[0m"
302
+ end
303
+
304
+ def red
305
+ colorize(31)
306
+ end
307
+
308
+ def green
309
+ colorize(32)
310
+ end
311
+
312
+ def yellow
313
+ colorize(33)
314
+ end
315
+
316
+ def pink
317
+ colorize(35)
318
+ end
319
+ end
@@ -0,0 +1,29 @@
1
+ # Copyright (c) 2013, Trulia, Inc.
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are met:
6
+ # * Redistributions of source code must retain the above copyright
7
+ # notice, this list of conditions and the following disclaimer.
8
+ # * Redistributions in binary form must reproduce the above copyright
9
+ # notice, this list of conditions and the following disclaimer in the
10
+ # documentation and/or other materials provided with the distribution.
11
+ # * Neither the name of the Trulia, Inc. nor the
12
+ # names of its contributors may be used to endorse or promote products
13
+ # derived from this software without specific prior written permission.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
16
+ # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17
+ # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18
+ # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL TRULIA, INC. BE
19
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
22
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24
+ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
+
27
+ module Hologram
28
+ VERSION = "0.5.2"
29
+ end
@@ -0,0 +1,41 @@
1
+ # Copyright (c) 2013, Trulia, Inc.
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are met:
6
+ # * Redistributions of source code must retain the above copyright
7
+ # notice, this list of conditions and the following disclaimer.
8
+ # * Redistributions in binary form must reproduce the above copyright
9
+ # notice, this list of conditions and the following disclaimer in the
10
+ # documentation and/or other materials provided with the distribution.
11
+ # * Neither the name of the Trulia, Inc. nor the
12
+ # names of its contributors may be used to endorse or promote products
13
+ # derived from this software without specific prior written permission.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
16
+ # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17
+ # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18
+ # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL TRULIA, INC. BE
19
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
22
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24
+ # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25
+ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
+
27
+ class HologramMarkdownRenderer < Redcarpet::Render::HTML
28
+ def block_code(code, language)
29
+ if language and language.include?('example')
30
+ if language.include?('js')
31
+ # first actually insert the code in the docs so that it will run and make our example work.
32
+ '<script>' + code + '</script>
33
+ <div class="codeBlock jsExample">' + Pygments.highlight(code) + '</div>'
34
+ else
35
+ '<div class="codeExample">' + '<div class="exampleOutput">' + code + '</div>' + '<div class="codeBlock">' + Pygments.highlight(code) + '</div>' + '</div>'
36
+ end
37
+ else
38
+ '<div class="codeBlock">' + Pygments.highlight(code) + '</div>'
39
+ end
40
+ end
41
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hologram
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.2
5
+ platform: ruby
6
+ authors:
7
+ - JD Cantrell
8
+ - August Flanagan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: redcarpet
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: 2.2.2
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: 2.2.2
28
+ - !ruby/object:Gem::Dependency
29
+ name: sass
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 3.2.7
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: 3.2.7
42
+ - !ruby/object:Gem::Dependency
43
+ name: pygments.rb
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: 0.4.2
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 0.4.2
56
+ - !ruby/object:Gem::Dependency
57
+ name: bundler
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ version: '1.3'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '1.3'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ description: Build doc type things
85
+ email:
86
+ - jcantrell@trulia.com
87
+ executables:
88
+ - hologram
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - .gitignore
93
+ - Gemfile
94
+ - LICENSE.txt
95
+ - README.md
96
+ - Rakefile
97
+ - bin/hologram
98
+ - hologram.gemspec
99
+ - lib/hologram.rb
100
+ - lib/hologram/version.rb
101
+ - lib/hologram_markdown_renderer.rb
102
+ homepage: http://trulia.github.io/hologram
103
+ licenses:
104
+ - MIT
105
+ metadata: {}
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 2.0.0
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: Build document type things.
126
+ test_files: []