mindwords 0.6.7 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7d489cc248683b435ca0ba18e673b7aa75aa23395a73235df19ac355e928dae4
4
- data.tar.gz: c8276a4a42198bae89ab48af00ec48b491e5a55761e9c3ed47e20524121dbc11
3
+ metadata.gz: b7201b9f1950ecacaf5bac313bf8dd0c7485efe308829fa8bc73d5fa442cca5e
4
+ data.tar.gz: e61b0229f2c75c11c71f68ba6c0139bd6f5ed8110a78c66da5d66aa6144e84c3
5
5
  SHA512:
6
- metadata.gz: 0f059026fe87db1dec7cd710093ccca7129817b4c461ae0f17d27aba822dce298b3a1948b8ce6c17493a802d39d0ded59edd2651b3d56c763ba455a2e68f9dd0
7
- data.tar.gz: 3ee4096a398584ef5207fe2902d0e73806cee0791030461220b129f3169c62525c56a78cb288b9f19788813decc341ccb1e26bb6997affd68d6e0af70cd98118
6
+ metadata.gz: 5db0ccb709a730e47bdf753aa82956cce15d662f6fa35a8921b6580ecf2624b64b1187b4ce5eaaf5cb63e1e3b437a114097ed85b6945e8a8877451a5706ac4e0
7
+ data.tar.gz: 64826bf627e098697d504116ea6cadd7b93daee1314ebb98506af685d4b600e6e5b990200d8c380ee49d9b1b59b44565aec6feba631b310dcee0db1afec11824
checksums.yaml.gz.sig CHANGED
Binary file
data/lib/mindwords.rb CHANGED
@@ -3,8 +3,10 @@
3
3
  # file: mindwords.rb
4
4
 
5
5
  require 'rexle'
6
- require 'rxfhelper'
6
+ require 'rxfreadwrite'
7
7
  require 'line-tree'
8
+ require 'polyrex'
9
+
8
10
 
9
11
  module HashCopy
10
12
  refine Hash do
@@ -19,8 +21,9 @@ end
19
21
  class MindWords
20
22
  using ColouredText
21
23
  using HashCopy
22
- include RXFHelperModule
24
+ include RXFReadWriteModule
23
25
 
26
+ attr_reader :words_missing
24
27
  attr_accessor :lines, :filepath
25
28
 
26
29
  def initialize(raws='', parent: nil, debug: false)
@@ -72,13 +75,57 @@ class MindWords
72
75
 
73
76
  def import(raws)
74
77
 
75
- s, type = RXFHelper.read raws
78
+ s, type = RXFReader.read raws
76
79
 
77
80
  @filepath = raws if type == :file or type == :dfs
78
- lines = (s.strip.gsub(/(^\n|\r)/,'') + "\n").lines.uniq
79
- lines.shift if lines.first =~ /<\?mindwords\?>/
81
+ rawlines = (s.strip.gsub(/(^\n|\r)/,'') + "\n").lines.uniq
82
+ rawlines.shift if rawlines.first =~ /<\?mindwords\?>/
83
+
84
+ # remove mindwords lines which don't have a hashtag
85
+ lines = rawlines.reject do |line|
86
+
87
+ found = line[/^\w+[^#]+$/]
88
+
89
+ if found then
90
+ puts ('no hashtag found on this line -> ' + line).warn
91
+ end
92
+
93
+ found
94
+
95
+ end
96
+
97
+ #--- handle indented text, indicated there are *groups* of words
98
+
99
+ s2 = lines.join.gsub(/\n\s*$/,'')
100
+ puts s2 if @debug
101
+ a = s2.strip.split(/(?=^\w+)/)
102
+ a2 = a.inject([]) do |r,x|
103
+
104
+ if x =~ /\n\s+/ then
80
105
 
81
- @lines = lines.inject([]) do |r,line|
106
+ a4 = x.lines[1..-1].map do |line|
107
+
108
+ puts 'x.lines[0]: ' + x.lines[0].inspect if @debug
109
+ hashtag = if x.lines[0][/ /] then
110
+ x.lines[0].gsub(/\b\w/) {|x| x.upcase}.gsub(/ /,'')
111
+ else
112
+ x.lines[0]
113
+ end
114
+
115
+ "%s #%s" % [line.strip, hashtag]
116
+ end
117
+
118
+ r.concat a4
119
+
120
+ else
121
+ r << x
122
+ end
123
+
124
+ end
125
+
126
+ #-- end of indented text handler
127
+
128
+ @lines = a2.inject([]) do |r,line|
82
129
 
83
130
  # the following does 2 things:
84
131
  # 1. splits words separated by a bar (|) onto their own line
@@ -345,6 +392,7 @@ class MindWords
345
392
 
346
393
  a = rexlize(h)
347
394
  doc = Rexle.new(['root', {}, '', *a])
395
+ puts 'doc.xml: ' + doc.xml(pretty: true) if @debug
348
396
 
349
397
  # apply node nesting
350
398
 
@@ -361,6 +409,7 @@ class MindWords
361
409
 
362
410
  end
363
411
 
412
+ puts 'after nesting; doc.xml: ' + doc.xml(pretty: true) if @debug
364
413
 
365
414
  # remove duplicates which appear in the same branch above the nested node
366
415
  rm_duplicates(doc)
@@ -408,6 +457,45 @@ class MindWords
408
457
 
409
458
  @outline = treeize node
410
459
 
460
+ # ----
461
+
462
+ # It's common for words to be missing from the outline, either because
463
+ # they have erroneously been flagged as redundant or lack specific hashtag
464
+ # context. Below, we attempt to identify the missing words with a
465
+ # suggestion on how to fix it.
466
+
467
+ words = @outline.lines.map(&:strip)
468
+ orig_words = to_s().lines.map {|x| x[/^[^#]+(?= #)/]}.compact
469
+ @words_missing = orig_words - words
470
+
471
+ if @words_missing.any? then
472
+
473
+ tags = []
474
+ @words_missing.inject(tags) do |r,word|
475
+
476
+ found = to_s().lines.grep(/#{word}/)
477
+
478
+ if found then
479
+ r << found.first.scan(/#\w+/).map {|x| x[1..-1]}
480
+ else
481
+ r
482
+ end
483
+
484
+ end
485
+
486
+ add_sugg = tags.uniq.map do |atag|
487
+ ("%s #%s" % [atag[0], atag[1]]).bg_black
488
+ end
489
+
490
+ puts ('@words_missing: ' + @words_missing.join(', ') ).warn
491
+ puts "suggestion: try adding the following:".info
492
+ puts add_sugg.join("\n")
493
+ puts
494
+
495
+ end
496
+
497
+ # ----
498
+
411
499
  node.root.each_recursive do |e|
412
500
 
413
501
  e.attributes[:id] = e.attributes[:title].downcase.gsub(/ +/,'-')
@@ -536,3 +624,99 @@ EOF
536
624
  end
537
625
 
538
626
  end
627
+
628
+ class MindWordsPlus
629
+
630
+ attr_reader :to_px
631
+
632
+ def initialize(s, fields: %w(title content), debug: false)
633
+
634
+ lt = LineTree.new(s)
635
+ h = lt.to_h
636
+
637
+ mw = MindWords.new(h.keys.join("\n"))
638
+ outline = mw.to_outline
639
+
640
+ out = outline.lines.map do |line|
641
+
642
+ word = line[/\w[^$]+/]
643
+
644
+ found = h.keys.find do |key, value|
645
+
646
+ if debug then
647
+ puts 'key2: ' + key[/^[^#]+(?= #)/].inspect
648
+ puts 'word: ' + word.chomp.inspect
649
+ end
650
+
651
+ word.chomp == key[/^[^#]+(?= #)/]
652
+ end
653
+
654
+ puts 'found: ' + found.inspect if debug
655
+
656
+ if found and h[found][:body] then
657
+ puts '***' + h[found][:body].keys.inspect if debug
658
+ line.chomp + ' # ' + h[found][:body].keys.join('<br/>') + "\n"
659
+ else
660
+ line
661
+ end
662
+
663
+ end
664
+
665
+ puts out.join if debug
666
+
667
+ px = Polyrex.new(schema: "entries[title]/entry[#{fields.join(', ')}]",
668
+ delimiter: ' # ')
669
+ px.import out.join
670
+ @px = px
671
+
672
+ end
673
+
674
+ def to_ph()
675
+
676
+ lines = []
677
+
678
+ @px.each_recursive do |x, parent, level|
679
+
680
+ if level.to_i < 3 then
681
+ line = ("\n" + '#' * (level.to_i + 1)) + ' ' + x.title + "\n\n"
682
+ else
683
+ line = '*' + ' ' + x.title + "\n"
684
+ end
685
+
686
+ if x.content.length >= 1 then
687
+ txt = '- ' + x.content.gsub('&lt;','<').gsub('&gt;','>')
688
+ line += "\n" + txt.gsub('<br/>',"\n- ") + "\n"
689
+ end
690
+
691
+ lines << line
692
+
693
+ end
694
+
695
+ lines.join.gsub(/\n\n\n/,"\n\n")
696
+ end
697
+
698
+ def to_px()
699
+ @px
700
+ end
701
+
702
+ def to_tree()
703
+
704
+ lines = []
705
+ @px.each_recursive do |x, parent, level|
706
+
707
+ line = (' ' * level) + x.title
708
+
709
+ if x.content.length >= 1 then
710
+ txt = x.content.gsub('&lt;','<').gsub('&gt;','>')
711
+ indent = ' ' * (level+1) + '* '
712
+ line += "\n" + indent + txt.gsub('<br/>',"\n" + indent)
713
+ end
714
+
715
+ lines << line
716
+ end
717
+
718
+ lines.join("\n")
719
+
720
+ end
721
+
722
+ end
data.tar.gz.sig CHANGED
Binary file
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.6.7
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,48 +35,28 @@ cert_chain:
35
35
  eUqhPOSrxIRLebVebvo/SHN6+ed3Q1tXowsbLGCT9QwqbaZ5MZ7zks92mIWeJvsA
36
36
  JdpabIXfcOANNKd0ha4NO+Yu
37
37
  -----END CERTIFICATE-----
38
- date: 2022-01-27 00:00:00.000000000 Z
38
+ date: 2022-04-08 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
- name: line-tree
41
+ name: polyrex
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '0.9'
46
+ version: '1.4'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 0.9.3
49
+ version: 1.4.1
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: '0.9'
56
+ version: '1.4'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 0.9.3
60
- - !ruby/object:Gem::Dependency
61
- name: rxfhelper
62
- requirement: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: '1.2'
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: 1.2.1
70
- type: :runtime
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - "~>"
75
- - !ruby/object:Gem::Version
76
- version: '1.2'
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- version: 1.2.1
59
+ version: 1.4.1
80
60
  description:
81
61
  email: digital.robertson@gmail.com
82
62
  executables: []
@@ -103,8 +83,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
83
  - !ruby/object:Gem::Version
104
84
  version: '0'
105
85
  requirements: []
106
- rubyforge_project:
107
- rubygems_version: 2.7.10
86
+ rubygems_version: 3.2.22
108
87
  signing_key:
109
88
  specification_version: 4
110
89
  summary: Helps get what's in your mind into a structure using words and hashtags.
metadata.gz.sig CHANGED
@@ -1,3 +1,3 @@
1
- 2��nܦOaK?��V�� J$�J����9��/�
2
- ���W�O5;fl3.��%D��P�Ӈ|V��RՁV�N螴�>�i�.^�r=�(`n �0>�TX���P�ڥ��gQ{��P�^�)R��1� 0�
3
- Y�S2��P�&P��Y"s����ĶE��t\3a����3r2��}�%Y� k�h!/�`��eţx��rǍ�eK��{�0���y�A�/����9׷U�X}?�+.��_smkh�P�`F�f��/6��jO��N��47�n���m�H$�����j���ܻ-��\ �ra|���N��l|�#������G���`Ϣ����ڼER�V���Z2EԷj��^� 6m��3��fא����,�n٣��U
1
+ T6&�'`sV��� �>�䟂�є�Yx���^F=f���mq�2pf�o6ܢ38��f�.!c"�)�&.�Yj�������gv�]h|
2
+ �ij�|�_A򡃭*��˱�FG��0P�(
3
+ ��ǚ�K��a��W���}�s�W��zv�� ��d