mindwords 0.5.4 → 0.6.1
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/mindwords.rb +161 -15
- metadata +4 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1513378395921df0332fa183e9f1bbbb4de0effebaa125ac9cbdaaf5c2043a53
|
4
|
+
data.tar.gz: 0fdbe75ed727876a2ba3e62c4d67cf9f21bcd64b61cb252cb795b5ae260d0859
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85b57f0e300b6859f4c98a2263920eb5a65014c74711e021f1c52144d6c32c224df4691d8bef4b90b9a69e7f6a95d67e043ccc1100255ac96c6dfe746a592adb
|
7
|
+
data.tar.gz: dd2ea283e94912e221dfcc463c1f5270ad751b0e7fc968abb6bb19b7dedfe91d29b93fbe3312c96d3726b6d3067b5a7a4d73ee469bf74fc0311423668755edef
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/mindwords.rb
CHANGED
@@ -29,8 +29,30 @@ class MindWords
|
|
29
29
|
s, type = RXFHelper.read raws
|
30
30
|
|
31
31
|
@filepath = raws if type == :file or type == :dfs
|
32
|
-
|
33
|
-
|
32
|
+
lines = s.strip.gsub(/^\n/,'').lines
|
33
|
+
lines.shift if lines.first =~ /<\?mindwords\?>/
|
34
|
+
|
35
|
+
@lines = lines.inject([]) do |r,line|
|
36
|
+
|
37
|
+
# the following does 2 things:
|
38
|
+
# 1. splits words separated by a bar (|) onto their own line
|
39
|
+
# 2. prefixes a word with an underscore if the word is the
|
40
|
+
# same as the hashtag. That way it's not removed by the
|
41
|
+
# redundancy checker
|
42
|
+
|
43
|
+
raw_words, raw_hashtags = line.split(/(?= #)/,2)
|
44
|
+
words = raw_words.split(/ *\| */)
|
45
|
+
hashtags = raw_hashtags.scan(/(?<=#)\w+/)
|
46
|
+
|
47
|
+
words.each do |word|
|
48
|
+
|
49
|
+
linex = (word + raw_hashtags)
|
50
|
+
r << (hashtags.include?(word) ? linex.sub!(/\b#{word}\b/, '_\0') \
|
51
|
+
: linex)
|
52
|
+
end
|
53
|
+
|
54
|
+
r
|
55
|
+
end
|
34
56
|
|
35
57
|
end
|
36
58
|
|
@@ -41,6 +63,10 @@ class MindWords
|
|
41
63
|
def breadcrumb()
|
42
64
|
@parent.attributes[:breadcrumb].split(/ +\/ +/) if @parent
|
43
65
|
end
|
66
|
+
|
67
|
+
def headings()
|
68
|
+
breadcrumb[0..-2]
|
69
|
+
end
|
44
70
|
|
45
71
|
|
46
72
|
def element(id)
|
@@ -63,8 +89,43 @@ class MindWords
|
|
63
89
|
File.write file, to_s()
|
64
90
|
|
65
91
|
end
|
92
|
+
|
93
|
+
# Accepts a list of words with the aim of returning a MindWords document
|
94
|
+
# using matched words with hashtags from the existing MindWords document.
|
95
|
+
#
|
96
|
+
def reflect(raws)
|
97
|
+
|
98
|
+
h = to_h
|
99
|
+
|
100
|
+
missing_words = []
|
101
|
+
|
102
|
+
# add the tags from the main list
|
103
|
+
a = raws.strip.lines.map do |x|
|
104
|
+
if h[x.chomp] then
|
105
|
+
[x.chomp, h[x.chomp]]
|
106
|
+
else
|
107
|
+
missing_words << x
|
108
|
+
nil
|
109
|
+
end
|
110
|
+
end.compact
|
111
|
+
|
112
|
+
# add any linkage words from the tags
|
113
|
+
#
|
114
|
+
a.map(&:last).flatten(1).each do |s|
|
115
|
+
|
116
|
+
a << [s, h[s]] if h[s]
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
# remove suplicates lines and transform it into a raw mindwords format
|
121
|
+
#
|
122
|
+
raws3 = a.uniq.map {|s,tags| [s, tags.map {|x| '#' + x }.join(' ')].join(' ') }.join("\n")
|
123
|
+
|
124
|
+
[MindWords.new(raws3), missing_words]
|
125
|
+
|
126
|
+
end
|
66
127
|
|
67
|
-
def search(keyword)
|
128
|
+
def search(keyword, succinct: true)
|
68
129
|
|
69
130
|
a = @lines.grep(/#{keyword}/i).map do |line|
|
70
131
|
|
@@ -85,9 +146,32 @@ class MindWords
|
|
85
146
|
puts 'a2: ' + a2.inspect if @debug
|
86
147
|
e = element(keyword.downcase.gsub(/ +/,'-'))
|
87
148
|
|
88
|
-
return
|
149
|
+
return MindWords.new(a2.uniq.join, debug: @debug) if e.nil?
|
150
|
+
|
151
|
+
# find and add any linkage support lines
|
152
|
+
#
|
153
|
+
|
154
|
+
a3 = []
|
155
|
+
|
156
|
+
a2.each do |line|
|
157
|
+
|
158
|
+
line.chomp.scan(/#[^ ]+/).each do |hashtag|
|
159
|
+
|
160
|
+
puts 'hashtag: ' + hashtag.inspect if @debug
|
161
|
+
r2 = @lines.grep(/^#{hashtag[1..-1]} #/)
|
162
|
+
a3 << r2.first if r2
|
163
|
+
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
puts 'a2: ' + a2.inspect if @debug
|
168
|
+
a2.concat a3
|
89
169
|
|
90
|
-
|
170
|
+
if succinct then
|
171
|
+
MindWords.new(a2.uniq.join, parent: e, debug: @debug)
|
172
|
+
else
|
173
|
+
MindWords.new(a2.uniq.join, debug: @debug)
|
174
|
+
end
|
91
175
|
|
92
176
|
end
|
93
177
|
|
@@ -129,11 +213,20 @@ class MindWords
|
|
129
213
|
@lines = tag_sort().lines
|
130
214
|
self
|
131
215
|
end
|
216
|
+
|
217
|
+
def to_a()
|
218
|
+
|
219
|
+
@lines.map do |x|
|
220
|
+
s, rawtags = x.split(/(?= #)/,2)
|
221
|
+
[s, rawtags.scan(/(?<=#)\w+/)]
|
222
|
+
end
|
223
|
+
|
224
|
+
end
|
132
225
|
|
133
226
|
def to_h()
|
134
|
-
|
227
|
+
to_a.to_h
|
135
228
|
end
|
136
|
-
|
229
|
+
|
137
230
|
def to_hashtags()
|
138
231
|
@hashtags
|
139
232
|
end
|
@@ -143,6 +236,8 @@ class MindWords
|
|
143
236
|
sort ? a2tree(tree_sort(LineTree.new(@outline).to_a)) : @outline
|
144
237
|
end
|
145
238
|
|
239
|
+
alias to_tree to_outline
|
240
|
+
|
146
241
|
def to_s(colour: false)
|
147
242
|
|
148
243
|
header = "<?mindwords?>\n\n"
|
@@ -155,11 +250,24 @@ class MindWords
|
|
155
250
|
|
156
251
|
header + body
|
157
252
|
|
158
|
-
end
|
253
|
+
end
|
159
254
|
|
160
255
|
def to_words()
|
161
|
-
|
162
|
-
|
256
|
+
|
257
|
+
h = {}
|
258
|
+
|
259
|
+
Rexle.new(to_xml).root.each_recursive do |e|
|
260
|
+
|
261
|
+
h[e.attributes[:title]] = {
|
262
|
+
breadcrumb: e.attributes[:breadcrumb],
|
263
|
+
hashtags: e.attributes[:hashtags]
|
264
|
+
}
|
265
|
+
|
266
|
+
end
|
267
|
+
|
268
|
+
h
|
269
|
+
|
270
|
+
end
|
163
271
|
|
164
272
|
def to_xml()
|
165
273
|
build() unless @xml
|
@@ -174,12 +282,12 @@ class MindWords
|
|
174
282
|
|
175
283
|
@lines.each do |line|
|
176
284
|
|
177
|
-
title, rawtags = line.split(/
|
285
|
+
title, rawtags = line.split(/(?= #)/,2)
|
178
286
|
|
179
287
|
rawtags.scan(/#(\w+)/).flatten(1).each do |rawtag|
|
180
288
|
tag = rawtag.gsub(/ +/, '_')
|
181
289
|
h[tag] ||= []
|
182
|
-
h[tag] << title
|
290
|
+
h[tag] << title.strip
|
183
291
|
end
|
184
292
|
|
185
293
|
end
|
@@ -224,14 +332,30 @@ class MindWords
|
|
224
332
|
|
225
333
|
redundants.compact.each {|x| doc.element(x).delete }
|
226
334
|
|
227
|
-
|
228
335
|
node = if @parent then
|
229
336
|
found = doc.root.element('//' + @parent.name)
|
230
|
-
found ? found : doc.root
|
337
|
+
found ? found.parent : doc.root
|
231
338
|
else
|
232
339
|
doc.root
|
233
340
|
end
|
234
341
|
|
342
|
+
# the following removes any undescore prefix from words which were the
|
343
|
+
# same as the hashtag
|
344
|
+
|
345
|
+
node.root.each_recursive do |e|
|
346
|
+
|
347
|
+
next unless e
|
348
|
+
puts 'e: ' + e.inspect if @debug
|
349
|
+
|
350
|
+
e.attributes[:id] = e.attributes[:id].sub(/^_/,'') if e.attributes[:id]
|
351
|
+
e.attributes[:title] = e.attributes[:title].sub(/^_/,'') if e.attributes[:title]
|
352
|
+
e.value = e.value.sub(/^_/,'')
|
353
|
+
e.name = e.name.sub(/^_/,'')
|
354
|
+
|
355
|
+
end
|
356
|
+
|
357
|
+
# ----
|
358
|
+
|
235
359
|
@outline = treeize node
|
236
360
|
|
237
361
|
node.root.each_recursive do |e|
|
@@ -294,7 +418,7 @@ class MindWords
|
|
294
418
|
|
295
419
|
duplicates.each do |path|
|
296
420
|
|
297
|
-
puts '
|
421
|
+
puts 'pathx: ' + path.inspect if @debug
|
298
422
|
e = doc.element(path)
|
299
423
|
e.delete if e
|
300
424
|
|
@@ -340,3 +464,25 @@ class MindWords
|
|
340
464
|
|
341
465
|
end
|
342
466
|
|
467
|
+
class MindWordsWidget
|
468
|
+
|
469
|
+
def initialize()
|
470
|
+
|
471
|
+
end
|
472
|
+
|
473
|
+
|
474
|
+
# can be used for main entries or a words list
|
475
|
+
#
|
476
|
+
def input(content: '', action: 'mwupdate', target: 'icontent')
|
477
|
+
|
478
|
+
<<EOF
|
479
|
+
<form action='#{action}' method='post' target='#{target}'>
|
480
|
+
<textarea name='content' cols='30' rows='19'>
|
481
|
+
#{content}
|
482
|
+
</textarea>
|
483
|
+
<input type='submit' value='Submit'/>
|
484
|
+
</form>
|
485
|
+
EOF
|
486
|
+
end
|
487
|
+
|
488
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mindwords
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
aWH7D2AmhOpqNwWnPHzWR/yzpigAVTrvpHfRxZleQj6Z/090nIH2KR0RdioMmPFq
|
36
36
|
3+574KQzs/gR9Y5a+iMcvHRN
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2021-
|
38
|
+
date: 2021-04-09 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: line-tree
|
@@ -46,7 +46,7 @@ dependencies:
|
|
46
46
|
version: '0.9'
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.9.
|
49
|
+
version: 0.9.2
|
50
50
|
type: :runtime
|
51
51
|
prerelease: false
|
52
52
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -56,7 +56,7 @@ dependencies:
|
|
56
56
|
version: '0.9'
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.9.
|
59
|
+
version: 0.9.2
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: rxfhelper
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
metadata.gz.sig
CHANGED
Binary file
|