mindwords 0.5.3 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0d833b4c7bb6f1226f6c6d5a8489fed1ba6c8d5a2410bbb6df2b61a9285bc4d
4
- data.tar.gz: 0cc6c2b9ac7cb8e829b52ba224d04579ad0fb20eb15b8bcf8c39c2ba365c6a3c
3
+ metadata.gz: aa290828ca8b921917460e6f8958c8b21d461c269a060e63c6079f57090d7d3e
4
+ data.tar.gz: e719d8986ece5f93bc994682a02b8f9826f1b5554349b40402d2a699920ba40b
5
5
  SHA512:
6
- metadata.gz: 6f2608e84d67e2303cc61a349a50147028b54f6f537aefb92bd0a6bf15dade2d5e418b84f3a9a543d545d0235fb65d171fd106ad24e9b6ca7239ecef131a961e
7
- data.tar.gz: bd98ce9223b9343b1c827946f972f5ac1420c79484bf11e26e60f8fead39f42a4323682ed684fcee5e0cefa1239ffd9c387623fff31e99567d3ec7319ecd7e34
6
+ metadata.gz: 407b282223460ffb5585e15c5acaa1b377cefb17350b7626680cafd6d4f742a2ab1a0b19223385f74ca332f2830f5cc618e22fff93d6a704a0a3921b18dfb65c
7
+ data.tar.gz: 1f4c83f14c4e5c2ad51925445edb600a9e60a14482f7b4e057703b8ea980d8e631d5c901ebe49b034db3ce73e7ce0515ef936214e18ba138a93b0aee472f1b93
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
@@ -1,4 +1,3 @@
1
- `X_�ݪFy�$.��u��P�ރEN�@�� �O���#G��E���g�����
2
- ���=˲�7{�ߤ����|�$��,
3
- YX9�qo�Pb��o�~���4�Q��w]v&�@�G��i�G��QFy��ܻs�<��rg}����I ���{AU ��Q���P��3i�,���uiqf� Q��9���+�NT��ng��ļj��gۖF_v������2ySƧ��K��0�I���S
4
- f6R1��)�����w��:�O�0�K5�����IQ�����c��v�@���Z��d:�_`��Q|QN*���kn�]%ڧ1+������4D-���ZH/1�K�'T��3e�ٯ���$��
1
+ p2ua�/&���8�ħ��5 �~m���-��Nr�%fjOQ���)
2
+ ��m�\���^ݹhd�^����L�2�H�nX�C�]�.��F1ڒ����^rV���]S]fw�K�X���,{��luٲ� 8���hLT�����*���갑��u�5�*��.���} "mM��4��0���5>&5B�|"�w&�s��@_"�#cw�ؗ~����5*W��������Z���M����9���>%OH%�h��YM/jf\ D�/�#����/�G��Y)��@��2F5�4l��뮇�\� wM\}9b4�~y���t�|�}���
3
+ i*�Г���H ��^ 3𓌗�T)'{�UM>
data/lib/mindwords.rb CHANGED
@@ -29,14 +29,44 @@ class MindWords
29
29
  s, type = RXFHelper.read raws
30
30
 
31
31
  @filepath = raws if type == :file or type == :dfs
32
- @lines = s.strip.gsub(/^\n/,'').lines
33
- @lines.shift if @lines.first =~ /<\?mindwords\?>/
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
 
59
+ def add(line)
60
+ @lines << line
61
+ end
62
+
37
63
  def breadcrumb()
38
64
  @parent.attributes[:breadcrumb].split(/ +\/ +/) if @parent
39
65
  end
66
+
67
+ def headings()
68
+ breadcrumb[0..-2]
69
+ end
40
70
 
41
71
 
42
72
  def element(id)
@@ -53,12 +83,49 @@ class MindWords
53
83
 
54
84
  def save(file=@filepath)
55
85
 
86
+ return if @lines.empty?
87
+
56
88
  puts 'before save' if @debug
57
89
  File.write file, to_s()
58
90
 
59
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
60
127
 
61
- def search(keyword)
128
+ def search(keyword, succinct: true)
62
129
 
63
130
  a = @lines.grep(/#{keyword}/i).map do |line|
64
131
 
@@ -79,9 +146,32 @@ class MindWords
79
146
  puts 'a2: ' + a2.inspect if @debug
80
147
  e = element(keyword.downcase.gsub(/ +/,'-'))
81
148
 
82
- return nil if e.nil?
149
+ return MindWords.new(a2.uniq.join, debug: @debug) if e.nil?
150
+
151
+ # find and add any linkage support lines
152
+ #
83
153
 
84
- MindWords.new(a2.join, parent: e, debug: @debug)
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
169
+
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
85
175
 
86
176
  end
87
177
 
@@ -123,11 +213,20 @@ class MindWords
123
213
  @lines = tag_sort().lines
124
214
  self
125
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
126
225
 
127
226
  def to_h()
128
- @h
227
+ to_a.to_h
129
228
  end
130
-
229
+
131
230
  def to_hashtags()
132
231
  @hashtags
133
232
  end
@@ -137,10 +236,12 @@ class MindWords
137
236
  sort ? a2tree(tree_sort(LineTree.new(@outline).to_a)) : @outline
138
237
  end
139
238
 
239
+ alias to_tree to_outline
240
+
140
241
  def to_s(colour: false)
141
242
 
142
243
  header = "<?mindwords?>\n\n"
143
- return header + @lines.join unless colour
244
+ return header + @lines.map(&:chomp).join("\n") unless colour
144
245
 
145
246
  body = @lines.map do |x|
146
247
  title, hashtags = x.split(/(?=#)/,2)
@@ -149,11 +250,24 @@ class MindWords
149
250
 
150
251
  header + body
151
252
 
152
- end
253
+ end
153
254
 
154
255
  def to_words()
155
- to_outline.lines.map {|x| x[/\w[\w ]+/] }.uniq
156
- end
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
157
271
 
158
272
  def to_xml()
159
273
  build() unless @xml
@@ -218,14 +332,29 @@ class MindWords
218
332
 
219
333
  redundants.compact.each {|x| doc.element(x).delete }
220
334
 
221
-
222
335
  node = if @parent then
223
336
  found = doc.root.element('//' + @parent.name)
224
- found ? found : doc.root
337
+ found ? found.parent : doc.root
225
338
  else
226
339
  doc.root
227
340
  end
228
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
+
354
+ end
355
+
356
+ # ----
357
+
229
358
  @outline = treeize node
230
359
 
231
360
  node.root.each_recursive do |e|
@@ -288,7 +417,7 @@ class MindWords
288
417
 
289
418
  duplicates.each do |path|
290
419
 
291
- puts 'path: ' + path.inspect if @debug
420
+ puts 'pathx: ' + path.inspect if @debug
292
421
  e = doc.element(path)
293
422
  e.delete if e
294
423
 
@@ -334,3 +463,25 @@ class MindWords
334
463
 
335
464
  end
336
465
 
466
+ class MindWordsWidget
467
+
468
+ def initialize()
469
+
470
+ end
471
+
472
+
473
+ # can be used for main entries or a words list
474
+ #
475
+ def input(content: '', action: 'mwupdate', target: 'icontent')
476
+
477
+ <<EOF
478
+ <form action='#{action}' method='post' target='#{target}'>
479
+ <textarea name='content' cols='30' rows='19'>
480
+ #{content}
481
+ </textarea>
482
+ <input type='submit' value='Submit'/>
483
+ </form>
484
+ EOF
485
+ end
486
+
487
+ 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.5.3
4
+ version: 0.6.0
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-01-28 00:00:00.000000000 Z
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.1
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.1
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