device_detector 1.0.5 → 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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -6
  3. data/lib/device_detector/browser.rb +364 -0
  4. data/lib/device_detector/client.rb +8 -0
  5. data/lib/device_detector/device.rb +1124 -4
  6. data/lib/device_detector/os.rb +36 -11
  7. data/lib/device_detector/version.rb +1 -1
  8. data/lib/device_detector/version_extractor.rb +9 -0
  9. data/lib/device_detector.rb +57 -13
  10. data/regexes/bots.yml +551 -58
  11. data/regexes/client/browser_engine.yml +7 -1
  12. data/regexes/client/browsers.yml +594 -71
  13. data/regexes/client/feed_readers.yml +4 -10
  14. data/regexes/client/libraries.yml +47 -2
  15. data/regexes/client/mediaplayers.yml +25 -1
  16. data/regexes/client/mobile_apps.yml +447 -77
  17. data/regexes/client/pim.yml +49 -1
  18. data/regexes/device/cameras.yml +5 -5
  19. data/regexes/device/car_browsers.yml +16 -0
  20. data/regexes/device/consoles.yml +6 -0
  21. data/regexes/device/mobiles.yml +12905 -4561
  22. data/regexes/device/portable_media_player.yml +20 -3
  23. data/regexes/device/shell_tv.yml +117 -0
  24. data/regexes/device/televisions.yml +426 -35
  25. data/regexes/oss.yml +567 -139
  26. data/spec/device_detector/concrete_user_agent_spec.rb +30 -42
  27. data/spec/device_detector/detector_fixtures_spec.rb +9 -5
  28. data/spec/device_detector/device_spec.rb +26 -10
  29. data/spec/fixtures/client/browser.yml +1463 -391
  30. data/spec/fixtures/client/feed_reader.yml +0 -12
  31. data/spec/fixtures/client/library.yml +91 -37
  32. data/spec/fixtures/client/mediaplayer.yml +30 -0
  33. data/spec/fixtures/client/mobile_app.yml +498 -45
  34. data/spec/fixtures/client/pim.yml +60 -0
  35. data/spec/fixtures/detector/bots.yml +1189 -568
  36. data/spec/fixtures/detector/camera.yml +12 -26
  37. data/spec/fixtures/detector/car_browser.yml +151 -15
  38. data/spec/fixtures/detector/console.yml +70 -48
  39. data/spec/fixtures/detector/desktop.yml +2041 -916
  40. data/spec/fixtures/detector/feature_phone.yml +895 -189
  41. data/spec/fixtures/detector/feed_reader.yml +50 -77
  42. data/spec/fixtures/detector/mediaplayer.yml +79 -26
  43. data/spec/fixtures/detector/mobile_apps.yml +726 -72
  44. data/spec/fixtures/detector/peripheral.yml +271 -0
  45. data/spec/fixtures/detector/phablet.yml +3635 -1596
  46. data/spec/fixtures/detector/portable_media_player.yml +355 -46
  47. data/spec/fixtures/detector/smart_display.yml +183 -9
  48. data/spec/fixtures/detector/smart_speaker.yml +13 -8
  49. data/spec/fixtures/detector/smartphone-1.yml +4002 -4286
  50. data/spec/fixtures/detector/smartphone-10.yml +3771 -4763
  51. data/spec/fixtures/detector/smartphone-11.yml +3615 -4692
  52. data/spec/fixtures/detector/smartphone-12.yml +3856 -4764
  53. data/spec/fixtures/detector/smartphone-13.yml +4213 -4713
  54. data/spec/fixtures/detector/smartphone-14.yml +4039 -4497
  55. data/spec/fixtures/detector/smartphone-15.yml +5642 -2956
  56. data/spec/fixtures/detector/smartphone-16.yml +4739 -5082
  57. data/spec/fixtures/detector/smartphone-17.yml +4832 -4275
  58. data/spec/fixtures/detector/smartphone-18.yml +9806 -0
  59. data/spec/fixtures/detector/smartphone-19.yml +9965 -0
  60. data/spec/fixtures/detector/smartphone-2.yml +4842 -2589
  61. data/spec/fixtures/detector/smartphone-20.yml +9710 -0
  62. data/spec/fixtures/detector/smartphone-21.yml +8693 -0
  63. data/spec/fixtures/detector/smartphone-22.yml +10178 -0
  64. data/spec/fixtures/detector/smartphone-23.yml +9453 -0
  65. data/spec/fixtures/detector/smartphone-24.yml +9843 -0
  66. data/spec/fixtures/detector/smartphone-25.yml +9703 -0
  67. data/spec/fixtures/detector/smartphone-26.yml +10007 -0
  68. data/spec/fixtures/detector/smartphone-27.yml +4927 -0
  69. data/spec/fixtures/detector/smartphone-3.yml +4387 -4427
  70. data/spec/fixtures/detector/smartphone-4.yml +3597 -4582
  71. data/spec/fixtures/detector/smartphone-5.yml +4066 -5022
  72. data/spec/fixtures/detector/smartphone-6.yml +3455 -4621
  73. data/spec/fixtures/detector/smartphone-7.yml +3574 -4574
  74. data/spec/fixtures/detector/smartphone-8.yml +4617 -4704
  75. data/spec/fixtures/detector/smartphone-9.yml +4080 -5035
  76. data/spec/fixtures/detector/smartphone.yml +3244 -4234
  77. data/spec/fixtures/detector/tablet-1.yml +4652 -4492
  78. data/spec/fixtures/detector/tablet-2.yml +3515 -4434
  79. data/spec/fixtures/detector/tablet-3.yml +3418 -4351
  80. data/spec/fixtures/detector/tablet-4.yml +5149 -3200
  81. data/spec/fixtures/detector/tablet-5.yml +9273 -0
  82. data/spec/fixtures/detector/tablet-6.yml +4588 -0
  83. data/spec/fixtures/detector/tablet.yml +1621 -2613
  84. data/spec/fixtures/detector/tv-1.yml +2501 -0
  85. data/spec/fixtures/detector/tv.yml +7826 -3114
  86. data/spec/fixtures/detector/unknown.yml +370 -531
  87. data/spec/fixtures/detector/wearable.yml +863 -9
  88. data/spec/fixtures/parser/oss.yml +1350 -21
  89. data/spec/fixtures/parser/vendorfragments.yml +53 -53
  90. metadata +35 -5
data/regexes/oss.yml CHANGED
@@ -6,21 +6,41 @@
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)?|wds)[ ]?(\d+[\.\d]+)'
54
+ - regex: 'Windows Phone;FBSV/(\d+[\.\d]+)'
55
+ name: 'Windows Phone'
56
+ version: '$1'
57
+
58
+ - regex: '(?:Windows Phone (?:OS)?|wds)[ /]?(\d+[\.\d]+)'
35
59
  name: 'Windows Phone'
36
60
  version: '$1'
37
-
38
-
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,18 +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
  ##########
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
+
101
146
  - regex: '[ ]([\d\.]+)\) AppleWebKit.*ROBLOX Android App'
102
147
  name: 'Android'
103
148
  version: '$1'
104
149
 
105
- - regex: '(?:(?:Orca-)?Android|Adr)[ /](?:[a-z]+ )?(\d+[\.\d]*)'
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]*);'
106
163
  name: 'Android'
107
164
  version: '$1'
108
-
109
- - regex: 'Android|Silk-Accelerated=[a-z]{4,5}'
165
+
166
+ - regex: ' Adr |Android|Silk-Accelerated=[a-z]{4,5}'
110
167
  name: 'Android'
111
168
  version: ''
112
169
 
@@ -114,15 +171,26 @@
114
171
  name: 'Android'
115
172
  version: '$1'
116
173
 
117
- - regex: 'FB4A.*FBSV/(\d+[\.\d]*);'
174
+ - regex: 'BeyondPod|AntennaPod|Podkicker|DoggCatcher|Player FM|okhttp|Podcatcher Deluxe|.+K_?Android_?TV_|Sonos/.+\(ACR_'
175
+ name: 'Android'
176
+ version: ''
177
+
178
+ - regex: 'Linux; Andr0id[; ](\d+[\.\d]*)'
118
179
  name: 'Android'
119
180
  version: '$1'
120
181
 
121
- - regex: 'BeyondPod|AntennaPod|Podkicker|DoggCatcher|Player FM|okhttp|Podcatcher Deluxe'
182
+ # Inverted Android
183
+ - regex: 'Linux; diordnA[; ](\d+[\.\d]*)'
122
184
  name: 'Android'
185
+ version: '$1'
186
+
187
+ ##########
188
+ ## Sailfish OS
189
+ ###########
190
+ - regex: 'Sailfish|Jolla'
191
+ name: 'Sailfish OS'
123
192
  version: ''
124
-
125
-
193
+
126
194
  ##########
127
195
  # AmigaOS
128
196
  ##########
@@ -151,13 +219,45 @@
151
219
  name: 'MTK / Nucleus'
152
220
  version: '$1'
153
221
 
222
+ ##########
223
+ # MRE / MAUI Runtime Environment
224
+ ##########
225
+ - regex: 'MRE/(\d+)\.(\d+).*;MAUI'
226
+ name: 'MRE'
227
+ version: '$1.$2'
228
+
154
229
  ##########
155
230
  # Linux
156
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
+
157
252
  - regex: '(Ordissimo|webissimo3)'
158
253
  name: 'Ordissimo'
159
254
  version: ''
160
255
 
256
+ # Fenix (https://fenixlinux.com/)
257
+ - regex: '(?:Win|Sistema )Fenix'
258
+ name: 'Fenix'
259
+ version: ''
260
+
161
261
  - regex: 'TOS; Linux'
162
262
  name: 'TmaxOS'
163
263
  version: ''
@@ -178,16 +278,44 @@
178
278
  name: '$1'
179
279
  version: '$2'
180
280
 
181
- - 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]+))?'
182
286
  name: '$1'
183
287
  version: '$2'
184
288
 
289
+ - regex: 'OS ROSA; Linux'
290
+ name: 'Rosa'
291
+ version: ''
292
+
185
293
  # generic linux match -> end of file
186
294
 
187
295
  ##########
188
296
  # webOS
189
297
  ##########
190
- - regex: '(?:webOS|web0S|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]+))?'
191
319
  name: 'webOS'
192
320
  version: '$1'
193
321
 
@@ -199,15 +327,26 @@
199
327
  name: 'palmOS'
200
328
  version: '$1'
201
329
 
202
-
203
330
  - regex: 'MorphOS(?:[ /](\d+[\.\d]+))?'
204
331
  name: 'MorphOS'
205
332
  version: '$1'
206
333
 
207
-
334
+
208
335
  ##########
209
336
  # Windows
210
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
+
211
350
  - regex: 'CYGWIN_NT-10.0|Windows NT 10.0|Windows 10'
212
351
  name: 'Windows'
213
352
  version: '10'
@@ -264,15 +403,10 @@
264
403
  name: 'Windows'
265
404
  version: '3.1'
266
405
 
267
- - regex: 'FBW.*FBSV/(\d+[\.\d]*);'
268
- name: 'Windows'
269
- version: '$1'
270
-
271
406
  - regex: 'Windows'
272
407
  name: 'Windows'
273
408
  version: ''
274
409
 
275
-
276
410
  ##########
277
411
  # Haiku OS
278
412
  ##########
@@ -280,27 +414,147 @@
280
414
  name: 'Haiku OS'
281
415
  version: ''
282
416
 
283
-
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
+
284
454
  ##########
285
455
  # iOS
286
456
  ##########
287
- - regex: 'CFNetwork/889'
457
+ - regex: 'iPad/([89]|1[012]).(\d+[\.\d]*)'
288
458
  name: 'iOS'
289
- version: '11.1'
459
+ version: '$1.$2'
290
460
 
291
- - regex: 'CFNetwork/887.*(x86_64)'
292
- name: 'Mac'
293
- version: '10.13'
461
+ - regex: 'Pinterest for iOS/.+; (\d(?:[\d\.]+)?)\)$'
462
+ name: 'iOS'
463
+ version: '$1'
294
464
 
295
- - regex: 'CFNetwork/887'
465
+ - regex: 'CFNetwork/.+ Darwin/21.0.0(?!.*x86_64)'
296
466
  name: 'iOS'
297
- version: '11.0'
467
+ version: '15.0'
298
468
 
299
- - regex: 'CFNetwork/811.*(x86_64)'
300
- name: 'Mac'
301
- 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'
302
552
 
303
- - regex: 'CFNetwork/811'
553
+ - regex: 'CFNetwork/887(?!.*x86_64)'
554
+ name: 'iOS'
555
+ version: '11.0'
556
+
557
+ - regex: 'CFNetwork/811(?!.*x86_64)'
304
558
  name: 'iOS'
305
559
  version: '10.3'
306
560
 
@@ -416,11 +670,27 @@
416
670
  name: 'iOS'
417
671
  version: '3.1'
418
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
+
419
689
  - regex: '(?:CPU OS|iPh(?:one)?[ _]OS|iOS)[ _/](\d+(?:[_\.]\d+)*)'
420
690
  name: 'iOS'
421
691
  version: '$1'
422
692
 
423
- - regex: 'FBIOS.*FBSV/(\d+[\.\d]*);'
693
+ - regex: '(?:FBIOS|Messenger(?:Lite)?ForiOS).*FBSV/ ?(\d+[\.\d]*);'
424
694
  name: 'iOS'
425
695
  version: '$1'
426
696
 
@@ -428,39 +698,233 @@
428
698
  name: 'iOS'
429
699
  version: '$1'
430
700
 
431
- - 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)'
432
702
  name: 'iOS'
433
703
  version: ''
434
704
 
435
- - regex: 'iTunes-(iPod|iPad|iPhone)/(?:[\d\.]+)'
705
+ - regex: 'iTunes-(AppleTV|iPod|iPad|iPhone)/(?:[\d\.]+)'
436
706
  name: 'iOS'
437
707
  version: ''
438
708
 
709
+ - regex: 'iOS/Version ([\d\.]+)'
710
+ name: 'iOS'
711
+ version: '$1'
712
+
713
+ - regex: 'Sonos/.+\(ICRU_'
714
+ name: 'iOS'
715
+ version: ''
439
716
 
440
717
  ##########
441
718
  # Mac
442
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'
443
815
 
444
816
  - regex: 'CFNetwork/807'
445
817
  name: 'Mac'
446
818
  version: '10.12'
447
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
+
448
840
  - regex: 'CFNetwork/760'
449
841
  name: 'Mac'
450
842
  version: '10.11'
451
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
+
452
860
  - regex: 'CFNetwork/720'
453
861
  name: 'Mac'
454
862
  version: '10.10'
455
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
+
456
880
  - regex: 'CFNetwork/673'
457
881
  name: 'Mac'
458
882
  version: '10.9'
459
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
+
460
904
  - regex: 'CFNetwork/596'
461
905
  name: 'Mac'
462
906
  version: '10.8'
463
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
+
464
928
  - regex: 'CFNetwork/520'
465
929
  name: 'Mac'
466
930
  version: '10.7'
@@ -485,56 +949,59 @@
485
949
  name: 'Mac'
486
950
  version: '10.2'
487
951
 
488
- - regex: 'Mac[ +]OS[ +]X(?:[ /](?:Version )?(\d+(?:[_\.]\d+)+))?'
952
+ - regex: 'Mac[ +]OS[ +]?X(?:[ /](?:Version )?(\d+(?:[_\.]\d+)+))?'
489
953
  name: 'Mac'
490
954
  version: '$1'
491
-
492
- - regex: 'Mac (\d+(?:[_\.]\d+)+)'
955
+
956
+ - regex: 'Mac (?:OS/)?(\d+(?:[_\.]\d+)+)'
493
957
  name: 'Mac'
494
958
  version: '$1'
495
959
 
496
- - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook'
960
+ - regex: 'macOS/(\d+[\.\d]+)'
961
+ name: 'Mac'
962
+ version: '$1'
963
+
964
+ - regex: 'Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook|macOS|Sonos/.+\(MDCR_'
497
965
  name: 'Mac'
498
966
  version: ''
499
-
500
-
501
-
967
+
968
+ ##########
969
+ # SeewoOS
970
+ ##########
971
+ - regex: 'SeewoOS x86_64 (\d+[\.\d]+)'
972
+ name: 'SeewoOS'
973
+ version: '$1'
974
+
502
975
  ##########
503
976
  # ChromeOS
504
977
  ##########
505
978
  - regex: 'CrOS [a-z0-9_]+ .* Chrome/(\d+[\.\d]+)'
506
979
  name: 'Chrome OS'
507
980
  version: '$1'
508
-
509
-
510
-
981
+
511
982
  ##########
512
983
  # BlackBerry
513
984
  ##########
514
985
  - regex: '(?:BB10;.+Version|Black[Bb]erry[0-9a-z]+|Black[Bb]erry.+Version)/(\d+[\.\d]+)'
515
986
  name: 'BlackBerry OS'
516
987
  version: '$1'
517
-
518
-
988
+
519
989
  - regex: 'RIM Tablet OS (\d+[\.\d]+)'
520
990
  name: 'BlackBerry Tablet OS'
521
991
  version: '$1'
522
-
523
-
992
+
524
993
  - regex: 'RIM Tablet OS|QNX|Play[Bb]ook'
525
994
  name: 'BlackBerry Tablet OS'
526
995
  version: ''
527
-
528
-
996
+
529
997
  - regex: 'BlackBerry'
530
998
  name: 'BlackBerry OS'
531
999
  version: ''
532
-
1000
+
533
1001
  - regex: 'bPod'
534
1002
  name: 'BlackBerry OS'
535
1003
  version: ''
536
1004
 
537
-
538
1005
  ##########
539
1006
  # BeOS
540
1007
  ##########
@@ -542,9 +1009,6 @@
542
1009
  name: 'BeOS'
543
1010
  version: ''
544
1011
 
545
-
546
-
547
-
548
1012
  ##########
549
1013
  # Symbian
550
1014
  ##########
@@ -552,48 +1016,38 @@
552
1016
  name: 'Symbian^3'
553
1017
  version: 'Anna'
554
1018
 
555
-
556
1019
  - regex: 'Symbian/3.+NokiaBrowser/7\.4'
557
1020
  name: 'Symbian^3'
558
1021
  version: 'Belle'
559
1022
 
560
-
561
1023
  - regex: 'Symbian/3'
562
1024
  name: 'Symbian^3'
563
1025
  version: ''
564
1026
 
565
-
566
1027
  - regex: '(?:Series ?60|SymbOS|S60)(?:[ /]?(\d+[\.\d]+|V\d+))?'
567
1028
  name: 'Symbian OS Series 60'
568
1029
  version: '$1'
569
1030
 
570
-
571
1031
  - regex: 'Series40'
572
1032
  name: 'Symbian OS Series 40'
573
1033
  version: ''
574
1034
 
575
-
576
1035
  - regex: 'SymbianOS/(\d+[\.\d]+)'
577
1036
  name: 'Symbian OS'
578
1037
  version: '$1'
579
-
580
-
1038
+
581
1039
  - regex: 'MeeGo|WeTab'
582
1040
  name: 'MeeGo'
583
1041
  version: ''
584
-
585
-
1042
+
586
1043
  - regex: 'Symbian(?: OS)?|SymbOS'
587
1044
  name: 'Symbian OS'
588
1045
  version: ''
589
-
590
-
1046
+
591
1047
  - regex: 'Nokia'
592
1048
  name: 'Symbian'
593
1049
  version: ''
594
1050
 
595
-
596
-
597
1051
  ##########
598
1052
  # Firefox OS
599
1053
  ##########
@@ -601,7 +1055,6 @@
601
1055
  name: 'Firefox OS'
602
1056
  version: ''
603
1057
 
604
-
605
1058
  ##########
606
1059
  # RISC OS
607
1060
  ##########
@@ -609,7 +1062,6 @@
609
1062
  name: 'RISC OS'
610
1063
  version: '$1'
611
1064
 
612
-
613
1065
  ##########
614
1066
  # Inferno
615
1067
  ##########
@@ -617,50 +1069,41 @@
617
1069
  name: 'Inferno'
618
1070
  version: '$1'
619
1071
 
620
-
621
1072
  ##########
622
1073
  # Bada
623
1074
  ##########
624
- - regex: 'bada(?:[ /](\d+[\.\d]+))'
1075
+ - regex: 'bada(?:[ /](\d+[\.\d]+))?'
625
1076
  name: 'Bada'
626
1077
  version: '$1'
627
-
628
-
629
- - regex: 'bada'
630
- name: 'Bada'
631
- version: ''
632
1078
 
1079
+ ##########
1080
+ # REX
1081
+ ##########
1082
+ - regex: 'REX; U;'
1083
+ name: 'REX'
1084
+ version: ''
633
1085
 
634
1086
  ##########
635
1087
  # Brew
636
1088
  ##########
637
- - regex: '(?:Brew MP|BREW|BMP)(?:[ /](\d+[\.\d]+))'
1089
+ - regex: '(?:Brew(?!-Applet)(?: MP)?|BMP)(?:[ /](\d+[\.\d]+))?'
638
1090
  name: 'Brew'
639
1091
  version: '$1'
640
1092
 
641
-
642
- - regex: 'Brew MP|BREW|BMP'
643
- name: 'Brew'
644
- version: ''
645
-
646
-
647
1093
  ##########
648
1094
  # Web TV
649
1095
  ##########
650
1096
  - regex: 'GoogleTV(?:[ /](\d+[\.\d]+))?'
651
1097
  name: 'Google TV'
652
1098
  version: '$1'
653
-
654
-
1099
+
655
1100
  - regex: 'AppleTV(?:/?(\d+[\.\d]+))?'
656
1101
  name: 'Apple TV'
657
1102
  version: '$1'
658
-
659
-
1103
+
660
1104
  - regex: 'WebTV/(\d+[\.\d]+)'
661
1105
  name: 'WebTV'
662
1106
  version: '$1'
663
-
664
1107
 
665
1108
  ##########
666
1109
  # Remix OS
@@ -677,61 +1120,49 @@
677
1120
  name: 'Remix OS'
678
1121
  version: ''
679
1122
 
680
-
681
1123
  ##########
682
1124
  # Unix
683
1125
  ##########
684
1126
  - regex: '(?:SunOS|Solaris)(?:[/ ](\d+[\.\d]+))?'
685
1127
  name: 'Solaris'
686
1128
  version: '$1'
687
-
688
-
1129
+
689
1130
  - regex: 'AIX(?:[/ ]?(\d+[\.\d]+))?'
690
1131
  name: 'AIX'
691
1132
  version: '$1'
692
-
693
-
1133
+
694
1134
  - regex: 'HP-UX(?:[/ ]?(\d+[\.\d]+))?'
695
1135
  name: 'HP-UX'
696
1136
  version: '$1'
697
-
698
-
1137
+
699
1138
  - regex: 'FreeBSD(?:[/ ]?(\d+[\.\d]+))?'
700
1139
  name: 'FreeBSD'
701
1140
  version: '$1'
702
-
703
-
1141
+
704
1142
  - regex: 'NetBSD(?:[/ ]?(\d+[\.\d]+))?'
705
1143
  name: 'NetBSD'
706
1144
  version: '$1'
707
-
708
-
1145
+
709
1146
  - regex: 'OpenBSD(?:[/ ]?(\d+[\.\d]+))?'
710
1147
  name: 'OpenBSD'
711
1148
  version: '$1'
712
-
713
-
1149
+
714
1150
  - regex: 'DragonFly(?:[/ ]?(\d+[\.\d]+))?'
715
1151
  name: 'DragonFly'
716
1152
  version: '$1'
717
-
718
-
1153
+
719
1154
  - regex: 'Syllable(?:[/ ]?(\d+[\.\d]+))?'
720
1155
  name: 'Syllable'
721
1156
  version: '$1'
722
-
723
-
1157
+
724
1158
  - regex: 'IRIX(?:;64)?(?:[/ ]?(\d+[\.\d]+))'
725
1159
  name: 'IRIX'
726
1160
  version: '$1'
727
-
728
-
1161
+
729
1162
  - regex: 'OSF1(?:[/ ]?v?(\d+[\.\d]+))?'
730
1163
  name: 'OSF1'
731
1164
  version: '$1'
732
-
733
-
734
-
1165
+
735
1166
  ##########
736
1167
  # Gaming Console
737
1168
  ##########
@@ -739,45 +1170,42 @@
739
1170
  name: 'Nintendo'
740
1171
  version: '$1'
741
1172
 
742
- - regex: 'PlayStation ?([3|4])'
1173
+ - regex: 'PlayStation ?([34])'
743
1174
  name: 'PlayStation'
744
1175
  version: '$1'
745
-
746
-
1176
+
747
1177
  - regex: 'Xbox|KIN\.(?:One|Two)'
748
1178
  name: 'Xbox'
749
1179
  version: '360'
750
-
751
-
752
-
1180
+
753
1181
  ##########
754
1182
  # Mobile Gaming Console
755
1183
  ##########
756
1184
  - regex: 'Nitro|Nintendo ([3]?DS[i]?)'
757
1185
  name: 'Nintendo Mobile'
758
1186
  version: '$1'
759
-
760
-
1187
+
761
1188
  - regex: 'PlayStation ((?:Portable|Vita))'
762
1189
  name: 'PlayStation Portable'
763
1190
  version: '$1'
764
-
765
-
766
-
1191
+
767
1192
  ##########
768
1193
  # IBM
769
1194
  ##########
770
1195
  - regex: 'OS/2'
771
1196
  name: 'OS/2'
772
1197
  version: ''
773
-
774
-
775
1198
 
776
1199
  ###########
777
1200
  # Linux (Generic)
778
1201
  ###########
779
- - regex: 'Linux(?:OS)?[^a-z]'
1202
+ - regex: 'Linux(?:OS)?[^a-z]|Cinnamon/(?:\d+[\.\d]+)'
780
1203
  name: 'GNU/Linux'
781
1204
  version: ''
782
1205
 
783
-
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: ''