device_detector 1.0.1 → 1.0.5

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 (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
+