device_detector 1.0.1 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +49 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +5 -10
  5. data/CHANGELOG.md +14 -1
  6. data/README.md +6 -6
  7. data/Rakefile +20 -13
  8. data/device_detector.gemspec +1 -0
  9. data/lib/device_detector.rb +30 -26
  10. data/lib/device_detector/bot.rb +2 -2
  11. data/lib/device_detector/client.rb +3 -2
  12. data/lib/device_detector/device.rb +46 -20
  13. data/lib/device_detector/memory_cache.rb +26 -19
  14. data/lib/device_detector/metadata_extractor.rb +7 -8
  15. data/lib/device_detector/model_extractor.rb +3 -3
  16. data/lib/device_detector/name_extractor.rb +2 -2
  17. data/lib/device_detector/os.rb +121 -111
  18. data/lib/device_detector/parser.rb +22 -9
  19. data/lib/device_detector/version.rb +3 -1
  20. data/lib/device_detector/version_extractor.rb +2 -3
  21. data/regexes/bots.yml +442 -19
  22. data/regexes/client/browser_engine.yml +7 -1
  23. data/regexes/client/browsers.yml +773 -103
  24. data/regexes/client/feed_readers.yml +14 -8
  25. data/regexes/client/libraries.yml +43 -2
  26. data/regexes/client/mediaplayers.yml +21 -5
  27. data/regexes/client/mobile_apps.yml +131 -1
  28. data/regexes/client/pim.yml +6 -1
  29. data/regexes/device/cameras.yml +1 -1
  30. data/regexes/device/car_browsers.yml +7 -3
  31. data/regexes/device/consoles.yml +3 -3
  32. data/regexes/device/mobiles.yml +11365 -791
  33. data/regexes/device/notebooks.yml +114 -0
  34. data/regexes/device/portable_media_player.yml +2 -2
  35. data/regexes/device/televisions.yml +17 -3
  36. data/regexes/oss.yml +115 -47
  37. data/regexes/vendorfragments.yml +6 -2
  38. data/spec/device_detector/concrete_user_agent_spec.rb +16 -17
  39. data/spec/device_detector/detector_fixtures_spec.rb +30 -35
  40. data/spec/device_detector/device_spec.rb +28 -48
  41. data/spec/device_detector/memory_cache_spec.rb +60 -28
  42. data/spec/device_detector/model_extractor_spec.rb +3 -3
  43. data/spec/device_detector/version_extractor_spec.rb +5 -6
  44. data/spec/device_detector_spec.rb +49 -78
  45. data/spec/fixtures/client/browser.yml +1521 -406
  46. data/spec/fixtures/client/feed_reader.yml +39 -51
  47. data/spec/fixtures/client/library.yml +72 -11
  48. data/spec/fixtures/client/mediaplayer.yml +29 -40
  49. data/spec/fixtures/client/mobile_app.yml +172 -32
  50. data/spec/fixtures/client/pim.yml +32 -19
  51. data/spec/fixtures/detector/bots.yml +854 -19
  52. data/spec/fixtures/detector/camera.yml +22 -2
  53. data/spec/fixtures/detector/car_browser.yml +60 -0
  54. data/spec/fixtures/detector/console.yml +43 -3
  55. data/spec/fixtures/detector/desktop.yml +2860 -1527
  56. data/spec/fixtures/detector/feature_phone.yml +69 -1
  57. data/spec/fixtures/detector/feed_reader.yml +158 -130
  58. data/spec/fixtures/detector/mediaplayer.yml +113 -39
  59. data/spec/fixtures/detector/mobile_apps.yml +262 -89
  60. data/spec/fixtures/detector/phablet.yml +3444 -663
  61. data/spec/fixtures/detector/portable_media_player.yml +57 -0
  62. data/spec/fixtures/detector/smart_speaker.yml +55 -0
  63. data/spec/fixtures/detector/smartphone-1.yml +4739 -4765
  64. data/spec/fixtures/detector/smartphone-10.yml +9973 -0
  65. data/spec/fixtures/detector/smartphone-11.yml +10015 -0
  66. data/spec/fixtures/detector/smartphone-12.yml +9897 -0
  67. data/spec/fixtures/detector/smartphone-13.yml +9912 -0
  68. data/spec/fixtures/detector/smartphone-14.yml +9935 -0
  69. data/spec/fixtures/detector/smartphone-15.yml +6595 -0
  70. data/spec/fixtures/detector/smartphone-16.yml +10021 -0
  71. data/spec/fixtures/detector/smartphone-17.yml +9408 -0
  72. data/spec/fixtures/detector/smartphone-2.yml +4265 -4238
  73. data/spec/fixtures/detector/smartphone-3.yml +4487 -4391
  74. data/spec/fixtures/detector/smartphone-4.yml +4210 -4179
  75. data/spec/fixtures/detector/smartphone-5.yml +5794 -2901
  76. data/spec/fixtures/detector/smartphone-6.yml +10114 -0
  77. data/spec/fixtures/detector/smartphone-7.yml +9975 -0
  78. data/spec/fixtures/detector/smartphone-8.yml +9897 -0
  79. data/spec/fixtures/detector/smartphone-9.yml +9880 -0
  80. data/spec/fixtures/detector/smartphone.yml +4152 -4048
  81. data/spec/fixtures/detector/tablet-1.yml +3997 -3991
  82. data/spec/fixtures/detector/tablet-2.yml +6820 -1935
  83. data/spec/fixtures/detector/tablet-3.yml +9968 -0
  84. data/spec/fixtures/detector/tablet-4.yml +7113 -0
  85. data/spec/fixtures/detector/tablet.yml +3789 -3804
  86. data/spec/fixtures/detector/tv.yml +3889 -1495
  87. data/spec/fixtures/detector/unknown.yml +45 -179
  88. data/spec/fixtures/detector/wearable.yml +61 -0
  89. data/spec/fixtures/device/camera.yml +4 -3
  90. data/spec/fixtures/device/car_browser.yml +9 -2
  91. data/spec/fixtures/device/console.yml +15 -14
  92. data/spec/fixtures/device/notebook.yml +7 -0
  93. data/spec/fixtures/parser/oss.yml +177 -0
  94. data/spec/fixtures/parser/vendorfragments.yml +6 -0
  95. metadata +57 -7
@@ -1,7 +1,7 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
@@ -31,3 +31,9 @@
31
31
 
32
32
  - regex: 'NetSurf'
33
33
  name: 'NetSurf'
34
+
35
+ - regex: 'Servo'
36
+ name: 'Servo'
37
+
38
+ - regex: 'Goanna'
39
+ name: 'Goanna'
@@ -1,11 +1,330 @@
1
1
  ###############
2
2
  # Device Detector - The Universal Device Detection library for parsing User Agents
3
3
  #
4
- # @link http://piwik.org
4
+ # @link https://matomo.org
5
5
  # @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
6
6
  ###############
7
7
 
8
- # Microsoft Edge (newer versions of IE)
8
+ # Safe Exam Browser (https://safeexambrowser.org/)
9
+ - regex: 'SEB/(?:(\d+[\.\d]+))?'
10
+ name: 'Safe Exam Browser'
11
+ version: '$1'
12
+
13
+ # Colibri (https://colibri.opqr.co/)
14
+ - regex: 'Colibri/(?:(\d+[\.\d]+))?'
15
+ name: 'Colibri'
16
+ version: '$1'
17
+
18
+ # Xvast (https://www.xvast.com/)
19
+ - regex: 'Xvast/(?:(\d+[\.\d]+))?'
20
+ name: 'Xvast'
21
+ version: '$1'
22
+
23
+ # Tungsten (https://en.tungsten-start.net/)
24
+ - regex: 'TungstenBrowser/(?:(\d+[\.\d]+))?'
25
+ name: 'Tungsten'
26
+ version: '$1'
27
+
28
+ # Lulumi (https://github.com/LulumiProject/lulumi-browser)
29
+ - regex: 'Lulumi-browser/(?:(\d+[\.\d]+))?'
30
+ name: 'Lulumi'
31
+ version: '$1'
32
+
33
+ # Yahoo! Japan Browser (https://promo-ybrowser.yahoo.co.jp/)
34
+ - regex: 'ybrowser/(?:(\d+[\.\d]+))?'
35
+ name: 'Yahoo! Japan Browser'
36
+ version: '$1'
37
+
38
+ # Lunascape Lite (https://www.lunascape.tv/)
39
+ - regex: 'iLunascapeLite/(?:(\d+[\.\d]+))?'
40
+ name: 'Lunascape Lite'
41
+ version: '$1'
42
+
43
+ # Polypane (https://polypane.app/)
44
+ - regex: 'Polypane/(?:(\d+[\.\d]+))?'
45
+ name: 'Polypane'
46
+ version: '$1'
47
+
48
+ # OhHai Browser (https://ohhaibrowser.com/)
49
+ - regex: 'OhHaiBrowser/(?:(\d+[\.\d]+))?'
50
+ name: 'OhHai Browser'
51
+ version: '$1'
52
+
53
+ # Sizzy (https://sizzy.co/)
54
+ - regex: 'Sizzy/(?:(\d+[\.\d]+))?'
55
+ name: 'Sizzy'
56
+ version: '$1'
57
+
58
+ # Glass Browser (https://github.com/mitchas/glass-browser)
59
+ - regex: 'GlassBrowser/(?:(\d+[\.\d]+))?'
60
+ name: 'Glass Browser'
61
+ version: '$1'
62
+
63
+ # ToGate (https://tmaxanc.com/#!/product-introduce/ToGate)
64
+ - regex: 'ToGate/(?:(\d+[\.\d]+))?'
65
+ name: 'ToGate'
66
+ version: '$1'
67
+
68
+ # VMware AirWatch (https://www.air-watch.com/)
69
+ - regex: 'AirWatch Browser v(?:(\d+[\.\d]+))?'
70
+ name: 'VMware AirWatch'
71
+ version: '$1'
72
+
73
+ # AOL Desktop (https://beta.aol.com/projects/desktop/windows)
74
+ - regex: 'ADG/(?:(\d+[\.\d]+))?'
75
+ name: 'AOL Desktop'
76
+ version: '$1'
77
+
78
+ # Elements Browser (https://elementsbrowser.com/)
79
+ - regex: 'Elements Browser/(?:(\d+[\.\d]+))?'
80
+ name: 'Elements Browser'
81
+ version: '$1'
82
+
83
+ # Light (https://sourceforge.net/projects/lightfirefox/)
84
+ - regex: 'Light/(\d+[\.\d]+)'
85
+ name: 'Light'
86
+ version: '$1'
87
+
88
+ # Steam (https://www.valvesoftware.com/)
89
+ - regex: 'Valve Steam GameOverlay/(?:(\d+[\.\d]+))?'
90
+ name: 'Steam In-Game Overlay'
91
+ version: '$1'
92
+
93
+ # 115 Browser (https://pc.115.com/)
94
+ - regex: '115Browser/(?:(\d+[\.\d]+))?'
95
+ name: '115 Browser'
96
+ version: '$1'
97
+
98
+ # Atom (https://browser.ru/)
99
+ - regex: 'Atom/(?:(\d+[\.\d]+))?'
100
+ name: 'Atom'
101
+ version: '$1'
102
+
103
+ # Firefox Reality (https://mixedreality.mozilla.org/firefox-reality/)
104
+ - regex: 'Mobile VR.+Firefox'
105
+ name: 'Firefox Reality'
106
+ version: ''
107
+
108
+ # AVG Secure Browser (https://www.avg.com/en-us/secure-browser)
109
+ - regex: 'AVG(?:/(\d+[\.\d]+))?'
110
+ name: 'AVG Secure Browser'
111
+ version: '$1'
112
+
113
+ # START Internet Browser (https://play.google.com/store/apps/details?id=fyi.start.web.browser)
114
+ - regex: 'Start/(?:(\d+[\.\d]+))?'
115
+ name: 'START Internet Browser'
116
+ version: '$1'
117
+
118
+ # Lovense Browser (https://www.lovense.com/cam-model/download)
119
+ - regex: 'Lovense(?:/(\d+[\.\d]+))?'
120
+ name: 'Lovense Browser'
121
+ version: '$1'
122
+
123
+ # Delta Browser (https://play.google.com/store/apps/details?id=com.airfind.deltabrowser)
124
+ - regex: 'com.airfind.deltabrowser(?:/(\d+[\.\d]+))?'
125
+ name: 'Delta Browser'
126
+ version: '$1'
127
+
128
+ # Ordissimo (https://www.ordissimo.fr/)
129
+ - regex: '(?:Ordissimo|webissimo3)(?:/(\d+[\.\d]+))?'
130
+ name: 'Ordissimo'
131
+ version: '$1'
132
+
133
+ # CCleaner (https://www.ccleaner.com/ccleaner/browser)
134
+ - regex: 'CCleaner(?:/(\d+[\.\d]+))?'
135
+ name: 'CCleaner'
136
+ version: '$1'
137
+
138
+ # Aloha Browser Lite (https://play.google.com/store/apps/details?id=com.alohamobile.browser.lite)
139
+ - regex: 'AlohaLite(?:/(\d+[\.\d]+))?'
140
+ name: 'Aloha Browser Lite'
141
+ version: '$1'
142
+
143
+ # Tao Browser (https://browser.taobao.com/)
144
+ - regex: 'TaoBrowser(?:/(\d+[\.\d]+))?'
145
+ name: 'Tao Browser'
146
+ version: '$1'
147
+
148
+ # Falkon (https://www.falkon.org/)
149
+ - regex: 'Falkon(?:/(\d+[\.\d]+))?'
150
+ name: 'Falkon'
151
+ version: '$1'
152
+
153
+ # mCent (http://mcentbrowser.com/)
154
+ - regex: 'mCent(?:/(\d+[\.\d]+))?'
155
+ name: 'mCent'
156
+ version: '$1'
157
+
158
+ # SalamWeb (https://salamweb.com/)
159
+ - regex: 'SalamWeb(?:/(\d+[\.\d]+))?'
160
+ name: 'SalamWeb'
161
+ version: '$1'
162
+
163
+ # BlackHawk (http://www.netgate.sk/blackhawk/)
164
+ - regex: 'BlackHawk(?:/(\d+[\.\d]+))?'
165
+ name: 'BlackHawk'
166
+ version: '$1'
167
+
168
+ # Minimo (https://www-archive.mozilla.org/projects/minimo/)
169
+ - regex: 'Minimo(?:/(\d+[\.\d]+))?'
170
+ name: 'Minimo'
171
+ version: '$1'
172
+
173
+ # Wear Internet Browser (https://play.google.com/store/apps/details?id=com.appfour.wearbrowser)
174
+ - regex: 'WIB(?:/(\d+[\.\d]+))?'
175
+ name: 'Wear Internet Browser'
176
+ version: '$1'
177
+
178
+ # Origyn Web Browser (https://en.wikipedia.org/wiki/Origyn_Web_Browser)
179
+ - regex: 'Origyn Web Browser'
180
+ name: 'Origyn Web Browser'
181
+ version: ''
182
+
183
+ # Kinza (https://www.kinza.jp/en/)
184
+ - regex: 'Kinza(?:/(\d+[\.\d]+))?'
185
+ name: 'Kinza'
186
+ version: '$1'
187
+
188
+ # Beamrise (https://web.archive.org/web/20170520043839/http://beamrise.com/)
189
+ - regex: 'Beamrise(?:/(\d+[\.\d]+))?'
190
+ name: 'Beamrise'
191
+ version: '$1'
192
+
193
+ # Faux Browser (https://apps.apple.com/us/app/faux-browser/id472250940)
194
+ - regex: 'Faux(?:/(\d+[\.\d]+))?'
195
+ name: 'Faux Browser'
196
+ version: '$1'
197
+
198
+ # Splash (https://scrapinghub.com/splash)
199
+ - regex: 'splash Version(?:/(\d+[\.\d]+))?'
200
+ name: 'Splash'
201
+ version: '$1'
202
+
203
+ # Meizu Browser (https://www.meizu.com/)
204
+ - regex: 'MZBrowser(?:/(\d+[\.\d]+))?'
205
+ name: 'Meizu Browser'
206
+ version: '$1'
207
+
208
+ # COS Browser (https://sj.qq.com/myapp/detail.htm?apkName=com.qcloud.cos.client)
209
+ - regex: 'COSBrowser(?:/(\d+[\.\d]+))?'
210
+ name: 'COS Browser'
211
+ version: '$1'
212
+
213
+ # Crusta (https://github.com/Crusta/CrustaBrowser)
214
+ - regex: 'Crusta(?:/(\d+[\.\d]+))?'
215
+ name: 'Crusta'
216
+ version: '$1'
217
+
218
+ # Hawk Turbo Browser
219
+ - regex: 'Hawk/TurboBrowser(?:/v?(\d+[\.\d]+))?'
220
+ name: 'Hawk Turbo Browser'
221
+ version: '$1'
222
+ engine:
223
+ default: 'Blink'
224
+
225
+ # FreeU (https://freeu.online/)
226
+ - regex: 'FreeU(?:/(\d+[\.\d]+))?'
227
+ name: 'FreeU'
228
+ version: '$1'
229
+ engine:
230
+ default: 'Blink'
231
+
232
+ # Nox Browser (https://play.google.com/store/apps/details?id=com.noxgroup.app.browser)
233
+ - regex: 'NoxBrowser(?:/(\d+[\.\d]+))?'
234
+ name: 'Nox Browser'
235
+ version: '$1'
236
+ engine:
237
+ default: 'Blink'
238
+
239
+ # Basilisk (https://www.basilisk-browser.org/)
240
+ - regex: 'Basilisk(?:/(\d+[\.\d]+))?'
241
+ name: 'Basilisk'
242
+ version: '$1'
243
+ engine:
244
+ default: 'Goanna'
245
+
246
+ # Sputnik Browser (https://play.google.com/store/apps/details?id=ru.sputnik.browser)
247
+ - regex: 'SputnikBrowser(?:/(\d+[\.\d]+))?'
248
+ name: 'Sputnik Browser'
249
+ version: '$1'
250
+ engine:
251
+ default: 'Blink'
252
+
253
+ # K.Browser (https://play.google.com/store/apps/details?id=com.tnsua.browser)
254
+ - regex: 'TNSBrowser(?:/(\d+[\.\d]+))?'
255
+ name: 'K.Browser'
256
+ version: '$1'
257
+ engine:
258
+ default: 'Blink'
259
+
260
+ # Oculus Browser (https://developer.oculus.com/documentation/oculus-browser/latest/concepts/)
261
+ - regex: 'OculusBrowser(?:/(\d+[\.\d]+))?'
262
+ name: 'Oculus Browser'
263
+ version: '$1'
264
+
265
+ # Jio Browser (https://play.google.com/store/apps/details?id=com.jio.web)
266
+ - regex: 'JioBrowser(?:/(\d+[\.\d]+))?'
267
+ name: 'Jio Browser'
268
+ version: '$1'
269
+ engine:
270
+ default: 'Blink'
271
+
272
+ # hola! Browser (https://hola.org/browser)
273
+ - regex: 'Chrome/.+ Hola(?:/(\d+[\.\d]+))?'
274
+ name: 'hola! Browser'
275
+ version: '$1'
276
+ engine:
277
+ default: 'Blink'
278
+
279
+ # Huawei Browser
280
+ - regex: 'HuaweiBrowser(?:/(\d+[\.\d]+))?'
281
+ name: 'Huawei Browser'
282
+ version: '$1'
283
+
284
+ # vivo Browser
285
+ - regex: 'VivoBrowser(?:/(\d+[\.\d]+))?'
286
+ name: 'vivo Browser'
287
+ version: '$1'
288
+
289
+ # Realme Browser
290
+ - regex: 'RealmeBrowser(?:/(\d+[\.\d]+))?'
291
+ name: 'Realme Browser'
292
+ version: '$1'
293
+
294
+ # Beaker distributed web browser (https://beakerbrowser.com/)
295
+ - regex: 'Beaker ?Browser(?:[/ ](\d+[\.\d]+))?'
296
+ name: 'Beaker Browser'
297
+ version: '$1'
298
+ engine:
299
+ default: 'Blink'
300
+
301
+ # Qwant Mobile
302
+ - regex: 'QwantMobile(?:/(\d+[\.\d]+))?'
303
+ name: 'Qwant Mobile'
304
+ version: '$1'
305
+ engine:
306
+ default: 'Gecko'
307
+ - regex: 'Qwant/(\d+[\.\d]+)'
308
+ name: 'Qwant Mobile'
309
+ version: '$1'
310
+ engine:
311
+ default: 'Gecko'
312
+
313
+ # TenFourFox
314
+ - regex: 'TenFourFox(?:/(\d+[\.\d]+))?'
315
+ name: 'TenFourFox'
316
+ version: '$1'
317
+ engine:
318
+ default: 'Gecko'
319
+
320
+ # AOL Shield
321
+ - regex: 'AOLShield(?:/(\d+[\.\d]+))?'
322
+ name: 'AOL Shield'
323
+ version: '$1'
324
+ engine:
325
+ default: 'Gecko'
326
+
327
+ # Microsoft Edge (Spartan Edge)
9
328
  - regex: 'Edge[ /](\d+[\.\d]+)'
10
329
  name: 'Microsoft Edge'
11
330
  version: '$1'
@@ -26,6 +345,13 @@
26
345
  engine:
27
346
  default: 'Blink'
28
347
 
348
+ # Microsoft Edge (Anaheim Edge)
349
+ - regex: 'Edg[ /](\d+[\.\d]+)'
350
+ name: 'Microsoft Edge'
351
+ version: '$1'
352
+ engine:
353
+ default: 'Blink'
354
+
29
355
  # 360 Browser
30
356
  - regex: 'QIHU 360[ES]E'
31
357
  name: '360 Browser'
@@ -45,10 +371,17 @@
45
371
  engine:
46
372
  default: 'Gecko'
47
373
 
48
- # SeaMonkey
49
- - regex: '(Iceape|SeaMonkey|gnuzilla)(?:/(\d+[\.\d]+))?'
50
- name: '$1'
51
- version: '$2'
374
+ # IceCat
375
+ - regex: 'IceCat(?:/(\d+[\.\d]+))?'
376
+ name: 'IceCat'
377
+ version: '$1'
378
+ engine:
379
+ default: 'Gecko'
380
+
381
+ # Mobicip
382
+ - regex: 'Mobicip'
383
+ name: 'Mobicip'
384
+ version: ''
52
385
  engine:
53
386
  default: 'Gecko'
54
387
 
@@ -71,8 +404,13 @@
71
404
  name: 'Aloha Browser'
72
405
  version: '$1'
73
406
 
407
+ # Avast Secure Browser | Avast SafeZone Browser (https://www.avast.com/)
408
+ - regex: '(?:Avast|ASW|Safer)(?:/(\d+[\.\d]+))?'
409
+ name: 'Avast Secure Browser'
410
+ version: '$1'
411
+
74
412
  #Epic
75
- - regex: 'Epic(?:/(\d+[\.\d]+))?'
413
+ - regex: 'Epic(?:/(\d+[\.\d]+))'
76
414
  name: 'Epic'
77
415
  version: '$1'
78
416
  engine:
@@ -110,6 +448,11 @@
110
448
  engine:
111
449
  default: '' # multiple
112
450
 
451
+ #Oppo Browser
452
+ - regex: 'OppoBrowser(?:/(\d+[\.\d]+))?'
453
+ name: 'Oppo Browser'
454
+ version: '$1'
455
+
113
456
  #Amigo
114
457
  - regex: 'Chrome/(\d+[\.\d]+).*MRCHROME'
115
458
  name: 'Amigo'
@@ -157,6 +500,11 @@
157
500
 
158
501
 
159
502
  #Pale Moon
503
+ - regex: '.*Goanna.*PaleMoon(?:/(\d+[\.\d]+))?'
504
+ name: 'Pale Moon'
505
+ version: '$1'
506
+ engine:
507
+ default: 'Goanna'
160
508
  - regex: 'PaleMoon(?:/(\d+[\.\d]+))?'
161
509
  name: 'Pale Moon'
162
510
  version: '$1'
@@ -186,6 +534,11 @@
186
534
  versions:
187
535
  3: 'WebKit'
188
536
 
537
+ # Jig Browser Plus (https://jig.jp/)
538
+ - regex: 'JigBrowserPlus/(?:(\d+[\.\d]+))?'
539
+ name: 'Jig Browser Plus'
540
+ version: '$1'
541
+
189
542
  #Jig Browser
190
543
  - regex: 'jig browser(?: web;|9i?)?(?:[/ ](\d+[\.\d]+))?'
191
544
  name: 'Jig Browser'
@@ -205,6 +558,49 @@
205
558
  engine:
206
559
  default: 'Gecko'
207
560
 
561
+ # Origin (https://www.origin.com/)
562
+ - regex: 'Origin/(?:(\d+[\.\d]+))?'
563
+ name: 'Origin In-Game Overlay'
564
+ version: '$1'
565
+
566
+ #Cunaguaro
567
+ - regex: 'Cunaguaro(?:/(\d+[\.\d]+))?'
568
+ name: 'Cunaguaro'
569
+ version: '$1'
570
+
571
+ # t-online.de Browser (https://www.t-online.de/computer/browser/)
572
+ - regex: 'TO-Browser(?:/TOB(\d+[\.\d]+))?'
573
+ name: 't-online.de Browser'
574
+ version: '$1'
575
+
576
+ #Kazehakase
577
+ - regex: 'Kazehakase(?:/(\d+[\.\d]+))?'
578
+ name: 'Kazehakase'
579
+ version: '$1'
580
+ engine:
581
+ default: '' # multi engine
582
+
583
+ # ArcticFox (https://github.com/wicknix/Arctic-Fox)
584
+ - regex: 'ArcticFox(?:/(\d+[\.\d]+))?'
585
+ name: 'Arctic Fox'
586
+ version: '$1'
587
+ engine:
588
+ default: 'Goanna'
589
+
590
+ # Mypal (https://github.com/Feodor2/Mypal)
591
+ - regex: 'Mypal(?:/(\d+[\.\d]+))?'
592
+ name: 'Mypal'
593
+ version: '$1'
594
+ engine:
595
+ default: 'Goanna'
596
+
597
+ # Centaury (https://github.com/Feodor2/Centaury)
598
+ - regex: 'Centaury(?:/(\d+[\.\d]+))?'
599
+ name: 'Centaury'
600
+ version: '$1'
601
+ engine:
602
+ default: 'Goanna'
603
+
208
604
  #Firefox Focus / Firefox Klar
209
605
  - regex: '(?:Focus|Klar)(?:/(\d+[\.\d]+))?'
210
606
  name: 'Firefox Focus'
@@ -225,28 +621,38 @@
225
621
  default: 'Gecko'
226
622
 
227
623
  #Firefox Mobile
228
- - regex: '(Mobile|Tablet).*Firefox(?:/(\d+[\.\d]+))?'
624
+ - regex: '(?:Mobile|Tablet).*Servo.*Firefox(?:/(\d+[\.\d]+))?'
229
625
  name: 'Firefox Mobile'
230
- version: '$2'
626
+ version: '$1'
627
+ engine:
628
+ default: 'Servo'
629
+ - regex: '(?:Mobile|Tablet).*Firefox(?:/(\d+[\.\d]+))?'
630
+ name: 'Firefox Mobile'
631
+ version: '$1'
231
632
  engine:
232
633
  default: 'Gecko'
634
+ - regex: 'FxiOS/(\d+[\.\d]+)'
635
+ name: 'Firefox Mobile iOS'
636
+ version: '$1'
637
+ engine:
638
+ default: 'WebKit'
233
639
 
234
640
  #Firefox
235
- - regex: 'Firefox(?:/(\d+[\.\d]+))?'
641
+ - regex: '.*Servo.*Firefox(?:/(\d+[\.\d]+))?'
236
642
  name: 'Firefox'
237
643
  version: '$1'
238
644
  engine:
239
- default: 'Gecko'
240
- - regex: '(BonEcho|GranParadiso|Lorentz|Minefield|Namoroka|Shiretoko)/(\d+[\.\d]+)'
645
+ default: 'Servo'
646
+ - regex: '(?!.*Opera[ /])Firefox(?:/(\d+[\.\d]+))?'
241
647
  name: 'Firefox'
242
- version: '$1 ($2)'
648
+ version: '$1'
243
649
  engine:
244
650
  default: 'Gecko'
245
- - regex: 'FxiOS/(\d+[\.\d]+)'
246
- name: 'Firefox Mobile'
247
- version: 'iOS $1'
651
+ - regex: '(?:BonEcho|GranParadiso|Lorentz|Minefield|Namoroka|Shiretoko)/(\d+[\.\d]+)'
652
+ name: 'Firefox'
653
+ version: '$1'
248
654
  engine:
249
- default: 'WebKit'
655
+ default: 'Gecko'
250
656
 
251
657
  #ANT Fresco
252
658
  - regex: 'ANTFresco(?:[/ ](\d+[\.\d]+))?'
@@ -302,6 +708,44 @@
302
708
  name: 'Dooble'
303
709
  version: '$1'
304
710
 
711
+ # Whale
712
+ - regex: 'Whale/(\d+[\.\d]+)'
713
+ name: 'Whale Browser'
714
+ version: '$1'
715
+ engine:
716
+ default: 'Blink'
717
+
718
+ #Obigo
719
+ - regex: 'Obigo[ ]?(?:InternetBrowser|Browser)?(?:[ /]([a-z0-9]*))?'
720
+ name: 'Obigo'
721
+ version: '$1'
722
+ - regex: 'Obigo|Teleca'
723
+ name: 'Obigo'
724
+ version: ''
725
+
726
+ #UC Browser Mini
727
+ - regex: 'UCMini(?:[ /]?(\d+[\.\d]+))?'
728
+ name: 'UC Browser Mini'
729
+ version: '$1'
730
+ - regex: 'UC[ ]?Browser.* \(UCMini\)'
731
+ name: 'UC Browser Mini'
732
+ version: ''
733
+
734
+ # UC Browser Turbo
735
+ - regex: 'UCTurbo(?:[ /]?(\d+[\.\d]+))?'
736
+ name: 'UC Browser Turbo'
737
+ version: '$1'
738
+ - regex: 'UC[ ]?Browser.* \(UCTurbo\)'
739
+ name: 'UC Browser Turbo'
740
+ version: ''
741
+
742
+ # Opera GX (https://www.opera.com/gx#start | http://ftp.opera.com/pub/opera_gx/)
743
+ - regex: 'OPRGX(?:/(\d+[\.\d]+))?'
744
+ name: 'Opera GX'
745
+ version: '$1'
746
+ engine:
747
+ default: 'Blink'
748
+
305
749
  #Opera
306
750
  - regex: '(?:Opera Tablet.*Version|Opera/.+Opera Mobi.+Version|Mobile.+OPR)/(\d+[\.\d]+)'
307
751
  name: 'Opera Mobile'
@@ -310,6 +754,21 @@
310
754
  default: 'Presto'
311
755
  versions:
312
756
  15: 'Blink'
757
+ - regex: 'MMS/(\d+[\.\d]+)'
758
+ name: 'Opera Neon'
759
+ version: '$1'
760
+ engine:
761
+ default: 'Blink'
762
+ - regex: 'OMI/(\d+[\.\d]+)'
763
+ name: 'Opera Devices'
764
+ version: '$1'
765
+ engine:
766
+ default: 'Blink'
767
+ - regex: 'OPT/(\d+[\.\d]+)'
768
+ name: 'Opera Touch'
769
+ version: '$1'
770
+ engine:
771
+ default: 'Blink'
313
772
  - regex: 'Opera/(\d+[\.\d]+).+Opera Mobi'
314
773
  name: 'Opera Mobile'
315
774
  version: '$1'
@@ -327,6 +786,11 @@
327
786
  version: '$1'
328
787
  engine:
329
788
  default: 'Presto'
789
+ - regex: 'OPiOS/(\d+[\.\d]+)'
790
+ name: 'Opera Mini iOS'
791
+ version: '$1'
792
+ engine:
793
+ default: 'WebKit'
330
794
  - regex: 'Opera.+Edition Next.+Version/(\d+[\.\d]+)'
331
795
  name: 'Opera Next'
332
796
  version: '$1'
@@ -366,7 +830,7 @@
366
830
  default: '' # multi engine
367
831
 
368
832
  #Comodo Dragon
369
- - regex: 'Comodo[ _]Dragon(?:/(\d+[\.\d]+))?'
833
+ - regex: '(?:Comodo[ _])?Dragon(?!fruit)(?:/(\d+[\.\d]+))?'
370
834
  name: 'Comodo Dragon'
371
835
  version: '$1'
372
836
  engine:
@@ -398,7 +862,10 @@
398
862
  4: '' # multiple (KHTML or WebKit)
399
863
 
400
864
  #Baidu Browser
401
- - regex: 'baidubrowser(?:[/ ](\d+[\.\d]*))?'
865
+ - regex: '(?:baidubrowser|bdbrowser_i18n|bdbrowser)(?:[/ ](\d+[\.\d]*))?'
866
+ name: 'Baidu Browser'
867
+ version: '$1'
868
+ - regex: 'FlyFlow(?:[/ ](\d+[\.\d]*))?'
402
869
  name: 'Baidu Browser'
403
870
  version: '$1'
404
871
 
@@ -407,9 +874,23 @@
407
874
  name: 'Baidu Spark'
408
875
  version: '$1'
409
876
 
877
+ # Yandex Browser Lite
878
+ - regex: 'YaBrowser(?:/(\d+[\.\d]*)) \(lite\)?'
879
+ name: 'Yandex Browser Lite'
880
+ version: '$1'
881
+ engine:
882
+ default: 'Blink'
883
+
410
884
  #Yandex Browser
411
- - regex: 'YaBrowser(?:/(\d+[\.\d]*))?'
885
+ - regex: 'YaBrowser(?:/(\d+[\.\d]*))(?: \((alpha|beta)\))?'
412
886
  name: 'Yandex Browser'
887
+ version: '$1 $2'
888
+ engine:
889
+ default: 'Blink'
890
+
891
+ # Yaani Browser
892
+ - regex: 'YaaniBrowser(?:/(\d+[\.\d]+))?'
893
+ name: 'Yaani Browser'
413
894
  version: '$1'
414
895
  engine:
415
896
  default: 'Blink'
@@ -449,7 +930,7 @@
449
930
  versions:
450
931
  3: 'WebKit'
451
932
 
452
- - regex: '(?:Maxthon|MyIE2|Uzbl)'
933
+ - regex: '(?:Maxthon|MyIE2)'
453
934
  name: 'Maxthon'
454
935
  version: ''
455
936
  engine:
@@ -460,7 +941,20 @@
460
941
  name: 'Puffin'
461
942
  version: '$1'
462
943
 
463
- #Iron
944
+ #MobileIron
945
+ - regex: 'MobileIron(?:/(\d+[\.\d]+))?'
946
+ name: 'Iron Mobile'
947
+ version: '$1'
948
+ engine:
949
+ default: 'Blink'
950
+
951
+ # Iron
952
+ - regex: 'Chrome(?:/(\d+[\.\d]+))?.*Iron'
953
+ name: 'Iron'
954
+ version: '$1'
955
+ engine:
956
+ default: 'WebKit'
957
+
464
958
  - regex: 'Iron(?:/(\d+[\.\d]+))?'
465
959
  name: 'Iron'
466
960
  version: '$1'
@@ -479,9 +973,14 @@
479
973
  '2.9.16': '' # multi engine
480
974
  '2.28': 'WebKit'
481
975
 
482
- # Liebao
976
+ # LieBaoFast
977
+ - regex: 'LieBaoFast(?:[ /](\d+[\.\d]+))?'
978
+ name: 'LieBaoFast'
979
+ version: '$1'
980
+
981
+ # Cheetah Browser
483
982
  - regex: 'LBBrowser(?:[ /](\d+[\.\d]+))?'
484
- name: 'Liebao'
983
+ name: 'Cheetah Browser'
485
984
  version: '$1'
486
985
 
487
986
  # Sogou Explorer
@@ -489,15 +988,26 @@
489
988
  name: 'Sogou Explorer'
490
989
  version: '$1'
491
990
 
991
+ # QQ Browser Mini
992
+ - regex: 'M?QQBrowser/Mini([\.\d]+)?'
993
+ name: 'QQ Browser Mini'
994
+ version: '$1'
995
+ engine:
996
+ default: '' # multi engine -- WebKit or Blink
997
+
492
998
  # QQ Browser
493
- - regex: 'M?QQBrowser(?:/(?:Mini)?([\.\d]+))?'
999
+ - regex: 'M?QQBrowser(?:/([\.\d]+))?'
494
1000
  name: 'QQ Browser'
495
1001
  version: '$1'
1002
+ engine:
1003
+ default: '' # multi engine -- WebKit or Blink
496
1004
 
497
1005
  # MIUI Browser
498
- - regex: 'MIUIBrowser(?:/(\d+[\.\d]+))?'
1006
+ - regex: '(?:MIUIBrowser|MiuiBrowser)(?:/(\d+[\.\d]+))?'
499
1007
  name: 'MIUI Browser'
500
1008
  version: '$1'
1009
+ engine:
1010
+ default: '' # multi engine -- WebKit or Blink
501
1011
 
502
1012
  # Coc Coc
503
1013
  # This browser (http://coccoc.vn/) is built on top of Chromium with
@@ -512,23 +1022,40 @@
512
1022
  versions:
513
1023
  28: 'Blink'
514
1024
 
1025
+ - regex: 'DuckDuckGo/(\d+[\.\d]*)'
1026
+ name: 'DuckDuckGo Privacy Browser'
1027
+ version: '$1'
1028
+ engine:
1029
+ default: 'Blink'
1030
+
515
1031
  #Samsung Browser
516
1032
  - regex: 'Samsung ?Browser(?:[/ ](\d+[\.\d]+))?'
517
1033
  name: 'Samsung Browser'
518
1034
  version: '$1'
519
1035
 
520
- #Streamy
521
- #This browser is built on top of Chromium.
522
- #It should be checked first.
1036
+ # Super Fast Browser (https://play.google.com/store/apps/details?id=com.browser.tssomas)
1037
+ - regex: '(?:SFBrowser|com.browser.tssomas)(?:/(\d+[\.\d]+))?'
1038
+ name: 'Super Fast Browser'
1039
+ version: '$1'
1040
+
1041
+ # EUI Browser
1042
+ - regex: 'EUI Browser(?:/(\d+[\.\d]+))?'
1043
+ name: 'EUI Browser'
1044
+ version: '$1'
1045
+
1046
+ # UBrowser (https://callumprentice.github.io/)
1047
+ - regex: 'UBrowser(?:/(\d+[\.\d]+))?'
1048
+ name: 'UBrowser'
1049
+ version: '$1'
1050
+
1051
+ #Streamy (Chromium based)
523
1052
  - regex: 'Streamy(?:/(\d+[\.\d]+))?'
524
1053
  name: 'Streamy'
525
1054
  version: '$1'
526
1055
  engine:
527
1056
  default: 'WebKit'
528
1057
 
529
- #Isivioo
530
- #Andorid version of the browser is built on top of Chrome Mobile.
531
- #It should be checked first.
1058
+ #Isivioo (Android version is Chrome based)
532
1059
  - regex: 'isivioo'
533
1060
  name: 'Isivioo'
534
1061
  version: ''
@@ -542,6 +1069,175 @@
542
1069
  - regex: 'UCWEB(?:[ /]?(\d+[\.\d]+))?'
543
1070
  name: 'UC Browser'
544
1071
  version: '$1'
1072
+ - regex: 'UC AppleWebKit'
1073
+ name: 'UC Browser'
1074
+ version: ''
1075
+
1076
+ #Tenta Browser
1077
+ #It should be checked before Chrome since the UA contains the Chrome
1078
+ - regex: 'Tenta/(\d+[\.\d]+)'
1079
+ name: 'Tenta Browser'
1080
+ version: '$1'
1081
+ engine:
1082
+ default: 'Webkit'
1083
+
1084
+ # Firefox Rocket
1085
+ - regex: 'Rocket/(\d+[\.\d]+)'
1086
+ name: 'Firefox Rocket'
1087
+ version: '$1'
1088
+ engine:
1089
+ default: 'Webkit'
1090
+
1091
+ # Web Explorer
1092
+ - regex: 'Web Explorer/(\d+[\.\d]+).*Chrome'
1093
+ name: 'Web Explorer'
1094
+ version: '$1'
1095
+ engine:
1096
+ default: 'Webkit'
1097
+
1098
+ # Seznam Browser
1099
+ - regex: 'SznProhlizec/(\d+[\.\d]+)'
1100
+ name: 'Seznam Browser'
1101
+ version: '$1'
1102
+ engine:
1103
+ default: 'Blink'
1104
+
1105
+ # SogouMobileBrowser
1106
+ - regex: 'SogouMobileBrowser/(\d+[\.\d]+)'
1107
+ name: 'Sogou Mobile Browser'
1108
+ version: '$1'
1109
+ engine:
1110
+ default: '' # multi engine -- WebKit or Blink
1111
+
1112
+ # Mint Browser
1113
+ - regex: 'Mint Browser/(\d+[\.\d]+)'
1114
+ name: 'Mint Browser'
1115
+ version: '$1'
1116
+ engine:
1117
+ default: '' # multi engine -- WebKit or Blink
1118
+
1119
+ # Ecosia
1120
+ - regex: 'Ecosia (?:android|ios)@(\d+[\.\d]+)'
1121
+ name: 'Ecosia'
1122
+ version: '$1'
1123
+ engine:
1124
+ default: '' # multi engine -- WebKit or Blink
1125
+
1126
+ # CM Browser
1127
+ - regex: 'ACHEETAHI'
1128
+ name: 'CM Browser'
1129
+ version: ''
1130
+ engine:
1131
+ default: '' # multi engine -- WebKit or Blink
1132
+
1133
+ # Kiwi Browser
1134
+ - regex: 'Kiwi Chrome'
1135
+ name: 'Kiwi'
1136
+ version: ''
1137
+ engine:
1138
+ default: '' # multi engine -- WebKit or Blink
1139
+
1140
+ # 2345 Browser
1141
+ - regex: 'Mb2345Browser/(\d+[\.\d]+)'
1142
+ name: '2345 Browser'
1143
+ version: '$1'
1144
+ engine:
1145
+ default: '' # multi engine -- WebKit or Blink
1146
+
1147
+ # QtWebEngine
1148
+ - regex: 'QtWebEngine/(\d+[\.\d]+)'
1149
+ name: 'QtWebEngine'
1150
+ version: '$1'
1151
+ engine:
1152
+ default: '' # multi engine -- WebKit or Blink
1153
+
1154
+ #Mobile Silk
1155
+ - regex: 'Silk/(\d+[\.\d]+) like Chrome'
1156
+ name: 'Mobile Silk'
1157
+ version: '$1'
1158
+ engine:
1159
+ default: 'Blink'
1160
+ - regex: 'Silk(?:/(\d+[\.\d]+))?'
1161
+ name: 'Mobile Silk'
1162
+ version: '$1'
1163
+ engine:
1164
+ default: 'WebKit'
1165
+
1166
+ #IBrowse
1167
+ - regex: 'IBrowse(?:[ /](\d+[\.\d]+))?'
1168
+ name: 'IBrowse'
1169
+ version: '$1'
1170
+
1171
+ #Openwave Mobile Browser
1172
+ - regex: 'UP.Browser(?:/(\d+[\.\d]+))?'
1173
+ name: 'Openwave Mobile Browser'
1174
+ version: '$1'
1175
+ - regex: 'Openwave(?:/(\d+[\.\d]+))?'
1176
+ name: 'Openwave Mobile Browser'
1177
+ version: '$1'
1178
+
1179
+ #ONE Browser
1180
+ - regex: 'OneBrowser(?:[ /](\d+[\.\d]+))?'
1181
+ name: 'ONE Browser'
1182
+ version: '$1'
1183
+ engine:
1184
+ default: 'WebKit'
1185
+
1186
+ #Nokia Browser
1187
+ - regex: '(?:NokiaBrowser|BrowserNG)(?:/(\d+[\.\d]+))?'
1188
+ name: 'Nokia Browser'
1189
+ version: '$1'
1190
+ - regex: 'Series60/5\.0'
1191
+ name: 'Nokia Browser'
1192
+ version: '7.0'
1193
+ - regex: 'Series60/(\d+[\.\d]+)'
1194
+ name: 'Nokia OSS Browser'
1195
+ version: '$1'
1196
+ - regex: 'S40OviBrowser/(\d+[\.\d]+)'
1197
+ name: 'Nokia Ovi Browser'
1198
+ version: '$1'
1199
+ - regex: '^Nokia|Nokia[EN]?\d+'
1200
+ name: 'Nokia Browser'
1201
+ version: ''
1202
+
1203
+ #Sleipnir
1204
+ - regex: 'Sleipnir(?:[ /](\d+[\.\d]+))?'
1205
+ name: 'Sleipnir'
1206
+ version: '$1'
1207
+ engine:
1208
+ default: '' # multi engine
1209
+
1210
+ # NTENT Browser
1211
+ - regex: 'NTENTBrowser(?:/(\d+[\.\d]+))?'
1212
+ name: 'NTENT Browser'
1213
+ version: '$1'
1214
+
1215
+ # TV Bro
1216
+ - regex: 'TV Bro/(\d+[\.\d]+)'
1217
+ name: 'TV Bro'
1218
+ version: '$1'
1219
+
1220
+ # Quark
1221
+ - regex: 'Chrome/.+ Quark(?:/(\d+[\.\d]+))?'
1222
+ name: 'Quark'
1223
+ version: '$1'
1224
+ engine:
1225
+ default: 'WebKit'
1226
+
1227
+ - regex: 'BlueBrowser(?:/(\d+[\.\d]+))?'
1228
+ name: 'Blue Browser'
1229
+ version: '$1'
1230
+ engine:
1231
+ default: 'WebKit'
1232
+
1233
+ # Chrome Webview
1234
+ - regex: 'Version/.* Chrome(?:/(\d+[\.\d]+))?'
1235
+ name: 'Chrome Webview'
1236
+ version: '$1'
1237
+ engine:
1238
+ default: 'WebKit'
1239
+ versions:
1240
+ 28: 'Blink'
545
1241
 
546
1242
  #Chrome
547
1243
  - regex: 'CrMo(?:/(\d+[\.\d]+))?'
@@ -575,7 +1271,12 @@
575
1271
  default: 'WebKit'
576
1272
  versions:
577
1273
  28: 'Blink'
578
- - regex: 'Chrome(?:/(\d+[\.\d]+))?'
1274
+ - regex: 'HeadlessChrome(?:/(\d+[\.\d]+))?'
1275
+ name: 'Headless Chrome'
1276
+ version: '$1'
1277
+ engine:
1278
+ default: 'Blink'
1279
+ - regex: 'Chrome(?!book)(?:/(\d+[\.\d]+))?'
579
1280
  name: 'Chrome'
580
1281
  version: '$1'
581
1282
  engine:
@@ -717,6 +1418,11 @@
717
1418
  name: 'Element Browser'
718
1419
  version: '$1'
719
1420
 
1421
+ # eZ Browser (https://play.google.com/store/apps/details?id=com.asc.csbrowser)
1422
+ - regex: 'eZBrowser(?:/(\d+[\.\d]+))?'
1423
+ name: 'eZ Browser'
1424
+ version: '$1'
1425
+
720
1426
  #Firebird
721
1427
  - regex: 'Firebird(?! Build)(?:/(\d+[\.\d]+))?'
722
1428
  name: 'Firebird'
@@ -750,11 +1456,6 @@
750
1456
  name: 'HotJava'
751
1457
  version: '$1'
752
1458
 
753
- #IBrowse
754
- - regex: 'IBrowse(?:[ /](\d+[\.\d]+))?'
755
- name: 'IBrowse'
756
- version: '$1'
757
-
758
1459
  #iCabMobile
759
1460
  - regex: 'iCabMobile(?:[ /](\d+[\.\d]+))?'
760
1461
  name: 'iCab Mobile'
@@ -771,15 +1472,8 @@
771
1472
  versions:
772
1473
  4: 'WebKit'
773
1474
 
774
- #Sleipnir
775
- - regex: 'Sleipnir(?:[ /](\d+[\.\d]+))?'
776
- name: 'Sleipnir'
777
- version: '$1'
778
- engine:
779
- default: '' # multi engine
780
-
781
1475
  #Lunascape
782
- - regex: 'Lunascape(?:[/ ](\d+[\.\d]+))?'
1476
+ - regex: 'i?Lunascape(?:[/ ](\d+[\.\d]+))?'
783
1477
  name: 'Lunascape'
784
1478
  version: '$1'
785
1479
  engine:
@@ -811,7 +1505,7 @@
811
1505
  version: 10.0
812
1506
  engine:
813
1507
  default: 'Trident'
814
- - regex: 'Trident/7.0'
1508
+ - regex: 'Trident/[78].0'
815
1509
  name: 'Internet Explorer'
816
1510
  version: 11.0
817
1511
  engine:
@@ -821,19 +1515,12 @@
821
1515
  version: '$1'
822
1516
  engine:
823
1517
  default: 'Trident'
824
- - regex: 'IE[ /](\d+[\.\d]++)'
1518
+ - regex: 'IE[ /](\d+[\.\d]+)'
825
1519
  name: 'Internet Explorer'
826
1520
  version: '$1'
827
1521
  engine:
828
1522
  default: 'Trident'
829
1523
 
830
- #Kazehakase
831
- - regex: 'Kazehakase(?:/(\d+[\.\d]+))?'
832
- name: 'Kazehakase'
833
- version: '$1'
834
- engine:
835
- default: '' # multi engine
836
-
837
1524
  #Kindle Browser
838
1525
  - regex: 'Kindle/(\d+[\.\d]+)'
839
1526
  name: 'Kindle Browser'
@@ -863,14 +1550,6 @@
863
1550
  name: 'LuaKit'
864
1551
  version: '$1'
865
1552
 
866
- #Openwave Mobile Browser
867
- - regex: 'UP.Browser(?:/(\d+[\.\d]+))?'
868
- name: 'Openwave Mobile Browser'
869
- version: '$1'
870
- - regex: 'Openwave(?:/(\d+[\.\d]+))?'
871
- name: 'Openwave Mobile Browser'
872
- version: '$1'
873
-
874
1553
  #OmniWeb
875
1554
  - regex: 'OmniWeb(?:/[v]?(\d+[\.\d]+))?'
876
1555
  name: 'OmniWeb'
@@ -883,13 +1562,6 @@
883
1562
  name: 'Phoenix'
884
1563
  version: '$1'
885
1564
 
886
- #Mobile Silk
887
- - regex: 'Silk(?:/(\d+[\.\d]+))?'
888
- name: 'Mobile Silk'
889
- version: '$1'
890
- engine:
891
- default: 'Blink'
892
-
893
1565
  #NetFront
894
1566
  - regex: 'NetFrontLifeBrowser(?:/(\d+[\.\d]+))?'
895
1567
  name: 'NetFront Life'
@@ -901,7 +1573,7 @@
901
1573
  version: '$1'
902
1574
  engine:
903
1575
  default: 'NetFront'
904
- - regex: 'PLAYSTATION|NINTENDO 3|AppleWebKit.+ NX/\d+\.\d+\.\d+'
1576
+ - regex: 'PLAYSTATION|NINTENDO 3|AppleWebKit.+ N[XF]/\d+\.\d+\.\d+'
905
1577
  name: 'NetFront'
906
1578
  version: ''
907
1579
 
@@ -910,14 +1582,6 @@
910
1582
  name: 'NetPositive'
911
1583
  version: '$1'
912
1584
 
913
- #Obigo
914
- - regex: 'Obigo[ ]?(?:InternetBrowser|Browser)?(?:[ /]([a-z0-9]*))?'
915
- name: 'Obigo'
916
- version: '$1'
917
- - regex: 'Obigo|Teleca'
918
- name: 'Obigo'
919
- version: ''
920
-
921
1585
  #Odyssey Web Browser
922
1586
  - regex: 'Odyssey Web Browser(?:.*OWB/(\d+[\.\d]+))?'
923
1587
  name: 'Odyssey Web Browser'
@@ -928,13 +1592,6 @@
928
1592
  name: 'Off By One'
929
1593
  version: ''
930
1594
 
931
- #ONE Browser
932
- - regex: 'OneBrowser(?:[ /](\d+[\.\d]+))?'
933
- name: 'ONE Browser'
934
- version: '$1'
935
- engine:
936
- default: 'WebKit'
937
-
938
1595
  #Oregano
939
1596
  - regex: 'Oregano(?:[ /](\d+[\.\d]+))?'
940
1597
  name: 'Oregano'
@@ -1006,23 +1663,6 @@
1006
1663
  name: 'Xiino'
1007
1664
  version: '$1'
1008
1665
 
1009
- #Nokia Browser
1010
- - regex: '(?:NokiaBrowser|BrowserNG)(?:/(\d+[\.\d]+))?'
1011
- name: 'Nokia Browser'
1012
- version: '$1'
1013
- - regex: 'Series60/5\.0'
1014
- name: 'Nokia Browser'
1015
- version: '7.0'
1016
- - regex: 'Series60/(\d+[\.\d]+)'
1017
- name: 'Nokia OSS Browser'
1018
- version: '$1'
1019
- - regex: 'S40OviBrowser/(\d+[\.\d]+)'
1020
- name: 'Nokia Ovi Browser'
1021
- version: '$1'
1022
- - regex: '^Nokia|Nokia[EN]?\d+'
1023
- name: 'Nokia Browser'
1024
- version: ''
1025
-
1026
1666
  #BlackBerry Browser
1027
1667
  - regex: 'BlackBerry|PlayBook|BB10'
1028
1668
  name: 'BlackBerry Browser'
@@ -1050,6 +1690,13 @@
1050
1690
  name: 'Qutebrowser'
1051
1691
  version: '$1'
1052
1692
 
1693
+ # surf (https://surf.suckless.org/)
1694
+ - regex: 'Surf(?:/(\d+[\.\d]+))?'
1695
+ name: 'surf'
1696
+ version: '$1'
1697
+ engine:
1698
+ default: 'WebKit'
1699
+
1053
1700
  #Safari
1054
1701
  - regex: '(?:(?:iPod|iPad|iPhone).+Version|MobileSafari)/(\d+[\.\d]+)'
1055
1702
  name: 'Mobile Safari'
@@ -1083,3 +1730,26 @@
1083
1730
  version: '$1'
1084
1731
  engine:
1085
1732
  default: 'NetSurf'
1733
+
1734
+ # Uzbl (https://www.uzbl.org/)
1735
+ - regex: 'Uzbl'
1736
+ name: 'Uzbl'
1737
+ version: ''
1738
+
1739
+ # SimpleBrowser (https://github.com/SimpleBrowserDotNet/SimpleBrowser)
1740
+ - regex: 'SimpleBrowser'
1741
+ name: 'SimpleBrowser'
1742
+ version: ''
1743
+
1744
+ # Zvu
1745
+ - regex: 'Zvu(?:/(\d+[\.\d]+))?'
1746
+ name: 'Zvu'
1747
+ version: '$1'
1748
+ engine:
1749
+ default: 'Gecko'
1750
+
1751
+ # GOG Galaxy
1752
+ - regex: 'GOGGalaxyClient/(?:(\d+[\.\d]+))?'
1753
+ name: 'GOG Galaxy'
1754
+ version: '$1'
1755
+