#!/usr/bin/env php
<?php
# Converts data from https://github.com/github/linguist to GitList's own format
set_time_limit(0);
require __DIR__ . '/../vendor/autoload.php';
// Fetch latest github/linguist database
$database = file_get_contents('https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml');
// Remove document identifier so Symfony is happy
$database = str_replace('---', '', $database);
$languages = Symfony\Component\Yaml\Yaml::parse($database);
$languageMap = [];
foreach ($languages as $name => $language) {
if (!isset($language['extensions'])) {
continue;
}
foreach ($language['extensions'] as $extension) {
$extension = substr($extension, 1);
$languageMap[$extension] = [
'name' => $name,
'group' => $language['group'] ?? null,
'color' => $language['color'] ?? null,
'ace' => $language['ace_mode'] ?? null,
'cm' => $language['codemirror_mode'] ?? null,
];
}
}
$sourceFile = __DIR__ . '/../src/SCM/Language.php';
$template = file_get_contents($sourceFile);
$blockStart = 'const MAP = [';
$blockEnd = '];';
$blockStartPos = strpos($template, $blockStart) + strlen($blockStart);
$blockEndPos = strpos($template, $blockEnd);
$languageMapSource = var_export($languageMap, true);
$languageMapSource = substr($languageMapSource, 7);
$languageMapSource = substr($languageMapSource, 0, -1);
$updatedSource = substr_replace($template, $languageMapSource, $blockStartPos);
$updatedSource .= substr($template, $blockEndPos);
file_put_contents($sourceFile, $updatedSource);