device_detector 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
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: ''