md2key 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +16 -0
- data/assets/background.png +0 -0
- data/lib/md2key/code.rb +4 -0
- data/lib/md2key/converter.rb +1 -0
- data/lib/md2key/highlight.rb +29 -0
- data/lib/md2key/keynote.rb +54 -2
- data/lib/md2key/markdown.rb +9 -1
- data/lib/md2key/slide.rb +1 -1
- data/lib/md2key/version.rb +1 -1
- data/lib/md2key.rb +2 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5cb41f4bf6d0e31b689ac2d30b05c4e9d70c4ded
|
4
|
+
data.tar.gz: badaf24c7b6bda22c26d32832142050d3a58661a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3a084189e758af94942187ff63d7f4d683b6ea8244ef26ef2693cd36bb54aed4df5af5093d2e8c09478964ac4ebdb80e6187497a64049d1c9fa4a06cc1fd55e
|
7
|
+
data.tar.gz: 58d9ac418c913b0ce95e65a4044033d42d4f84ce2d6725307290b991a82a326261fa7de7666191973fe3db615068ab7233c1d8630d6afd17c5e6c2c577ef5d66
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -41,6 +41,22 @@ You can separate slides with `---` just for readability.
|
|
41
41
|
![](/Applications/Keynote.app/Contents/Resources/keynote.help/Contents/Resources/GlobalArt/AppLanding_KeynoteP4.png)
|
42
42
|
```
|
43
43
|
|
44
|
+
### Insert source code
|
45
|
+
|
46
|
+
<img src='https://i.gyazo.com/7ff36be267652ab567191a6d5cae1d0f.png' width='60%'>
|
47
|
+
|
48
|
+
<pre>
|
49
|
+
# ActiveRecord::Precount
|
50
|
+
|
51
|
+
```rb
|
52
|
+
Tweet.all.precount(:favorites).each do |tweet|
|
53
|
+
p tweet.favorites.count
|
54
|
+
end
|
55
|
+
# SELECT `tweets`.* FROM `tweets`
|
56
|
+
# SELECT COUNT(`favorites`.`tweet_id`), `favorites`.`tweet_id` FROM `favorites` ...
|
57
|
+
```
|
58
|
+
</pre>
|
59
|
+
|
44
60
|
## License
|
45
61
|
|
46
62
|
MIT License
|
Binary file
|
data/lib/md2key/code.rb
ADDED
data/lib/md2key/converter.rb
CHANGED
@@ -0,0 +1,29 @@
|
|
1
|
+
module Md2key
|
2
|
+
class Highlight
|
3
|
+
class << self
|
4
|
+
def pbcopy_highlighted_code(code)
|
5
|
+
ensure_highlight_availability
|
6
|
+
|
7
|
+
file = Tempfile.new(["code", ".#{code.extension}"])
|
8
|
+
file.write(code.source)
|
9
|
+
file.close
|
10
|
+
|
11
|
+
IO.popen(['highlight', '-O', 'rtf', '-K', '28', '-s', 'rdark', '-k', 'Monaco', file.path], 'r+') do |highlight|
|
12
|
+
IO.popen('pbcopy', 'w+') do |pbcopy|
|
13
|
+
pbcopy.write(highlight.read)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
ensure
|
17
|
+
file.delete
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def ensure_highlight_availability
|
23
|
+
return if system('which -s highlight')
|
24
|
+
|
25
|
+
abort "`highlight` is not available. Try `brew install highlight`."
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/md2key/keynote.rb
CHANGED
@@ -4,6 +4,7 @@ module Md2key
|
|
4
4
|
class Keynote
|
5
5
|
COVER_SLIDE_INDEX = 1
|
6
6
|
TEMPLATE_SLIDE_INDEX = 2
|
7
|
+
CODE_BACKGROUND_PATH = File.expand_path('../../assets/background.png', __dir__)
|
7
8
|
|
8
9
|
class << self
|
9
10
|
# You must provide a first slide as a cover slide.
|
@@ -58,7 +59,7 @@ module Md2key
|
|
58
59
|
-- Workaround to select correct master slide. In spite of master slide can be selected by name,
|
59
60
|
-- name property is not limited to be unique.
|
60
61
|
-- So move the focus to second slide and force "make new slide" to use the exact master slide.
|
61
|
-
|
62
|
+
#{move_to_slide(TEMPLATE_SLIDE_INDEX)}
|
62
63
|
|
63
64
|
set newSlide to make new slide
|
64
65
|
tell newSlide
|
@@ -78,6 +79,7 @@ module Md2key
|
|
78
79
|
set docWidth to its width
|
79
80
|
set docHeight to its height
|
80
81
|
|
82
|
+
-- Create temporary slide to fix the image size
|
81
83
|
tell slide #{TEMPLATE_SLIDE_INDEX}
|
82
84
|
set imgFile to make new image with properties { file: theImage, width: docWidth / 3 }
|
83
85
|
tell imgFile
|
@@ -87,14 +89,64 @@ module Md2key
|
|
87
89
|
end tell
|
88
90
|
|
89
91
|
tell theSlide
|
90
|
-
make new image with properties { file: theImage, width: imgWidth, position: { docWidth - imgWidth - 60, docHeight / 2 - imgHeight / 2} }
|
92
|
+
make new image with properties { file: theImage, width: imgWidth, position: { docWidth - imgWidth - 60, docHeight / 2 - imgHeight / 2 } }
|
91
93
|
end tell
|
92
94
|
end tell
|
93
95
|
APPLE
|
94
96
|
end
|
95
97
|
|
98
|
+
def insert_code(code)
|
99
|
+
Highlight.pbcopy_highlighted_code(code)
|
100
|
+
insert_code_background
|
101
|
+
activate_last_slide
|
102
|
+
paste_clipboard
|
103
|
+
end
|
104
|
+
|
96
105
|
private
|
97
106
|
|
107
|
+
def insert_code_background
|
108
|
+
tell_keynote(<<-APPLE.unindent)
|
109
|
+
tell the front document
|
110
|
+
set theSlide to slide #{slides_count}
|
111
|
+
set theImage to POSIX file "#{CODE_BACKGROUND_PATH}"
|
112
|
+
set docWidth to its width
|
113
|
+
set docHeight to its height
|
114
|
+
|
115
|
+
tell theSlide
|
116
|
+
make new image with properties { opacity: 80, file: theImage, width: docWidth - 180, position: { 90, 240 } }
|
117
|
+
end tell
|
118
|
+
end tell
|
119
|
+
APPLE
|
120
|
+
end
|
121
|
+
|
122
|
+
def activate_last_slide
|
123
|
+
tell_keynote(<<-APPLE.unindent)
|
124
|
+
activate
|
125
|
+
|
126
|
+
tell the front document
|
127
|
+
#{move_to_slide(slides_count)}
|
128
|
+
end tell
|
129
|
+
APPLE
|
130
|
+
end
|
131
|
+
|
132
|
+
# Workaround to activate the slide of given index. `show slide [index]`
|
133
|
+
# didn't work...
|
134
|
+
def move_to_slide(index)
|
135
|
+
"move slide #{index} to before slide #{index}"
|
136
|
+
end
|
137
|
+
|
138
|
+
def paste_clipboard
|
139
|
+
execute_applescript(<<-APPLE.unindent)
|
140
|
+
tell application "Keynote"
|
141
|
+
tell application "System Events"
|
142
|
+
tell application process "Keynote"
|
143
|
+
keystroke "v" using { command down }
|
144
|
+
end tell
|
145
|
+
end tell
|
146
|
+
end tell
|
147
|
+
APPLE
|
148
|
+
end
|
149
|
+
|
98
150
|
def slides_count
|
99
151
|
tell_keynote(<<-APPLE.unindent).to_i
|
100
152
|
set n to 0
|
data/lib/md2key/markdown.rb
CHANGED
@@ -56,6 +56,11 @@ module Md2key
|
|
56
56
|
end
|
57
57
|
slide.lines << child.text
|
58
58
|
end
|
59
|
+
when 'pre'
|
60
|
+
node.children.each do |child|
|
61
|
+
next if !child.is_a?(Oga::XML::Element) || child.name != 'code'
|
62
|
+
slide.code = Code.new(child.text, child.attribute('class').value)
|
63
|
+
end
|
59
64
|
when 'hr'
|
60
65
|
# noop
|
61
66
|
end
|
@@ -87,7 +92,10 @@ module Md2key
|
|
87
92
|
end
|
88
93
|
|
89
94
|
def to_xhtml(markdown)
|
90
|
-
redcarpet = Redcarpet::Markdown.new(
|
95
|
+
redcarpet = Redcarpet::Markdown.new(
|
96
|
+
Redcarpet::Render::XHTML,
|
97
|
+
fenced_code_blocks: true,
|
98
|
+
)
|
91
99
|
redcarpet.render(markdown)
|
92
100
|
end
|
93
101
|
end
|
data/lib/md2key/slide.rb
CHANGED
data/lib/md2key/version.rb
CHANGED
data/lib/md2key.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: md2key
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takashi Kokubun
|
@@ -121,10 +121,13 @@ files:
|
|
121
121
|
- Gemfile
|
122
122
|
- README.md
|
123
123
|
- Rakefile
|
124
|
+
- assets/background.png
|
124
125
|
- bin/md2key
|
125
126
|
- lib/md2key.rb
|
126
127
|
- lib/md2key/cli.rb
|
128
|
+
- lib/md2key/code.rb
|
127
129
|
- lib/md2key/converter.rb
|
130
|
+
- lib/md2key/highlight.rb
|
128
131
|
- lib/md2key/keynote.rb
|
129
132
|
- lib/md2key/markdown.rb
|
130
133
|
- lib/md2key/slide.rb
|