mindwords 0.6.7 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
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