searchlink 2.3.59

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 (47) hide show
  1. checksums.yaml +7 -0
  2. data/bin/searchlink +84 -0
  3. data/lib/searchlink/array.rb +7 -0
  4. data/lib/searchlink/config.rb +230 -0
  5. data/lib/searchlink/curl/html.rb +482 -0
  6. data/lib/searchlink/curl/json.rb +90 -0
  7. data/lib/searchlink/curl.rb +7 -0
  8. data/lib/searchlink/help.rb +103 -0
  9. data/lib/searchlink/output.rb +270 -0
  10. data/lib/searchlink/parse.rb +668 -0
  11. data/lib/searchlink/plist.rb +213 -0
  12. data/lib/searchlink/search.rb +70 -0
  13. data/lib/searchlink/searches/amazon.rb +25 -0
  14. data/lib/searchlink/searches/applemusic.rb +123 -0
  15. data/lib/searchlink/searches/bitly.rb +50 -0
  16. data/lib/searchlink/searches/definition.rb +67 -0
  17. data/lib/searchlink/searches/duckduckgo.rb +167 -0
  18. data/lib/searchlink/searches/github.rb +245 -0
  19. data/lib/searchlink/searches/google.rb +67 -0
  20. data/lib/searchlink/searches/helpers/chromium.rb +318 -0
  21. data/lib/searchlink/searches/helpers/firefox.rb +135 -0
  22. data/lib/searchlink/searches/helpers/safari.rb +133 -0
  23. data/lib/searchlink/searches/history.rb +166 -0
  24. data/lib/searchlink/searches/hook.rb +77 -0
  25. data/lib/searchlink/searches/itunes.rb +97 -0
  26. data/lib/searchlink/searches/lastfm.rb +41 -0
  27. data/lib/searchlink/searches/lyrics.rb +91 -0
  28. data/lib/searchlink/searches/pinboard.rb +183 -0
  29. data/lib/searchlink/searches/social.rb +105 -0
  30. data/lib/searchlink/searches/software.rb +27 -0
  31. data/lib/searchlink/searches/spelling.rb +59 -0
  32. data/lib/searchlink/searches/spotlight.rb +28 -0
  33. data/lib/searchlink/searches/stackoverflow.rb +31 -0
  34. data/lib/searchlink/searches/tmdb.rb +52 -0
  35. data/lib/searchlink/searches/twitter.rb +46 -0
  36. data/lib/searchlink/searches/wikipedia.rb +33 -0
  37. data/lib/searchlink/searches/youtube.rb +48 -0
  38. data/lib/searchlink/searches.rb +194 -0
  39. data/lib/searchlink/semver.rb +140 -0
  40. data/lib/searchlink/string.rb +469 -0
  41. data/lib/searchlink/url.rb +153 -0
  42. data/lib/searchlink/util.rb +87 -0
  43. data/lib/searchlink/version.rb +93 -0
  44. data/lib/searchlink/which.rb +175 -0
  45. data/lib/searchlink.rb +66 -0
  46. data/lib/tokens.rb +3 -0
  47. metadata +299 -0
@@ -0,0 +1,270 @@
1
+ module SL
2
+ class << self
3
+ attr_writer :titleize, :clipboard, :output, :footer, :line_num,
4
+ :match_column, :match_length, :originput, :errors, :report, :printout
5
+
6
+ # Whether or not to add a title to the output
7
+ def titleize
8
+ @titleize ||= false
9
+ end
10
+
11
+ # Whether or not to copy results to clipbpard
12
+ def clipboard
13
+ @clipboard ||= false
14
+ end
15
+
16
+ # Whether or not to echo results to STDOUT as they're created
17
+ def printout
18
+ @printout ||= false
19
+ end
20
+
21
+ # Stores the generated output
22
+ def output
23
+ @output ||= []
24
+ end
25
+
26
+ # Stores the generated debug report
27
+ def report
28
+ @report ||= []
29
+ end
30
+
31
+ # Stores the footer with reference links and footnotes
32
+ def footer
33
+ @footer ||= []
34
+ end
35
+
36
+ # Tracks the line number of each link match for debug output
37
+ def line_num
38
+ @line_num ||= 0
39
+ end
40
+
41
+ # Tracks the column of each link match for debug output
42
+ def match_column
43
+ @match_column ||= 0
44
+ end
45
+
46
+ # Tracks the length of each link match for debug output
47
+ def match_length
48
+ @match_length ||= 0
49
+ end
50
+
51
+ # Stores the original input
52
+ def originput
53
+ @originput ||= ''
54
+ end
55
+
56
+ # Stores generated errors
57
+ def errors
58
+ @errors ||= {}
59
+ end
60
+
61
+ # Posts macOS notifications
62
+ #
63
+ # @param str The title of the notification
64
+ # @param sub The text of the notification
65
+ #
66
+ def notify(str, sub)
67
+ return unless SL.config['notifications']
68
+
69
+ `osascript -e 'display notification "SearchLink" with title "#{str}" subtitle "#{sub}"'`
70
+ end
71
+ end
72
+ end
73
+
74
+ # The SL module provides methods for creating and manipulating links.
75
+ module SL
76
+ class << self
77
+ # Creates a link of the specified type with the given
78
+ # text, url, and title.
79
+ #
80
+ # @param type [Symbol] The type of link to
81
+ # create.
82
+ # @param text [String] The text of the
83
+ # link.
84
+ # @param url [String] The URL of the link.
85
+ # @param title [String] The title of the
86
+ # link.
87
+ # @param force_title [Boolean] Whether to force
88
+ # the title to be included.
89
+ #
90
+ # @return [String] The link.
91
+ #
92
+ def make_link(type, text, url, title: false, force_title: false)
93
+ title = title.gsub(/\P{Print}|\p{Cf}/, '') if title
94
+ text = title || SL::URL.title(url) if SL.titleize && (!text || text.strip.empty?)
95
+ text = text ? text.strip : title
96
+ title = title && (SL.config['include_titles'] || force_title) ? %( "#{title.clean}") : ''
97
+
98
+ title.gsub!(/[ \t]+/, ' ')
99
+
100
+ case type.to_sym
101
+ when :ref_title
102
+ %(\n[#{text}]: #{url}#{title})
103
+ when :ref_link
104
+ %([#{text}][#{url}])
105
+ when :inline
106
+ image = url =~ /\.(gif|jpe?g|png|webp)$/ ? '!' : ''
107
+ %(#{image}[#{text}](#{url}#{title}))
108
+ end
109
+ end
110
+
111
+ # Adds the given string to the output.
112
+ #
113
+ # @param str [String] The string to add.
114
+ #
115
+ # @return [nil]
116
+ #
117
+ def add_output(str)
118
+ print str if SL.printout && !SL.clipboard
119
+ SL.output << str
120
+ end
121
+
122
+ # Adds the given string to the footer.
123
+ #
124
+ # @param str [String] The string to add.
125
+ #
126
+ # @return [nil]
127
+ #
128
+ def add_footer(str)
129
+ SL.footer ||= []
130
+ SL.footer.push(str.strip)
131
+ end
132
+
133
+ # Prints the footer.
134
+ #
135
+ # @return [String] The footer.
136
+ #
137
+ def print_footer
138
+ unless SL.footer.empty?
139
+
140
+ footnotes = []
141
+ SL.footer.delete_if do |note|
142
+ note.strip!
143
+ case note
144
+ when /^\[\^.+?\]/
145
+ footnotes.push(note)
146
+ true
147
+ when /^\s*$/
148
+ true
149
+ else
150
+ false
151
+ end
152
+ end
153
+
154
+ output = SL.footer.sort.join("\n").strip
155
+ output += "\n\n" if !output.empty? && !footnotes.empty?
156
+ output += footnotes.join("\n\n") unless footnotes.empty?
157
+ return output.gsub(/\n{3,}/, "\n\n")
158
+ end
159
+
160
+ ''
161
+ end
162
+
163
+ # Adds the given string to the report.
164
+ #
165
+ # @param str [String] The string to add.
166
+ #
167
+ # @return [nil]
168
+ #
169
+ def add_report(str)
170
+ return unless SL.config['report']
171
+
172
+ unless SL.line_num.nil?
173
+ position = "#{SL.line_num}:"
174
+ position += SL.match_column.nil? ? '0:' : "#{SL.match_column}:"
175
+ position += SL.match_length.nil? ? '0' : SL.match_length.to_s
176
+ end
177
+ SL.report.push("(#{position}): #{str}")
178
+ warn "(#{position}): #{str}" unless SILENT
179
+ end
180
+
181
+ # Adds the given string to the errors.
182
+ #
183
+ # @param type [Symbol] The type of error.
184
+ # @param str [String] The string to add.
185
+ #
186
+ # @return [nil]
187
+ #
188
+ def add_error(type, str)
189
+ return unless SL.config['debug']
190
+
191
+ unless SL.line_num.nil?
192
+ position = "#{SL.line_num}:"
193
+ position += SL.match_column.nil? ? '0:' : "#{SL.match_column}:"
194
+ position += SL.match_length.nil? ? '0' : SL.match_length.to_s
195
+ end
196
+ SL.errors[type] ||= []
197
+ SL.errors[type].push("(#{position}): #{str}")
198
+ end
199
+
200
+ # Prints the report.
201
+ #
202
+ # @return [String] The report.
203
+ #
204
+ def print_report
205
+ return if (SL.config['inline'] && SL.originput.split(/\n/).length == 1) || SL.clipboard
206
+
207
+ return if SL.report.empty?
208
+
209
+ out = "\n<!-- Report:\n#{SL.report.join("\n")}\n-->\n"
210
+ add_output out
211
+ end
212
+
213
+ # Prints the errors.
214
+ #
215
+ # @param type [String] The type of errors.
216
+ #
217
+ # @return [String] The errors.
218
+ #
219
+ def print_errors(type = 'Errors')
220
+ return if SL.errors.empty?
221
+
222
+ out = ''
223
+ inline = if SL.originput.split(/\n/).length > 1
224
+ false
225
+ else
226
+ SL.config['inline'] || SL.originput.split(/\n/).length == 1
227
+ end
228
+
229
+ SL.errors.each do |k, v|
230
+ next if v.empty?
231
+
232
+ v.each_with_index do |err, i|
233
+ out += "(#{k}) #{err}"
234
+ out += if inline
235
+ i == v.length - 1 ? ' | ' : ', '
236
+ else
237
+ "\n"
238
+ end
239
+ end
240
+ end
241
+
242
+ unless out == ''
243
+ sep = inline ? ' ' : "\n"
244
+ out.sub!(/\| /, '')
245
+ out = "#{sep}<!-- #{type}:#{sep}#{out}-->#{sep}"
246
+ end
247
+ if SL.clipboard
248
+ warn out
249
+ else
250
+ add_output out
251
+ end
252
+ end
253
+
254
+ # Prints or copies the given text.
255
+ #
256
+ # @param text [String] The text to print or copy.
257
+ #
258
+ # @return [nil]
259
+ #
260
+ def print_or_copy(text)
261
+ # Process.exit unless text
262
+ if SL.clipboard
263
+ `echo #{Shellwords.escape(text)}|tr -d "\n"|pbcopy`
264
+ print SL.originput
265
+ else
266
+ print text
267
+ end
268
+ end
269
+ end
270
+ end