md2key 0.3.3 → 0.4.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 +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
|

|
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
|