cheatset 1.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 69eee59e5e28ab0bd010959193bdbf88ae015d51
4
+ data.tar.gz: 697696929f19a13ca2c2581614de79f6f4288abb
5
+ SHA512:
6
+ metadata.gz: 92128a90b0b06bfc0bfc879efcb8079367c42ee7c577227a120ac81ab298f9a22d3b352b66a3865e15b1348c46700a009de9c1f75e75d58af0acaec4817cc5e4
7
+ data.tar.gz: 810d205ba2a6a4d09a5c23b8ce2a1c31a36df90e132b5db1343b8fb89fd6e5e7092e5a7a39ac36377f6f776f3c3a5798336889ba274e2fc1fcffe0922b94f34d
data/.gitignore ADDED
@@ -0,0 +1,18 @@
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/
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Florian Dütsch
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,75 @@
1
+ # cheatset
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/cheatset.png)](http://badge.fury.io/rb/cheatset)
4
+
5
+ Generate your own cheatsheets as docsets for [Dash](http://kapeli.com/dash)!
6
+ Use this simple command line tool and write your cheatsheets in an easy
7
+ language (Ruby DSL).
8
+
9
+ ## Installation
10
+
11
+ $ gem install cheatset
12
+
13
+ ## Usage
14
+
15
+ Write a file (here `sample.cheatsheet`) containing your cheatsheet data, e.g.:
16
+
17
+ ```ruby
18
+ cheatsheet do
19
+ title 'Sample Cheatsheet' # Will be displayed by Dash in the docset list
20
+ short_name 'sample' # Used for the filename of the docset
21
+ introduction 'My *awesome* cheatsheet' # Can contain markdown and multiple lines
22
+
23
+ # A cheatsheet must consist of categories
24
+ category do
25
+ id 'Windows' # Must be unique and is used as title of the category
26
+
27
+ entry do
28
+ command 'CMD-n' # Optional
29
+ command 'CMD-N' # Can have more than one command
30
+ name 'Create window' # A short name, can contain markdown
31
+ notes 'Some notes' # Optional longer explanation, can contain markdown
32
+ end
33
+ entry do
34
+ command 'CMD-w'
35
+ name 'Close window'
36
+ end
37
+ end
38
+
39
+ category do
40
+ id 'Code'
41
+ entry do
42
+ name 'Code sample'
43
+ notes <<-'END'
44
+ ```ruby
45
+ sample = "You can include code snippets as well"
46
+ ```
47
+ Or anything else **markdown**.
48
+ END
49
+ end
50
+ end
51
+
52
+ notes 'Some notes at the end of the cheatsheet'
53
+ end
54
+ ```
55
+ The following values may contain markdown formatted text:
56
+
57
+ * The `introduction` and the `notes` of the cheatsheet
58
+ * The `name` and the `notes` of the entries
59
+
60
+ For more complete examples look at some of
61
+ [the actual cheatsheets](https://github.com/Kapeli/cheatsheets).
62
+
63
+ To convert this file to a docset, call
64
+
65
+ $ cheatset generate sample.cheatsheet
66
+
67
+
68
+ ## Contributing
69
+
70
+ Yes, please! Open issues and pull requests on the
71
+ [GitHub page](https://github.com/Kapeli/cheatset).
72
+
73
+ ## Thanks
74
+
75
+ [Nix-wie-weg](https://github.com/Nix-wie-weg/dasheets) for the initial code.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/cheatset ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH << File.expand_path('../../lib', __FILE__)
4
+ require 'cheatset'
5
+ require 'cheatset/cli'
6
+ Cheatset::CLI.start
data/cheatset.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'cheatset/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'cheatset'
8
+ spec.version = Cheatset::VERSION
9
+ spec.authors = ['Bogdan Popescu']
10
+ spec.description = 'Generate cheatsheets for Dash'
11
+ spec.summary = spec.description
12
+ spec.homepage = 'https://github.com/Kapeli/cheatset'
13
+ spec.license = 'MIT'
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ['lib']
19
+
20
+ spec.add_development_dependency 'bundler', '~> 1.3'
21
+ spec.add_development_dependency 'rake'
22
+
23
+ spec.add_dependency 'thor'
24
+ spec.add_dependency 'haml', '~> 4.0.3'
25
+ spec.add_dependency 'sqlite3', '~> 1.3.8'
26
+ spec.add_dependency 'plist', '~> 3.1.0'
27
+ spec.add_dependency 'redcarpet', '~> 3.1.1'
28
+ spec.add_dependency 'rouge', '~> 1.3.2'
29
+ spec.add_dependency 'sanitize', '~> 2.0.6'
30
+ spec.add_dependency 'unindent', '~> 1.0'
31
+ end
@@ -0,0 +1,11 @@
1
+ require 'thor'
2
+
3
+ module Cheatset
4
+ class CLI < Thor
5
+ desc 'generate FILE', 'Generates cheatsheet out of a file'
6
+ def generate(file)
7
+ context = Cheatset::DSL::Context.new(file)
8
+ context.generate
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,74 @@
1
+ require 'plist'
2
+ require 'sqlite3'
3
+ require 'fileutils'
4
+ require 'haml'
5
+ require 'ostruct'
6
+
7
+ class Cheatset::Creator
8
+ def initialize(cheatsheet)
9
+ @cheatsheet = cheatsheet
10
+ @docset_path = "#{@cheatsheet.short_name}.docset"
11
+ @path = "#{@docset_path}/Contents/"
12
+ end
13
+
14
+ def generate
15
+ FileUtils.rm_rf(@path)
16
+ FileUtils.mkdir_p(@path)
17
+ generate_html_file
18
+ generate_plist_file
19
+ generate_database
20
+ end
21
+
22
+ private
23
+
24
+ def tpl_path
25
+ File.expand_path('../templates', __FILE__)
26
+ end
27
+
28
+ def generate_html_file
29
+ # HTML
30
+ template = File.read("#{tpl_path}/template.haml")
31
+ engine = Haml::Engine.new(template)
32
+ out = engine.render(@cheatsheet)
33
+ doc_path = "#{@path}Resources/Documents/"
34
+ FileUtils.mkdir_p(doc_path)
35
+ File.open("#{doc_path}index.html", 'w') { |file| file.write(out) }
36
+
37
+ # (static) CSS
38
+ FileUtils.cp("#{tpl_path}/style.css", doc_path)
39
+
40
+ # resources
41
+ FileUtils.cp_r("#{tpl_path}/res", doc_path)
42
+ end
43
+
44
+ def generate_plist_file
45
+ plist_data = {
46
+ 'CFBundleIdentifier' => @cheatsheet.short_name,
47
+ 'CFBundleName' => @cheatsheet.title,
48
+ 'DocSetPlatformFamily' => "cheatsheet",
49
+ 'DashDocSetFamily' => 'cheatsheet',
50
+ 'isDashDocset' => true,
51
+ 'dashIndexFilePath' => 'index.html'
52
+ }
53
+ File.open("#{@path}Info.plist", 'w') do |file|
54
+ file.write(Plist::Emit.dump(plist_data))
55
+ end
56
+ end
57
+
58
+ def generate_database
59
+ sqlite_file = "#{@path}Resources/docSet.dsidx"
60
+ db = SQLite3::Database.new(sqlite_file)
61
+ db.execute <<-SQL
62
+ CREATE TABLE searchIndex(id INTEGER PRIMARY KEY, name TEXT,
63
+ type TEXT, path TEXT);
64
+ CREATE UNIQUE INDEX anchor ON searchIndex (name, type, path);
65
+ SQL
66
+ @cheatsheet.categories.each do |category|
67
+ category.entries.each_with_index do |entry, index|
68
+ sql = 'INSERT INTO searchIndex(name, type, path) VALUES (?, ?, ?)'
69
+ db.execute(sql, entry.tags_stripped_name, 'Guide',
70
+ "index.html\##{category.id}-#{index}")
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,64 @@
1
+ require 'redcarpet'
2
+ require 'rouge'
3
+ require 'rouge/plugins/redcarpet'
4
+ require 'sanitize'
5
+ require 'unindent'
6
+
7
+ class HTML < Redcarpet::Render::HTML
8
+ include Rouge::Plugins::Redcarpet
9
+ end
10
+
11
+ module Cheatset
12
+ module DSL
13
+ class Base
14
+ def initialize(&block)
15
+ instance_eval(&block)
16
+ end
17
+ private
18
+
19
+ def parse_markdown(str)
20
+ markdown = Redcarpet::Markdown.new(HTML, :autolink => true, :hard_wrap =>true, :disable_indented_code_blocks => true, :fenced_code_blocks => true)
21
+ markdown.render(str)
22
+ end
23
+
24
+ def self.define_attrs(*names)
25
+ names.each do |name|
26
+ define_method(name) do |val = nil|
27
+ instance_variable_set("@#{name}", val) if val
28
+ instance_variable_get("@#{name}")
29
+ end
30
+ end
31
+ end
32
+ def self.define_list_attrs(*names)
33
+ names.each do |name|
34
+ define_method(name) do |val = nil|
35
+ if val
36
+ array = instance_variable_get("@#{name}")
37
+ if !array
38
+ instance_variable_set("@#{name}", [val])
39
+ else
40
+ instance_variable_set("@#{name}", array << val)
41
+ end
42
+ end
43
+ instance_variable_get("@#{name}")
44
+ end
45
+ end
46
+ end
47
+ def self.define_markdown_attrs(*names)
48
+ names.each do |name|
49
+ define_method(name) do |val = nil|
50
+ if val
51
+ val = val.unindent
52
+ val = parse_markdown(val)
53
+ instance_variable_set("@#{name}", val)
54
+ end
55
+ instance_variable_get("@#{name}")
56
+ end
57
+ define_method("tags_stripped_#{name}") do
58
+ Sanitize.clean(send(name))
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,16 @@
1
+ module Cheatset
2
+ module DSL
3
+ class Category < Base
4
+ attr_reader :entries
5
+ define_attrs :id
6
+
7
+ def initialize(&block)
8
+ @entries = []
9
+ super(&block)
10
+ end
11
+ def entry(&block)
12
+ @entries << Cheatset::DSL::Entry.new(&block)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ module Cheatset
2
+ module DSL
3
+ class Cheatsheet < Base
4
+ attr_reader :categories
5
+ define_attrs :title, :short_name, :source_url
6
+ define_markdown_attrs :introduction, :notes
7
+
8
+ def initialize(&block)
9
+ @categories = []
10
+ super(&block)
11
+ end
12
+
13
+ def category(&block)
14
+ @categories << Cheatset::DSL::Category.new(&block)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,17 @@
1
+ module Cheatset
2
+ module DSL
3
+ class Context
4
+ def initialize(filename)
5
+ instance_eval(File.read(filename))
6
+ end
7
+ def generate
8
+ Cheatset::Creator.new(@data).generate
9
+ end
10
+ private
11
+
12
+ def cheatsheet(&block)
13
+ @data = Cheatset::DSL::Cheatsheet.new(&block)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,8 @@
1
+ module Cheatset
2
+ module DSL
3
+ class Entry < Base
4
+ define_list_attrs :command
5
+ define_markdown_attrs :name, :notes
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,317 @@
1
+ h1, h2, h3, p, blockquote {
2
+ margin: 0;
3
+ padding: 0; }
4
+
5
+ @font-face {
6
+ font-family: 'Open Sans';
7
+ font-style: normal;
8
+ font-weight: 400;
9
+ src: local("Open Sans"), local("OpenSans"), url(res/Open_Sans.woff) format("woff"); }
10
+
11
+ body {
12
+ font-family: 'Open Sans', sans-serif;
13
+ font-size: 14px;
14
+ color: black;
15
+ background-color: white;
16
+ margin: 0; }
17
+
18
+ code, pre {
19
+ font-family: Menlo, Consolas, "Liberation Mono", Courier, monospace;
20
+ font-size: 13px; }
21
+
22
+ code {
23
+ margin: 0;
24
+ border: 1px solid #ddd;
25
+ background-color: #f8f8f8;
26
+ border-radius: 3px; }
27
+
28
+ code:before, code:after {
29
+ content: "\00a0"; }
30
+
31
+ header {
32
+ color: #efefef;
33
+ background-color: #666666;
34
+ padding: 0px 10px 3px 10px; }
35
+
36
+ h1 {
37
+ font-size: 35px; }
38
+
39
+ footer {
40
+ margin: 1em;
41
+ background-color: #666666;
42
+ color: #efefef;
43
+ border-radius: 10px;
44
+ text-align: center; }
45
+ footer a {
46
+ color: #efefef; }
47
+
48
+ section.notes {
49
+ margin-top: 1em; }
50
+ section.notes h2 {
51
+ color: #666666;
52
+ font-size: 1.5em; }
53
+
54
+ article {
55
+ margin: 2em 1em; }
56
+
57
+ section.category {
58
+ border: 2px solid #666666;
59
+ border-radius: 10px;
60
+ background-color: #666666;
61
+ margin: 2em 0;
62
+ overflow: hidden;
63
+ padding-bottom: 5px; }
64
+ section.category h2 {
65
+ color: white;
66
+ font-size: 1.5em;
67
+ text-align: center;
68
+ margin-top: -2px; }
69
+
70
+ table {
71
+ background-color: white;
72
+ border-collapse: collapse;
73
+ width: 100%; }
74
+
75
+ td {
76
+ padding: 6px 2px 2px 8px; }
77
+
78
+ td.command {
79
+ width: 1%;
80
+ white-space: nowrap;
81
+ vertical-align: top;
82
+ padding: 8px 8px 0 7px; }
83
+ td.command code {
84
+ padding: .1em .6em;
85
+ box-shadow: 0 1px 0px rgba(0, 0, 0, 0.2), 0 0 0 2px white inset;
86
+ border-radius: 3px;
87
+ border: 1px solid #ccc;
88
+ background-color: #efefef;
89
+ color: #333; }
90
+
91
+ td.description .name {
92
+ font-size: 1.2em; }
93
+
94
+ tr:nth-child(even) {
95
+ background: #efefef; }
96
+
97
+ a {
98
+ color: #666666; }
99
+
100
+ p {
101
+ margin: 0 0 4px; }
102
+
103
+ .highlight {
104
+ background-color: #f8f8f8;
105
+ border: 1px solid #ccc;
106
+ padding: 6px 10px;
107
+ border-radius: 3px;
108
+ margin-right: 15px;
109
+ white-space: pre-wrap;
110
+ word-wrap: break-word; }
111
+
112
+ .c {
113
+ color: #999988;
114
+ font-style: italic; }
115
+
116
+ .err {
117
+ color: #a61717;
118
+ background-color: #e3d2d2; }
119
+
120
+ .k {
121
+ font-weight: bold; }
122
+
123
+ .o {
124
+ font-weight: bold; }
125
+
126
+ .cm {
127
+ color: #999988;
128
+ font-style: italic; }
129
+
130
+ .cp {
131
+ color: #999999;
132
+ font-weight: bold; }
133
+
134
+ .c1 {
135
+ color: #999988;
136
+ font-style: italic; }
137
+
138
+ .cs {
139
+ color: #999999;
140
+ font-weight: bold;
141
+ font-style: italic; }
142
+
143
+ .gd {
144
+ color: #000000;
145
+ background-color: #ffdddd; }
146
+
147
+ .gd .x {
148
+ color: #000000;
149
+ background-color: #ffaaaa; }
150
+
151
+ .ge {
152
+ font-style: italic; }
153
+
154
+ .gr {
155
+ color: #aa0000; }
156
+
157
+ .gh {
158
+ color: #999999; }
159
+
160
+ .gi {
161
+ color: #000000;
162
+ background-color: #ddffdd; }
163
+
164
+ .gi .x {
165
+ color: #000000;
166
+ background-color: #aaffaa; }
167
+
168
+ .go {
169
+ color: #888888; }
170
+
171
+ .gp {
172
+ color: #555555; }
173
+
174
+ .gs {
175
+ font-weight: bold; }
176
+
177
+ .gu {
178
+ color: #800080;
179
+ font-weight: bold; }
180
+
181
+ .gt {
182
+ color: #aa0000; }
183
+
184
+ .kc {
185
+ font-weight: bold; }
186
+
187
+ .kd {
188
+ font-weight: bold; }
189
+
190
+ .kn {
191
+ font-weight: bold; }
192
+
193
+ .kp {
194
+ font-weight: bold; }
195
+
196
+ .kr {
197
+ font-weight: bold; }
198
+
199
+ .kt {
200
+ color: #445588;
201
+ font-weight: bold; }
202
+
203
+ .m {
204
+ color: #009999; }
205
+
206
+ .s {
207
+ color: #dd1144; }
208
+
209
+ .n {
210
+ color: #333333; }
211
+
212
+ .na {
213
+ color: teal; }
214
+
215
+ .nb {
216
+ color: #0086b3; }
217
+
218
+ .nc {
219
+ color: #445588;
220
+ font-weight: bold; }
221
+
222
+ .no {
223
+ color: teal; }
224
+
225
+ .ni {
226
+ color: purple; }
227
+
228
+ .ne {
229
+ color: #990000;
230
+ font-weight: bold; }
231
+
232
+ .nf {
233
+ color: #990000;
234
+ font-weight: bold; }
235
+
236
+ .nn {
237
+ color: #555555; }
238
+
239
+ .nt {
240
+ color: navy; }
241
+
242
+ .nv {
243
+ color: teal; }
244
+
245
+ .ow {
246
+ font-weight: bold; }
247
+
248
+ .w {
249
+ color: #bbbbbb; }
250
+
251
+ .mf {
252
+ color: #009999; }
253
+
254
+ .mh {
255
+ color: #009999; }
256
+
257
+ .mi {
258
+ color: #009999; }
259
+
260
+ .mo {
261
+ color: #009999; }
262
+
263
+ .sb {
264
+ color: #dd1144; }
265
+
266
+ .sc {
267
+ color: #dd1144; }
268
+
269
+ .sd {
270
+ color: #dd1144; }
271
+
272
+ .s2 {
273
+ color: #dd1144; }
274
+
275
+ .se {
276
+ color: #dd1144; }
277
+
278
+ .sh {
279
+ color: #dd1144; }
280
+
281
+ .si {
282
+ color: #dd1144; }
283
+
284
+ .sx {
285
+ color: #dd1144; }
286
+
287
+ .sr {
288
+ color: #009926; }
289
+
290
+ .s1 {
291
+ color: #dd1144; }
292
+
293
+ .ss {
294
+ color: #990073; }
295
+
296
+ .bp {
297
+ color: #999999; }
298
+
299
+ .vc {
300
+ color: teal; }
301
+
302
+ .vg {
303
+ color: teal; }
304
+
305
+ .vi {
306
+ color: teal; }
307
+
308
+ .il {
309
+ color: #009999; }
310
+
311
+ .gc {
312
+ color: #999;
313
+ background-color: #EAF2F5; }
314
+
315
+ pre {
316
+ padding: 15px;
317
+ line-height: 17px; }
@@ -0,0 +1,198 @@
1
+ $white: #fff;
2
+ $light_gray: #efefef;
3
+ $dark_gray: #666;
4
+ $black: #000;
5
+ ////////////////////////////////////////////////////////////////////////////////
6
+ h1, h2, h3, p, blockquote {
7
+ margin: 0;
8
+ padding: 0;
9
+ }
10
+ @font-face {
11
+ font-family: 'Open Sans';
12
+ font-style: normal;
13
+ font-weight: 400;
14
+ src: local('Open Sans'), local('OpenSans'), url(res/Open_Sans.woff) format('woff');
15
+ }
16
+
17
+ body {
18
+ font-family: 'Open Sans', sans-serif;
19
+ font-size: 14px;
20
+ color: $black;
21
+ background-color: $white;
22
+ margin: 0;
23
+ }
24
+ code, pre {
25
+ font-family: Menlo, Consolas, "Liberation Mono", Courier, monospace;
26
+ font-size:13px;
27
+ }
28
+
29
+ code {
30
+ margin:0;
31
+ border:1px solid #ddd;
32
+ background-color:#f8f8f8;
33
+ border-radius:3px;
34
+ }
35
+
36
+ code:before, code:after {
37
+ content: "\00a0";
38
+ }
39
+
40
+ ////////////////////////////////////////////////////////////////////////////////
41
+ header {
42
+ color: $light_gray;
43
+ background-color: $dark_gray;
44
+ padding: 0px 10px 3px 10px;
45
+ }
46
+ h1 {
47
+ font-size: 35px;
48
+ }
49
+
50
+ ////////////////////////////////////////////////////////////////////////////////
51
+ footer {
52
+ margin: 1em;
53
+ background-color: $dark_gray;
54
+ color: $light_gray;
55
+ border-radius: 10px;
56
+ text-align: center;
57
+ a {
58
+ color: $light_gray;
59
+ }
60
+ }
61
+ ////////////////////////////////////////////////////////////////////////////////
62
+ // notes
63
+ section.notes {
64
+ margin-top: 1em;
65
+ h2 {
66
+ color: $dark_gray;
67
+ font-size: 1.5em;
68
+ }
69
+ }
70
+ ////////////////////////////////////////////////////////////////////////////////
71
+ article {
72
+ margin: 2em 1em;
73
+ }
74
+ section.category {
75
+ border: 2px solid $dark_gray;
76
+ border-radius: 10px;
77
+ background-color: $dark_gray;
78
+ margin: 2em 0;
79
+ overflow: hidden;
80
+ h2 {
81
+ color: $white;
82
+ font-size: 1.5em;
83
+ text-align: center;
84
+ margin-top: -2px;
85
+ }
86
+ padding-bottom: 5px;
87
+ }
88
+ table {
89
+ background-color: $white;
90
+ border-collapse: collapse;
91
+ width: 100%;
92
+ }
93
+ td {
94
+ padding: 6px 2px 2px 8px;
95
+ }
96
+ td.command {
97
+ width: 1%;
98
+ white-space: nowrap;
99
+ vertical-align: top;
100
+ padding: 8px 8px 0 7px;
101
+ code {
102
+ // Nice key styling:
103
+ // https://developers.google.com/chrome-developer-tools/docs/shortcuts
104
+ padding: .1em .6em;
105
+ box-shadow: 0 1px 0px rgba(0, 0, 0, 0.2), 0 0 0 2px #fff inset;
106
+ border-radius: 3px;
107
+ border: 1px solid #ccc;
108
+ background-color: $light_gray;
109
+ color: #333;
110
+ }
111
+ }
112
+
113
+ td.description {
114
+ .name {
115
+ font-size: 1.2em;
116
+ }
117
+ }
118
+ tr:nth-child(even) {
119
+ background: $light_gray;
120
+ }
121
+
122
+ a {
123
+ color: $dark_gray;
124
+ }
125
+
126
+ p {
127
+ margin:0 0 4px;
128
+ }
129
+
130
+ .highlight { background-color: #f8f8f8; border: 1px solid #ccc; padding: 6px 10px; border-radius: 3px; margin-right:15px; white-space: pre-wrap; word-wrap:break-word;}
131
+ .c { color: #999988; font-style: italic; }
132
+ .err { color: #a61717; background-color: #e3d2d2; }
133
+ .k { font-weight: bold; }
134
+ .o { font-weight: bold; }
135
+ .cm { color: #999988; font-style: italic; }
136
+ .cp { color: #999999; font-weight: bold; }
137
+ .c1 { color: #999988; font-style: italic; }
138
+ .cs { color: #999999; font-weight: bold; font-style: italic; }
139
+ .gd { color: #000000; background-color: #ffdddd; }
140
+ .gd .x { color: #000000; background-color: #ffaaaa; }
141
+ .ge { font-style: italic; }
142
+ .gr { color: #aa0000; }
143
+ .gh { color: #999999; }
144
+ .gi { color: #000000; background-color: #ddffdd; }
145
+ .gi .x { color: #000000; background-color: #aaffaa; }
146
+ .go { color: #888888; }
147
+ .gp { color: #555555; }
148
+ .gs { font-weight: bold; }
149
+ .gu { color: #800080; font-weight: bold; }
150
+ .gt { color: #aa0000; }
151
+ .kc { font-weight: bold; }
152
+ .kd { font-weight: bold; }
153
+ .kn { font-weight: bold; }
154
+ .kp { font-weight: bold; }
155
+ .kr { font-weight: bold; }
156
+ .kt { color: #445588; font-weight: bold; }
157
+ .m { color: #009999; }
158
+ .s { color: #dd1144; }
159
+ .n { color: #333333; }
160
+ .na { color: teal; }
161
+ .nb { color: #0086b3; }
162
+ .nc { color: #445588; font-weight: bold; }
163
+ .no { color: teal; }
164
+ .ni { color: purple; }
165
+ .ne { color: #990000; font-weight: bold; }
166
+ .nf { color: #990000; font-weight: bold; }
167
+ .nn { color: #555555; }
168
+ .nt { color: navy; }
169
+ .nv { color: teal; }
170
+ .ow { font-weight: bold; }
171
+ .w { color: #bbbbbb; }
172
+ .mf { color: #009999; }
173
+ .mh { color: #009999; }
174
+ .mi { color: #009999; }
175
+ .mo { color: #009999; }
176
+ .sb { color: #dd1144; }
177
+ .sc { color: #dd1144; }
178
+ .sd { color: #dd1144; }
179
+ .s2 { color: #dd1144; }
180
+ .se { color: #dd1144; }
181
+ .sh { color: #dd1144; }
182
+ .si { color: #dd1144; }
183
+ .sx { color: #dd1144; }
184
+ .sr { color: #009926; }
185
+ .s1 { color: #dd1144; }
186
+ .ss { color: #990073; }
187
+ .bp { color: #999999; }
188
+ .vc { color: teal; }
189
+ .vg { color: teal; }
190
+ .vi { color: teal; }
191
+ .il { color: #009999; }
192
+ .gc { color: #999; background-color: #EAF2F5; }
193
+
194
+ pre {
195
+ padding: 15px;
196
+ line-height: 17px;
197
+ }
198
+
@@ -0,0 +1,36 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %meta{charset: 'utf-8'}
5
+ %title= title
6
+ %link{rel: 'stylesheet', href: 'style.css'}
7
+ %body
8
+ %header
9
+ %h1= title
10
+
11
+ %article
12
+ %p~ introduction
13
+
14
+ - categories.each do |category|
15
+ %section.category
16
+ %h2= category.id
17
+ %table
18
+ - category.entries.each_with_index do |entry, index|
19
+ %tr{id: "#{category.id}-#{index}"}
20
+ - if entry.command
21
+ %td.command
22
+ - entry.command.each do |command|
23
+ %p
24
+ %code= command
25
+ %td.description
26
+ .name~ entry.name
27
+ .notes~ entry.notes
28
+ - if notes
29
+ %section.notes
30
+ %h2 Notes
31
+ ~ notes
32
+ %footer
33
+ - if source_url
34
+ You can modify and improve this cheatsheet <a href="#{source_url}">here</a>.
35
+ - else
36
+ Generated with <a href='https://github.com/Kapeli/cheatset#readme'>cheatset</a>.
@@ -0,0 +1,3 @@
1
+ module Cheatset
2
+ VERSION = '1.0.0'
3
+ end
data/lib/cheatset.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'cheatset/version'
2
+
3
+ %w(creator dsl/base dsl/cheatsheet dsl/category dsl/context
4
+ dsl/entry).each do |file|
5
+ require "cheatset/#{file}"
6
+ end
metadata ADDED
@@ -0,0 +1,206 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cheatset
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Bogdan Popescu
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: haml
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 4.0.3
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 4.0.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: 1.3.8
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: 1.3.8
83
+ - !ruby/object:Gem::Dependency
84
+ name: plist
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 3.1.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 3.1.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: redcarpet
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 3.1.1
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 3.1.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: rouge
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 1.3.2
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 1.3.2
125
+ - !ruby/object:Gem::Dependency
126
+ name: sanitize
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 2.0.6
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: 2.0.6
139
+ - !ruby/object:Gem::Dependency
140
+ name: unindent
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: '1.0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ~>
151
+ - !ruby/object:Gem::Version
152
+ version: '1.0'
153
+ description: Generate cheatsheets for Dash
154
+ email:
155
+ executables:
156
+ - cheatset
157
+ extensions: []
158
+ extra_rdoc_files: []
159
+ files:
160
+ - .gitignore
161
+ - Gemfile
162
+ - LICENSE.txt
163
+ - README.md
164
+ - Rakefile
165
+ - bin/cheatset
166
+ - cheatset.gemspec
167
+ - lib/cheatset.rb
168
+ - lib/cheatset/cli.rb
169
+ - lib/cheatset/creator.rb
170
+ - lib/cheatset/dsl/base.rb
171
+ - lib/cheatset/dsl/category.rb
172
+ - lib/cheatset/dsl/cheatsheet.rb
173
+ - lib/cheatset/dsl/context.rb
174
+ - lib/cheatset/dsl/entry.rb
175
+ - lib/cheatset/templates/.sass-cache/c0630dfea9543a0a71b68aca4887e98819b89684/style.scssc
176
+ - lib/cheatset/templates/res/Open_Sans.woff
177
+ - lib/cheatset/templates/style.css
178
+ - lib/cheatset/templates/style.scss
179
+ - lib/cheatset/templates/template.haml
180
+ - lib/cheatset/version.rb
181
+ homepage: https://github.com/Kapeli/cheatset
182
+ licenses:
183
+ - MIT
184
+ metadata: {}
185
+ post_install_message:
186
+ rdoc_options: []
187
+ require_paths:
188
+ - lib
189
+ required_ruby_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - '>='
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ required_rubygems_version: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - '>='
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ requirements: []
200
+ rubyforge_project:
201
+ rubygems_version: 2.2.2
202
+ signing_key:
203
+ specification_version: 4
204
+ summary: Generate cheatsheets for Dash
205
+ test_files: []
206
+ has_rdoc: