korekto 1.0.210306 → 1.4.210318

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: 23a256a294cc625c6d701521f8ac80436501dbad3cfcaddc361418454a2aa5d3
4
- data.tar.gz: ee6ed801ec1619b0c3c41946f3d1c1831181ab6f8bfbe798174ab3638e021d7b
3
+ metadata.gz: ebe8d20d5b0f785dab1f984276491bf452941f3ded713c07fe11707af9cbe501
4
+ data.tar.gz: e5b861d5be1dc2e1595bfa47a34186922a3eb3867295b5b41eafab8204941516
5
5
  SHA512:
6
- metadata.gz: ea659d6feef95bdb03e76e80dc974ba9a8b6288239525ff6bd141f53e7cdedde1432ab816e4831b35c4b7728ff1b14896ed10915a31badd2093e4b50dd33b1f3
7
- data.tar.gz: d191041a84be4e648e4ebb18c376090e6a6ec5c375fe69dea7224532bad19a71d3c9e37db6c07d96243a3206545638bc72d9fb4359cb252ba7d825656aafe8c6
6
+ metadata.gz: c682441f95e8bf3b149085946a0f8cc44665b46cfdcfd6acbf87654f19a70a28c7ac03a6b82bd8a0f98a3d7db5c328364ef0597aeb2b1c2b1da0a54498f19d60
7
+ data.tar.gz: a0b41a23ea9302ee486952c49e088a7651f7d08d694385f8417f398482724217f4ab254fb6cdbf31d48f4946ef4ed76d070cf86bd4f2ed0d2588a4cf3ebdee20
data/bin/korekto CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'help_parser'
3
3
 
4
- OPTIONS = HelpParser['1.0.210306', <<HELP]
4
+ OPTIONS = HelpParser['1.4.210318', <<HELP]
5
5
  Usage:
6
6
  korekto [:options+]
7
7
  Options:
data/lib/korekto.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Korekto
2
- VERSION = '1.0.210306'
2
+ VERSION = '1.4.210318'
3
3
  class Error < Exception; end
4
4
  require 'korekto/symbols'
5
5
  require 'korekto/syntax'
data/lib/korekto/main.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Korekto
2
2
  class Main
3
- MD_STATEMENT_CODE_TITLE = %r{^(?<statement>.*)\s#(?<code>[A-Z](\d+(/[\w,.]+)?)?)( (?<title>\S.*?\S))?$}
3
+ MD_STATEMENT_CODE_TITLE = %r{^(?<statement>.*)\s#(?<code>[A-Z](\d+(\.\w+)?(/[\w,.]+)?)?)( (?<title>\S.*?\S))?$}
4
4
  MD_FILENAME = %r{^< (?<filename>[/\w\-.]+)$}
5
5
  MD_KLASS_METHOD_DEFINITION = /^(?<klass>::[A-Z]\w+)#(?<method>\w+)(?<definition>[^=]*=.+)$/ # patch
6
6
  MD_RULE = /^[?] (?<rule>\S.*)$/
@@ -15,8 +15,9 @@ class Main
15
15
 
16
16
  def initialize(filename='-', statements: Statements.new, imports: [])
17
17
  @filename,@statements,@imports = filename,statements,imports
18
- @imports.push @filename
18
+ @imports.push @filename.freeze
19
19
  @line,@active = nil,false
20
+ @section = File.basename(@filename,'.*')
20
21
  @m_fence_korekto = /^```korekto$/
21
22
  end
22
23
 
@@ -65,6 +66,8 @@ class Main
65
66
  @statements.symbols.set_scanner value
66
67
  when 'fence'
67
68
  @m_fence_korekto = Regexp.new "^```#{value}$"
69
+ when 'section'
70
+ @section = value
68
71
  when 'save'
69
72
  BACKUPS[value] = Marshal.dump(@statements)
70
73
  when 'restore'
@@ -113,7 +116,7 @@ class Main
113
116
  code,title = @statements.add(md[:statement].strip,
114
117
  md[:code],
115
118
  md[:title],
116
- @filename,
119
+ @section,
117
120
  statement_number)
118
121
  puts "#{@filename}:#{line_number}:#{code}:#{title}"
119
122
  else
@@ -122,7 +125,7 @@ class Main
122
125
  rescue Error
123
126
  puts "#{@filename}:#{line_number}:!:#{$!.message}"
124
127
  exit 65
125
- rescue
128
+ rescue Exception
126
129
  puts "#{@filename}:#{line_number}:?:#{$!.message}"
127
130
  $stderr.puts $!.backtrace
128
131
  exit 1
@@ -1,11 +1,11 @@
1
1
  module Korekto
2
2
  class Statement
3
- attr_reader :code,:title,:regexp,:filename,:statement_number
4
- def initialize(statement,code,title,filename,statement_number,context)
5
- @statement,@code,@title,@statement_number,@context = statement,code,title,statement_number,context
6
- @filename = File.basename(filename,'.*')
7
- @statement.freeze; @filename.freeze; @statement_number.freeze
8
- syntax_check
3
+ attr_reader :code,:title,:regexp,:section,:statement_number
4
+ def initialize(statement,code,title,section,statement_number,context)
5
+ @statement,@code,@title,@section,@statement_number,@context =
6
+ statement,code,title,section,statement_number,context
7
+ @statement.freeze; @section.freeze; @statement_number.freeze
8
+ syntax_check unless @statement[0]=='/' and @statement[-1]=='/' and ['A','L','M','E','I'].include?(@code[0])
9
9
  @regexp = nil
10
10
  set_acceptance_code
11
11
  @code.freeze; @title.freeze; @regexp.freeze
@@ -73,6 +73,7 @@ class Statement
73
73
 
74
74
  def set_statement(support=nil, title=nil)
75
75
  @code = "#{@code[0]}#{@statement_number}"
76
+ @code += '.' + @section unless @section=='-'
76
77
  @code += "/#{support}" if support
77
78
  @title = title.split(':',2).first if title
78
79
  end
@@ -81,7 +82,6 @@ class Statement
81
82
  support = []
82
83
  s.each do |s|
83
84
  c = s.code.split('/',2)[0]
84
- c = s.filename+'.'+c unless s.filename=='-'
85
85
  support.push(c)
86
86
  end
87
87
  return support.join(',')
@@ -36,13 +36,13 @@ class Symbols
36
36
  if statement[0]=='/' and statement[-1]=='/'
37
37
  Regexp.new(statement[1..-2])
38
38
  else
39
- pattern,count,seen = '^',0,{}
40
- Regexp.quote(statement).scan(@scanner) do |v|
39
+ pattern,count,seen = '\A',0,{}
40
+ statement.scan(@scanner) do |v|
41
41
  if n=seen[v]
42
42
  pattern << '\\'+n
43
43
  elsif type = @v2t[v]
44
44
  regex = @t2p[type]
45
- if regex=='\n'
45
+ if type[0]=='.'
46
46
  pattern << regex
47
47
  else
48
48
  count += 1
@@ -50,14 +50,15 @@ class Symbols
50
50
  pattern << '('+regex+')'
51
51
  end
52
52
  else
53
- # To avoid collisions with back-references,
54
- # isolate digit in square brackets:
53
+ # Escape Regexp specials
54
+ v = Regexp.quote v
55
+ # To avoid collisions with back-references, isolate digit in square brackets:
55
56
  '0123456789'.include?(_=v[0]) and v[0]='['+_+']'
56
57
  pattern << v
57
58
  end
58
59
  end
59
60
  raise Error, 'pattern with no captures' if count < 1
60
- pattern << '$'
61
+ pattern << '\Z'
61
62
  Regexp.new(pattern)
62
63
  end
63
64
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: korekto
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.210306
4
+ version: 1.4.210318
5
5
  platform: ruby
6
6
  authors:
7
7
  - carlosjhr64
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-06 00:00:00.000000000 Z
11
+ date: 2021-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: help_parser