lingo 1.8.4.2 → 1.8.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ChangeLog +413 -325
- data/README +380 -131
- data/Rakefile +19 -21
- data/de/lingo-abk.txt +15 -17
- data/de/lingo-dic.txt +20210 -20659
- data/de/lingo-mul.txt +5 -13
- data/de/lingo-syn.txt +5 -8
- data/de/test_dic.txt +2 -0
- data/de/test_gen.txt +8 -0
- data/de/{test_mul2.txt → test_mu2.txt} +0 -0
- data/de/{test_singleword.txt → test_sgw.txt} +0 -0
- data/de/user-dic.txt +5 -7
- data/de.lang +64 -49
- data/en/lingo-dic.txt +6398 -6404
- data/en/lingo-irr.txt +2 -3
- data/en/lingo-mul.txt +6 -7
- data/en/lingo-wdn.txt +881 -1762
- data/en/user-dic.txt +2 -5
- data/en.lang +39 -39
- data/lib/lingo/app.rb +10 -6
- data/lib/lingo/attendee/abbreviator.rb +1 -0
- data/lib/lingo/attendee/decomposer.rb +2 -1
- data/lib/lingo/attendee/multi_worder.rb +5 -6
- data/lib/lingo/attendee/stemmer.rb +1 -1
- data/lib/lingo/attendee/synonymer.rb +4 -2
- data/lib/lingo/attendee/text_reader.rb +77 -57
- data/lib/lingo/attendee/text_writer.rb +1 -1
- data/lib/lingo/attendee/tokenizer.rb +101 -50
- data/lib/lingo/attendee/variator.rb +2 -1
- data/lib/lingo/attendee/vector_filter.rb +28 -6
- data/lib/lingo/attendee/word_searcher.rb +2 -1
- data/lib/lingo/attendee.rb +8 -4
- data/lib/lingo/call.rb +7 -3
- data/lib/lingo/cli.rb +8 -16
- data/lib/lingo/config.rb +11 -6
- data/lib/lingo/ctl.rb +54 -3
- data/lib/lingo/database/crypter.rb +8 -14
- data/lib/lingo/database/hash_store.rb +1 -1
- data/lib/lingo/database/{show_progress.rb → progress.rb} +7 -8
- data/lib/lingo/database/source/key_value.rb +6 -5
- data/lib/lingo/database/source/multi_key.rb +5 -2
- data/lib/lingo/database/source/multi_value.rb +6 -4
- data/lib/lingo/database/source/single_word.rb +2 -3
- data/lib/lingo/database/source/word_class.rb +24 -5
- data/lib/lingo/database/source.rb +5 -3
- data/lib/lingo/database.rb +102 -41
- data/lib/lingo/error.rb +24 -2
- data/lib/lingo/language/dictionary.rb +26 -54
- data/lib/lingo/language/grammar.rb +19 -23
- data/lib/lingo/language/lexical.rb +5 -1
- data/lib/lingo/language/lexical_hash.rb +7 -12
- data/lib/lingo/language/token.rb +10 -1
- data/lib/lingo/language/word.rb +35 -23
- data/lib/lingo/language/word_form.rb +5 -4
- data/lib/lingo/{show_progress.rb → progress.rb} +43 -30
- data/lib/lingo/srv/lingosrv.cfg +1 -1
- data/lib/lingo/srv/public/.gitkeep +0 -0
- data/lib/lingo/srv.rb +11 -6
- data/lib/lingo/version.rb +2 -2
- data/lib/lingo/web/lingoweb.cfg +1 -1
- data/lib/lingo/web/views/index.erb +4 -4
- data/lib/lingo/web.rb +4 -6
- data/lib/lingo.rb +4 -12
- data/lingo.cfg +1 -1
- data/lir.cfg +1 -1
- data/ru/lingo-dic.txt +33473 -2113
- data/ru/lingo-mul.txt +8430 -1913
- data/ru/lingo-syn.txt +1634 -0
- data/ru/user-dic.txt +6 -0
- data/ru.lang +49 -47
- data/spec/spec_helper.rb +4 -0
- data/test/attendee/ts_decomposer.rb +2 -2
- data/test/attendee/ts_synonymer.rb +3 -3
- data/test/attendee/ts_tokenizer.rb +215 -2
- data/test/attendee/ts_variator.rb +2 -2
- data/test/attendee/ts_word_searcher.rb +10 -6
- data/test/ref/artikel.seq +2 -2
- data/test/ref/artikel.vec +5 -5
- data/test/ref/artikel.ven +11 -11
- data/test/ref/artikel.ver +11 -11
- data/test/ref/lir.seq +13 -13
- data/test/ref/lir.vec +31 -31
- data/test/test_helper.rb +19 -5
- data/test/ts_database.rb +206 -77
- data/test/ts_language.rb +86 -26
- metadata +93 -49
- data/.rspec +0 -1
- data/de/test_syn2.txt +0 -1
data/en/user-dic.txt
CHANGED
data/en.lang
CHANGED
@@ -40,62 +40,62 @@
|
|
40
40
|
# definiert sein, da es sonst noch nicht existiert!
|
41
41
|
#
|
42
42
|
|
43
|
-
# lingo language definition
|
44
43
|
---
|
45
44
|
language:
|
46
45
|
name: 'Englisch'
|
47
46
|
|
48
47
|
dictionary:
|
49
48
|
databases:
|
50
|
-
#
|
49
|
+
# System dictionaries
|
51
50
|
sys-dic: { name: en/lingo-dic.txt, txt-format: WordClass, separator: '=' }
|
52
|
-
sys-syn: { name: en/lingo-syn.txt, txt-format: KeyValue,
|
53
|
-
sys-mul: { name: en/lingo-mul.txt, txt-format: SingleWord, use-lex:
|
51
|
+
sys-syn: { name: en/lingo-syn.txt, txt-format: KeyValue, separator: '=', def-wc: y }
|
52
|
+
sys-mul: { name: en/lingo-mul.txt, txt-format: SingleWord, use-lex: sys-dic, def-wc: m }
|
54
53
|
sys-irr: { name: en/lingo-irr.txt, txt-format: WordClass, separator: '=' }
|
55
54
|
sys-wdn: { name: en/lingo-wdn.txt, txt-format: WordClass, separator: '=' }
|
56
|
-
|
57
|
-
|
55
|
+
|
56
|
+
# User dictionaries
|
57
|
+
usr-dic: { name: en/user-dic.txt, txt-format: WordClass, separator: '=' }
|
58
58
|
|
59
59
|
compound:
|
60
|
-
min-word-size:
|
61
|
-
min-part-size:
|
62
|
-
max-parts:
|
63
|
-
min-avg-part-size:
|
64
|
-
append-wordclass:
|
60
|
+
min-word-size: '7'
|
61
|
+
min-part-size: '3'
|
62
|
+
max-parts: '5'
|
63
|
+
min-avg-part-size: '4'
|
64
|
+
append-wordclass: '+'
|
65
65
|
skip-sequences: [ xx ]
|
66
66
|
|
67
67
|
suffix:
|
68
|
-
#
|
69
|
-
#
|
70
|
-
#
|
71
|
-
- [s,
|
72
|
-
- [a,
|
73
|
-
- [v,
|
74
|
-
- [e,
|
75
|
-
- [f,
|
68
|
+
# Suffixliste, Stand: *****ENGLISCH****
|
69
|
+
# Suffixklasse: s = Substantiv, a = Adjektiv, v = Verb, e = Eigenwort, f = Fugung
|
70
|
+
# Suffixe je Klasse: "<suffix>['/'<ersetzung>][ <suffix>['/'<ersetzung>]]"
|
71
|
+
- [s, 'es s ves/f ves/fe ies/y']
|
72
|
+
- [a, 'er est r st ier/y iest/y']
|
73
|
+
- [v, 'd ed en es ing s ing/e']
|
74
|
+
- [e, 's']
|
75
|
+
- [f, '']
|
76
76
|
|
77
77
|
attendees:
|
78
78
|
variator:
|
79
79
|
variations:
|
80
|
-
- [
|
81
|
-
- [
|
82
|
-
- [
|
83
|
-
- [
|
84
|
-
- [
|
85
|
-
- [
|
86
|
-
- [
|
87
|
-
- [
|
88
|
-
- [
|
89
|
-
- [
|
90
|
-
- [
|
91
|
-
- [
|
92
|
-
- [
|
93
|
-
- [
|
94
|
-
- [
|
95
|
-
- [
|
96
|
-
- [
|
97
|
-
- [
|
98
|
-
- [
|
80
|
+
- [ieh, sch]
|
81
|
+
- [fec, see]
|
82
|
+
- [it, st ]
|
83
|
+
- [fch, sch]
|
84
|
+
- [fp, sp ]
|
85
|
+
- [f, s ]
|
86
|
+
- [c, e ]
|
87
|
+
- [ffc, sse]
|
88
|
+
- [ff, ss ]
|
89
|
+
- [e, c ]
|
90
|
+
- [ni, m ]
|
91
|
+
- [feh, sch]
|
92
|
+
- [lt, st ]
|
93
|
+
- [il, st ]
|
94
|
+
- [ftc, ste]
|
95
|
+
- [ft, st ]
|
96
|
+
- [fl, st ]
|
97
|
+
- [li, h ]
|
98
|
+
- [i, s ]
|
99
99
|
|
100
100
|
sequencer:
|
101
|
-
sequences: [ [AS,
|
101
|
+
sequences: [ [AS, '2, 1'], [AK, '2, 1'], [AAK, '3, 1 2'], [AAS, '3, 1 2'] ]
|
data/lib/lingo/app.rb
CHANGED
@@ -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-
|
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 #
|
@@ -27,19 +27,19 @@
|
|
27
27
|
require 'json'
|
28
28
|
require 'optparse'
|
29
29
|
require 'shellwords'
|
30
|
-
require 'sinatra/
|
31
|
-
require 'sinatra/cookies'
|
30
|
+
require 'sinatra/bells'
|
32
31
|
|
33
32
|
class Lingo
|
34
33
|
|
35
|
-
class App < Sinatra::
|
34
|
+
class App < Sinatra::Bells
|
36
35
|
|
37
36
|
class << self
|
38
37
|
|
39
38
|
def init_app(file, *args, &block)
|
40
|
-
|
39
|
+
set_root(file)
|
41
40
|
parse_options(*args, &block)
|
42
|
-
|
41
|
+
|
42
|
+
get('/about') { to_json(self.class, version: VERSION) }
|
43
43
|
end
|
44
44
|
|
45
45
|
def parse_options(lingo_options = false)
|
@@ -63,7 +63,11 @@ 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?
|
67
|
+
|
66
68
|
ARGV.unshift(*yield) if block_given?
|
69
|
+
rescue OptionParser::ParseError => err
|
70
|
+
abort "#{err}\n#{banner}"
|
67
71
|
end
|
68
72
|
|
69
73
|
def rackup(name)
|
@@ -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-
|
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 #
|
@@ -80,6 +80,7 @@ class Lingo
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def control(cmd, param)
|
83
|
+
# can control
|
83
84
|
end
|
84
85
|
|
85
86
|
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-
|
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 #
|
@@ -86,7 +86,7 @@ class Lingo
|
|
86
86
|
@combine = get_key('combine', false)
|
87
87
|
@all = @combine.is_a?(String) && @combine.downcase == 'all'
|
88
88
|
|
89
|
-
lex_src, lex_mod, d = nil, nil,
|
89
|
+
lex_src, lex_mod, d = nil, nil, lingo.dictionary_config['databases']
|
90
90
|
|
91
91
|
(mul_src = get_array('source')).each { |src|
|
92
92
|
s, m = d[src].values_at('use-lex', 'lex-mode')
|
@@ -119,9 +119,8 @@ class Lingo
|
|
119
119
|
def process_buffer
|
120
120
|
unless form_at(0) == CHAR_PUNCT
|
121
121
|
unless (res = check_multiword_key(3)).empty?
|
122
|
-
len = res.map { |r|
|
123
|
-
|
124
|
-
}.sort!.reverse!
|
122
|
+
len = res.map { |r| r.is_a?(Lexical) ? r.form.count(' ') + 1 : r }
|
123
|
+
len.sort!.reverse!
|
125
124
|
|
126
125
|
unless (max = len.first) > 3
|
127
126
|
create_and_forward_multiword(3, res)
|
@@ -201,7 +200,7 @@ class Lingo
|
|
201
200
|
|
202
201
|
seq.shift.product(*seq) { |key|
|
203
202
|
@mul_dic.select(key.join(' '), mul)
|
204
|
-
break unless @
|
203
|
+
break unless @all || mul.empty?
|
205
204
|
} && mul.uniq!
|
206
205
|
|
207
206
|
mul
|
@@ -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-
|
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 #
|
@@ -74,15 +74,17 @@ class Lingo
|
|
74
74
|
|
75
75
|
def init
|
76
76
|
set_dic
|
77
|
+
@com = !get_key('compound-parts', false)
|
77
78
|
@skip = get_array('skip', WA_UNKNOWN, :upcase)
|
78
79
|
end
|
79
80
|
|
80
81
|
def control(cmd, param)
|
82
|
+
# can control
|
81
83
|
end
|
82
84
|
|
83
85
|
def process(obj)
|
84
86
|
if obj.is_a?(Word) && !@skip.include?(obj.attr)
|
85
|
-
obj.add_lexicals(@dic.find_synonyms(obj))
|
87
|
+
obj.add_lexicals(@dic.find_synonyms(obj, [], @com))
|
86
88
|
end
|
87
89
|
|
88
90
|
forward(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-
|
9
|
+
# Copyright (C) 2007-2013 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 #
|
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
require 'find'
|
28
28
|
|
29
|
-
%w[filemagic mime/types
|
29
|
+
%w[filemagic mime/types nokogiri nuggets/file/which pdf-reader].each { |lib|
|
30
30
|
begin
|
31
31
|
require lib
|
32
32
|
rescue LoadError
|
@@ -115,7 +115,7 @@ class Lingo
|
|
115
115
|
@filter = get_key('filter', false)
|
116
116
|
@progress = get_key('progress', false)
|
117
117
|
|
118
|
-
|
118
|
+
lingo.deprecate('lir-record-pattern', :records, self) if has_key?('lir-record-pattern')
|
119
119
|
|
120
120
|
@lir = get_re('records', get_key('lir-record-pattern', nil), %r{^\[(\d+)\.\]}) # DEPRECATE lir-record-pattern
|
121
121
|
@cut = get_re('fields', !!@lir, %r{^.+?:\s*})
|
@@ -135,16 +135,12 @@ class Lingo
|
|
135
135
|
def spool(path)
|
136
136
|
forward(STR_CMD_FILE, path)
|
137
137
|
|
138
|
-
|
139
|
-
|
140
|
-
io = StringIO.new(io.read) if @progress
|
141
|
-
else
|
142
|
-
io, name = File.open(path, 'rb', encoding: ENC), path
|
143
|
-
end
|
138
|
+
io = !stdin?(path) ? open_file(name = path) :
|
139
|
+
string_or_io(lingo.config.stdin.set_encoding(ENC))
|
144
140
|
|
145
|
-
|
146
|
-
filter(io) { |line, pos|
|
147
|
-
progress
|
141
|
+
Progress.new(self, @progress && io.size, name) { |progress|
|
142
|
+
filter(io, path, progress) { |line, pos|
|
143
|
+
progress << pos
|
148
144
|
|
149
145
|
line.chomp! if @chomp
|
150
146
|
next if line =~ @skip
|
@@ -161,38 +157,56 @@ class Lingo
|
|
161
157
|
forward(STR_CMD_EOF, path)
|
162
158
|
end
|
163
159
|
|
164
|
-
def filter(io)
|
160
|
+
def filter(io, path, progress)
|
165
161
|
block = @progress ?
|
166
162
|
lambda { |line| yield line, io.pos } :
|
167
163
|
lambda { |line| yield line, 0 }
|
168
164
|
|
169
|
-
case @filter == true ? file_type(
|
170
|
-
when
|
171
|
-
when /
|
172
|
-
when /
|
165
|
+
io = case @filter == true ? file_type(io, path) : @filter.to_s
|
166
|
+
when 'pdftotext' then filter_pdftotext(io, path, progress)
|
167
|
+
when /html/i then filter_html(io)
|
168
|
+
when /xml/i then filter_html(io, true)
|
169
|
+
when /pdf/i then filter_pdf(io, &block); return
|
170
|
+
else io
|
173
171
|
end
|
174
172
|
|
175
|
-
io.each_line(&block)
|
173
|
+
io.each_line(&block)
|
176
174
|
end
|
177
175
|
|
178
|
-
def
|
176
|
+
def filter_pdftotext(io, path, progress)
|
177
|
+
if cmd = File.which(name = 'pdftotext')
|
178
|
+
with_tempfile(name) { |tempfile|
|
179
|
+
pdf_path = stdin?(path) ? tempfile[:pdf, io] : path
|
180
|
+
system(cmd, '-q', pdf_path, txt_path = tempfile[:txt])
|
181
|
+
|
182
|
+
progress.init(File.size(txt_path)) if @progress
|
183
|
+
open_file(txt_path)
|
184
|
+
}
|
185
|
+
else
|
186
|
+
cancel_filter(:PDF, name, :command)
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def filter_pdf(io)
|
179
191
|
if Object.const_defined?(:PDF) && PDF.const_defined?(:Reader)
|
180
|
-
|
192
|
+
PDF::Reader.new(io).pages.each { |page| yield page.text }
|
181
193
|
else
|
182
|
-
|
194
|
+
cancel_filter(:PDF, 'pdf-reader')
|
183
195
|
end
|
184
196
|
end
|
185
197
|
|
186
198
|
def filter_html(io, xml = false)
|
187
|
-
|
188
|
-
|
199
|
+
type = xml ? :XML : :HTML
|
200
|
+
|
201
|
+
if Object.const_defined?(:Nokogiri)
|
202
|
+
doc = Nokogiri.send(type, io, nil, ENC)
|
203
|
+
string_or_io(doc.children.map { |x| x.inner_text }.join)
|
189
204
|
else
|
190
|
-
|
191
|
-
nil
|
205
|
+
cancel_filter(type, :nokogiri)
|
192
206
|
end
|
193
207
|
end
|
194
208
|
|
195
|
-
def file_type(
|
209
|
+
def file_type(io, path)
|
196
210
|
if Object.const_defined?(:FileMagic) && io.respond_to?(:rewind)
|
197
211
|
type = FileMagic.fm(:mime, simplified: true).buffer(io.read(256))
|
198
212
|
io.rewind
|
@@ -201,26 +215,56 @@ class Lingo
|
|
201
215
|
if type = MIME::Types.of(path).first
|
202
216
|
type.content_type
|
203
217
|
else
|
204
|
-
|
205
|
-
nil
|
218
|
+
cancel('Filters not available. File type could not be determined.')
|
206
219
|
end
|
207
220
|
else
|
208
|
-
|
209
|
-
nil
|
221
|
+
cancel("Filters not available. Please install the `ruby-filemagic' or `mime-types' gem.")
|
210
222
|
end
|
211
223
|
end
|
212
224
|
|
225
|
+
def cancel_filter(type, name, what = :gem)
|
226
|
+
cancel("#{type} filter not available. Please install the `#{name}' #{what}.")
|
227
|
+
end
|
228
|
+
|
229
|
+
def cancel(msg)
|
230
|
+
throw(:cancel, msg)
|
231
|
+
end
|
232
|
+
|
213
233
|
def stdin?(path)
|
214
234
|
%w[STDIN -].include?(path)
|
215
235
|
end
|
216
236
|
|
237
|
+
def string_or_io(io)
|
238
|
+
@progress ? StringIO.new(io.is_a?(String) ? io : io.read) : io
|
239
|
+
end
|
240
|
+
|
241
|
+
def open_file(path)
|
242
|
+
File.open(path, 'rb', encoding: ENC)
|
243
|
+
end
|
244
|
+
|
245
|
+
def with_tempfile(name)
|
246
|
+
require 'tempfile'
|
247
|
+
|
248
|
+
tempfiles = []
|
249
|
+
|
250
|
+
yield lambda { |ext, io = nil|
|
251
|
+
tempfiles << temp = Tempfile.new([name, ".#{ext}"])
|
252
|
+
temp.write(io.read) if io
|
253
|
+
temp.close
|
254
|
+
temp.path
|
255
|
+
}
|
256
|
+
ensure
|
257
|
+
tempfiles.each(&:unlink)
|
258
|
+
end
|
259
|
+
|
217
260
|
def get_files
|
218
261
|
args = [get_key('glob', '*.txt'), get_key('recursive', false)]
|
219
262
|
|
220
263
|
@files = []
|
221
264
|
|
222
265
|
Array(get_key('files', '-')).each { |path|
|
223
|
-
stdin?(path) ? @files << path :
|
266
|
+
stdin?(path) ? @files << path :
|
267
|
+
add_files(File.expand_path(path), *args)
|
224
268
|
}
|
225
269
|
end
|
226
270
|
|
@@ -233,42 +277,18 @@ class Lingo
|
|
233
277
|
if recursive
|
234
278
|
Find.find(entry) { |match|
|
235
279
|
if File.file?(match) && File.fnmatch?(glob, match)
|
236
|
-
@files <<
|
280
|
+
@files << match
|
237
281
|
end
|
238
282
|
}
|
239
283
|
else
|
240
284
|
add_files(File.join(entry, glob), glob)
|
241
285
|
end
|
242
286
|
else
|
243
|
-
@files <<
|
287
|
+
@files << entry
|
244
288
|
end
|
245
289
|
}
|
246
290
|
end
|
247
291
|
|
248
|
-
class PDFFilter
|
249
|
-
|
250
|
-
def self.filter(io, &block)
|
251
|
-
PDF::Reader.new.parse(io, new(&block))
|
252
|
-
end
|
253
|
-
|
254
|
-
def initialize(&block)
|
255
|
-
@block = block
|
256
|
-
end
|
257
|
-
|
258
|
-
def show_text(string, *params)
|
259
|
-
@block[string << '|']
|
260
|
-
end
|
261
|
-
|
262
|
-
alias_method :super_show_text, :show_text
|
263
|
-
alias_method :move_to_next_line_and_show_text, :show_text
|
264
|
-
alias_method :set_spacing_next_line_show_text, :show_text
|
265
|
-
|
266
|
-
def show_text_with_positioning(params, *)
|
267
|
-
params.each { |param| show_text(param) if param.is_a?(String) }
|
268
|
-
end
|
269
|
-
|
270
|
-
end
|
271
|
-
|
272
292
|
end
|
273
293
|
|
274
294
|
# For backwards compatibility.
|