dasheets 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 62b108dde9128cfabd4d010435fde4a59112ed8a
4
- data.tar.gz: c15937f60fe7ff9d2292969895ef551059b6c0f9
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Njk2ODJjYWYyMzdjOTdiOGFiYzJjMzMzNjYyZmMxODY2OTVlNmVmZQ==
5
+ data.tar.gz: !binary |-
6
+ Y2M4MDIxNGRjOWFlNzQwYjQwYjQ0NDc1MzM1YmUzMGU3MmM0NzliMg==
5
7
  SHA512:
6
- metadata.gz: be969821c53733a94677b70dc1584afaad22448ecbc803d14d5147c1d865f08a44825e166cfe54bf6deff56f975365019baf2eaee7b00e0c153ef06a48dbd472
7
- data.tar.gz: 20d90d53c701d30dfcd18f28198ed55c41f2b41b52b38fecb65de9f906ee36d1ea348a444cecf495ca4bd67ab9bbd7c473d125ee36164f65ea22c324e2af71a0
8
+ metadata.gz: !binary |-
9
+ MTg5YzdlYjhhNDhkM2M2ZmM5MzVlM2Q2ZGI5ZTQ0MmY2NTZmNGFlN2UwYTc4
10
+ ZTY2OTAwZTZkZDc0NTYxNDI0NTBjOTIxZmNhMzM1NTBiNzAwNGU5NjlhMjEx
11
+ NDk0OWVkZjMyMmRjMjUzODA2ZmYyMTNjYjg3YzdiYzRiMzY1OWM=
12
+ data.tar.gz: !binary |-
13
+ YTQ1MzdjYTVhNGY2OGIxODUwZjkzMDQxY2RmNmU4MTFiYzNkY2JiZWExMDY0
14
+ YmUzYWI4MDRmODA2ZGQ4NDk1ZTM5OTg5ZmIyMzIwNDU3MjgxY2EyZjQ4YzVm
15
+ NWU3YTM0ZjdlZTE2MTg2YzA1YjdhYTNmNmMwNWU3MjM4MDM1YWY=
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Dasheets
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/dasheets.png)](http://badge.fury.io/rb/dasheets)
4
+
3
5
  Generate your own cheatsheets as docsets for [Dash](http://kapeli.com/dash)!
4
6
  Use this simple command line tool and write your cheatsheets in an easy
5
7
  language (Ruby DSL).
@@ -12,43 +14,58 @@ language (Ruby DSL).
12
14
 
13
15
  Write a file (here `tmux.cheatsheet`) containing your cheatsheet-data, e. g.:
14
16
 
15
- cheatsheet do
16
- title 'TMUX-Cheatsheet'
17
- short_name 'tmux'
18
-
19
- category do
20
- id 'windows'
21
- entry do
22
- name 'create window'
23
- command 'PREFIX-c'
24
- end
25
- entry do
26
- name 'rename window'
27
- command 'PREFIX-,'
28
- end
29
- entry do
30
- name 'go to next window'
31
- command 'PREFIX-n'
32
- end
33
- end
34
-
35
- category do
36
- id 'panes'
37
- entry do
38
- name 'split horizontally'
39
- command 'PREFIX-|'
40
- notes 'custom mapping'
41
- end
42
- entry do
43
- name 'split horizontally'
44
- command 'PREFIX-%'
45
- end
46
- entry do
47
- name 'split vertically'
48
- command 'PREFIX-"'
49
- end
50
- end
17
+ ```
18
+ cheatsheet do
19
+ title 'tmux cheatsheet'
20
+ short_name 'tmux' # Used for the filename of the docset
21
+ introduction 'My *awesome* cheatsheet for tmux'
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 'PREFIX-c'
29
+ name 'create window' # A short name
30
+ notes 'theses are some notes' # longer explanation
31
+ end
32
+ entry do
33
+ name 'rename window'
34
+ command 'PREFIX-,'
35
+ end
36
+ entry do
37
+ name 'go to next window'
38
+ command 'PREFIX-n'
39
+ end
40
+ end
41
+
42
+ category do
43
+ id 'panes'
44
+ entry do
45
+ name 'split horizontally'
46
+ command 'PREFIX-|'
47
+ notes 'custom mapping'
48
+ end
49
+ entry do
50
+ name 'split horizontally'
51
+ command 'PREFIX-%'
52
+ end
53
+ entry do
54
+ name 'split vertically'
55
+ command 'PREFIX-"'
51
56
  end
57
+ end
58
+
59
+ notes 'Some notes at the end of the cheatsheet'
60
+ end
61
+ ```
62
+ The following values may contain markdown formatted text:
63
+
64
+ * The `introduction` and the `notes` of the cheatsheet
65
+ * The `name` and the `notes` of the entries
66
+
67
+ For more complete examples look at some of
68
+ [my actual cheatsheets](https://github.com/der-flo/my_dasheets).
52
69
 
53
70
  To convert this file to a docset, call
54
71
 
data/TODO CHANGED
@@ -1,5 +1,2 @@
1
- TODO
2
- * Better documentation, more examples, ...
3
- * Even nicer HTML ;-)
4
- * Icon
5
- * http://badge.fury.io/for/rb/dasheets
1
+ Prio 2
2
+ * Table of Contents Support - http://kapeli.com/docsets
@@ -4,4 +4,3 @@ $LOAD_PATH << File.expand_path('../../lib', __FILE__)
4
4
  require 'dasheets'
5
5
  require 'dasheets/cli'
6
6
  Dasheets::CLI.start
7
-
@@ -1,11 +1,7 @@
1
1
  require 'dasheets/version'
2
2
  require 'minidown'
3
3
 
4
- module Dasheets
5
- module DSL
6
- end
7
- end
8
-
9
- %w(creator dsl/cheatsheet dsl/category dsl/context dsl/entry).each do |file|
4
+ %w(creator dsl/base dsl/cheatsheet dsl/category dsl/context
5
+ dsl/entry).each do |file|
10
6
  require "dasheets/#{file}"
11
7
  end
@@ -7,12 +7,14 @@ require 'ostruct'
7
7
  class Dasheets::Creator
8
8
  def initialize(cheatsheet)
9
9
  @cheatsheet = cheatsheet
10
- @path = "#{@cheatsheet.short_name}.docset/Contents/"
10
+ @docset_path = "#{@cheatsheet.short_name}.docset"
11
+ @path = "#{@docset_path}/Contents/"
11
12
  end
12
13
 
13
14
  def generate
14
15
  FileUtils.rm_rf(@path)
15
16
  FileUtils.mkdir_p(@path)
17
+ copy_icon
16
18
  generate_html_file
17
19
  generate_plist_file
18
20
  generate_database
@@ -20,9 +22,15 @@ class Dasheets::Creator
20
22
 
21
23
  private
22
24
 
23
- def generate_html_file
24
- tpl_path = File.expand_path('../templates', __FILE__)
25
+ def tpl_path
26
+ File.expand_path('../templates', __FILE__)
27
+ end
25
28
 
29
+ def copy_icon
30
+ FileUtils.cp("#{tpl_path}/icon.png", @docset_path)
31
+ end
32
+
33
+ def generate_html_file
26
34
  # HTML
27
35
  template = File.read("#{tpl_path}/template.haml")
28
36
  engine = Haml::Engine.new(template)
@@ -0,0 +1,34 @@
1
+ module Dasheets
2
+ module DSL
3
+ class Base
4
+ def initialize(&block)
5
+ instance_eval(&block)
6
+ end
7
+ private
8
+
9
+ def parse_markdown(str)
10
+ Minidown.parse(i).to_html
11
+ end
12
+
13
+ def self.define_attrs(*names)
14
+ names.each do |name|
15
+ define_method(name) do |val = nil|
16
+ instance_variable_set("@#{name}", val) if val
17
+ instance_variable_get("@#{name}")
18
+ end
19
+ end
20
+ end
21
+ def self.define_markdown_attrs(*names)
22
+ names.each do |name|
23
+ define_method(name) do |val = nil|
24
+ if val
25
+ val = Minidown.parse(val).to_html
26
+ instance_variable_set("@#{name}", val)
27
+ end
28
+ instance_variable_get("@#{name}")
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,15 +1,16 @@
1
- class Dasheets::DSL::Category
2
- attr_reader :entries
3
- def initialize(&block)
4
- @entries = []
5
- instance_eval(&block)
6
- end
1
+ module Dasheets
2
+ module DSL
3
+ class Category < Base
4
+ attr_reader :entries
5
+ define_attrs :id
7
6
 
8
- def id(id = nil)
9
- @id = id if id
10
- @id
11
- end
12
- def entry(&block)
13
- @entries << Dasheets::DSL::Entry.new(&block)
7
+ def initialize(&block)
8
+ @entries = []
9
+ super(&block)
10
+ end
11
+ def entry(&block)
12
+ @entries << Dasheets::DSL::Entry.new(&block)
13
+ end
14
+ end
14
15
  end
15
16
  end
@@ -1,28 +1,18 @@
1
- class Dasheets::DSL::Cheatsheet
2
- attr_reader :categories
3
- def initialize(&block)
4
- @categories = []
5
- instance_eval(&block)
6
- end
1
+ module Dasheets
2
+ module DSL
3
+ class Cheatsheet < Base
4
+ attr_reader :categories
5
+ define_attrs :title, :short_name
6
+ define_markdown_attrs :introduction, :notes
7
7
 
8
- def category(&block)
9
- @categories << Dasheets::DSL::Category.new(&block)
10
- end
8
+ def initialize(&block)
9
+ @categories = []
10
+ super(&block)
11
+ end
11
12
 
12
- def title(t = nil)
13
- @title = t if t
14
- @title
15
- end
16
- def short_name(s = nil)
17
- @short_name = s if s
18
- @short_name
19
- end
20
- def introduction(i = nil)
21
- @introduction = Minidown.parse(i).to_html if i
22
- @introduction
23
- end
24
- def notes(n = nil)
25
- @notes = Minidown.parse(n).to_html if n
26
- @notes
13
+ def category(&block)
14
+ @categories << Dasheets::DSL::Category.new(&block)
15
+ end
16
+ end
27
17
  end
28
18
  end
@@ -1,13 +1,17 @@
1
- class Dasheets::DSL::Context
2
- def initialize(filename)
3
- instance_eval(File.read(filename))
4
- end
5
- def generate
6
- Dasheets::Creator.new(@data).generate
7
- end
8
- private
1
+ module Dasheets
2
+ module DSL
3
+ class Context
4
+ def initialize(filename)
5
+ instance_eval(File.read(filename))
6
+ end
7
+ def generate
8
+ Dasheets::Creator.new(@data).generate
9
+ end
10
+ private
9
11
 
10
- def cheatsheet(&block)
11
- @data = Dasheets::DSL::Cheatsheet.new(&block)
12
+ def cheatsheet(&block)
13
+ @data = Dasheets::DSL::Cheatsheet.new(&block)
14
+ end
15
+ end
12
16
  end
13
17
  end
@@ -1,25 +1,8 @@
1
- require 'minidown'
2
-
3
- # TODO: Refactor Minidown usage?
4
-
5
- class Dasheets::DSL::Entry
6
- def initialize(&block)
7
- instance_eval(&block)
8
- end
9
- def name(name = nil)
10
- if name
11
- @name = Minidown.parse(name).to_html
12
- end
13
- @name
14
- end
15
- def command(c = nil)
16
- @command = c if c
17
- @command
18
- end
19
- def notes(n = nil)
20
- if n
21
- @notes = Minidown.parse(n).to_html
1
+ module Dasheets
2
+ module DSL
3
+ class Entry < Base
4
+ define_attrs :command
5
+ define_markdown_attrs :name, :notes
22
6
  end
23
- @notes
24
7
  end
25
8
  end
@@ -1,93 +1,79 @@
1
- /*
2
- #050405
3
- #041F38
4
- #1C4E70
5
- #40738F
6
- #E8F0F8
7
- */
8
-
9
1
  h1, h2, h3, p, blockquote {
10
2
  margin: 0;
11
- padding: 0;
12
- }
3
+ padding: 0; }
4
+
13
5
  body {
14
6
  font-family: 'Open Sans', sans-serif;
15
7
  font-size: 14px;
16
- line-height: 1.5em;
17
- color: #050405;
18
- background-color: #E8F0F8;
19
- margin: 0;
20
- }
8
+ color: black;
9
+ background-color: white;
10
+ margin: 0; }
11
+
12
+ code, pre {
13
+ font-family: 'Droid Sans Mono', monospace; }
21
14
 
22
15
  header {
23
- color: #E8F0F8;
24
- background-color: #041F38;
25
- padding: 1em;
26
- }
27
- article {
28
- margin: 1em;
29
- }
16
+ color: #efefef;
17
+ background-color: #666666;
18
+ padding: 2em 1em 1em 4em; }
19
+
20
+ h1 {
21
+ font-family: Lobster, sans-serif;
22
+ font-size: 60px; }
23
+
30
24
  footer {
31
25
  margin: 1em;
32
- background-color: #1C4E70;
33
- color: #E8F0F8;
34
- padding: .5em;
35
- border-radius: .5em;
36
- text-align: center;
37
- }
38
- footer a {
39
- color: #E8F0F8;
40
- }
26
+ background-color: #666666;
27
+ color: #efefef;
28
+ border-radius: 10px;
29
+ text-align: center; }
30
+ footer a {
31
+ color: #efefef; }
32
+
33
+ article {
34
+ margin: 1em; }
35
+
36
+ section {
37
+ border: 2px solid #666666;
38
+ border-radius: 10px;
39
+ background-color: #666666;
40
+ margin: .5em 0;
41
+ overflow: hidden; }
42
+
43
+ h2 {
44
+ color: white;
45
+ font-size: 1.5em;
46
+ text-align: center; }
41
47
 
42
48
  table {
49
+ background-color: white;
43
50
  border-collapse: collapse;
44
- border: 2px solid #40738F;
45
- border-radius: 10px;
46
- margin-bottom: .1em;
47
- width: 100%;
48
- }
51
+ width: 100%; }
52
+
53
+ td {
54
+ padding: 2px; }
49
55
 
50
- td, th {
51
- padding: .1em .1em 2em .1em;
52
- }
53
56
  td.command {
54
- min-width: 25%;
55
- }
57
+ width: 15%;
58
+ white-space: nowrap;
59
+ vertical-align: top;
60
+ padding: .3em 0 0 .3em; }
61
+ td.command code {
62
+ padding: .1em .6em;
63
+ box-shadow: 0 1px 0px rgba(0, 0, 0, 0.2), 0 0 0 2px white inset;
64
+ border-radius: 3px;
65
+ border: 1px solid #ccc;
66
+ background-color: #efefef;
67
+ color: #333; }
56
68
 
57
- a {
58
- color: #0069d6;
59
- }
60
- p {
61
- margin-bottom: 9px;
62
- }
63
- h1, h2, h3 {
64
- line-height: 36px;
65
- margin: 1em 0 .5em 0;
66
- }
67
- h1 {
68
- font-family: Lobster, sans-serif;
69
- font-size: 48px;
70
- }
71
- h2 {
72
- font-size: 24px;
73
- }
74
- h3 {
75
- font-size: 1.2em;
76
- }
69
+ td.description .name {
70
+ font-size: 1.2em; }
77
71
 
78
- code, pre {
79
- font-family: 'Droid Sans Mono', monospace;
80
- }
81
- code {
82
- background-color: #40738F;
83
- color: #E8F0F8;
84
- padding: .1em .3em;
85
- border-radius: .5em;
86
- font-size: 1.5em;
87
- }
72
+ tr:nth-child(even) {
73
+ background: #efefef; }
88
74
 
89
- th {
90
- color: #E8F0F8;
91
- background-color: #40738F;
92
- }
75
+ a {
76
+ color: #666666; }
93
77
 
78
+ p + p {
79
+ margin-top: .5em; }
@@ -0,0 +1,102 @@
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
+ body {
11
+ font-family: 'Open Sans', sans-serif;
12
+ font-size: 14px;
13
+ color: $black;
14
+ background-color: $white;
15
+ margin: 0;
16
+ }
17
+ code, pre {
18
+ font-family: 'Droid Sans Mono', monospace;
19
+ }
20
+
21
+ ////////////////////////////////////////////////////////////////////////////////
22
+ header {
23
+ color: $light_gray;
24
+ background-color: $dark_gray;
25
+ padding: 2em 1em 1em 4em;
26
+ }
27
+ h1 {
28
+ font-family: Lobster, sans-serif;
29
+ font-size: 60px;
30
+ }
31
+
32
+ ////////////////////////////////////////////////////////////////////////////////
33
+ footer {
34
+ margin: 1em;
35
+ background-color: $dark_gray;
36
+ color: $light_gray;
37
+ border-radius: 10px;
38
+ text-align: center;
39
+ a {
40
+ color: $light_gray;
41
+ }
42
+ }
43
+
44
+ ////////////////////////////////////////////////////////////////////////////////
45
+
46
+ article {
47
+ margin: 1em;
48
+ }
49
+
50
+ section {
51
+ border: 2px solid $dark_gray;
52
+ border-radius: 10px;
53
+ background-color: $dark_gray;
54
+ margin: .5em 0;
55
+ overflow: hidden;
56
+ }
57
+ h2 {
58
+ color: $white;
59
+ font-size: 1.5em;
60
+ text-align: center;
61
+ }
62
+ table {
63
+ background-color: $white;
64
+ border-collapse: collapse;
65
+ width: 100%;
66
+ }
67
+ td {
68
+ padding: 2px;
69
+ }
70
+ td.command {
71
+ width: 15%;
72
+ white-space: nowrap;
73
+ vertical-align: top;
74
+ padding: .3em 0 0 .3em;
75
+ code {
76
+ // Nice key styling:
77
+ // https://developers.google.com/chrome-developer-tools/docs/shortcuts
78
+ padding: .1em .6em;
79
+ box-shadow: 0 1px 0px rgba(0, 0, 0, 0.2), 0 0 0 2px #fff inset;
80
+ border-radius: 3px;
81
+ border: 1px solid #ccc;
82
+ background-color: $light_gray;
83
+ color: #333;
84
+ }
85
+ }
86
+
87
+ td.description {
88
+ .name {
89
+ font-size: 1.2em;
90
+ }
91
+ }
92
+ tr:nth-child(even) {
93
+ background: $light_gray;
94
+ }
95
+
96
+ a {
97
+ color: $dark_gray;
98
+ }
99
+ p + p {
100
+ margin-top: .5em;
101
+ }
102
+
@@ -14,17 +14,16 @@
14
14
  %p= introduction
15
15
 
16
16
  - categories.each do |category|
17
- %table
18
- %tr
19
- %th{colspan: 2}
20
- %h2= category.id
21
- - category.entries.each_with_index do |entry, index|
22
- %tr{id: "#{category.id}-#{index}"}
23
- %td.command
24
- %code= entry.command
25
- %td
26
- %h3= entry.name
27
- %div= entry.notes
17
+ %section
18
+ %h2= category.id
19
+ %table
20
+ - category.entries.each_with_index do |entry, index|
21
+ %tr{id: "#{category.id}-#{index}"}
22
+ %td.command
23
+ %code= entry.command
24
+ %td.description
25
+ .name= entry.name
26
+ .notes= entry.notes
28
27
  - if notes
29
28
  %h2 Notes
30
29
  = notes
@@ -1,3 +1,3 @@
1
1
  module Dasheets
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dasheets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Dütsch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-15 00:00:00.000000000 Z
11
+ date: 2013-12-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,28 +28,28 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
@@ -124,15 +124,17 @@ files:
124
124
  - TODO
125
125
  - bin/dasheets
126
126
  - dasheets.gemspec
127
- - examples/tmux.cheatsheet
128
127
  - lib/dasheets.rb
129
128
  - lib/dasheets/cli.rb
130
129
  - lib/dasheets/creator.rb
130
+ - lib/dasheets/dsl/base.rb
131
131
  - lib/dasheets/dsl/category.rb
132
132
  - lib/dasheets/dsl/cheatsheet.rb
133
133
  - lib/dasheets/dsl/context.rb
134
134
  - lib/dasheets/dsl/entry.rb
135
+ - lib/dasheets/templates/icon.png
135
136
  - lib/dasheets/templates/style.css
137
+ - lib/dasheets/templates/style.scss
136
138
  - lib/dasheets/templates/template.haml
137
139
  - lib/dasheets/version.rb
138
140
  homepage: https://github.com/Nix-wie-weg/dasheets
@@ -145,18 +147,19 @@ require_paths:
145
147
  - lib
146
148
  required_ruby_version: !ruby/object:Gem::Requirement
147
149
  requirements:
148
- - - '>='
150
+ - - ! '>='
149
151
  - !ruby/object:Gem::Version
150
152
  version: '0'
151
153
  required_rubygems_version: !ruby/object:Gem::Requirement
152
154
  requirements:
153
- - - '>='
155
+ - - ! '>='
154
156
  - !ruby/object:Gem::Version
155
157
  version: '0'
156
158
  requirements: []
157
159
  rubyforge_project:
158
- rubygems_version: 2.0.6
160
+ rubygems_version: 2.1.10
159
161
  signing_key:
160
162
  specification_version: 4
161
163
  summary: Generate cheatsheets for Dash
162
164
  test_files: []
165
+ has_rdoc:
@@ -1,38 +0,0 @@
1
- cheatsheet do
2
- title 'TMUX-Cheatsheet'
3
- short_name 'tmux'
4
-
5
- category do
6
- id 'windows'
7
- entry do
8
- name 'create window'
9
- command 'PREFIX-c'
10
- end
11
- entry do
12
- name 'rename window'
13
- command 'PREFIX-,'
14
- end
15
- entry do
16
- name 'go to next window'
17
- command 'PREFIX-n'
18
- end
19
- end
20
-
21
- category do
22
- id 'panes'
23
- entry do
24
- name 'split horizontally'
25
- command 'PREFIX-|'
26
- notes 'custom mapping'
27
- end
28
- entry do
29
- name 'split horizontally'
30
- command 'PREFIX-%'
31
- end
32
- entry do
33
- name 'split vertically'
34
- command 'PREFIX-"'
35
- end
36
- end
37
- end
38
-