searchlink 2.3.68 → 2.3.70

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.
@@ -20,14 +20,14 @@ module SL
20
20
 
21
21
  input.parse_flags! unless skip_flags
22
22
 
23
- options = %w[debug country_code inline prefix_random include_titles remove_seo validate_links]
23
+ options = %w[debug country_code inline prefix_random include_titles remove_seo validate_links complete_bare]
24
24
  options.each do |o|
25
25
  if input =~ /^ *#{o}:\s+(\S+)$/
26
26
  val = Regexp.last_match(1).strip
27
27
  val = true if val =~ /true/i
28
28
  val = false if val =~ /false/i
29
29
  SL.config[o] = val
30
- $stderr.print "\r\033[0KGlobal config: #{o} = #{SL.config[o]}\n" unless SILENT
30
+ warn "\r\033[0KGlobal config: #{o} = #{SL.config[o]}\n" unless SILENT
31
31
  end
32
32
 
33
33
  next if skip_flags
@@ -57,7 +57,7 @@ module SL
57
57
  case input.strip
58
58
  when /^!?help$/i
59
59
  if SILENT
60
- help_dialog # %x{open http://brettterpstra.com/projects/searchlink/}
60
+ help_dialog
61
61
  else
62
62
  $stdout.puts SL.version_check.to_s
63
63
  $stdout.puts 'See https://github.com/ttscoff/searchlink/wiki for help'
@@ -75,6 +75,117 @@ module SL
75
75
  Process.exit 0
76
76
  end
77
77
 
78
+ def create_footnote(mtch)
79
+ if mtch[1].nil? || mtch[1] == ''
80
+ match
81
+ else
82
+ note = mtch[1].strip
83
+ @footnote_counter += 1
84
+ ref = if !@link_text.empty? && @link_text.scan(/\s/).empty?
85
+ @link_text
86
+ else
87
+ format('%<p>sfn%<c>04d', p: @prefix, c: @footnote_counter)
88
+ end
89
+ SL.add_footer "[^#{ref}]: #{note}"
90
+ res = "[^#{ref}]"
91
+ @cursor_difference += (SL.match_length - res.length)
92
+ SL.match_length = res.length
93
+ SL.add_report("#{@match_string} => Footnote #{ref}")
94
+ res
95
+ end
96
+ end
97
+
98
+ def add_title(link_info)
99
+ @url = link_info
100
+ title = SL::URL.title(@url)
101
+ @link_text = title
102
+
103
+ if @ref_title
104
+ unless @links.key? @url
105
+ @links[@url] = @link_text
106
+ SL.add_footer SL.make_link(:ref_title, @link_text, @url, title: title, force_title: false)
107
+ end
108
+ @delete_line = true
109
+ elsif SL.config['inline']
110
+ res = SL.make_link(:inline, @link_text, @url, title: title, force_title: false)
111
+ @cursor_difference += SL.match_length - res.length
112
+ SL.match_length = res.length
113
+ SL.add_report("#{@match_string} => #{@url}")
114
+ res
115
+ else
116
+ unless @links.key? @url
117
+ @highest_marker += 1
118
+ @links[@url] = format('%<pre>s%<m>04d', pre: @prefix, m: @highest_marker)
119
+ SL.add_footer SL.make_link(:ref_title, @links[@url], @url, title: title, force_title: false)
120
+ end
121
+
122
+ type = SL.config['inline'] ? :inline : :ref_link
123
+ res = SL.make_link(type, @link_text, @links[@url], title: false, force_title: false)
124
+ @cursor_difference += SL.match_length - res.length
125
+ SL.match_length = res.length
126
+ SL.add_report("#{@match_string} => #{@url}")
127
+ res
128
+ end
129
+ end
130
+
131
+ def custom_search(search_type, search_terms)
132
+ SL.config['custom_site_searches'].each do |k, v|
133
+ next unless search_type == k
134
+
135
+ @link_text = search_terms if !SL.titleize && @link_text == ''
136
+ v = parse_arguments(v, { no_restore: true })
137
+ if v =~ %r{^(/|http)}i
138
+ search_type = 'r'
139
+ tokens = v.scan(/\$term\d+[ds]?/).sort.uniq
140
+
141
+ if !tokens.empty?
142
+ highest_token = 0
143
+ tokens.each do |token|
144
+ if token =~ /(\d+)[ds]?$/ && Regexp.last_match(1).to_i > highest_token
145
+ highest_token = Regexp.last_match(1).to_i
146
+ end
147
+ end
148
+ terms_p = search_terms.split(/ +/)
149
+ if terms_p.length > highest_token
150
+ remainder = terms_p[highest_token - 1..-1].join(' ')
151
+ terms_p = terms_p[0..highest_token - 2]
152
+ terms_p.push(remainder)
153
+ end
154
+ tokens.each do |t|
155
+ next unless t =~ /(\d+)[ds]?$/
156
+
157
+ int = Regexp.last_match(1).to_i - 1
158
+ replacement = terms_p[int]
159
+ case t
160
+ when /d$/
161
+ replacement.downcase!
162
+ re_down = ''
163
+ when /s$/
164
+ replacement.slugify!
165
+ re_down = ''
166
+ else
167
+ re_down = '(?!d|s)'
168
+ end
169
+ v.gsub!(/#{Regexp.escape(t) + re_down}/, replacement.url_encode)
170
+ end
171
+ search_terms = v
172
+ else
173
+ search_terms = v.gsub(/\$term[ds]?/i) do |mtch|
174
+ search_terms.downcase! if mtch =~ /d$/i
175
+ search_terms.slugify! if mtch =~ /s$/i
176
+ search_terms.url_encode
177
+ end
178
+ end
179
+ else
180
+ search_type = SL::GoogleSearch.api_key? ? 'gg' : 'g'
181
+ search_terms = "site:#{v} #{search_terms}"
182
+ end
183
+
184
+ break
185
+ end
186
+ [search_type, search_terms]
187
+ end
188
+
78
189
  def parse(input)
79
190
  SL.output = []
80
191
  return false if input.empty?
@@ -94,7 +205,7 @@ module SL
94
205
  SL.add_output("<!-- v#{latest_version} available, run SearchLink on the word 'update' to install. -->")
95
206
  end
96
207
 
97
- links = {}
208
+ @links = {}
98
209
  SL.footer = []
99
210
  counter_links = 0
100
211
  counter_errors = 0
@@ -102,9 +213,9 @@ module SL
102
213
  input.sub!(/\n?<!-- Report:.*?-->\n?/m, '')
103
214
  input.sub!(/\n?<!-- Errors:.*?-->\n?/m, '')
104
215
 
105
- input.scan(/\[(.*?)\]:\s+(.*?)\n/).each { |match| links[match[1].strip] = match[0] }
216
+ input.scan(/\[(.*?)\]:\s+(.*?)\n/).each { |match| @links[match[1].strip] = match[0] }
106
217
 
107
- prefix = if SL.config['prefix_random']
218
+ @prefix = if SL.config['prefix_random']
108
219
  if input =~ /\[(\d{4}-)\d+\]: \S+/
109
220
  Regexp.last_match(1)
110
221
  else
@@ -114,16 +225,27 @@ module SL
114
225
  ''
115
226
  end
116
227
 
117
- highest_marker = 0
118
- input.scan(/^\s{,3}\[(?:#{prefix})?(\d+)\]: /).each do
228
+ @highest_marker = 0
229
+ input.scan(/^\s{,3}\[(?:#{@prefix})?(\d+)\]: /).each do
119
230
  m = Regexp.last_match
120
- highest_marker = m[1].to_i if m[1].to_i > highest_marker
231
+ @highest_marker = m[1].to_i if m[1].to_i > @highest_marker
121
232
  end
122
233
 
123
- footnote_counter = 0
124
- input.scan(/^\s{,3}\[\^(?:#{prefix})?fn(\d+)\]: /).each do
234
+ @footnote_counter = 0
235
+ input.scan(/^\s{,3}\[\^(?:#{@prefix})?fn(\d+)\]: /).each do
125
236
  m = Regexp.last_match
126
- footnote_counter = m[1].to_i if m[1].to_i > footnote_counter
237
+ @footnote_counter = m[1].to_i if m[1].to_i > @footnote_counter
238
+ end
239
+
240
+ if SL.config['complete_bare']
241
+ rx = %r{(?ix-m)(?<!\(|:\s|<)(?:
242
+ (?:https?://)(?:[\da-z.-]+)\.(?:[a-z.]{2,6})
243
+ (?:[/\w\d.\-()_/+=?&%]*?(?=[\s\n]|$))
244
+ )}
245
+ input.gsub!(rx) do
246
+ url_match = Regexp.last_match
247
+ url_match.pre_match =~ /!\S+ +$/ ? url_match[0] : "[%](#{url_match[0]})"
248
+ end
127
249
  end
128
250
 
129
251
  if input =~ /\[(.*?)\]\((.*?)\)/
@@ -135,7 +257,7 @@ module SL
135
257
  line_difference = 0
136
258
  lines.each_with_index do |line, num|
137
259
  SL.line_num = num - line_difference
138
- cursor_difference = 0
260
+ @cursor_difference = 0
139
261
  # ignore links in code blocks
140
262
  if line =~ /^( {4,}|\t+)[^*+\-]/
141
263
  out.push(line)
@@ -155,22 +277,22 @@ module SL
155
277
  next
156
278
  end
157
279
 
158
- delete_line = false
280
+ @delete_line = false
159
281
 
160
- search_count = 0
282
+ @search_count = 0
161
283
 
162
284
  line.gsub!(/\[(.*?)\]\((.*?)\)/) do |match|
163
285
  this_match = Regexp.last_match
164
- SL.match_column = this_match.begin(0) - cursor_difference
165
- match_string = this_match.to_s
166
- SL.match_length = match_string.length
286
+ SL.match_column = this_match.begin(0) - @cursor_difference
287
+ @match_string = this_match.to_s
288
+ SL.match_length = @match_string.length
167
289
  match_before = this_match.pre_match
168
290
 
169
291
  invalid_search = false
170
- ref_title = false
292
+ @ref_title = false
171
293
 
172
294
  if match_before.scan(/(^|[^\\])`/).length.odd?
173
- SL.add_report("Match '#{match_string}' within an inline code block")
295
+ SL.add_report("Match '#{@match_string}' within an inline code block")
174
296
  invalid_search = true
175
297
  end
176
298
 
@@ -179,14 +301,14 @@ module SL
179
301
  $stderr.print("\033[0K\rProcessed: #{counter_links} of #{total_links}, #{counter_errors} errors. ")
180
302
  end
181
303
 
182
- link_text = this_match[1] || ''
304
+ @link_text = this_match[1] || ''
183
305
  link_info = parse_arguments(this_match[2].strip).strip || ''
184
306
 
185
- if link_text.strip == '' && link_info =~ /".*?"/
307
+ if @link_text.strip == '' && link_info =~ /".*?"/
186
308
  link_info.gsub!(/"(.*?)"/) do
187
- m = Regexp.last_match(1)
188
- link_text = m if link_text == ''
189
- %("#")
309
+ m = Regexp.last_match
310
+ @link_text = m[1] if @link_text == ''
311
+ m[0]
190
312
  end
191
313
  end
192
314
 
@@ -195,11 +317,11 @@ module SL
195
317
  end
196
318
 
197
319
  if link_info.strip =~ /:$/ && line.strip == match
198
- ref_title = true
320
+ @ref_title = true
199
321
  link_info.sub!(/\s*:\s*$/, '')
200
322
  end
201
323
 
202
- unless !link_text.empty? || !link_info.sub(/^[!\^]\S+/, '').strip.empty?
324
+ unless !@link_text.empty? || !link_info.sub(/^[!\^]\S+/, '').strip.empty?
203
325
  SL.add_error('No input', match)
204
326
  counter_errors += 1
205
327
  invalid_search = true
@@ -217,60 +339,15 @@ module SL
217
339
  match
218
340
  elsif link_info =~ /^\^(.+)/
219
341
  m = Regexp.last_match
220
- if m[1].nil? || m[1] == ''
221
- match
222
- else
223
- note = m[1].strip
224
- footnote_counter += 1
225
- ref = if !link_text.empty? && link_text.scan(/\s/).empty?
226
- link_text
227
- else
228
- format('%<p>sfn%<c>04d', p: prefix, c: footnote_counter)
229
- end
230
- SL.add_footer "[^#{ref}]: #{note}"
231
- res = "[^#{ref}]"
232
- cursor_difference += (SL.match_length - res.length)
233
- SL.match_length = res.length
234
- SL.add_report("#{match_string} => Footnote #{ref}")
235
- res
236
- end
342
+ create_footnote(m)
237
343
  # Handle [](URL) and [%](URL), filling in title
238
- elsif (link_text == '' || link_text == '%') && SL::URL.url?(link_info)
239
- url = link_info
240
- title = SL::URL.title(link_info)
241
- link_text = title
242
-
243
- if ref_title
244
- unless links.key? url
245
- links[url] = link_text
246
- SL.add_footer SL.make_link(:ref_title, link_text, url, title: title, force_title: false)
247
- end
248
- delete_line = true
249
- elsif SL.config['inline']
250
- res = SL.make_link(:inline, link_text, url, title: title, force_title: false)
251
- cursor_difference += SL.match_length - res.length
252
- SL.match_length = res.length
253
- SL.add_report("#{match_string} => #{url}")
254
- res
255
- else
256
- unless links.key? url
257
- highest_marker += 1
258
- links[url] = format('%<pre>s%<m>04d', pre: prefix, m: highest_marker)
259
- SL.add_footer SL.make_link(:ref_title, links[url], url, title: title, force_title: false)
260
- end
261
-
262
- type = SL.config['inline'] ? :inline : :ref_link
263
- res = SL.make_link(type, link_text, links[url], title: false, force_title: false)
264
- cursor_difference += SL.match_length - res.length
265
- SL.match_length = res.length
266
- SL.add_report("#{match_string} => #{url}")
267
- res
268
- end
269
- elsif (link_text == '' && link_info == '') || SL::URL.url?(link_info)
344
+ elsif (@link_text == '' || @link_text == '%') && SL::URL.url?(link_info)
345
+ add_title(link_info)
346
+ elsif (@link_text == '' && link_info == '') || SL::URL.url?(link_info)
270
347
  SL.add_error('Invalid search', match) unless SL::URL.url?(link_info)
271
348
  match
272
349
  else
273
- link_info = link_text if !link_text.empty? && link_info == ''
350
+ link_info = @link_text if !@link_text.empty? && link_info == ''
274
351
 
275
352
  search_type = ''
276
353
  search_terms = ''
@@ -282,7 +359,7 @@ module SL
282
359
  m = Regexp.last_match
283
360
 
284
361
  search_type = if m[1].nil?
285
- SL::GoogleSearch.test_for_key ? 'gg' : 'g'
362
+ SL::GoogleSearch.api_key? ? 'gg' : 'g'
286
363
  else
287
364
  m[1]
288
365
  end
@@ -291,15 +368,15 @@ module SL
291
368
  search_terms.strip!
292
369
 
293
370
  # if the link text is just '%' replace with title regardless of config settings
294
- if link_text == '%' && search_terms && !search_terms.empty?
371
+ if @link_text == '%' && search_terms && !search_terms.empty?
295
372
  SL.titleize = true
296
- link_text = ''
373
+ @link_text = ''
297
374
  end
298
375
 
299
- search_terms = link_text if search_terms == ''
376
+ search_terms = @link_text if search_terms == ''
300
377
 
301
378
  # if the input starts with a +, append it to the link text as the search terms
302
- search_terms = "#{link_text} #{search_terms.strip.sub(/^\+\s*/, '')}" if search_terms.strip =~ /^\+[^+]/
379
+ search_terms = "#{@link_text} #{search_terms.strip.sub(/^\+\s*/, '')}" if search_terms.strip =~ /^\+[^+]/
303
380
 
304
381
  # if the end of input contain "^", copy to clipboard instead of STDOUT
305
382
  SL.clipboard = true if search_terms =~ /(!!)?\^(!!)?$/
@@ -314,21 +391,21 @@ module SL
314
391
 
315
392
  if search_word && SL::Searches.valid_search?(search_word[1])
316
393
  search_type = search_word[1] unless search_word.nil?
317
- search_terms = link_text
394
+ search_terms = @link_text
318
395
  elsif search_word && search_word[1] =~ /^(\S+\.)+\S+$/
319
- search_type = SL::GoogleSearch.test_for_key ? 'gg' : 'g'
320
- puts SL::GoogleSearch.test_for_key
321
- search_terms = "site:#{search_word[1]} #{link_text}"
396
+ search_type = SL::GoogleSearch.api_key? ? 'gg' : 'g'
397
+ puts SL::GoogleSearch.api_key?
398
+ search_terms = "site:#{search_word[1]} #{@link_text}"
322
399
  else
323
400
  SL.add_error("Invalid search#{SL::Searches.did_you_mean(search_word[1])}", match)
324
401
  search_type = false
325
402
  search_terms = false
326
403
  end
327
- elsif link_text && !link_text.empty? && (!link_info || link_info.empty?)
328
- search_type = SL::GoogleSearch.test_for_key ? 'gg' : 'g'
329
- search_terms = link_text
404
+ elsif @link_text && !@link_text.empty? && (!link_info || link_info.empty?)
405
+ search_type = SL::GoogleSearch.api_key? ? 'gg' : 'g'
406
+ search_terms = @link_text
330
407
  elsif link_info && !link_info.empty?
331
- search_type = SL::GoogleSearch.test_for_key ? 'gg' : 'g'
408
+ search_type = SL::GoogleSearch.api_key? ? 'gg' : 'g'
332
409
  search_terms = link_info
333
410
  else
334
411
  SL.add_error('Invalid search', match)
@@ -337,109 +414,56 @@ module SL
337
414
  end
338
415
 
339
416
  if search_type && !search_terms.empty?
340
- SL.config['custom_site_searches'].each do |k, v|
341
- next unless search_type == k
342
-
343
- link_text = search_terms if !SL.titleize && link_text == ''
344
- v = parse_arguments(v, { no_restore: true })
345
- if v =~ %r{^(/|http)}i
346
- search_type = 'r'
347
- tokens = v.scan(/\$term\d+[ds]?/).sort.uniq
348
-
349
- if !tokens.empty?
350
- highest_token = 0
351
- tokens.each do |token|
352
- if token =~ /(\d+)[ds]?$/ && Regexp.last_match(1).to_i > highest_token
353
- highest_token = Regexp.last_match(1).to_i
354
- end
355
- end
356
- terms_p = search_terms.split(/ +/)
357
- if terms_p.length > highest_token
358
- remainder = terms_p[highest_token - 1..-1].join(' ')
359
- terms_p = terms_p[0..highest_token - 2]
360
- terms_p.push(remainder)
361
- end
362
- tokens.each do |t|
363
- next unless t =~ /(\d+)[ds]?$/
364
-
365
- int = Regexp.last_match(1).to_i - 1
366
- replacement = terms_p[int]
367
- case t
368
- when /d$/
369
- replacement.downcase!
370
- re_down = ''
371
- when /s$/
372
- replacement.slugify!
373
- re_down = ''
374
- else
375
- re_down = '(?!d|s)'
376
- end
377
- v.gsub!(/#{Regexp.escape(t) + re_down}/, replacement.url_encode)
378
- end
379
- search_terms = v
380
- else
381
- search_terms = v.gsub(/\$term[ds]?/i) do |mtch|
382
- search_terms.downcase! if mtch =~ /d$/i
383
- search_terms.slugify! if mtch =~ /s$/i
384
- search_terms.url_encode
385
- end
386
- end
387
- else
388
- search_type = SL::GoogleSearch.test_for_key ? 'gg' : 'g'
389
- search_terms = "site:#{v} #{search_terms}"
390
- end
391
-
392
- break
393
- end
417
+ search_type, search_terms = custom_search(search_type, search_terms)
394
418
  end
395
419
 
396
- if (search_type && search_terms) || url
420
+ if (search_type && search_terms) || @url
397
421
  # warn "Searching #{search_type} for #{search_terms}"
398
- unless url
399
- search_count += 1
400
- url, title, link_text = do_search(search_type, search_terms, link_text, search_count)
422
+ unless @url
423
+ @search_count += 1
424
+ @url, title, @link_text = do_search(search_type, search_terms, @link_text, @search_count)
401
425
  end
402
426
 
403
- if url
404
- title = SL::URL.title(url) if SL.titleize && title == ''
427
+ if @url
428
+ title = SL::URL.title(@url) if SL.titleize && title == ''
405
429
 
406
- link_text = title if link_text == '' && title
430
+ @link_text = title if @link_text == '' && title
407
431
  force_title = search_type =~ /def/ ? true : false
408
432
 
409
- if link_only || search_type =~ /sp(ell)?/ || url == 'embed'
410
- url = title if url == 'embed'
411
- cursor_difference += SL.match_length - url.length
412
- SL.match_length = url.length
413
- SL.add_report("#{match_string} => #{url}")
414
- url
415
- elsif ref_title
416
- unless links.key? url
417
- links[url] = link_text
418
- SL.add_footer SL.make_link(:ref_title, link_text, url, title: title, force_title: force_title)
433
+ if link_only || search_type =~ /sp(ell)?/ || @url == 'embed'
434
+ @url = title if @url == 'embed'
435
+ @cursor_difference += SL.match_length - @url.length
436
+ SL.match_length = @url.length
437
+ SL.add_report("#{@match_string} => #{@url}")
438
+ @url
439
+ elsif @ref_title
440
+ unless @links.key? @url
441
+ @links[@url] = @link_text
442
+ SL.add_footer SL.make_link(:ref_title, @link_text, @url, title: title, force_title: force_title)
419
443
  end
420
- delete_line = true
444
+ @delete_line = true
421
445
  elsif SL.config['inline']
422
- res = SL.make_link(:inline, link_text, url, title: title, force_title: force_title)
423
- cursor_difference += SL.match_length - res.length
446
+ res = SL.make_link(:inline, @link_text, @url, title: title, force_title: force_title)
447
+ @cursor_difference += SL.match_length - res.length
424
448
  SL.match_length = res.length
425
- SL.add_report("#{match_string} => #{url}")
449
+ SL.add_report("#{@match_string} => #{@url}")
426
450
  res
427
451
  else
428
- unless links.key? url
429
- highest_marker += 1
430
- links[url] = format('%<pre>s%<m>04d', pre: prefix, m: highest_marker)
431
- SL.add_footer SL.make_link(:ref_title, links[url], url, title: title, force_title: force_title)
452
+ unless @links.key? @url
453
+ @highest_marker += 1
454
+ @links[@url] = format('%<pre>s%<m>04d', pre: @prefix, m: @highest_marker)
455
+ SL.add_footer SL.make_link(:ref_title, @links[@url], @url, title: title, force_title: force_title)
432
456
  end
433
457
 
434
458
  type = SL.config['inline'] ? :inline : :ref_link
435
- res = SL.make_link(type, link_text, links[url], title: false, force_title: force_title)
436
- cursor_difference += SL.match_length - res.length
459
+ res = SL.make_link(type, @link_text, @links[@url], title: false, force_title: force_title)
460
+ @cursor_difference += SL.match_length - res.length
437
461
  SL.match_length = res.length
438
- SL.add_report("#{match_string} => #{url}")
462
+ SL.add_report("#{@match_string} => #{@url}")
439
463
  res
440
464
  end
441
465
  else
442
- SL.add_error('No results', "#{search_terms} (#{match_string})")
466
+ SL.add_error('No results', "#{search_terms} (#{@match_string})")
443
467
  counter_errors += 1
444
468
  match
445
469
  end
@@ -450,9 +474,9 @@ module SL
450
474
  end
451
475
  end
452
476
  end
453
- line_difference += 1 if delete_line
454
- out.push(line) unless delete_line
455
- delete_line = false
477
+ line_difference += 1 if @delete_line
478
+ out.push(line) unless @delete_line
479
+ @delete_line = false
456
480
  end
457
481
  warn "\n" unless SILENT
458
482
 
@@ -514,8 +538,8 @@ module SL
514
538
  ## using hostname as text without doing search
515
539
  if SL::URL.only_url?(input.strip)
516
540
  type = reference_link ? :ref_title : :inline
517
- url, title = SL::URL.url_to_link(input.strip, type)
518
- print SL.make_link(type, title, url, title: false, force_title: false)
541
+ @url, title = SL::URL.url_to_link(input.strip, type)
542
+ print SL.make_link(type, title, @url, title: false, force_title: false)
519
543
  Process.exit
520
544
  end
521
545
 
@@ -532,10 +556,10 @@ module SL
532
556
  # input.sub!(/\+.*?$/, '').strip!
533
557
  # end
534
558
 
535
- link_text = false
559
+ @link_text = false
536
560
 
537
561
  if input =~ /"(.*?)"/
538
- link_text = Regexp.last_match(1)
562
+ @link_text = Regexp.last_match(1)
539
563
  input.gsub!(/"(.*?)"/, '\1')
540
564
  end
541
565
 
@@ -546,7 +570,7 @@ module SL
546
570
  when /^!(\S+)\s+(.*)$/
547
571
  type = Regexp.last_match(1)
548
572
  link_info = Regexp.last_match(2).strip
549
- link_text ||= link_info
573
+ @link_text ||= link_info
550
574
  terms = link_info + additional_terms
551
575
  terms.strip!
552
576
 
@@ -556,7 +580,7 @@ module SL
556
580
  SL.config['custom_site_searches'].each do |k, v|
557
581
  next unless type == k
558
582
 
559
- link_text = terms if link_text == ''
583
+ @link_text = terms if @link_text == ''
560
584
  v = parse_arguments(v, { no_restore: true })
561
585
  if v =~ %r{^(/|http)}i
562
586
  type = 'r'
@@ -601,7 +625,7 @@ module SL
601
625
  end
602
626
  end
603
627
  else
604
- type = SL::GoogleSearch.test_for_key ? 'gg' : 'g'
628
+ type = SL::GoogleSearch.api_key? ? 'gg' : 'g'
605
629
  terms = "site:#{v} #{terms}"
606
630
  end
607
631
 
@@ -612,12 +636,12 @@ module SL
612
636
  # if contains TLD, use site-specific search
613
637
  if type =~ /^(\S+\.)+\S+$/
614
638
  terms = "site:#{type} #{terms}"
615
- type = SL::GoogleSearch.test_for_key ? 'gg' : 'g'
639
+ type = SL::GoogleSearch.api_key? ? 'gg' : 'g'
616
640
  end
617
- search_count ||= 0
618
- search_count += 1
641
+ @search_count ||= 0
642
+ @search_count += 1
619
643
 
620
- url, title, link_text = do_search(type, terms, link_text, search_count)
644
+ @url, title, @link_text = do_search(type, terms, @link_text, @search_count)
621
645
  else
622
646
  SL.add_error("Invalid search#{SL::Searches.did_you_mean(type)}", input)
623
647
  counter_errors += 1
@@ -630,25 +654,25 @@ module SL
630
654
  else
631
655
  't'
632
656
  end
633
- link_text = input.sub(/^[tfilm]/, '')
634
- url, title = SL::SocialSearch.social_handle(type, link_text)
635
- link_text = title
657
+ @link_text = input.sub(/^[tfilm]/, '')
658
+ @url, title = SL::SocialSearch.social_handle(type, @link_text)
659
+ @link_text = title
636
660
  else
637
- link_text ||= input
638
- url, title, link_text = SL.ddg(input, link_text)
661
+ @link_text ||= input
662
+ @url, title, @link_text = SL.ddg(input, @link_text)
639
663
  end
640
664
 
641
- if url
665
+ if @url
642
666
  if type =~ /sp(ell)?/
643
- SL.add_output(url)
667
+ SL.add_output(@url)
644
668
  elsif link_only
645
- SL.add_output(url)
646
- elsif url == 'embed'
669
+ SL.add_output(@url)
670
+ elsif @url == 'embed'
647
671
  SL.add_output(title)
648
672
  else
649
673
  type = reference_link ? :ref_title : :inline
650
674
 
651
- SL.add_output SL.make_link(type, link_text, url, title: title, force_title: false)
675
+ SL.add_output SL.make_link(type, @link_text, @url, title: title, force_title: false)
652
676
  SL.print_errors
653
677
  end
654
678
  else