fbtxt-lexer 0.0.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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3 -0
  3. data/Manifest.txt +47 -0
  4. data/README.md +18 -0
  5. data/Rakefile +30 -0
  6. data/lib/fbtxt/lexer/debuggable.rb +58 -0
  7. data/lib/fbtxt/lexer/lexer-logger.rb +20 -0
  8. data/lib/fbtxt/lexer/lexer-on_goal.rb +167 -0
  9. data/lib/fbtxt/lexer/lexer-on_group_def.rb +31 -0
  10. data/lib/fbtxt/lexer/lexer-on_prop_cards.rb +61 -0
  11. data/lib/fbtxt/lexer/lexer-on_prop_lineup.rb +82 -0
  12. data/lib/fbtxt/lexer/lexer-on_prop_misc.rb +108 -0
  13. data/lib/fbtxt/lexer/lexer-on_prop_penalties.rb +44 -0
  14. data/lib/fbtxt/lexer/lexer-on_round_def.rb +37 -0
  15. data/lib/fbtxt/lexer/lexer-on_top.rb +133 -0
  16. data/lib/fbtxt/lexer/lexer-prep_doc.rb +131 -0
  17. data/lib/fbtxt/lexer/lexer-prep_line.rb +63 -0
  18. data/lib/fbtxt/lexer/lexer-props.rb +66 -0
  19. data/lib/fbtxt/lexer/lexer-tokenize_line.rb +381 -0
  20. data/lib/fbtxt/lexer/lexer-tokenize_norm.rb +93 -0
  21. data/lib/fbtxt/lexer/lexer.rb +192 -0
  22. data/lib/fbtxt/lexer/lexer_buffer.rb +68 -0
  23. data/lib/fbtxt/lexer/lexer_context.rb +70 -0
  24. data/lib/fbtxt/lexer/lexer_token.rb +127 -0
  25. data/lib/fbtxt/lexer/token-date--helpers.rb +130 -0
  26. data/lib/fbtxt/lexer/token-date--names.rb +108 -0
  27. data/lib/fbtxt/lexer/token-date.rb +200 -0
  28. data/lib/fbtxt/lexer/token-date_duration.rb +171 -0
  29. data/lib/fbtxt/lexer/token-geo.rb +173 -0
  30. data/lib/fbtxt/lexer/token-goals--helpers.rb +114 -0
  31. data/lib/fbtxt/lexer/token-goals.rb +306 -0
  32. data/lib/fbtxt/lexer/token-group.rb +29 -0
  33. data/lib/fbtxt/lexer/token-note.rb +40 -0
  34. data/lib/fbtxt/lexer/token-prop.rb +334 -0
  35. data/lib/fbtxt/lexer/token-prop_name.rb +83 -0
  36. data/lib/fbtxt/lexer/token-round.rb +88 -0
  37. data/lib/fbtxt/lexer/token-score--helpers.rb +189 -0
  38. data/lib/fbtxt/lexer/token-score.rb +60 -0
  39. data/lib/fbtxt/lexer/token-score_full.rb +331 -0
  40. data/lib/fbtxt/lexer/token-score_fuller.rb +434 -0
  41. data/lib/fbtxt/lexer/token-score_legs.rb +59 -0
  42. data/lib/fbtxt/lexer/token-status.rb +192 -0
  43. data/lib/fbtxt/lexer/token-status_inline.rb +112 -0
  44. data/lib/fbtxt/lexer/token-text.rb +221 -0
  45. data/lib/fbtxt/lexer/token-time.rb +144 -0
  46. data/lib/fbtxt/lexer/token.rb +224 -0
  47. data/lib/fbtxt/lexer/version.rb +24 -0
  48. data/lib/fbtxt/lexer.rb +118 -0
  49. metadata +142 -0
@@ -0,0 +1,24 @@
1
+
2
+ module Fbtxt
3
+ module Module
4
+ module Lexer
5
+ MAJOR = 0 ## todo: namespace inside version or something - why? why not??
6
+ MINOR = 0
7
+ PATCH = 1
8
+ VERSION = [MAJOR,MINOR,PATCH].join('.')
9
+
10
+ def self.version
11
+ VERSION
12
+ end
13
+
14
+ def self.banner
15
+ "fbtxt-lexer/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}] in (#{root})"
16
+ end
17
+
18
+ def self.root
19
+ File.expand_path( File.dirname(File.dirname(File.dirname(File.dirname(__FILE__)))) )
20
+ end
21
+
22
+ end # module Lexer
23
+ end
24
+ end
@@ -0,0 +1,118 @@
1
+ require 'cocos'
2
+
3
+
4
+
5
+
6
+ require_relative 'lexer/version'
7
+
8
+
9
+ ## fix-fix-fix -- maybe move upstream into cocos - why? why not?
10
+ require_relative 'lexer/debuggable' ## generic debug/logger helper
11
+
12
+
13
+
14
+ ##
15
+ ## add shared/most basic regexes here
16
+ ## todo - use ANY_RE to token_commons or such - for shared by many?
17
+ module Fbtxt
18
+ class Lexer
19
+
20
+ ## general catch-all (RECOMMENDED (ALWAYS) use as last entry in union)
21
+ ## to avoid advance of pos match!!!
22
+ ANY_RE = %r{
23
+ (?<any> .)
24
+ }ix
25
+
26
+ SPACES_RE = %r{
27
+ (?<spaces> [ ]{2,})
28
+ | (?<space> [ ])
29
+ }ix
30
+
31
+
32
+ end # class Lexer
33
+ end # module Fbtxt
34
+
35
+
36
+ require_relative 'lexer/token-score'
37
+ require_relative 'lexer/token-score_full'
38
+ require_relative 'lexer/token-score_fuller'
39
+ require_relative 'lexer/token-score_legs'
40
+ require_relative 'lexer/token-score--helpers'
41
+
42
+ require_relative 'lexer/token-time'
43
+ require_relative 'lexer/token-date--names'
44
+ require_relative 'lexer/token-date'
45
+ require_relative 'lexer/token-date_duration'
46
+ require_relative 'lexer/token-date--helpers'
47
+
48
+ require_relative 'lexer/token-text'
49
+ require_relative 'lexer/token-prop' ## team prop(erty) mode (note - must be before token)
50
+ require_relative 'lexer/token-prop_name' ## a.k.a token-text_ii
51
+ require_relative 'lexer/token-status'
52
+ require_relative 'lexer/token-status_inline'
53
+ require_relative 'lexer/token-note'
54
+ require_relative 'lexer/token-goals'
55
+ require_relative 'lexer/token-goals--helpers'
56
+ require_relative 'lexer/token-geo'
57
+ require_relative 'lexer/token-group'
58
+ require_relative 'lexer/token-round'
59
+ require_relative 'lexer/token'
60
+
61
+
62
+
63
+ require_relative 'lexer/lexer_buffer' ## incl. Tokens (aka TokenBuffer)
64
+ require_relative 'lexer/lexer_token'
65
+ require_relative 'lexer/lexer_context'
66
+
67
+ require_relative 'lexer/lexer-prep_doc'
68
+ require_relative 'lexer/lexer-prep_line'
69
+
70
+ require_relative 'lexer/lexer-logger' ## e.g. _trace, _warn, _info, etc.
71
+ require_relative 'lexer/lexer-on_round_def'
72
+ require_relative 'lexer/lexer-on_group_def'
73
+ require_relative 'lexer/lexer-on_prop_cards'
74
+ require_relative 'lexer/lexer-on_prop_misc'
75
+ require_relative 'lexer/lexer-on_prop_lineup'
76
+ require_relative 'lexer/lexer-on_prop_penalties'
77
+ require_relative 'lexer/lexer-on_goal'
78
+ require_relative 'lexer/lexer-on_top'
79
+ require_relative 'lexer/lexer-props'
80
+
81
+ require_relative 'lexer/lexer-tokenize_line'
82
+ require_relative 'lexer/lexer-tokenize_norm' ## that is, normalize (transform) tokens
83
+ require_relative 'lexer/lexer'
84
+
85
+
86
+
87
+
88
+
89
+
90
+ ###
91
+ # make "convenience" lexer api available - why? why not?
92
+ # e.g. - Fbtxt.lex( txt )
93
+
94
+
95
+ module Fbtxt
96
+
97
+ class LexerResult
98
+ attr_reader :tokens, :errors
99
+ def initialize( tokens, errors=[] )
100
+ @tokens, @errors = tokens, errors
101
+ end
102
+
103
+ def ok?() @errors.size == 0; end
104
+ def nok?() !ok?; end
105
+ end # class LexerResult
106
+
107
+
108
+ def self.lex( txt, flatten: true ) ## returns Fbtxt::LexerResult (ok?/tokens/errors)
109
+ lexer = Lexer.new( txt )
110
+ ## move "wrapping" into result obj inside lexer - why? why not?
111
+ tokens, errors = lexer.tokenize_with_errors( flatten: flatten )
112
+ LexerResult.new( tokens, errors )
113
+ end
114
+
115
+ end # module Fbtxt
116
+
117
+
118
+ puts Fbtxt::Module::Lexer.banner # say hello
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fbtxt-lexer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gerald Bauer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2026-08-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cocos
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.4.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.4.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '4.0'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '7'
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '4.0'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '7'
47
+ - !ruby/object:Gem::Dependency
48
+ name: hoe
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '4.2'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '4.2'
61
+ description: fbtxt-lexer - football.txt match lexer (& tokenizer)
62
+ email: gerald.bauer@gmail.com
63
+ executables: []
64
+ extensions: []
65
+ extra_rdoc_files:
66
+ - CHANGELOG.md
67
+ - Manifest.txt
68
+ - README.md
69
+ files:
70
+ - CHANGELOG.md
71
+ - Manifest.txt
72
+ - README.md
73
+ - Rakefile
74
+ - lib/fbtxt/lexer.rb
75
+ - lib/fbtxt/lexer/debuggable.rb
76
+ - lib/fbtxt/lexer/lexer-logger.rb
77
+ - lib/fbtxt/lexer/lexer-on_goal.rb
78
+ - lib/fbtxt/lexer/lexer-on_group_def.rb
79
+ - lib/fbtxt/lexer/lexer-on_prop_cards.rb
80
+ - lib/fbtxt/lexer/lexer-on_prop_lineup.rb
81
+ - lib/fbtxt/lexer/lexer-on_prop_misc.rb
82
+ - lib/fbtxt/lexer/lexer-on_prop_penalties.rb
83
+ - lib/fbtxt/lexer/lexer-on_round_def.rb
84
+ - lib/fbtxt/lexer/lexer-on_top.rb
85
+ - lib/fbtxt/lexer/lexer-prep_doc.rb
86
+ - lib/fbtxt/lexer/lexer-prep_line.rb
87
+ - lib/fbtxt/lexer/lexer-props.rb
88
+ - lib/fbtxt/lexer/lexer-tokenize_line.rb
89
+ - lib/fbtxt/lexer/lexer-tokenize_norm.rb
90
+ - lib/fbtxt/lexer/lexer.rb
91
+ - lib/fbtxt/lexer/lexer_buffer.rb
92
+ - lib/fbtxt/lexer/lexer_context.rb
93
+ - lib/fbtxt/lexer/lexer_token.rb
94
+ - lib/fbtxt/lexer/token-date--helpers.rb
95
+ - lib/fbtxt/lexer/token-date--names.rb
96
+ - lib/fbtxt/lexer/token-date.rb
97
+ - lib/fbtxt/lexer/token-date_duration.rb
98
+ - lib/fbtxt/lexer/token-geo.rb
99
+ - lib/fbtxt/lexer/token-goals--helpers.rb
100
+ - lib/fbtxt/lexer/token-goals.rb
101
+ - lib/fbtxt/lexer/token-group.rb
102
+ - lib/fbtxt/lexer/token-note.rb
103
+ - lib/fbtxt/lexer/token-prop.rb
104
+ - lib/fbtxt/lexer/token-prop_name.rb
105
+ - lib/fbtxt/lexer/token-round.rb
106
+ - lib/fbtxt/lexer/token-score--helpers.rb
107
+ - lib/fbtxt/lexer/token-score.rb
108
+ - lib/fbtxt/lexer/token-score_full.rb
109
+ - lib/fbtxt/lexer/token-score_fuller.rb
110
+ - lib/fbtxt/lexer/token-score_legs.rb
111
+ - lib/fbtxt/lexer/token-status.rb
112
+ - lib/fbtxt/lexer/token-status_inline.rb
113
+ - lib/fbtxt/lexer/token-text.rb
114
+ - lib/fbtxt/lexer/token-time.rb
115
+ - lib/fbtxt/lexer/token.rb
116
+ - lib/fbtxt/lexer/version.rb
117
+ homepage: https://github.com/sportdb/sport.db
118
+ licenses:
119
+ - Public Domain
120
+ metadata: {}
121
+ post_install_message:
122
+ rdoc_options:
123
+ - "--main"
124
+ - README.md
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 3.1.0
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirements: []
138
+ rubygems_version: 3.5.22
139
+ signing_key:
140
+ specification_version: 4
141
+ summary: fbtxt-lexer - football.txt match lexer (& tokenizer)
142
+ test_files: []