md_edit 0.1.9 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/md_edit.rb +66 -32
- data.tar.gz.sig +4 -1
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47045b90019ff71705e40bb300f6a14acc4c4ec0
|
4
|
+
data.tar.gz: ba10aac7d1d29fa69a7b589a13d7e464c35c6cc3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d13ae45845fd8f982284abb6078414d4d92ce269c64b072dbdd4788a574ef6aa82207032bc82ff60c1b2096a1a71c4ebef537783ad25d66c5648a0686c18490
|
7
|
+
data.tar.gz: 96be01978e1caeae144d73d9bb021bf6f062d46d8093934932ea43ce1421102002189fff4a42d91fbe56d1f3b4c506820ded6625c7347d123aec6fcbc5a08177
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/md_edit.rb
CHANGED
@@ -13,13 +13,13 @@ class MdEdit
|
|
13
13
|
|
14
14
|
# pass in a Markdown document or a Markdown filename
|
15
15
|
#
|
16
|
-
def initialize(md, debug: false)
|
16
|
+
def initialize(md, debug: false, root: 'Thoughts')
|
17
17
|
|
18
18
|
@debug = debug
|
19
19
|
|
20
20
|
s, @filename = if md.lines.length == 1 then
|
21
21
|
|
22
|
-
File.write(md, "#
|
22
|
+
File.write(md, "# #{root}\n\n") unless File.exists? md
|
23
23
|
File.exists?(md) ? [File.read(md), md] : md
|
24
24
|
|
25
25
|
else
|
@@ -48,7 +48,8 @@ class MdEdit
|
|
48
48
|
|
49
49
|
key = @sections.keys.grep(/#{s.downcase}/i).first
|
50
50
|
old_value = @sections[key].flatten.join
|
51
|
-
|
51
|
+
heading = last_heading(key)
|
52
|
+
old_section = heading + old_value
|
52
53
|
|
53
54
|
@s.sub!(old_section, '')
|
54
55
|
load_sections(@s)
|
@@ -63,13 +64,17 @@ class MdEdit
|
|
63
64
|
|
64
65
|
value = raw_value.gsub(/\r/,'')
|
65
66
|
|
66
|
-
title = heading ? heading : value.lines.first.chomp
|
67
|
+
title = (heading ? heading : value.lines.first.chomp)[/#+ +(.*)/,1]
|
68
|
+
|
67
69
|
key = @sections.keys.grep(/#{title.downcase}/i).first
|
70
|
+
|
68
71
|
return unless key
|
69
72
|
|
70
73
|
old_value = @sections[key].flatten.join
|
71
74
|
puts 'old_value: ' + old_value.inspect if @debug
|
72
|
-
|
75
|
+
|
76
|
+
heading = last_heading(key)
|
77
|
+
old_section = value =~ /^#+/ ? heading + old_value : old_value
|
73
78
|
puts 'old_section: ' + old_section.inspect if @debug
|
74
79
|
|
75
80
|
@s.sub!(old_section, value)
|
@@ -85,9 +90,14 @@ class MdEdit
|
|
85
90
|
alias edit update
|
86
91
|
|
87
92
|
def find(s, heading: true)
|
88
|
-
|
93
|
+
|
94
|
+
key = @sections.keys.grep(/#{s.downcase}/i).first
|
89
95
|
return unless key
|
90
|
-
|
96
|
+
|
97
|
+
headings = key.lines.first.split(/ > /)
|
98
|
+
title = "%s %s" % ['#' * headings.length, headings.last]
|
99
|
+
a = [title, @sections[key].join]
|
100
|
+
|
91
101
|
heading ? a.join : a
|
92
102
|
end
|
93
103
|
|
@@ -100,6 +110,14 @@ class MdEdit
|
|
100
110
|
def to_h()
|
101
111
|
@h
|
102
112
|
end
|
113
|
+
|
114
|
+
def to_outline(bullets: false)
|
115
|
+
|
116
|
+
a = indentor(@s.scan(/^#+ [^\n]+/).join("\n"))
|
117
|
+
.lines.map {|x| x.sub(/#+ +/,'')}
|
118
|
+
bullets ? a.map{|x| x.sub(/\b/,'- ')} : a.join
|
119
|
+
|
120
|
+
end
|
103
121
|
|
104
122
|
def to_s()
|
105
123
|
@s
|
@@ -107,6 +125,29 @@ class MdEdit
|
|
107
125
|
|
108
126
|
private
|
109
127
|
|
128
|
+
def indentor(s)
|
129
|
+
|
130
|
+
a = s.split(/(?<=\n)(?=#+)/)
|
131
|
+
|
132
|
+
a.map.with_index do |x, i|
|
133
|
+
|
134
|
+
# get the indentation level
|
135
|
+
indent = x[/^#+/].count('#') - 1
|
136
|
+
|
137
|
+
lines = x.lines
|
138
|
+
lines.first.prepend(' ' * indent) +
|
139
|
+
lines[1..-1].map {|y| (' ' * indent) + ' ' + y}.join
|
140
|
+
end.join
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
def last_heading(key)
|
145
|
+
|
146
|
+
a = key.lines.first.split(/ > /)
|
147
|
+
"%s %s" % ['#' * a.length, a.last]
|
148
|
+
|
149
|
+
end
|
150
|
+
|
110
151
|
def load_sections(raw_s)
|
111
152
|
|
112
153
|
# strip out any new lines gaps which are greater than 1
|
@@ -123,25 +164,14 @@ class MdEdit
|
|
123
164
|
|
124
165
|
end
|
125
166
|
|
126
|
-
def parse(
|
167
|
+
def parse(markdown)
|
127
168
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
# get the indentation level
|
133
|
-
indent = x[/^#+/].count('#') - 1
|
134
|
-
|
135
|
-
lines = x.lines
|
136
|
-
lines.first.prepend(' ' * indent) +
|
137
|
-
lines[1..-1].map {|y| (' ' * indent) + ' ' + y}.join
|
138
|
-
end
|
139
|
-
|
140
|
-
puts "a2.join: \n" + a2.join if @debug
|
141
|
-
a3 = LineTree.new(a2.join, ignore_blank_lines: false, ignore_newline: false).to_a
|
142
|
-
puts 'a3: ' + a3.inspect if @debug
|
169
|
+
s = indentor(markdown)
|
170
|
+
puts "s: \n" + s if @debug
|
171
|
+
a = LineTree.new(s, ignore_blank_lines: false, ignore_newline: false).to_a
|
172
|
+
puts 'a: ' + a.inspect if @debug
|
143
173
|
h = {}
|
144
|
-
|
174
|
+
scan a, h
|
145
175
|
|
146
176
|
return h
|
147
177
|
|
@@ -151,22 +181,25 @@ class MdEdit
|
|
151
181
|
File.write @filename, @s if @filename
|
152
182
|
end
|
153
183
|
|
154
|
-
def scan(a, h={})
|
184
|
+
def scan(a, h={}, trail=[])
|
155
185
|
|
156
186
|
a.map do |x|
|
157
187
|
|
158
|
-
|
188
|
+
raw_head = x.first
|
189
|
+
|
190
|
+
if raw_head =~ /^#/ then
|
159
191
|
|
160
|
-
|
161
|
-
|
162
|
-
r = scan(x[1..-1], h)
|
192
|
+
head = raw_head[/^[^\n]+/]
|
163
193
|
|
164
|
-
|
194
|
+
fullkey = trail + [head[/#+ +(.*)/,1]]
|
195
|
+
key = fullkey.join(" > ")
|
196
|
+
h[key] = nil
|
197
|
+
r = scan(x[1..-1], h, fullkey)
|
198
|
+
|
199
|
+
h[key] = ["\n"] + r
|
165
200
|
|
166
201
|
[head, r]
|
167
202
|
|
168
|
-
elsif x.length > 1
|
169
|
-
[head] + scan(x[1..-1])
|
170
203
|
else
|
171
204
|
x.flatten.join
|
172
205
|
end
|
@@ -175,4 +208,5 @@ class MdEdit
|
|
175
208
|
|
176
209
|
end
|
177
210
|
|
211
|
+
|
178
212
|
end
|
data.tar.gz.sig
CHANGED
@@ -1 +1,4 @@
|
|
1
|
-
|
1
|
+
EX�G�����_�w��<��T�)��kbF^���9� C��2����"��잽�X��Щ�����ڞ#[X�섽c��z�i�i�a]/X7�ܹ#
|
2
|
+
]E7�ڀ�y͖���>v�z:/&���u<x��SH��}�jdz^?�Z
|
3
|
+
I�-��/ܔ�H9$e�7�
|
4
|
+
�n�+Y���+�d/�B��X�����
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: md_edit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
R5r1JjTBaaHOaqI14bIkwUSY5q1cO4Wl7HWly80kX2AD8o/tPHvyF9Tx3pBvaboU
|
32
32
|
etnSPHbQwmBvFQ==
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2017-12-
|
34
|
+
date: 2017-12-25 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: line-tree
|
metadata.gz.sig
CHANGED
Binary file
|