device_detector 1.0.2 → 1.0.6

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 (112) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +49 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +5 -6
  5. data/CHANGELOG.md +11 -0
  6. data/README.md +8 -7
  7. data/Rakefile +7 -4
  8. data/device_detector.gemspec +1 -0
  9. data/lib/device_detector/bot.rb +2 -2
  10. data/lib/device_detector/browser.rb +364 -0
  11. data/lib/device_detector/client.rb +11 -2
  12. data/lib/device_detector/device.rb +1168 -22
  13. data/lib/device_detector/memory_cache.rb +5 -5
  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 +148 -116
  18. data/lib/device_detector/parser.rb +22 -9
  19. data/lib/device_detector/version.rb +1 -1
  20. data/lib/device_detector/version_extractor.rb +10 -2
  21. data/lib/device_detector.rb +73 -40
  22. data/regexes/bots.yml +909 -59
  23. data/regexes/client/browser_engine.yml +14 -2
  24. data/regexes/client/browsers.yml +1356 -241
  25. data/regexes/client/feed_readers.yml +10 -10
  26. data/regexes/client/libraries.yml +75 -1
  27. data/regexes/client/mediaplayers.yml +39 -3
  28. data/regexes/client/mobile_apps.yml +524 -45
  29. data/regexes/client/pim.yml +55 -2
  30. data/regexes/device/cameras.yml +6 -6
  31. data/regexes/device/car_browsers.yml +23 -3
  32. data/regexes/device/consoles.yml +9 -3
  33. data/regexes/device/mobiles.yml +16903 -3199
  34. data/regexes/device/notebooks.yml +114 -0
  35. data/regexes/device/portable_media_player.yml +20 -3
  36. data/regexes/device/shell_tv.yml +117 -0
  37. data/regexes/device/televisions.yml +440 -35
  38. data/regexes/oss.yml +603 -165
  39. data/regexes/vendorfragments.yml +6 -2
  40. data/spec/device_detector/concrete_user_agent_spec.rb +38 -51
  41. data/spec/device_detector/detector_fixtures_spec.rb +36 -37
  42. data/spec/device_detector/device_spec.rb +52 -56
  43. data/spec/device_detector/memory_cache_spec.rb +19 -19
  44. data/spec/device_detector/model_extractor_spec.rb +3 -3
  45. data/spec/device_detector/version_extractor_spec.rb +5 -6
  46. data/spec/device_detector_spec.rb +26 -26
  47. data/spec/fixtures/client/browser.yml +2617 -555
  48. data/spec/fixtures/client/feed_reader.yml +34 -52
  49. data/spec/fixtures/client/library.yml +129 -38
  50. data/spec/fixtures/client/mediaplayer.yml +59 -28
  51. data/spec/fixtures/client/mobile_app.yml +589 -20
  52. data/spec/fixtures/client/pim.yml +92 -19
  53. data/spec/fixtures/detector/bots.yml +1749 -458
  54. data/spec/fixtures/detector/camera.yml +30 -24
  55. data/spec/fixtures/detector/car_browser.yml +199 -3
  56. data/spec/fixtures/detector/console.yml +107 -45
  57. data/spec/fixtures/detector/desktop.yml +3216 -758
  58. data/spec/fixtures/detector/feature_phone.yml +935 -181
  59. data/spec/fixtures/detector/feed_reader.yml +181 -193
  60. data/spec/fixtures/detector/mediaplayer.yml +157 -60
  61. data/spec/fixtures/detector/mobile_apps.yml +914 -136
  62. data/spec/fixtures/detector/peripheral.yml +271 -0
  63. data/spec/fixtures/detector/phablet.yml +5593 -1533
  64. data/spec/fixtures/detector/portable_media_player.yml +398 -32
  65. data/spec/fixtures/detector/smart_display.yml +183 -9
  66. data/spec/fixtures/detector/smart_speaker.yml +60 -0
  67. data/spec/fixtures/detector/smartphone-1.yml +3930 -4239
  68. data/spec/fixtures/detector/smartphone-10.yml +3985 -7366
  69. data/spec/fixtures/detector/smartphone-11.yml +5083 -3784
  70. data/spec/fixtures/detector/smartphone-12.yml +8989 -0
  71. data/spec/fixtures/detector/smartphone-13.yml +9412 -0
  72. data/spec/fixtures/detector/smartphone-14.yml +9477 -0
  73. data/spec/fixtures/detector/smartphone-15.yml +9281 -0
  74. data/spec/fixtures/detector/smartphone-16.yml +9678 -0
  75. data/spec/fixtures/detector/smartphone-17.yml +9965 -0
  76. data/spec/fixtures/detector/smartphone-18.yml +9806 -0
  77. data/spec/fixtures/detector/smartphone-19.yml +9965 -0
  78. data/spec/fixtures/detector/smartphone-2.yml +6670 -4375
  79. data/spec/fixtures/detector/smartphone-20.yml +9710 -0
  80. data/spec/fixtures/detector/smartphone-21.yml +8693 -0
  81. data/spec/fixtures/detector/smartphone-22.yml +10178 -0
  82. data/spec/fixtures/detector/smartphone-23.yml +9453 -0
  83. data/spec/fixtures/detector/smartphone-24.yml +9843 -0
  84. data/spec/fixtures/detector/smartphone-25.yml +9703 -0
  85. data/spec/fixtures/detector/smartphone-26.yml +10007 -0
  86. data/spec/fixtures/detector/smartphone-27.yml +4927 -0
  87. data/spec/fixtures/detector/smartphone-3.yml +4656 -4711
  88. data/spec/fixtures/detector/smartphone-4.yml +3518 -4479
  89. data/spec/fixtures/detector/smartphone-5.yml +3805 -4803
  90. data/spec/fixtures/detector/smartphone-6.yml +3745 -4693
  91. data/spec/fixtures/detector/smartphone-7.yml +3721 -4645
  92. data/spec/fixtures/detector/smartphone-8.yml +4564 -4699
  93. data/spec/fixtures/detector/smartphone-9.yml +3897 -4888
  94. data/spec/fixtures/detector/smartphone.yml +3154 -4141
  95. data/spec/fixtures/detector/tablet-1.yml +4742 -4576
  96. data/spec/fixtures/detector/tablet-2.yml +3803 -4731
  97. data/spec/fixtures/detector/tablet-3.yml +6210 -2309
  98. data/spec/fixtures/detector/tablet-4.yml +9062 -0
  99. data/spec/fixtures/detector/tablet-5.yml +9273 -0
  100. data/spec/fixtures/detector/tablet-6.yml +4588 -0
  101. data/spec/fixtures/detector/tablet.yml +3629 -4613
  102. data/spec/fixtures/detector/tv-1.yml +2501 -0
  103. data/spec/fixtures/detector/tv.yml +8856 -2064
  104. data/spec/fixtures/detector/unknown.yml +412 -587
  105. data/spec/fixtures/detector/wearable.yml +915 -0
  106. data/spec/fixtures/device/camera.yml +4 -3
  107. data/spec/fixtures/device/car_browser.yml +9 -2
  108. data/spec/fixtures/device/console.yml +15 -14
  109. data/spec/fixtures/device/notebook.yml +7 -0
  110. data/spec/fixtures/parser/oss.yml +1392 -21
  111. data/spec/fixtures/parser/vendorfragments.yml +57 -51
  112. metadata +70 -4
data/regexes/oss.yml CHANGED
@@ -1,26 +1,46 @@
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
8
  ##########
9
- # Tizen
9
+ # GridOS (https://web.archive.org/web/20111123141630/http://fusiongarage.com/grid-os/about)
10
10
  ##########
11
- - regex: 'Tizen[ /]?(\d+[\.\d]+)?'
12
- name: 'Tizen'
11
+ - regex: 'Grid OS (\d+[\.\d]+)'
12
+ name: 'GridOS'
13
13
  version: '$1'
14
14
 
15
-
15
+ ##########
16
+ # Caixa Mágica (https://caixamagica.pt/)
17
+ ##########
18
+ - regex: 'CaixaMagica'
19
+ name: 'Caixa Mágica'
20
+ version: ''
16
21
 
17
22
  ##########
18
- ## Sailfish OS
19
- ###########
20
- - regex: 'Sailfish|Jolla'
21
- name: 'Sailfish OS'
23
+ # Mageia (https://www.mageia.org/en/)
24
+ ##########
25
+ - regex: 'Mageia; Linux'
26
+ name: 'Mageia'
22
27
  version: ''
23
28
 
29
+ ##########
30
+ # Whale OS (https://www.zeasn.com/)
31
+ ##########
32
+ - regex: '(?:WH|WhaleTV/)(\d+[\.\d]+)'
33
+ name: 'Whale OS'
34
+ version: '$1'
35
+
36
+ ##########
37
+ # Tizen
38
+ ##########
39
+ - regex: 'Tizen[ /]?(\d+[\.\d]+)?'
40
+ name: 'Tizen'
41
+ version: '$1'
42
+
43
+
24
44
  ##########
25
45
  # YunOS (Android based)
26
46
  ##########
@@ -31,11 +51,14 @@
31
51
  ##########
32
52
  # Windows Mobile
33
53
  ##########
34
- - regex: 'Windows Phone (?:OS)?[ ]?(\d+[\.\d]+)'
54
+ - regex: 'Windows Phone;FBSV/(\d+[\.\d]+)'
35
55
  name: 'Windows Phone'
36
56
  version: '$1'
37
-
38
-
57
+
58
+ - regex: '(?:Windows Phone (?:OS)?|wds)[ /]?(\d+[\.\d]+)'
59
+ name: 'Windows Phone'
60
+ version: '$1'
61
+
39
62
  - regex: 'XBLWP7|Windows Phone'
40
63
  name: 'Windows Phone'
41
64
  version: ''
@@ -43,17 +66,15 @@
43
66
  - regex: 'Windows CE(?: (\d+[\.\d]+))?'
44
67
  name: 'Windows CE'
45
68
  version: '$1'
46
-
47
-
69
+
48
70
  - regex: '(?:IEMobile|Windows ?Mobile)(?: (\d+[\.\d]+))?'
49
71
  name: 'Windows Mobile'
50
72
  version: '$1'
51
-
52
-
73
+
53
74
  - regex: 'Windows NT 6.2; ARM;'
54
75
  name: 'Windows RT'
55
76
  version: ''
56
-
77
+
57
78
  - regex: 'Windows NT 6.3; ARM;'
58
79
  name: 'Windows RT'
59
80
  version: '8.1'
@@ -75,6 +96,10 @@
75
96
  ##########
76
97
  # Custom Android Roms
77
98
  ##########
99
+ - regex: 'HarmonyOS(?:[/ ](\d+[\.\d]+))?'
100
+ name: 'HarmonyOS'
101
+ version: '$1'
102
+
78
103
  - regex: 'RazoDroiD(?: v(\d+[\.\d]*))?'
79
104
  name: 'RazoDroiD'
80
105
  version: '$1'
@@ -95,15 +120,50 @@
95
120
  name: 'Fire OS'
96
121
  version: '$1'
97
122
 
123
+ - regex: 'AFTSO001'
124
+ name: 'Fire OS'
125
+ version: '7'
126
+
127
+ - regex: 'FydeOS'
128
+ name: 'FydeOS'
129
+ version: ''
130
+
98
131
  ##########
99
132
  # Android
100
133
  ##########
101
- - regex: '(?:(?:Orca-)?Android|Adr)[ /](?:[a-z]+ )?(\d+[\.\d]*)'
134
+ - regex: '(?:Podbean|Podimo)(?:.+)?/Android'
135
+ name: 'Android'
136
+ version: ''
137
+
138
+ - regex: 'Pinterest for Android/.+; (\d(?:[\d\.]+)?)\)$'
139
+ name: 'Android'
140
+ version: '$1'
141
+
142
+ - regex: 'Android; (\d+[\.\d]*); Mobile;'
143
+ name: 'Android'
144
+ version: '$1'
145
+
146
+ - regex: '[ ]([\d\.]+)\) AppleWebKit.*ROBLOX Android App'
147
+ name: 'Android'
148
+ version: '$1'
149
+
150
+ - regex: '(?:(?:Orca-)?Android|Adr)[ /]?(?:[a-z]+ )?(\d+[\.\d]*)'
151
+ name: 'Android'
152
+ version: '$1'
153
+
154
+ - regex: '(?:Allview_TX1_Quasar|Cosmote_My_mini_Tab) (\d+[\.\d]*)'
155
+ name: 'Android'
156
+ version: '$1'
157
+
158
+ - regex: 'Android ?(?:jelly bean|Kit Kat|S.O. Ginger Bread|The FireCyano|:) (\d+[\.\d]*)'
159
+ name: 'Android'
160
+ version: '$1'
161
+
162
+ - regex: '(?:Orca-Android|FB4A).*FBSV/(\d+[\.\d]*);'
102
163
  name: 'Android'
103
164
  version: '$1'
104
-
105
-
106
- - regex: 'Android|Silk-Accelerated=[a-z]{4,5}'
165
+
166
+ - regex: ' Adr |Android|Silk-Accelerated=[a-z]{4,5}'
107
167
  name: 'Android'
108
168
  version: ''
109
169
 
@@ -111,11 +171,26 @@
111
171
  name: 'Android'
112
172
  version: '$1'
113
173
 
114
- - regex: 'BeyondPod|AntennaPod|Podkicker|DoggCatcher|Player FM|okhttp|Podcatcher Deluxe'
174
+ - regex: 'BeyondPod|AntennaPod|Podkicker|DoggCatcher|Player FM|okhttp|Podcatcher Deluxe|.+K_?Android_?TV_|Sonos/.+\(ACR_'
115
175
  name: 'Android'
116
176
  version: ''
117
-
118
-
177
+
178
+ - regex: 'Linux; Andr0id[; ](\d+[\.\d]*)'
179
+ name: 'Android'
180
+ version: '$1'
181
+
182
+ # Inverted Android
183
+ - regex: 'Linux; diordnA[; ](\d+[\.\d]*)'
184
+ name: 'Android'
185
+ version: '$1'
186
+
187
+ ##########
188
+ ## Sailfish OS
189
+ ###########
190
+ - regex: 'Sailfish|Jolla'
191
+ name: 'Sailfish OS'
192
+ version: ''
193
+
119
194
  ##########
120
195
  # AmigaOS
121
196
  ##########
@@ -144,9 +219,49 @@
144
219
  name: 'MTK / Nucleus'
145
220
  version: '$1'
146
221
 
222
+ ##########
223
+ # MRE / MAUI Runtime Environment
224
+ ##########
225
+ - regex: 'MRE/(\d+)\.(\d+).*;MAUI'
226
+ name: 'MRE'
227
+ version: '$1.$2'
228
+
147
229
  ##########
148
230
  # Linux
149
231
  ##########
232
+ # DVKBuntu (https://www.dvkbuntu.org/)
233
+ - regex: 'dvkbuntu'
234
+ name: 'DVKBuntu'
235
+ version: ''
236
+
237
+ # Lumin OS (https://developer.magicleap.com/en-us/learn/guides/lumin-os-release-notes-summary)
238
+ - regex: 'Helio/(\d+[\.\d]+)'
239
+ name: 'Lumin OS'
240
+ version: '$1'
241
+
242
+ # HasCodingOS (https://forum.hascoding.com/HasCodingOS)
243
+ - regex: 'HasCodingOs (\d+[\.\d]+)'
244
+ name: 'HasCodingOS'
245
+ version: '$1'
246
+
247
+ # PCLinuxOS (https://www.pclinuxos.com/)
248
+ - regex: 'PCLinuxOS/(\d+[\.\d]+)'
249
+ name: 'PCLinuxOS'
250
+ version: '$1'
251
+
252
+ - regex: '(Ordissimo|webissimo3)'
253
+ name: 'Ordissimo'
254
+ version: ''
255
+
256
+ # Fenix (https://fenixlinux.com/)
257
+ - regex: '(?:Win|Sistema )Fenix'
258
+ name: 'Fenix'
259
+ version: ''
260
+
261
+ - regex: 'TOS; Linux'
262
+ name: 'TmaxOS'
263
+ version: ''
264
+
150
265
  - regex: 'Maemo'
151
266
  name: 'Maemo'
152
267
  version: ''
@@ -163,16 +278,44 @@
163
278
  name: '$1'
164
279
  version: '$2'
165
280
 
166
- - regex: '(Debian|Knoppix|Mint|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|CentOS|BackTrack)(?:(?: Enterprise)? Linux)?(?:[ /\-](\d+[\.\d]+))?'
281
+ - regex: 'Deepin[ /](\d+[\.\d]+)'
282
+ name: 'Deepin'
283
+ version: '$1'
284
+
285
+ - regex: '(Debian|Knoppix|Mint(?! Browser)|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|CentOS|BackTrack|Freebox)(?:(?: Enterprise)? Linux)?(?:[ /\-](\d+[\.\d]+))?'
167
286
  name: '$1'
168
287
  version: '$2'
169
288
 
289
+ - regex: 'OS ROSA; Linux'
290
+ name: 'Rosa'
291
+ version: ''
292
+
170
293
  # generic linux match -> end of file
171
294
 
172
295
  ##########
173
296
  # webOS
174
297
  ##########
175
- - regex: '(?:webOS|Palm webOS)(?:/(\d+[\.\d]+))?'
298
+ - regex: 'WEBOS(\d+[\.\d]+)'
299
+ name: 'webOS'
300
+ version: '$1'
301
+
302
+ - regex: 'Web0S; Linux/SmartTV.+Chrome/68'
303
+ name: 'webOS'
304
+ version: '5'
305
+ - regex: 'Web0S; Linux/SmartTV.+Chrome/53'
306
+ name: 'webOS'
307
+ version: '4'
308
+ - regex: 'Web0S; Linux/SmartTV.+Chrome/38'
309
+ name: 'webOS'
310
+ version: '3'
311
+ - regex: 'Web0S; Linux/SmartTV.+Safari/538'
312
+ name: 'webOS'
313
+ version: '2'
314
+ - regex: 'Web0S; Linux/SmartTV.+Safari/537'
315
+ name: 'webOS'
316
+ version: '1'
317
+
318
+ - regex: '(?:Web0S; .*WEBOS|webOS|web0S|Palm webOS|hpwOS)(?:[/]?(\d+[\.\d]+))?'
176
319
  name: 'webOS'
177
320
  version: '$1'
178
321
 
@@ -184,88 +327,86 @@
184
327
  name: 'palmOS'
185
328
  version: '$1'
186
329
 
187
-
188
330
  - regex: 'MorphOS(?:[ /](\d+[\.\d]+))?'
189
331
  name: 'MorphOS'
190
332
  version: '$1'
191
333
 
192
-
334
+
193
335
  ##########
194
336
  # Windows
195
337
  ##########
338
+ - regex: 'FBW.+FBSV/(\d+[\.\d]*);'
339
+ name: 'Windows'
340
+ version: '$1'
341
+
342
+ - regex: 'mingw32'
343
+ name: 'Windows'
344
+ version: ''
345
+
346
+ - regex: 'Windows/(\d+\.\d+)'
347
+ name: 'Windows'
348
+ version: '$1'
349
+
196
350
  - regex: 'CYGWIN_NT-10.0|Windows NT 10.0|Windows 10'
197
351
  name: 'Windows'
198
352
  version: '10'
199
353
 
200
- - regex: 'CYGWIN_NT-6.4|Windows NT 6.4|Windows 10'
354
+ - regex: 'CYGWIN_NT-6.4|Windows NT 6.4|Windows 10|win10'
201
355
  name: 'Windows'
202
356
  version: '10'
203
-
357
+
204
358
  - regex: 'CYGWIN_NT-6.3|Windows NT 6.3|Windows 8.1'
205
359
  name: 'Windows'
206
360
  version: '8.1'
207
361
 
208
-
209
362
  - regex: 'CYGWIN_NT-6.2|Windows NT 6.2|Windows 8'
210
363
  name: 'Windows'
211
364
  version: '8'
212
-
213
-
214
- - regex: 'CYGWIN_NT-6.1|Windows NT 6.1|Windows 7'
365
+
366
+ - regex: 'CYGWIN_NT-6.1|Windows NT 6.1|Windows 7|win7'
215
367
  name: 'Windows'
216
368
  version: '7'
217
-
218
-
369
+
219
370
  - regex: 'CYGWIN_NT-6.0|Windows NT 6.0|Windows Vista'
220
371
  name: 'Windows'
221
372
  version: 'Vista'
222
-
223
-
373
+
224
374
  - regex: 'CYGWIN_NT-5.2|Windows NT 5.2|Windows Server 2003 / XP x64'
225
375
  name: 'Windows'
226
376
  version: 'Server 2003'
227
-
228
-
377
+
229
378
  - regex: 'CYGWIN_NT-5.1|Windows NT 5.1|Windows XP'
230
379
  name: 'Windows'
231
380
  version: 'XP'
232
-
233
-
381
+
234
382
  - regex: 'CYGWIN_NT-5.0|Windows NT 5.0|Windows 2000'
235
383
  name: 'Windows'
236
384
  version: '2000'
237
-
238
-
385
+
239
386
  - regex: 'CYGWIN_NT-4.0|Windows NT 4.0|WinNT|Windows NT'
240
387
  name: 'Windows'
241
388
  version: 'NT'
242
-
243
-
389
+
244
390
  - regex: 'CYGWIN_ME-4.90|Win 9x 4.90|Windows ME'
245
391
  name: 'Windows'
246
392
  version: 'ME'
247
-
248
-
393
+
249
394
  - regex: 'CYGWIN_98-4.10|Win98|Windows 98'
250
395
  name: 'Windows'
251
396
  version: '98'
252
-
253
-
397
+
254
398
  - regex: 'CYGWIN_95-4.0|Win32|Win95|Windows 95|Windows_95'
255
399
  name: 'Windows'
256
400
  version: '95'
257
-
258
-
401
+
259
402
  - regex: 'Windows 3.1'
260
403
  name: 'Windows'
261
404
  version: '3.1'
262
-
263
-
405
+
264
406
  - regex: 'Windows'
265
407
  name: 'Windows'
266
408
  version: ''
267
409
 
268
-
269
410
  ##########
270
411
  # Haiku OS
271
412
  ##########
@@ -273,27 +414,147 @@
273
414
  name: 'Haiku OS'
274
415
  version: ''
275
416
 
276
-
417
+ ##########
418
+ # tvOS (https://developer.apple.com/tvos/)
419
+ ##########
420
+ - regex: 'Apple TV.*CPU (?:iPhone )?OS ((?:9|1[0-5])_\d+(?:[_\.]\d+)*)'
421
+ name: 'tvOS'
422
+ version: '$1'
423
+
424
+ - regex: 'iOS(?:; |/)((?:9|1[0-5]).\d+(?:[_\.]\d+)*) (?:model/)?AppleTV'
425
+ name: 'tvOS'
426
+ version: '$1'
427
+
428
+ ##########
429
+ # watchOS (https://developer.apple.com/watchos/)
430
+ ##########
431
+ - regex: '(?:Watch1,[12]/|Watch OS,|watchOS[ /])(\d+[\.\d]*)'
432
+ name: 'watchOS'
433
+ version: '$1'
434
+
435
+ ##########
436
+ # iPadOS (https://www.apple.com/ipados/)
437
+ ##########
438
+ - regex: 'FBMD/iPad;.*FBSV/ ?(1[345]).(\d+[\.\d]*);'
439
+ name: 'iPadOS'
440
+ version: '$1.$2'
441
+
442
+ - regex: 'iPad/(1[345]).(\d+[\.\d]*)'
443
+ name: 'iPadOS'
444
+ version: '$1.$2'
445
+
446
+ - regex: 'iPad.+CPU OS ((1[345])+(?:[_\.]\d+)*)'
447
+ name: 'iPadOS'
448
+ version: '$1'
449
+
450
+ - regex: 'iOS/(1[345]).(\d+[\.\d]*).+Apple/iPad'
451
+ name: 'iPadOS'
452
+ version: '$1.$2'
453
+
277
454
  ##########
278
455
  # iOS
279
456
  ##########
280
- - regex: 'CFNetwork/889'
457
+ - regex: 'iPad/([89]|1[012]).(\d+[\.\d]*)'
281
458
  name: 'iOS'
282
- version: '11.1'
459
+ version: '$1.$2'
283
460
 
284
- - regex: 'CFNetwork/887.*(x86_64)'
285
- name: 'Mac'
286
- version: '10.13'
461
+ - regex: 'Pinterest for iOS/.+; (\d(?:[\d\.]+)?)\)$'
462
+ name: 'iOS'
463
+ version: '$1'
287
464
 
288
- - regex: 'CFNetwork/887'
465
+ - regex: 'CFNetwork/.+ Darwin/21.0.0(?!.*x86_64)'
289
466
  name: 'iOS'
290
- version: '11.0'
467
+ version: '15.0'
291
468
 
292
- - regex: 'CFNetwork/811.*(x86_64)'
293
- name: 'Mac'
294
- version: '10.12'
469
+ - regex: 'CFNetwork/.+ Darwin/20.6.0(?!.*x86_64)'
470
+ name: 'iOS'
471
+ version: '14.7'
472
+
473
+ - regex: 'CFNetwork/.+ Darwin/20.5.0(?!.*x86_64)'
474
+ name: 'iOS'
475
+ version: '14.6'
476
+
477
+ - regex: 'CFNetwork/.+ Darwin/20.4.0(?!.*x86_64)'
478
+ name: 'iOS'
479
+ version: '14.5'
480
+
481
+ - regex: 'CFNetwork/.+ Darwin/20.3.0(?!.*x86_64)'
482
+ name: 'iOS'
483
+ version: '14.4'
484
+
485
+ - regex: 'CFNetwork/.+ Darwin/20.2.0(?!.*x86_64)'
486
+ name: 'iOS'
487
+ version: '14.3'
488
+
489
+ - regex: 'CFNetwork/.+ Darwin/20.1.0(?!.*x86_64)'
490
+ name: 'iOS'
491
+ version: '14.2'
492
+
493
+ - regex: 'CFNetwork/.+ Darwin/20.0.0(?!.*x86_64)'
494
+ name: 'iOS'
495
+ version: '14.0'
496
+
497
+ - regex: 'CFNetwork/.+ Darwin/19.6.0(?!.*x86_64)'
498
+ name: 'iOS'
499
+ version: '13.6'
500
+
501
+ - regex: 'CFNetwork/.+ Darwin/19.5.0(?!.*x86_64)'
502
+ name: 'iOS'
503
+ version: '13.5'
504
+
505
+ - regex: 'CFNetwork/.+ Darwin/19.4.0(?!.*x86_64)'
506
+ name: 'iOS'
507
+ version: '13.4'
508
+
509
+ - regex: 'CFNetwork/.+ Darwin/19.3.0(?!.*x86_64)'
510
+ name: 'iOS'
511
+ version: '13.3.1'
512
+
513
+ - regex: 'CFNetwork/.+ Darwin/19.2.0(?!.*x86_64)'
514
+ name: 'iOS'
515
+ version: '13.3'
516
+
517
+ - regex: 'CFNetwork/.+ Darwin/19.0.0(?!.*x86_64)'
518
+ name: 'iOS'
519
+ version: '13.0'
520
+
521
+ - regex: 'CFNetwork/.+ Darwin/18.7.0(?!.*x86_64)'
522
+ name: 'iOS'
523
+ version: '12.4'
524
+
525
+ - regex: 'CFNetwork/.+ Darwin/18.6.0(?!.*x86_64)'
526
+ name: 'iOS'
527
+ version: '12.3'
528
+
529
+ - regex: 'CFNetwork/.+ Darwin/18.5.0(?!.*x86_64)'
530
+ name: 'iOS'
531
+ version: '12.2'
532
+
533
+ - regex: 'CFNetwork/.+ Darwin/18.2.0(?!.*x86_64)'
534
+ name: 'iOS'
535
+ version: '12.1'
536
+
537
+ - regex: 'CFNetwork/.+ Darwin/18.0.0(?!.*x86_64)'
538
+ name: 'iOS'
539
+ version: '12.0'
540
+
541
+ - regex: 'CFNetwork/.+ Darwin/17.7.0(?!.*x86_64)'
542
+ name: 'iOS'
543
+ version: '11.4.1'
544
+
545
+ - regex: 'CFNetwork/.+ Darwin/17.6.0(?!.*x86_64)'
546
+ name: 'iOS'
547
+ version: '11.4'
548
+
549
+ - regex: 'CFNetwork/889(?!.*x86_64)'
550
+ name: 'iOS'
551
+ version: '11.1'
552
+
553
+ - regex: 'CFNetwork/887(?!.*x86_64)'
554
+ name: 'iOS'
555
+ version: '11.0'
295
556
 
296
- - regex: 'CFNetwork/811'
557
+ - regex: 'CFNetwork/811(?!.*x86_64)'
297
558
  name: 'iOS'
298
559
  version: '10.3'
299
560
 
@@ -409,47 +670,261 @@
409
670
  name: 'iOS'
410
671
  version: '3.1'
411
672
 
673
+ - regex: 'iPhone/(\d+[\.\d]*) hw/'
674
+ name: 'iOS'
675
+ version: '$1'
676
+
677
+ - regex: 'iOS(\d+\.\d+\.\d+)'
678
+ name: 'iOS'
679
+ version: '$1'
680
+
681
+ - regex: 'iOS(\d+)\.(\d+)0'
682
+ name: 'iOS'
683
+ version: '$1.$2'
684
+
685
+ - regex: 'iPhone OS ([0-9]{1})([0-9]{1})([0-9]{1})'
686
+ name: 'iOS'
687
+ version: '$1.$2.$3'
688
+
412
689
  - regex: '(?:CPU OS|iPh(?:one)?[ _]OS|iOS)[ _/](\d+(?:[_\.]\d+)*)'
413
690
  name: 'iOS'
414
691
  version: '$1'
415
692
 
693
+ - regex: '(?:FBIOS|Messenger(?:Lite)?ForiOS).*FBSV/ ?(\d+[\.\d]*);'
694
+ name: 'iOS'
695
+ version: '$1'
696
+
416
697
  - regex: '(?:Apple-)?(?:iPhone|iPad|iPod)(?:.*Mac OS X.*Version/(\d+\.\d+)|; Opera)?'
417
698
  name: 'iOS'
418
699
  version: '$1'
419
700
 
420
- - regex: 'Podcasts/(?:[\d\.]+)|Instacast(?:HD)?/(?:\d\.[\d\.abc]+)|Pocket Casts, iOS|Overcast|Castro|Podcat|i[cC]atcher|RSSRadio/'
701
+ - regex: '(?:Podcasts/(?:[\d\.]+)|Instacast(?:HD)?/(?:\d\.[\d\.abc]+)|Pocket Casts, iOS|\(iOS\)|iOS; Opera|Overcast|Castro|Podcat|iCatcher|RSSRadio/|MobileSafari/)(?!.*x86_64)'
421
702
  name: 'iOS'
422
703
  version: ''
423
704
 
424
- - regex: 'iTunes-(iPod|iPad|iPhone)/(?:[\d\.]+)'
705
+ - regex: 'iTunes-(AppleTV|iPod|iPad|iPhone)/(?:[\d\.]+)'
425
706
  name: 'iOS'
426
707
  version: ''
427
708
 
709
+ - regex: 'iOS/Version ([\d\.]+)'
710
+ name: 'iOS'
711
+ version: '$1'
712
+
713
+ - regex: 'Sonos/.+\(ICRU_'
714
+ name: 'iOS'
715
+ version: ''
428
716
 
429
717
  ##########
430
718
  # Mac
431
719
  ##########
720
+ - regex: 'CFNetwork/.+ Darwin/20.2.0.*(x86_64)|(x86_64-apple-)?darwin20.2.0'
721
+ name: 'Mac'
722
+ version: '11.1'
723
+
724
+ - regex: 'CFNetwork/.+ Darwin/20.[01].0.*(x86_64)|(x86_64-apple-)?darwin20.[01].0'
725
+ name: 'Mac'
726
+ version: '11.0'
727
+
728
+ - regex: 'CFNetwork/.+ Darwin/19.6.0.*(x86_64)|(x86_64-apple-)?darwin19.6.0'
729
+ name: 'Mac'
730
+ version: '10.15.6'
731
+
732
+ - regex: 'CFNetwork/.+ Darwin/19.5.0.*(x86_64)|(x86_64-apple-)?darwin19.5.0'
733
+ name: 'Mac'
734
+ version: '10.15.5'
735
+
736
+ - regex: 'CFNetwork/.+ Darwin/19.4.0.*(x86_64)|(x86_64-apple-)?darwin19.4.0'
737
+ name: 'Mac'
738
+ version: '10.15.4'
739
+
740
+ - regex: 'CFNetwork/.+ Darwin/19.3.0.*(x86_64)|(x86_64-apple-)?darwin19.3.0'
741
+ name: 'Mac'
742
+ version: '10.15.3'
743
+
744
+ - regex: 'CFNetwork/.+ Darwin/19.2.0.*(x86_64)|(x86_64-apple-)?darwin19.2.0'
745
+ name: 'Mac'
746
+ version: '10.15.2'
747
+
748
+ - regex: 'CFNetwork/(?:108[258]|109[18]|1103).*(x86_64)'
749
+ name: 'Mac'
750
+ version: '10.15'
751
+
752
+ - regex: 'CFNetwork/.+ Darwin/18.2.0.*(x86_64)|(x86_64-apple-)?darwin18.2.0'
753
+ name: 'Mac'
754
+ version: '10.14.1'
755
+
756
+ - regex: 'CFNetwork/(?:96[29]|97[14568]).*(x86_64)'
757
+ name: 'Mac'
758
+ version: '10.14'
759
+
760
+ - regex: 'CFNetwork/.+ Darwin/17.7.0.*(x86_64)|(x86_64-apple-)?darwin17.7.0'
761
+ name: 'Mac'
762
+ version: '10.13.6'
763
+
764
+ - regex: 'CFNetwork/.+ Darwin/17.6.0.*(x86_64)|(x86_64-apple-)?darwin17.6.0'
765
+ name: 'Mac'
766
+ version: '10.13.5'
767
+
768
+ - regex: 'CFNetwork/.+ Darwin/17.5.0.*(x86_64)|(x86_64-apple-)?darwin17.5.0'
769
+ name: 'Mac'
770
+ version: '10.13.4'
771
+
772
+ - regex: 'CFNetwork/.+ Darwin/17.4.0.*(x86_64)|(x86_64-apple-)?darwin17.4.0'
773
+ name: 'Mac'
774
+ version: '10.13.3'
775
+
776
+ - regex: 'CFNetwork/.+ Darwin/17.3.0.*(x86_64)|(x86_64-apple-)?darwin17.3.0'
777
+ name: 'Mac'
778
+ version: '10.13.2'
779
+
780
+ - regex: 'CFNetwork/.+ Darwin/17.2.0.*(x86_64)|(x86_64-apple-)?darwin17.2.0'
781
+ name: 'Mac'
782
+ version: '10.13.1'
783
+
784
+ - regex: 'CFNetwork/(?:887|889|893|897|901|902).*(x86_64)'
785
+ name: 'Mac'
786
+ version: '10.13'
787
+
788
+ - regex: 'CFNetwork/.+ Darwin/16.7.0.*(x86_64)|(x86_64-apple-)?darwin16.7.0'
789
+ name: 'Mac'
790
+ version: '10.12.6'
791
+
792
+ - regex: 'CFNetwork/.+ Darwin/16.6.0.*(x86_64)|(x86_64-apple-)?darwin16.6.0'
793
+ name: 'Mac'
794
+ version: '10.12.5'
795
+
796
+ - regex: 'CFNetwork/.+ Darwin/16.5.0.*(x86_64)|(x86_64-apple-)?darwin16.5.0'
797
+ name: 'Mac'
798
+ version: '10.12.4'
799
+
800
+ - regex: 'CFNetwork/.+ Darwin/16.3.0.*(x86_64)|(x86_64-apple-)?darwin16.3.0'
801
+ name: 'Mac'
802
+ version: '10.12.3'
803
+
804
+ - regex: 'CFNetwork/.+ Darwin/16.2.0.*(x86_64)|(x86_64-apple-)?darwin16.2.0'
805
+ name: 'Mac'
806
+ version: '10.12.2'
807
+
808
+ - regex: 'CFNetwork/.+ Darwin/16.1.0.*(x86_64)|(x86_64-apple-)?darwin16.1.0'
809
+ name: 'Mac'
810
+ version: '10.12.1'
811
+
812
+ - regex: 'CFNetwork/811.*(x86_64)'
813
+ name: 'Mac'
814
+ version: '10.12'
432
815
 
433
816
  - regex: 'CFNetwork/807'
434
817
  name: 'Mac'
435
818
  version: '10.12'
436
819
 
820
+ - regex: 'CFNetwork/.+ Darwin/15.6.0.*(x86_64)|(x86_64-apple-)?darwin15.6.0'
821
+ name: 'Mac'
822
+ version: '10.11.6'
823
+
824
+ - regex: 'CFNetwork/.+ Darwin/15.5.0.*(x86_64)|(x86_64-apple-)?darwin15.5.0'
825
+ name: 'Mac'
826
+ version: '10.11.5'
827
+
828
+ - regex: 'CFNetwork/.+ Darwin/15.4.0.*(x86_64)|(x86_64-apple-)?darwin15.4.0'
829
+ name: 'Mac'
830
+ version: '10.11.4'
831
+
832
+ - regex: 'CFNetwork/.+ Darwin/15.3.0.*(x86_64)|(x86_64-apple-)?darwin15.3.0'
833
+ name: 'Mac'
834
+ version: '10.11.3'
835
+
836
+ - regex: 'CFNetwork/.+ Darwin/15.2.0.*(x86_64)|(x86_64-apple-)?darwin15.2.0'
837
+ name: 'Mac'
838
+ version: '10.11.2'
839
+
437
840
  - regex: 'CFNetwork/760'
438
841
  name: 'Mac'
439
842
  version: '10.11'
440
843
 
844
+ - regex: 'CFNetwork/.+ Darwin/14.5.0.*(x86_64)|(x86_64-apple-)?darwin14.5.0'
845
+ name: 'Mac'
846
+ version: '10.10.5'
847
+
848
+ - regex: 'CFNetwork/.+ Darwin/14.4.0.*(x86_64)|(x86_64-apple-)?darwin14.4.0'
849
+ name: 'Mac'
850
+ version: '10.10.4'
851
+
852
+ - regex: 'CFNetwork/.+ Darwin/14.3.0.*(x86_64)|(x86_64-apple-)?darwin14.3.0'
853
+ name: 'Mac'
854
+ version: '10.10.3'
855
+
856
+ - regex: 'CFNetwork/.+ Darwin/14.1.0.*(x86_64)|(x86_64-apple-)?darwin14.1.0'
857
+ name: 'Mac'
858
+ version: '10.10.2'
859
+
441
860
  - regex: 'CFNetwork/720'
442
861
  name: 'Mac'
443
862
  version: '10.10'
444
863
 
864
+ - regex: 'CFNetwork/.+ Darwin/13.4.0.*(x86_64)|(x86_64-apple-)?darwin13.4.0'
865
+ name: 'Mac'
866
+ version: '10.9.5'
867
+
868
+ - regex: 'CFNetwork/.+ Darwin/13.3.0.*(x86_64)|(x86_64-apple-)?darwin13.3.0'
869
+ name: 'Mac'
870
+ version: '10.9.4'
871
+
872
+ - regex: 'CFNetwork/.+ Darwin/13.2.0.*(x86_64)|(x86_64-apple-)?darwin13.2.0'
873
+ name: 'Mac'
874
+ version: '10.9.3'
875
+
876
+ - regex: 'CFNetwork/.+ Darwin/13.1.0.*(x86_64)|(x86_64-apple-)?darwin13.1.0'
877
+ name: 'Mac'
878
+ version: '10.9.2'
879
+
445
880
  - regex: 'CFNetwork/673'
446
881
  name: 'Mac'
447
882
  version: '10.9'
448
883
 
884
+ - regex: 'CFNetwork/.+ Darwin/12.5.0.*(x86_64)|(x86_64-apple-)?darwin12.5.0'
885
+ name: 'Mac'
886
+ version: '10.8.5'
887
+
888
+ - regex: 'CFNetwork/.+ Darwin/12.4.0.*(x86_64)|(x86_64-apple-)?darwin12.4.0'
889
+ name: 'Mac'
890
+ version: '10.8.4'
891
+
892
+ - regex: 'CFNetwork/.+ Darwin/12.3.0.*(x86_64)|(x86_64-apple-)?darwin12.3.0'
893
+ name: 'Mac'
894
+ version: '10.8.3'
895
+
896
+ - regex: 'CFNetwork/.+ Darwin/12.2.0.*(x86_64)|(x86_64-apple-)?darwin12.2.0'
897
+ name: 'Mac'
898
+ version: '10.8.2'
899
+
900
+ - regex: 'CFNetwork/.+ Darwin/12.1.0.*(x86_64)|(x86_64-apple-)?darwin12.1.0'
901
+ name: 'Mac'
902
+ version: '10.8.1'
903
+
449
904
  - regex: 'CFNetwork/596'
450
905
  name: 'Mac'
451
906
  version: '10.8'
452
907
 
908
+ - regex: 'CFNetwork/.+ Darwin/11.5.0.*(x86_64)|(x86_64-apple-)?darwin11.5.0'
909
+ name: 'Mac'
910
+ version: '10.7.5'
911
+
912
+ - regex: 'CFNetwork/.+ Darwin/11.4.0.*(x86_64)|(x86_64-apple-)?darwin11.4.0'
913
+ name: 'Mac'
914
+ version: '10.7.4'
915
+
916
+ - regex: 'CFNetwork/.+ Darwin/11.3.0.*(x86_64)|(x86_64-apple-)?darwin11.3.0'
917
+ name: 'Mac'
918
+ version: '10.7.3'
919
+
920
+ - regex: 'CFNetwork/.+ Darwin/11.2.0.*(x86_64)|(x86_64-apple-)?darwin11.2.0'
921
+ name: 'Mac'
922
+ version: '10.7.2'
923
+
924
+ - regex: 'CFNetwork/.+ Darwin/11.1.0.*(x86_64)|(x86_64-apple-)?darwin11.1.0'
925
+ name: 'Mac'
926
+ version: '10.7.1'
927
+
453
928
  - regex: 'CFNetwork/520'
454
929
  name: 'Mac'
455
930
  version: '10.7'
@@ -474,56 +949,59 @@
474
949
  name: 'Mac'
475
950
  version: '10.2'
476
951
 
477
- - regex: 'Mac[ +]OS[ +]X(?:[ /](?:Version )?(\d+(?:[_\.]\d+)+))?'
952
+ - regex: 'Mac[ +]OS[ +]?X(?:[ /](?:Version )?(\d+(?:[_\.]\d+)+))?'
953
+ name: 'Mac'
954
+ version: '$1'
955
+
956
+ - regex: 'Mac (?:OS/)?(\d+(?:[_\.]\d+)+)'
478
957
  name: 'Mac'
479
958
  version: '$1'
480
-
481
- - regex: 'Mac (\d+(?:[_\.]\d+)+)'
959
+
960
+ - regex: 'macOS/(\d+[\.\d]+)'
482
961
  name: 'Mac'
483
962
  version: '$1'
484
963
 
485
- - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook'
964
+ - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook|macOS|Sonos/.+\(MDCR_'
486
965
  name: 'Mac'
487
966
  version: ''
488
-
489
-
490
-
967
+
968
+ ##########
969
+ # SeewoOS
970
+ ##########
971
+ - regex: 'SeewoOS x86_64 (\d+[\.\d]+)'
972
+ name: 'SeewoOS'
973
+ version: '$1'
974
+
491
975
  ##########
492
976
  # ChromeOS
493
977
  ##########
494
978
  - regex: 'CrOS [a-z0-9_]+ .* Chrome/(\d+[\.\d]+)'
495
979
  name: 'Chrome OS'
496
980
  version: '$1'
497
-
498
-
499
-
981
+
500
982
  ##########
501
983
  # BlackBerry
502
984
  ##########
503
985
  - regex: '(?:BB10;.+Version|Black[Bb]erry[0-9a-z]+|Black[Bb]erry.+Version)/(\d+[\.\d]+)'
504
986
  name: 'BlackBerry OS'
505
987
  version: '$1'
506
-
507
-
988
+
508
989
  - regex: 'RIM Tablet OS (\d+[\.\d]+)'
509
990
  name: 'BlackBerry Tablet OS'
510
991
  version: '$1'
511
-
512
-
992
+
513
993
  - regex: 'RIM Tablet OS|QNX|Play[Bb]ook'
514
994
  name: 'BlackBerry Tablet OS'
515
995
  version: ''
516
-
517
-
996
+
518
997
  - regex: 'BlackBerry'
519
998
  name: 'BlackBerry OS'
520
999
  version: ''
521
-
1000
+
522
1001
  - regex: 'bPod'
523
1002
  name: 'BlackBerry OS'
524
1003
  version: ''
525
1004
 
526
-
527
1005
  ##########
528
1006
  # BeOS
529
1007
  ##########
@@ -531,9 +1009,6 @@
531
1009
  name: 'BeOS'
532
1010
  version: ''
533
1011
 
534
-
535
-
536
-
537
1012
  ##########
538
1013
  # Symbian
539
1014
  ##########
@@ -541,48 +1016,38 @@
541
1016
  name: 'Symbian^3'
542
1017
  version: 'Anna'
543
1018
 
544
-
545
1019
  - regex: 'Symbian/3.+NokiaBrowser/7\.4'
546
1020
  name: 'Symbian^3'
547
1021
  version: 'Belle'
548
1022
 
549
-
550
1023
  - regex: 'Symbian/3'
551
1024
  name: 'Symbian^3'
552
1025
  version: ''
553
1026
 
554
-
555
1027
  - regex: '(?:Series ?60|SymbOS|S60)(?:[ /]?(\d+[\.\d]+|V\d+))?'
556
1028
  name: 'Symbian OS Series 60'
557
1029
  version: '$1'
558
1030
 
559
-
560
1031
  - regex: 'Series40'
561
1032
  name: 'Symbian OS Series 40'
562
1033
  version: ''
563
1034
 
564
-
565
1035
  - regex: 'SymbianOS/(\d+[\.\d]+)'
566
1036
  name: 'Symbian OS'
567
1037
  version: '$1'
568
-
569
-
1038
+
570
1039
  - regex: 'MeeGo|WeTab'
571
1040
  name: 'MeeGo'
572
1041
  version: ''
573
-
574
-
1042
+
575
1043
  - regex: 'Symbian(?: OS)?|SymbOS'
576
1044
  name: 'Symbian OS'
577
1045
  version: ''
578
-
579
-
1046
+
580
1047
  - regex: 'Nokia'
581
1048
  name: 'Symbian'
582
1049
  version: ''
583
1050
 
584
-
585
-
586
1051
  ##########
587
1052
  # Firefox OS
588
1053
  ##########
@@ -590,7 +1055,6 @@
590
1055
  name: 'Firefox OS'
591
1056
  version: ''
592
1057
 
593
-
594
1058
  ##########
595
1059
  # RISC OS
596
1060
  ##########
@@ -598,7 +1062,6 @@
598
1062
  name: 'RISC OS'
599
1063
  version: '$1'
600
1064
 
601
-
602
1065
  ##########
603
1066
  # Inferno
604
1067
  ##########
@@ -606,50 +1069,41 @@
606
1069
  name: 'Inferno'
607
1070
  version: '$1'
608
1071
 
609
-
610
1072
  ##########
611
1073
  # Bada
612
1074
  ##########
613
- - regex: 'bada(?:[ /](\d+[\.\d]+))'
1075
+ - regex: 'bada(?:[ /](\d+[\.\d]+))?'
614
1076
  name: 'Bada'
615
1077
  version: '$1'
616
-
617
-
618
- - regex: 'bada'
619
- name: 'Bada'
620
- version: ''
621
1078
 
1079
+ ##########
1080
+ # REX
1081
+ ##########
1082
+ - regex: 'REX; U;'
1083
+ name: 'REX'
1084
+ version: ''
622
1085
 
623
1086
  ##########
624
1087
  # Brew
625
1088
  ##########
626
- - regex: '(?:Brew MP|BREW|BMP)(?:[ /](\d+[\.\d]+))'
1089
+ - regex: '(?:Brew(?!-Applet)(?: MP)?|BMP)(?:[ /](\d+[\.\d]+))?'
627
1090
  name: 'Brew'
628
1091
  version: '$1'
629
1092
 
630
-
631
- - regex: 'Brew MP|BREW|BMP'
632
- name: 'Brew'
633
- version: ''
634
-
635
-
636
1093
  ##########
637
1094
  # Web TV
638
1095
  ##########
639
1096
  - regex: 'GoogleTV(?:[ /](\d+[\.\d]+))?'
640
1097
  name: 'Google TV'
641
1098
  version: '$1'
642
-
643
-
1099
+
644
1100
  - regex: 'AppleTV(?:/?(\d+[\.\d]+))?'
645
1101
  name: 'Apple TV'
646
1102
  version: '$1'
647
-
648
-
1103
+
649
1104
  - regex: 'WebTV/(\d+[\.\d]+)'
650
1105
  name: 'WebTV'
651
1106
  version: '$1'
652
-
653
1107
 
654
1108
  ##########
655
1109
  # Remix OS
@@ -666,108 +1120,92 @@
666
1120
  name: 'Remix OS'
667
1121
  version: ''
668
1122
 
669
-
670
1123
  ##########
671
1124
  # Unix
672
1125
  ##########
673
1126
  - regex: '(?:SunOS|Solaris)(?:[/ ](\d+[\.\d]+))?'
674
1127
  name: 'Solaris'
675
1128
  version: '$1'
676
-
677
-
1129
+
678
1130
  - regex: 'AIX(?:[/ ]?(\d+[\.\d]+))?'
679
1131
  name: 'AIX'
680
1132
  version: '$1'
681
-
682
-
1133
+
683
1134
  - regex: 'HP-UX(?:[/ ]?(\d+[\.\d]+))?'
684
1135
  name: 'HP-UX'
685
1136
  version: '$1'
686
-
687
-
1137
+
688
1138
  - regex: 'FreeBSD(?:[/ ]?(\d+[\.\d]+))?'
689
1139
  name: 'FreeBSD'
690
1140
  version: '$1'
691
-
692
-
1141
+
693
1142
  - regex: 'NetBSD(?:[/ ]?(\d+[\.\d]+))?'
694
1143
  name: 'NetBSD'
695
1144
  version: '$1'
696
-
697
-
1145
+
698
1146
  - regex: 'OpenBSD(?:[/ ]?(\d+[\.\d]+))?'
699
1147
  name: 'OpenBSD'
700
1148
  version: '$1'
701
-
702
-
1149
+
703
1150
  - regex: 'DragonFly(?:[/ ]?(\d+[\.\d]+))?'
704
1151
  name: 'DragonFly'
705
1152
  version: '$1'
706
-
707
-
1153
+
708
1154
  - regex: 'Syllable(?:[/ ]?(\d+[\.\d]+))?'
709
1155
  name: 'Syllable'
710
1156
  version: '$1'
711
-
712
-
1157
+
713
1158
  - regex: 'IRIX(?:;64)?(?:[/ ]?(\d+[\.\d]+))'
714
1159
  name: 'IRIX'
715
1160
  version: '$1'
716
-
717
-
1161
+
718
1162
  - regex: 'OSF1(?:[/ ]?v?(\d+[\.\d]+))?'
719
1163
  name: 'OSF1'
720
1164
  version: '$1'
721
-
722
-
723
-
1165
+
724
1166
  ##########
725
1167
  # Gaming Console
726
1168
  ##########
727
- - regex: 'Nintendo Wii'
1169
+ - regex: 'Nintendo (Wii|Switch)'
728
1170
  name: 'Nintendo'
729
- version: 'Wii'
730
-
731
-
732
- - regex: 'PlayStation ?([3|4])'
1171
+ version: '$1'
1172
+
1173
+ - regex: 'PlayStation ?([34])'
733
1174
  name: 'PlayStation'
734
1175
  version: '$1'
735
-
736
-
1176
+
737
1177
  - regex: 'Xbox|KIN\.(?:One|Two)'
738
1178
  name: 'Xbox'
739
1179
  version: '360'
740
-
741
-
742
-
1180
+
743
1181
  ##########
744
1182
  # Mobile Gaming Console
745
1183
  ##########
746
1184
  - regex: 'Nitro|Nintendo ([3]?DS[i]?)'
747
1185
  name: 'Nintendo Mobile'
748
1186
  version: '$1'
749
-
750
-
1187
+
751
1188
  - regex: 'PlayStation ((?:Portable|Vita))'
752
1189
  name: 'PlayStation Portable'
753
1190
  version: '$1'
754
-
755
-
756
-
1191
+
757
1192
  ##########
758
1193
  # IBM
759
1194
  ##########
760
1195
  - regex: 'OS/2'
761
1196
  name: 'OS/2'
762
1197
  version: ''
763
-
764
-
765
1198
 
766
1199
  ###########
767
1200
  # Linux (Generic)
768
1201
  ###########
769
- - regex: 'Linux(?:OS)?[^a-z]'
1202
+ - regex: 'Linux(?:OS)?[^a-z]|Cinnamon/(?:\d+[\.\d]+)'
770
1203
  name: 'GNU/Linux'
771
1204
  version: ''
772
1205
 
773
-
1206
+ ##########
1207
+ # Java ME (Java Platform, Micro Edition)
1208
+ ##########
1209
+ - regex: 'Java ME|(J2ME|Profile)/MIDP|MIDP-(?:\d+[\.\d]+)/CLDC|Configuration/CLDC|Java; U; MIDP|MMP/\d.\d'
1210
+ name: 'Java ME'
1211
+ version: ''