forked from leafo/lessphp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstart.php
128 lines (106 loc) · 2.92 KB
/
start.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
require 'lessc.inc.php';
$cacheconf = 'less-config';
$newConfig = Config::get('less');
$force_recompile = false;
// get cache if exists, else store config in cache for next time
$config = Cache::remember($cacheconf,$newConfig,60*24);
// see if the config's are different, if they are set recompile to true
if ($config !== $newConfig) {
// cache this updated cache
Cache::forever($cacheconf,$newConfig);
// set the force recompile option to be true for this run
$force_recompile = true;
$config = $newConfig;
}
$imports = function($file) use (&$imports)
{
$paths = array();
preg_match_all('/@import\s+"(?P<imports>[^";]+)"/ism', File::get($file), $matches);
foreach ($matches['imports'] as $import)
{
$path = dirname($file) . '/' . $import;
if (File::exists($path) || File::exists($path .= '.less'))
{
$paths[] = $path;
$paths = array_merge($paths, $imports($path));
}
}
return $paths;
};
$compile = function($input_file, $output_file, $force_recompile=false) use ($imports)
{
try
{
$config = Config::get('less');
// $cacheconf = 'less-config';
$cachename = 'less-'.md5($output_file);
$recompile = false;
if (Cache::has($cachename)) {
$cache = Cache::get($cachename);
} else {
$cache = $input_file;
}
$less = new lessc;
// set the formatter if available
if (isset($config['formatter'])) {
$less->setFormatter($config['formatter']);
}
// set preserve flag if set
if (isset($config['preserveComments'])) {
$less->setPreserveComments($config['preserveComments']);
}
// set variables if available
if (isset($config['variables'])) {
$less->setVariables($config['variables']);
}
// set the recompile flag if available
if (isset($config['recompile'])) {
$recompile = $config['recompile'];
}
// handle force recompile
if ($force_recompile) $recompile = true;
// actually compile the less
if ($recompile==true) {
$newCache = $less->cachedCompile($cache,true);
} else {
$newCache = $less->cachedCompile($cache);
}
// cache output and write file
if (!is_array($cache) || $newCache["updated"] > $cache["updated"] || !file_exists($output_file) || $recompile) {
Cache::forever($cachename,$newCache);
File::put($output_file, $newCache['compiled'] );
}
}
catch (Exception $ex)
{
exit('lessc fatal error:<br />' . $ex->getMessage());
}
};
if (isset($config['directories']))
{
foreach ($config['directories'] as $less_dir => $css_dir)
{
$less_dir = rtrim($less_dir, '/') . '/';
foreach (glob($less_dir . '*.[Ll][Ee][Ss][Ss]') as $less)
{
$css = rtrim($css_dir, '/') . '/' . basename($less, '.less') . '.css';
$compile($less, $css, $force_recompile);
}
}
}
if (isset($config['files']))
{
foreach ($config['files'] as $less => $css)
{
$compile($less, $css, $force_recompile);
}
}
if (isset($config['snippets']))
{
$less = new lessc();
foreach ($config['snippets'] as $snippet => $css)
{
File::put($css, $less->parse($snippet));
}
}