fbtxt-parser 0.9.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.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +4 -0
  3. data/Manifest.txt +50 -0
  4. data/README.md +22 -0
  5. data/Rakefile +53 -0
  6. data/lib/fbtxt/parser/debuggable.rb +53 -0
  7. data/lib/fbtxt/parser/lexer-logger.rb +20 -0
  8. data/lib/fbtxt/parser/lexer-on_goal.rb +167 -0
  9. data/lib/fbtxt/parser/lexer-on_group_def.rb +31 -0
  10. data/lib/fbtxt/parser/lexer-on_prop_lineup.rb +79 -0
  11. data/lib/fbtxt/parser/lexer-on_prop_misc.rb +123 -0
  12. data/lib/fbtxt/parser/lexer-on_prop_penalties.rb +40 -0
  13. data/lib/fbtxt/parser/lexer-on_round_def.rb +37 -0
  14. data/lib/fbtxt/parser/lexer-on_top.rb +133 -0
  15. data/lib/fbtxt/parser/lexer-prep_doc.rb +131 -0
  16. data/lib/fbtxt/parser/lexer-prep_line.rb +63 -0
  17. data/lib/fbtxt/parser/lexer-tokenize.rb +468 -0
  18. data/lib/fbtxt/parser/lexer.rb +231 -0
  19. data/lib/fbtxt/parser/lexer_buffer.rb +68 -0
  20. data/lib/fbtxt/parser/lexer_token.rb +126 -0
  21. data/lib/fbtxt/parser/parse_tree--core.rb +29 -0
  22. data/lib/fbtxt/parser/parse_tree-match.rb +309 -0
  23. data/lib/fbtxt/parser/parse_tree-props.rb +233 -0
  24. data/lib/fbtxt/parser/parse_tree.rb +202 -0
  25. data/lib/fbtxt/parser/parser-runtime.rb +379 -0
  26. data/lib/fbtxt/parser/parser-top.rb +102 -0
  27. data/lib/fbtxt/parser/parser.rb +2343 -0
  28. data/lib/fbtxt/parser/token-date--helpers.rb +130 -0
  29. data/lib/fbtxt/parser/token-date--names.rb +108 -0
  30. data/lib/fbtxt/parser/token-date.rb +200 -0
  31. data/lib/fbtxt/parser/token-date_duration.rb +171 -0
  32. data/lib/fbtxt/parser/token-geo.rb +134 -0
  33. data/lib/fbtxt/parser/token-goals--helpers.rb +114 -0
  34. data/lib/fbtxt/parser/token-goals.rb +306 -0
  35. data/lib/fbtxt/parser/token-group.rb +29 -0
  36. data/lib/fbtxt/parser/token-note.rb +40 -0
  37. data/lib/fbtxt/parser/token-prop.rb +309 -0
  38. data/lib/fbtxt/parser/token-prop_name.rb +83 -0
  39. data/lib/fbtxt/parser/token-round.rb +88 -0
  40. data/lib/fbtxt/parser/token-score--helpers.rb +189 -0
  41. data/lib/fbtxt/parser/token-score.rb +60 -0
  42. data/lib/fbtxt/parser/token-score_full.rb +331 -0
  43. data/lib/fbtxt/parser/token-score_fuller.rb +434 -0
  44. data/lib/fbtxt/parser/token-score_legs.rb +59 -0
  45. data/lib/fbtxt/parser/token-status.rb +192 -0
  46. data/lib/fbtxt/parser/token-status_inline.rb +112 -0
  47. data/lib/fbtxt/parser/token-text.rb +221 -0
  48. data/lib/fbtxt/parser/token-time.rb +144 -0
  49. data/lib/fbtxt/parser/token.rb +224 -0
  50. data/lib/fbtxt/parser/version.rb +24 -0
  51. data/lib/fbtxt/parser.rb +140 -0
  52. metadata +145 -0
@@ -0,0 +1,24 @@
1
+
2
+ module Fbtxt
3
+ module Module
4
+ module Parser
5
+ MAJOR = 0 ## todo: namespace inside version or something - why? why not??
6
+ MINOR = 9
7
+ PATCH = 0
8
+ VERSION = [MAJOR,MINOR,PATCH].join('.')
9
+
10
+ def self.version
11
+ VERSION
12
+ end
13
+
14
+ def self.banner
15
+ "fbtxt-parser/#{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 Parser
23
+ end
24
+ end
@@ -0,0 +1,140 @@
1
+ require 'cocos'
2
+
3
+
4
+
5
+
6
+ require_relative 'parser/version'
7
+
8
+
9
+ require_relative 'parser/debuggable' ## generic debug/logger helper
10
+
11
+
12
+
13
+ ##
14
+ ## add shared/most basic regexes here
15
+ ## todo - use ANY_RE to token_commons or such - for shared by many?
16
+ module Fbtxt
17
+ class Lexer
18
+
19
+ ## general catch-all (RECOMMENDED (ALWAYS) use as last entry in union)
20
+ ## to avoid advance of pos match!!!
21
+ ANY_RE = %r{
22
+ (?<any> .)
23
+ }ix
24
+
25
+ SPACES_RE = %r{
26
+ (?<spaces> [ ]{2,})
27
+ | (?<space> [ ])
28
+ }ix
29
+
30
+
31
+ end # class Lexer
32
+ end # module Fbtxt
33
+
34
+
35
+ require_relative 'parser/token-score'
36
+ require_relative 'parser/token-score_full'
37
+ require_relative 'parser/token-score_fuller'
38
+ require_relative 'parser/token-score_legs'
39
+ require_relative 'parser/token-score--helpers'
40
+
41
+ require_relative 'parser/token-time'
42
+ require_relative 'parser/token-date--names'
43
+ require_relative 'parser/token-date'
44
+ require_relative 'parser/token-date_duration'
45
+ require_relative 'parser/token-date--helpers'
46
+
47
+ require_relative 'parser/token-text'
48
+ require_relative 'parser/token-prop' ## team prop(erty) mode (note - must be before token)
49
+ require_relative 'parser/token-prop_name' ## a.k.a token-text_ii
50
+ require_relative 'parser/token-status'
51
+ require_relative 'parser/token-status_inline'
52
+ require_relative 'parser/token-note'
53
+ require_relative 'parser/token-goals'
54
+ require_relative 'parser/token-goals--helpers'
55
+ require_relative 'parser/token-geo'
56
+ require_relative 'parser/token-group'
57
+ require_relative 'parser/token-round'
58
+ require_relative 'parser/token'
59
+
60
+
61
+
62
+
63
+
64
+ require_relative 'parser/lexer_buffer' ## incl. Tokens (aka TokenBuffer)
65
+ require_relative 'parser/lexer_token'
66
+
67
+ require_relative 'parser/lexer-prep_doc'
68
+ require_relative 'parser/lexer-prep_line'
69
+
70
+ require_relative 'parser/lexer-logger' ## e.g. _trace, _warn, _info, etc.
71
+ require_relative 'parser/lexer-tokenize'
72
+ require_relative 'parser/lexer-on_round_def'
73
+ require_relative 'parser/lexer-on_group_def'
74
+ require_relative 'parser/lexer-on_prop_misc'
75
+ require_relative 'parser/lexer-on_prop_lineup'
76
+ require_relative 'parser/lexer-on_prop_penalties'
77
+ require_relative 'parser/lexer-on_goal'
78
+ require_relative 'parser/lexer-on_top'
79
+ require_relative 'parser/lexer'
80
+
81
+
82
+ ## note - use "embeded" racc parser runtime
83
+ ## MUST uncomment require 'racc/parser' in generated parser!!!
84
+ require_relative 'parser/parser-runtime'
85
+
86
+ require_relative 'parser/parser' ## auto-generated by racc (from parser.y)
87
+ require_relative 'parser/parser-top'
88
+
89
+ require_relative 'parser/parse_tree--core' ## incl. core extensions eg. as_json on Object/Array/Hash
90
+ require_relative 'parser/parse_tree'
91
+ require_relative 'parser/parse_tree-match'
92
+ require_relative 'parser/parse_tree-props'
93
+
94
+
95
+ ## deprecated - remove old RaccMatchParser name sooner than later!!
96
+ ## use Fbtxt.parse for "public" api
97
+ ##
98
+ RaccMatchParser = Fbtxt::Parser
99
+
100
+
101
+
102
+ ###
103
+ # make parser api (easily) available - why? why not?
104
+ #
105
+ # use Fbtxt.parse( txt ) &&
106
+ # Fbtxt.lex( txt) -- or Fbtxt.tokenize?
107
+ #
108
+ # Fbtxt.lex( txt,
109
+ # flatten: true|false, ## keep nested [] for lines (no NEWLINE tokens)
110
+ # transform: true|false ) ## builtin transforms eg. merge DATE & TIME => DATETIME, etc.
111
+ #
112
+ # how to deal with errors?
113
+ ## always return [tokens, errors] or such?
114
+ ## or return a Result struct - why? why not?
115
+
116
+
117
+
118
+ module Fbtxt
119
+
120
+ def self.lex( txt, flatten: true ) ## returns Fbtxt::LexerResult (ok?/tokens/errors)
121
+ lexer = Lexer.new( txt )
122
+ ## move "wrapping" into result obj inside lexer - why? why not?
123
+ tokens, errors = lexer.tokenize_with_errors( flatten: flatten )
124
+ LexerResult.new( tokens, errors )
125
+ end
126
+
127
+ def self.parse( txt ) ## returns Fbtxt::ParserResult (ok?/tree/errors)
128
+ parser = Parser.new( txt )
129
+ ## move "wrapping" into result obj inside parser - why? why not?
130
+ tree, errors = parser.parse_with_errors
131
+ ParserResult.new( tree, errors )
132
+ end
133
+ end # module Fbtxt
134
+
135
+
136
+
137
+
138
+
139
+
140
+ puts Fbtxt::Module::Parser.banner # say hello
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fbtxt-parser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ platform: ruby
6
+ authors:
7
+ - Gerald Bauer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2026-07-07 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.1
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.1
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-parser - football.txt match parser (& 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/parser.rb
75
+ - lib/fbtxt/parser/debuggable.rb
76
+ - lib/fbtxt/parser/lexer-logger.rb
77
+ - lib/fbtxt/parser/lexer-on_goal.rb
78
+ - lib/fbtxt/parser/lexer-on_group_def.rb
79
+ - lib/fbtxt/parser/lexer-on_prop_lineup.rb
80
+ - lib/fbtxt/parser/lexer-on_prop_misc.rb
81
+ - lib/fbtxt/parser/lexer-on_prop_penalties.rb
82
+ - lib/fbtxt/parser/lexer-on_round_def.rb
83
+ - lib/fbtxt/parser/lexer-on_top.rb
84
+ - lib/fbtxt/parser/lexer-prep_doc.rb
85
+ - lib/fbtxt/parser/lexer-prep_line.rb
86
+ - lib/fbtxt/parser/lexer-tokenize.rb
87
+ - lib/fbtxt/parser/lexer.rb
88
+ - lib/fbtxt/parser/lexer_buffer.rb
89
+ - lib/fbtxt/parser/lexer_token.rb
90
+ - lib/fbtxt/parser/parse_tree--core.rb
91
+ - lib/fbtxt/parser/parse_tree-match.rb
92
+ - lib/fbtxt/parser/parse_tree-props.rb
93
+ - lib/fbtxt/parser/parse_tree.rb
94
+ - lib/fbtxt/parser/parser-runtime.rb
95
+ - lib/fbtxt/parser/parser-top.rb
96
+ - lib/fbtxt/parser/parser.rb
97
+ - lib/fbtxt/parser/token-date--helpers.rb
98
+ - lib/fbtxt/parser/token-date--names.rb
99
+ - lib/fbtxt/parser/token-date.rb
100
+ - lib/fbtxt/parser/token-date_duration.rb
101
+ - lib/fbtxt/parser/token-geo.rb
102
+ - lib/fbtxt/parser/token-goals--helpers.rb
103
+ - lib/fbtxt/parser/token-goals.rb
104
+ - lib/fbtxt/parser/token-group.rb
105
+ - lib/fbtxt/parser/token-note.rb
106
+ - lib/fbtxt/parser/token-prop.rb
107
+ - lib/fbtxt/parser/token-prop_name.rb
108
+ - lib/fbtxt/parser/token-round.rb
109
+ - lib/fbtxt/parser/token-score--helpers.rb
110
+ - lib/fbtxt/parser/token-score.rb
111
+ - lib/fbtxt/parser/token-score_full.rb
112
+ - lib/fbtxt/parser/token-score_fuller.rb
113
+ - lib/fbtxt/parser/token-score_legs.rb
114
+ - lib/fbtxt/parser/token-status.rb
115
+ - lib/fbtxt/parser/token-status_inline.rb
116
+ - lib/fbtxt/parser/token-text.rb
117
+ - lib/fbtxt/parser/token-time.rb
118
+ - lib/fbtxt/parser/token.rb
119
+ - lib/fbtxt/parser/version.rb
120
+ homepage: https://github.com/sportdb/sport.db
121
+ licenses:
122
+ - Public Domain
123
+ metadata: {}
124
+ post_install_message:
125
+ rdoc_options:
126
+ - "--main"
127
+ - README.md
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: 3.1.0
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubygems_version: 3.5.22
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: fbtxt-parser - football.txt match parser (& tokenizer)
145
+ test_files: []