lingo 1.8.5 → 1.8.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +25 -0
  3. data/README +7 -5
  4. data/Rakefile +58 -55
  5. data/{lingo-call.cfg → config/lingo-call.cfg} +1 -1
  6. data/{lingo.cfg → config/lingo.cfg} +10 -2
  7. data/{lir.cfg → config/lir.cfg} +10 -2
  8. data/{de → dict/de}/lingo-abk.txt +0 -0
  9. data/{de → dict/de}/lingo-dic.txt +0 -0
  10. data/{de → dict/de}/lingo-mul.txt +0 -0
  11. data/{de → dict/de}/lingo-syn.txt +0 -0
  12. data/{de → dict/de}/test_dic.txt +0 -0
  13. data/{de → dict/de}/test_gen.txt +0 -0
  14. data/{de → dict/de}/test_mu2.txt +0 -0
  15. data/{de → dict/de}/test_mul.txt +0 -0
  16. data/{de → dict/de}/test_sgw.txt +0 -0
  17. data/{de → dict/de}/test_syn.txt +0 -0
  18. data/{de → dict/de}/user-dic.txt +0 -0
  19. data/{en → dict/en}/lingo-dic.txt +0 -0
  20. data/{en → dict/en}/lingo-irr.txt +0 -0
  21. data/{en → dict/en}/lingo-mul.txt +0 -0
  22. data/{en → dict/en}/lingo-syn.txt +0 -0
  23. data/{en → dict/en}/lingo-wdn.txt +0 -0
  24. data/{en → dict/en}/user-dic.txt +0 -0
  25. data/{ru → dict/ru}/lingo-dic.txt +0 -0
  26. data/{ru → dict/ru}/lingo-mul.txt +0 -0
  27. data/{ru → dict/ru}/lingo-syn.txt +0 -0
  28. data/{ru → dict/ru}/user-dic.txt +0 -0
  29. data/{de.lang → lang/de.lang} +1 -1
  30. data/{en.lang → lang/en.lang} +0 -0
  31. data/{ru.lang → lang/ru.lang} +0 -0
  32. data/lib/lingo.rb +14 -15
  33. data/lib/lingo/app.rb +4 -2
  34. data/lib/lingo/attendee.rb +23 -43
  35. data/lib/lingo/attendee/abbreviator.rb +5 -5
  36. data/lib/lingo/attendee/debugger.rb +39 -12
  37. data/lib/lingo/attendee/decomposer.rb +3 -4
  38. data/lib/lingo/attendee/dehyphenizer.rb +4 -4
  39. data/lib/lingo/attendee/formatter.rb +1 -3
  40. data/lib/lingo/attendee/multi_worder.rb +3 -4
  41. data/lib/lingo/attendee/noneword_filter.rb +8 -12
  42. data/lib/lingo/attendee/object_filter.rb +6 -3
  43. data/lib/lingo/attendee/sequencer.rb +5 -5
  44. data/lib/lingo/attendee/stemmer.rb +3 -2
  45. data/lib/lingo/attendee/synonymer.rb +3 -4
  46. data/lib/lingo/attendee/text_reader.rb +39 -38
  47. data/lib/lingo/attendee/text_writer.rb +10 -10
  48. data/lib/lingo/attendee/tokenizer.rb +63 -33
  49. data/lib/lingo/attendee/variator.rb +3 -7
  50. data/lib/lingo/attendee/vector_filter.rb +132 -65
  51. data/lib/lingo/attendee/word_searcher.rb +5 -3
  52. data/lib/lingo/buffered_attendee.rb +1 -3
  53. data/lib/lingo/call.rb +4 -3
  54. data/lib/lingo/cli.rb +5 -1
  55. data/lib/lingo/config.rb +11 -5
  56. data/lib/lingo/ctl.rb +3 -3
  57. data/lib/lingo/database.rb +3 -1
  58. data/lib/lingo/database/crypter.rb +1 -3
  59. data/lib/lingo/database/source.rb +3 -1
  60. data/lib/lingo/database/source/key_value.rb +3 -1
  61. data/lib/lingo/database/source/multi_key.rb +3 -1
  62. data/lib/lingo/database/source/multi_value.rb +3 -1
  63. data/lib/lingo/database/source/single_word.rb +3 -1
  64. data/lib/lingo/database/source/word_class.rb +3 -1
  65. data/lib/lingo/debug.rb +5 -5
  66. data/lib/lingo/{agenda_item.rb → deferred_attendee.rb} +21 -12
  67. data/lib/lingo/error.rb +1 -1
  68. data/lib/lingo/language.rb +1 -9
  69. data/lib/lingo/language/dictionary.rb +2 -17
  70. data/lib/lingo/language/grammar.rb +10 -10
  71. data/lib/lingo/language/lexical.rb +2 -0
  72. data/lib/lingo/language/lexical_hash.rb +2 -0
  73. data/lib/lingo/language/token.rb +17 -3
  74. data/lib/lingo/language/word.rb +13 -5
  75. data/lib/lingo/language/word_form.rb +5 -3
  76. data/lib/lingo/progress.rb +2 -2
  77. data/lib/lingo/srv.rb +1 -1
  78. data/lib/lingo/srv/lingosrv.cfg +1 -1
  79. data/lib/lingo/version.rb +1 -1
  80. data/lib/lingo/web.rb +1 -1
  81. data/lib/lingo/web/lingoweb.cfg +1 -1
  82. data/test/attendee/ts_abbreviator.rb +4 -2
  83. data/test/attendee/ts_multi_worder.rb +81 -88
  84. data/test/attendee/ts_noneword_filter.rb +2 -2
  85. data/test/attendee/ts_object_filter.rb +2 -2
  86. data/test/attendee/ts_sequencer.rb +40 -20
  87. data/test/attendee/ts_stemmer.rb +52 -26
  88. data/test/attendee/ts_text_reader.rb +75 -56
  89. data/test/attendee/ts_text_writer.rb +6 -4
  90. data/test/attendee/ts_tokenizer.rb +304 -193
  91. data/test/attendee/ts_vector_filter.rb +242 -9
  92. data/test/ref/artikel.non +3 -0
  93. data/test/ref/artikel.vec +1 -4
  94. data/test/ref/artikel.vef +940 -0
  95. data/test/ref/artikel.ven +0 -3
  96. data/test/ref/artikel.ver +0 -3
  97. data/test/ref/artikel.vet +2580 -0
  98. data/test/ref/lir.non +34 -31
  99. data/test/ref/lir.seq +14 -15
  100. data/test/ref/lir.vec +37 -37
  101. data/test/ref/lir.vef +329 -0
  102. data/test/ref/lir.ven +329 -0
  103. data/test/ref/lir.ver +329 -0
  104. data/test/ref/lir.vet +329 -0
  105. data/test/test_helper.rb +29 -16
  106. data/test/ts_language.rb +6 -47
  107. metadata +74 -87
  108. data/lingo.rb +0 -29
  109. data/spec/spec_helper.rb +0 -5
@@ -55,7 +55,7 @@ class Lingo
55
55
  ARGV.unshift(*lingo_options) if lingo_options.is_a?(Array)
56
56
  end
57
57
 
58
- OptionParser.new(banner, 16) { |o|
58
+ OptionParser.new(banner, 12) { |o|
59
59
  o.on('-p port', 'set the port (default is 4567)') { |v| set :port, Integer(v) }
60
60
  o.on('-o addr', 'set the host (default is 0.0.0.0)') { |v| set :bind, v }
61
61
  o.on('-e env', 'set the environment (default is development)') { |v| set :environment, v.to_sym }
@@ -63,7 +63,9 @@ class Lingo
63
63
  o.on('-x', 'turn on the mutex lock (default is off)') { set :lock, true }
64
64
  }.parse!(argv)
65
65
 
66
- abort banner unless argv.empty?
66
+ argv.pop if File.basename($0) == 'rackup' # rackup config
67
+
68
+ abort "Unrecognized arguments: #{argv}\n#{banner}" unless argv.empty?
67
69
 
68
70
  ARGV.unshift(*yield) if block_given?
69
71
  rescue OptionParser::ParseError => err
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2015 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -28,6 +28,7 @@ require 'nuggets/string/evaluate'
28
28
 
29
29
  class Lingo
30
30
 
31
+ #--
31
32
  # Lingo ist als universelles Indexierungssystem entworfen worden. Seine Stärke liegt in der einfachen Konfigurierbarkeit für
32
33
  # spezifische Aufgaben und in der schnelle Entwicklung weiterer Funktionen durch systematischen Kapselung der Komplexität auf
33
34
  # kleine Verarbeitungseinheiten. Die kleinste Verarbeitungseinheit wird Attendee genannt. Um ein gewünschtes Verarbeitungsergebnis
@@ -63,54 +64,43 @@ class Lingo
63
64
  # - verarbeitet und/oder transformiert datenobjekte
64
65
  # - wird gesteuert durch kommandos
65
66
  # - schreibt verarbeitungsstatistiken
67
+ #++
66
68
 
67
69
  class Attendee
68
70
 
69
71
  include Language
70
72
 
71
- STR_CMD_TALK = 'TALK'
72
- STR_CMD_LIR = 'LIR-FORMAT'
73
- STR_CMD_FILE = 'FILE'
74
- STR_CMD_EOL = 'EOL'
75
- STR_CMD_RECORD = 'RECORD'
76
- STR_CMD_EOF = 'EOF'
77
-
78
73
  DEFAULT_SKIP = [TA_PUNCTUATION, TA_OTHER].join(',')
79
74
 
80
75
  def initialize(config, lingo)
81
- @lingo, @config, @subscriber = lingo, config, []
76
+ @lingo, @config, @subscribers = lingo, config, []
82
77
 
83
78
  # Make sure config exists
84
79
  lingo.dictionary_config
85
80
 
86
- @dic = @gra = nil
87
-
88
- init if self.class.method_defined?(:init)
81
+ @dic, @gra, @valid_keys = nil, nil, %w[name in out]
89
82
 
90
- @can_control = self.class.method_defined?(:control)
91
- @can_process = self.class.method_defined?(:process)
83
+ init
92
84
 
93
- @skip_command = false
85
+ unless (invalid_keys = config.keys - @valid_keys).empty?
86
+ warn(
87
+ "CONFIGURATION NOTICE: #{self.class.name.sub(/\ALingo::/, '')}" <<
88
+ " options invalid or obsolete: #{invalid_keys.sort.join(', ')}" <<
89
+ " (in #{lingo.config.config_file})"
90
+ )
91
+ end
94
92
  end
95
93
 
96
- attr_reader :lingo
94
+ attr_reader :lingo, :subscribers
97
95
 
98
- def add_subscriber(subscriber)
99
- @subscriber.concat(subscriber)
100
- end
101
-
102
- def listen(obj)
103
- if obj.is_a?(AgendaItem)
104
- args = obj.to_a
105
- control(*args) if @can_control
106
- forward(*args) unless obj.cmd == STR_CMD_TALK || skip_command!
107
- else
108
- @can_process ? process(obj) : forward(obj)
109
- end
96
+ def forward(*args)
97
+ subscribers.each { |sub| sub.process(*args) }
110
98
  end
111
99
 
112
- def talk(obj)
113
- @subscriber.each { |attendee| attendee.listen(obj) }
100
+ def command(*args)
101
+ subscribers.each { |sub|
102
+ sub.command(*args) unless sub.control(*args) == :skip_command
103
+ }
114
104
  end
115
105
 
116
106
  private
@@ -120,27 +110,16 @@ class Lingo
120
110
  g && (block_given? ? !yield(w) : w.unknown?) ? g.find_compound(f) : w
121
111
  end
122
112
 
123
- def skip_command
124
- @skip_command = true
125
- end
126
-
127
- def skip_command!
128
- @skip_command.tap { @skip_command &&= false }
129
- end
130
-
131
- def forward(obj, param = nil)
132
- talk(param ? AgendaItem.new(obj, param) : obj)
133
- end
134
-
135
113
  def flush(buffer)
136
114
  buffer.each { |i| forward(i) }.clear
137
115
  end
138
116
 
139
117
  def has_key?(key)
140
- @config && @config.key?(key)
118
+ @config.key?(key)
141
119
  end
142
120
 
143
121
  def get_key(key, default = nodefault = true)
122
+ @valid_keys << key
144
123
  raise MissingConfigError.new(key) if nodefault && !has_key?(key)
145
124
  @config.fetch(key, default)
146
125
  end
@@ -188,6 +167,7 @@ class Lingo
188
167
  end
189
168
 
190
169
  require_relative 'buffered_attendee'
170
+ require_relative 'deferred_attendee'
191
171
 
192
172
  require_relative 'attendee/abbreviator'
193
173
  require_relative 'attendee/debugger'
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -28,6 +28,7 @@ class Lingo
28
28
 
29
29
  class Attendee
30
30
 
31
+ #--
31
32
  # Die Erkennung von Abkürzungen kann auf vielfältige Weise erfolgen. In jedem Fall
32
33
  # sollte eine sichere Unterscheidung von einem Satzende-Punkt möglich sein.
33
34
  # Der in Lingo gewählte Ansatz befreit den Tokenizer von dieser Arbeit und konzentriert
@@ -67,18 +68,17 @@ class Lingo
67
68
  # out> :./PUNC:
68
69
  # out> *EOL('test.txt')
69
70
  # out> *EOF('test.txt')
71
+ #++
70
72
 
71
73
  class Abbreviator < self
72
74
 
73
- protected
74
-
75
75
  def init
76
76
  set_dic
77
77
  @abbr = nil
78
78
  end
79
79
 
80
- def control(cmd, param)
81
- send_abbr(@abbr) if [STR_CMD_RECORD, STR_CMD_EOF].include?(cmd)
80
+ def control(cmd, *)
81
+ send_abbr(@abbr) if [:RECORD, :EOF].include?(cmd)
82
82
  end
83
83
 
84
84
  def process(obj)
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -24,10 +24,13 @@
24
24
  ###############################################################################
25
25
  #++
26
26
 
27
+ require 'yaml'
28
+
27
29
  class Lingo
28
30
 
29
31
  class Attendee
30
32
 
33
+ #--
31
34
  # Die Attendees von Lingo übergeben Daten über ihre Kommunikationskanäle und entweder kommt bei
32
35
  # einer komplexen Konfiguration hinten das gewünschte Ergebnis raus oder aber auch nicht. Für den
33
36
  # letzeren Fall ist der Debugger primär gedacht. Er kann an beliebige Stelle in den Datenstrom
@@ -84,30 +87,54 @@ class Lingo
84
87
  # TOKEN:) *EOL('test.txt')
85
88
  # LINES:) *EOF('test.txt')
86
89
  # TOKEN:) *EOF('test.txt')
90
+ #++
87
91
 
88
92
  class Debugger < self
89
93
 
90
- protected
94
+ def init(default_prompt = 'lex:) ')
95
+ @prompt = get_key('prompt', default_prompt)
91
96
 
92
- def init
93
- @obj_eval = get_key('eval', 'true')
94
- @cmd_eval = get_key('ceval', 'true')
95
- @prompt = get_key('prompt', 'lex:) ')
97
+ unless @filter ||= get_key('filter', false)
98
+ @cmd_eval = get_key('ceval', 'true')
99
+ else
100
+ @cmd_eval = nil
101
+ end
102
+
103
+ @obj_eval = get_key('eval', 'true')
104
+ @preamble = get_key('preamble', true)
96
105
  end
97
106
 
98
- def control(cmd, param)
99
- debug(AgendaItem.new(cmd, param), @cmd_eval)
107
+ def control(cmd, param = nil, *)
108
+ if @cmd_eval
109
+ debug(eval(@cmd_eval)) { "*#{cmd}('#{param}')" }
110
+ elsif cmd == :EOL
111
+ :skip_command
112
+ end
100
113
  end
101
114
 
102
115
  def process(obj)
103
- debug(obj, @obj_eval)
104
- forward(obj)
116
+ debug(eval(@obj_eval)) { obj.inspect }
117
+ forward(obj) unless @filter
105
118
  end
106
119
 
107
120
  private
108
121
 
109
- def debug(obj, cond)
110
- warn "#{@prompt} #{obj.inspect}" if eval(cond)
122
+ def debug(condition)
123
+ send_msg((@preamble = nil; @lingo.config.to_h.to_yaml)) if @preamble
124
+ send_msg(@prompt + yield) if condition
125
+ end
126
+
127
+ def send_msg(msg)
128
+ @filter ? forward(msg) : warn(msg)
129
+ end
130
+
131
+ end
132
+
133
+ class DebugFilter < Debugger
134
+
135
+ def init
136
+ @filter = true
137
+ super('')
111
138
  end
112
139
 
113
140
  end
@@ -28,6 +28,7 @@ class Lingo
28
28
 
29
29
  class Attendee
30
30
 
31
+ #--
31
32
  # Komposita, also zusammengesetzte Wörter, sind eine Spezialität der deutschen Sprache
32
33
  # (z.B. Indexierungssystem oder Kompositumerkennung).
33
34
  # Könnte man alle Kombinationen in den Wörterbüchern hinterlegen, dann würde der
@@ -70,17 +71,15 @@ class Lingo
70
71
  # out> :./PUNC:
71
72
  # out> *EOL('test.txt')
72
73
  # out> *EOF('test.txt')
74
+ #++
73
75
 
74
76
  class Decomposer < self
75
77
 
76
- protected
77
-
78
78
  def init
79
79
  set_gra
80
80
  end
81
81
 
82
- def control(cmd, param)
83
- # can control
82
+ def control(*)
84
83
  end
85
84
 
86
85
  def process(obj)
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -28,6 +28,7 @@ class Lingo
28
28
 
29
29
  class Attendee
30
30
 
31
+ #--
31
32
  # Der Dehyphenizer ... muss noch dokumentiert werden
32
33
  #
33
34
  # === Mögliche Verlinkung
@@ -65,11 +66,10 @@ class Lingo
65
66
  # out> :./PUNC:
66
67
  # out> *EOL('test.txt')
67
68
  # out> *EOF('test.txt')
69
+ #++
68
70
 
69
71
  class Dehyphenizer < BufferedAttendee
70
72
 
71
- protected
72
-
73
73
  def init
74
74
  set_dic
75
75
  set_gra
@@ -79,7 +79,7 @@ class Lingo
79
79
  @expected_tokens_in_buffer, @eof_handling = 2, false
80
80
  end
81
81
 
82
- def control(cmd, param)
82
+ def control(cmd, *)
83
83
  control_multi(cmd)
84
84
  end
85
85
 
@@ -30,14 +30,12 @@ class Lingo
30
30
 
31
31
  class Formatter < TextWriter
32
32
 
33
- protected
34
-
35
33
  def init
36
34
  super
37
35
 
38
36
  @ext = get_key('ext', '-')
39
37
  @format = get_key('format', '%s')
40
- @map = get_key('map', Hash.new { |h, k| h[k] = k })
38
+ @map = get_key('map', Hash.nest { |k| k })
41
39
 
42
40
  @no_puts = true
43
41
  end
@@ -28,6 +28,7 @@ class Lingo
28
28
 
29
29
  class Attendee
30
30
 
31
+ #--
31
32
  # Mit der bisher beschriebenen Vorgehensweise werden die durch den Tokenizer erkannten
32
33
  # Token aufgelöst und in Words verwandelt und über den Abbreviator und Decomposer auch
33
34
  # Spezialfälle behandelt, die einzelne Wörter betreffen.
@@ -72,11 +73,10 @@ class Lingo
72
73
  # out> :./PUNC:
73
74
  # out> *EOL('test.txt')
74
75
  # out> *EOF('test.txt')
76
+ #++
75
77
 
76
78
  class MultiWorder < BufferedAttendee
77
79
 
78
- protected
79
-
80
80
  def init
81
81
  # combine lexical variants?
82
82
  #
@@ -112,7 +112,7 @@ class Lingo
112
112
  @expected_tokens_in_buffer, @eof_handling = 3, false
113
113
  end
114
114
 
115
- def control(cmd, param)
115
+ def control(cmd, *)
116
116
  control_multi(cmd)
117
117
  end
118
118
 
@@ -172,7 +172,6 @@ class Lingo
172
172
  WA_MULTIWORD, lex.select { |l| l.is_a?(Lexical) }))
173
173
  end
174
174
 
175
- # Prüft einen definiert langen Schlüssel ab Position 0 im Buffer
176
175
  def check_multiword_key(len)
177
176
  return [] if valid_tokens_in_buffer < len
178
177
 
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -28,6 +28,7 @@ class Lingo
28
28
 
29
29
  class Attendee
30
30
 
31
+ #--
31
32
  # Der NonewordFilter ermöglicht es, alle nicht erkannten Wörter aus dem Datenstrom zu
32
33
  # selektieren und weiterzuleiten. Im Prinzip werden alle erkannten Wörter gefiltert.
33
34
  # Bei einem Indexierungslauf können so alle nicht durch den Wordsearcher erkannten Wörter,
@@ -65,11 +66,10 @@ class Lingo
65
66
  # out> *FILE('test.txt')
66
67
  # out> "lingo"
67
68
  # out> *EOF('test.txt')
69
+ #++
68
70
 
69
71
  class NonewordFilter < self
70
72
 
71
- protected
72
-
73
73
  def init
74
74
  @sort = get_key('sort', !ENV['LINGO_NO_SORT'])
75
75
  @dict = get_key('dict', false)
@@ -78,16 +78,12 @@ class Lingo
78
78
  @nonewords = []
79
79
  end
80
80
 
81
- def control(cmd, param)
81
+ def control(cmd, *)
82
82
  case cmd
83
- when STR_CMD_FILE
84
- @nonewords.clear
85
- when STR_CMD_EOL
86
- skip_command
87
- when STR_CMD_RECORD
88
- send_nonewords unless @dict
89
- when STR_CMD_EOF
90
- send_nonewords
83
+ when :FILE then @nonewords.clear
84
+ when :EOL then :skip_command
85
+ when :RECORD then send_nonewords unless @dict
86
+ when :EOF then send_nonewords
91
87
  end
92
88
  end
93
89
 
@@ -6,7 +6,7 @@
6
6
  # Lingo -- A full-featured automatic indexing system #
7
7
  # #
8
8
  # Copyright (C) 2005-2007 John Vorhauer #
9
- # Copyright (C) 2007-2012 John Vorhauer, Jens Wille #
9
+ # Copyright (C) 2007-2014 John Vorhauer, Jens Wille #
10
10
  # #
11
11
  # Lingo is free software; you can redistribute it and/or modify it under the #
12
12
  # terms of the GNU Affero General Public License as published by the Free #
@@ -28,6 +28,7 @@ class Lingo
28
28
 
29
29
  class Attendee
30
30
 
31
+ #--
31
32
  # Der ObjectFilter ermöglicht es, beliebige Objekte aus dem Datenstrom herauszufiltern.
32
33
  # Um die gewünschten Objekte zu identifizieren, sind ein paar Ruby-Kenntnisse und das Wissen
33
34
  # um die Lingo Klassen notwendig. Hier sollen kurz die häufigsten Fälle angesprochen werden:
@@ -67,15 +68,17 @@ class Lingo
67
68
  # out> <Indexierung = [(indexierung/s)]>
68
69
  # out> *EOL('test.txt')
69
70
  # out> *EOF('test.txt')
71
+ #++
70
72
 
71
73
  class ObjectFilter < self
72
74
 
73
- protected
74
-
75
75
  def init
76
76
  @obj_eval = get_key('objects', 'true')
77
77
  end
78
78
 
79
+ def control(*)
80
+ end
81
+
79
82
  def process(obj)
80
83
  forward(obj) if eval(@obj_eval)
81
84
  end