csscomb::resort_properties PHP Method

resort_properties() public method

Функция выполняет сортировку свойств
public resort_properties ( $prop )
    function resort_properties($prop)
    {
        $resorted = $undefined = array();
        foreach ($prop as $k => $val) {
            $index = null;
            // Дефолтное значение индекса порядка для свойства. Если свойство не знакомо, то index так и останется null.
            preg_match_all('@\\s*?(.*?[^:]:).*@ism', $val, $matches, PREG_SET_ORDER);
            // Решаем проблему с пробелами перед :
            $property = preg_replace('@\\s*:@ism', ':', trim($matches[0][1]));
            if (is_array($this->sort_order[0])) {
                // Если порядок сортировки разбит на группы свойств
                foreach ($this->sort_order as $pos => $key) {
                    // для каждой группы свойств
                    foreach ($this->sort_order[$pos] as $p => $k) {
                        // для каждого свойства
                        if (strpos(' ' . trim($property), ' ' . $k . ':') !== FALSE) {
                            $through_number = $this->get_through_number($k);
                            // определяем "сквозной" порядковый номер
                            if ($through_number !== false) {
                                $index = $through_number;
                            }
                        }
                    }
                }
            } else {
                foreach ($this->sort_order as $pos => $key) {
                    if (strpos(' ' . trim($property), ' ' . $key . ':') !== FALSE) {
                        $index = $pos;
                    }
                }
            }
            if ($index === null or strpos($val, 'exp')) {
                $undefined[] = $val;
            } else {
                // Добавляет к уже существующей записи с определенном порядковым номером еще одну запись с таким же порядковым номером
                // либо создает новую запись если с таким порядковым номером ничего еще не встречалось
                if (isset($resorted[$index])) {
                    $resorted[$index] .= $val;
                } else {
                    $resorted[$index] = $val;
                }
            }
        }
        ksort($resorted);
        if (is_array($this->sort_order[0])) {
            if (count($resorted) > 0) {
                // Если свойства разделены на группы
                $resorted = $this->separate_property_group($resorted);
            }
            if (count($undefined) > 0 and substr_count(substr($undefined[0], 0, 2), "\n\n") === 0) {
                $undefined[0] = "\n" . $undefined[0];
            }
        }
        $resorted = array_merge($resorted, $undefined);
        // добавляем в конец нераспознанное
        return $resorted;
    }