function _color_rewrite_stylesheet in Drupal 5
Same name and namespace in other branches
- 8 core/modules/color/color.module \_color_rewrite_stylesheet()
- 6 modules/color/color.module \_color_rewrite_stylesheet()
- 7 modules/color/color.module \_color_rewrite_stylesheet()
- 9 core/modules/color/color.module \_color_rewrite_stylesheet()
Rewrite the stylesheet to match the colors in the palette.
1 call to _color_rewrite_stylesheet()
- color_scheme_form_submit in modules/
color/ color.module - Submit handler for color change form.
File
- modules/
color/ color.module, line 288
Code
function _color_rewrite_stylesheet($theme, &$info, &$paths, $palette) {
// Load stylesheet
$style = file_get_contents($paths['source'] . 'style.css');
// Prepare color conversion table
$conversion = $palette;
unset($conversion['base']);
foreach ($conversion as $k => $v) {
$conversion[$k] = drupal_strtolower($v);
}
$default = color_get_palette($theme, true);
// Split off the "Don't touch" section of the stylesheet.
list($style, $fixed) = explode("Color Module: Don't touch", $style);
// Look for @import commands and insert the referenced stylesheets.
$cwd = getcwd();
chdir(drupal_get_path('theme', $theme));
$style = preg_replace_callback('/@import\\s*["\']([^"\']+)["\'];/', '_color_import_stylesheet', $style);
chdir($cwd);
// Find all colors in the stylesheet and the chunks in between.
$style = preg_split('/(#[0-9a-f]{6}|#[0-9a-f]{3})/i', $style, -1, PREG_SPLIT_DELIM_CAPTURE);
$is_color = false;
$output = '';
$base = 'base';
// Iterate over all parts
foreach ($style as $chunk) {
if ($is_color) {
$chunk = drupal_strtolower($chunk);
// Check if this is one of the colors in the default palette
if ($key = array_search($chunk, $default)) {
$chunk = $conversion[$key];
}
else {
$chunk = _color_shift($palette[$base], $default[$base], $chunk, $info['blend_target']);
}
}
else {
// Determine the most suitable base color for the next color.
// 'a' declarations. Use link.
if (preg_match('@[^a-z0-9_-](a)[^a-z0-9_-][^/{]*{[^{]+$@i', $chunk)) {
$base = 'link';
}
else {
if (preg_match('/(?<!-)color[^{:]*:[^{#]*$/i', $chunk)) {
$base = 'text';
}
else {
$base = 'base';
}
}
}
$output .= $chunk;
$is_color = !$is_color;
}
// Append fixed colors segment
$output .= $fixed;
// Replace paths to images
foreach ($paths['map'] as $before => $after) {
$output = str_replace($before, $after, $output);
}
// Write new stylesheet
$file = fopen($paths['stylesheet'], 'w+');
fwrite($file, $output);
fclose($file);
$paths['files'][] = $paths['stylesheet'];
// Set standard file permissions for webserver-generated files
@chmod($paths['stylesheet'], 0664);
}