[Mime] added freedesktop as a source for mime types

This commit is contained in:
Fabien Potencier 2019-01-16 08:51:37 +01:00
parent 74ca91deaa
commit 5268389191
3 changed files with 1553 additions and 296 deletions

File diff suppressed because it is too large Load Diff

View File

@ -21,6 +21,30 @@ foreach (explode("\n", $data) as $line) {
$new[$mimeType] = $extensions; $new[$mimeType] = $extensions;
} }
$xml = simplexml_load_string(file_get_contents('https://raw.github.com/minad/mimemagic/master/script/freedesktop.org.xml'));
foreach ($xml as $node) {
$exts = [];
foreach ($node->glob as $glob) {
$pattern = (string) $glob['pattern'];
if ('*' != $pattern[0] || '.' != $pattern[1]) {
continue;
}
$exts[] = substr($pattern, 2);
}
if (!$exts) {
continue;
}
$mt = strtolower((string) $node['type']);
$new[$mt] = array_merge($new[$mt] ?? [], $exts);
foreach ($node->alias as $alias) {
$mt = strtolower((string) $alias['type']);
$new[$mt] = array_merge($new[$mt] ?? [], $exts);
}
}
// load current map // load current map
$data = file_get_contents($output = __DIR__.'/../../MimeTypes.php'); $data = file_get_contents($output = __DIR__.'/../../MimeTypes.php');
$current = []; $current = [];
@ -44,7 +68,7 @@ ksort($map);
$data = $pre; $data = $pre;
foreach ($map as $mimeType => $exts) { foreach ($map as $mimeType => $exts) {
$data .= sprintf(" '%s' => ['%s'],\n", $mimeType, implode("', '", $exts)); $data .= sprintf(" '%s' => ['%s'],\n", $mimeType, implode("', '", array_unique($exts)));
} }
$data .= $post; $data .= $post;
@ -64,7 +88,7 @@ foreach (explode("\n", $data) as $line) {
if (1 === $state) { if (1 === $state) {
$state = 2; $state = 2;
foreach ($exts as $ext => $mimeTypes) { foreach ($exts as $ext => $mimeTypes) {
$updated .= sprintf(" '%s' => ['%s'],\n", $ext, implode("', '", $mimeTypes)); $updated .= sprintf(" '%s' => ['%s'],\n", $ext, implode("', '", array_unique($mimeTypes)));
} }
} }
$updated .= $line."\n"; $updated .= $line."\n";
@ -73,6 +97,8 @@ foreach (explode("\n", $data) as $line) {
$state = 1; $state = 1;
} }
file_put_contents($output, $updated); $updated = preg_replace('{Updated from upstream on .+?\.}', 'Updated from upstream on '.date('Y-m-d'), $updated, -1);
file_put_contents($output, rtrim($updated, "\n")."\n");
echo "Done.\n"; echo "Done.\n";

View File

@ -53,8 +53,8 @@ class MimeTypesTest extends AbstractMimeTypeGuesserTest
{ {
$mt = new MimeTypes(); $mt = new MimeTypes();
$this->assertSame(['application/mbox'], $mt->getMimeTypes('mbox')); $this->assertSame(['application/mbox'], $mt->getMimeTypes('mbox'));
$this->assertSame(['application/postscript'], $mt->getMimeTypes('ai')); $this->assertContains('application/postscript', $mt->getMimeTypes('ai'));
$this->assertSame(['application/postscript'], $mt->getMimeTypes('ps')); $this->assertContains('application/postscript', $mt->getMimeTypes('ps'));
$this->assertSame([], $mt->getMimeTypes('symfony')); $this->assertSame([], $mt->getMimeTypes('symfony'));
} }
} }