Version 1
[yaffs-website] / web / modules / contrib / advagg / advagg_mod / advagg_mod.advagg.inc
diff --git a/web/modules/contrib/advagg/advagg_mod/advagg_mod.advagg.inc b/web/modules/contrib/advagg/advagg_mod/advagg_mod.advagg.inc
new file mode 100644 (file)
index 0000000..bf0eeca
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @file
+ * Advanced CSS/JS aggregation modifier module.
+ */
+
+/**
+ * Implements hook_advagg_css_contents_alter().
+ *
+ * Used to run strings inside of quotes of the content attribute through the t
+ * function.
+ *
+ * @see \Drupal\Core\Asset\CssOptimizer::processCss
+ */
+function advagg_mod_advagg_css_contents_alter(&$data, $css_asset) {
+  $config = \Drupal::config('advagg_mod.settings');
+  if (!$config->get('css_translate')) {
+    return;
+  }
+
+  // Code taken from \Drupal\Core\Asset\CssOptimizer::processCss().
+  // Regexp to match double quoted strings.
+  $double_quot = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"';
+  // Regexp to match single quoted strings.
+  $single_quot = "'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'";
+  // Extract all content inside of quotes.
+  $css_content_pattern = "/content:.*?($double_quot|$single_quot|(?:\\;|\\})).*?(?:\\;|\\})/";
+
+  // Run strings inside of quotes of the content attribute through the t
+  // function.
+  $data = preg_replace_callback($css_content_pattern, 'advagg_mod_advagg_css_content_t_replace_callback', $data);
+}
+
+/**
+ * Run preg matches through the t() function.
+ *
+ * @param array $matches
+ *   Array of matches from preg_replace_callback().
+ *
+ * @return string
+ *   Replaced String.
+ */
+function advagg_mod_advagg_css_content_t_replace_callback(array $matches) {
+  // Skip if equal to ; or }.
+  if ($matches[1] === ';' || $matches[1] === '}') {
+    return $matches[0];
+  }
+  // Remove quotes for t function.
+  $before = substr($matches[1], 1, -1);
+  // Only run if it contains A-Za-z.
+  if (!preg_match('/[A-Za-z]/', $before)) {
+    return $matches[0];
+  }
+  // Only run if it contains characters other than unicode.
+  $css_unicode_pattern = '/\\\\[0-9a-fA-F]{1,6}(?:\\r\\n|[ \\t\\r\\n\\f])?/';
+  $unicode_removed = preg_replace($css_unicode_pattern, '', $before);
+  if (empty($unicode_removed)) {
+    return $matches[0];
+  }
+
+  // Run t function.
+  // @ignore sniffer_semantics_functioncall_notliteralstring
+  $after = (string) t($before);
+  // Put back.
+  return str_replace($before, $after, $matches[0]);
+}