/** * Finds @groups within the css and returns * an array with the values, and groups. * * @author Anthony Short * @param $group string * @param $css string */ public function find_at_group($group, $remove = true) { $found = array(); $regex = "/\n\t\t\t# Group name\n\t\t\t@{$group}\n\t\t\t\n\t\t\t# Flag\n\t\t\t(?:\n\t\t\t\t\\(( [^)]*? )\\)\n\t\t\t)?\n\t\t\t\n\t\t\t[^{]*?\n\n\t\t\t(\n\t\t\t\t([0-9a-zA-Z\\_\\-\\@*&]*?)\\s*\n\t\t\t\t\\{\t\n\t\t\t\t\t( (?: [^{}]+ | (?2) )*)\n\t\t\t\t\\}\n\t\t\t)\n\n\t\t/ixs"; if (preg_match_all($regex, $this->string, $matches)) { $found['groups'] = $matches[0]; $found['flag'] = $matches[1]; $found['content'] = $matches[4]; foreach ($matches[4] as $key => $value) { // Remove comments to prevent breaking it $value = $this->remove_comments($value); foreach (explode(";", substr($value, 0, -1)) as $value) { // Encode any colons inside quotations if (preg_match_all('/[\'"](.*?\\:.*?)[\'"]/', $value, $m)) { $value = str_replace($m[0][0], str_replace(':', '#COLON#', $m[0][0]), $value); } $value = explode(":", $value); // Make sure it's set if (isset($value[1])) { $found['values'][trim($value[0])] = str_replace('#COLON#', ':', Scaffold::unquote($value[1])); } } } // Remove the found @ groups if ($remove === true) { $this->string = str_replace($found['groups'], array(), $this->string); } return $found; } return false; }