diff --git a/README.md b/README.md
index cdcce66..574ee18 100644
--- a/README.md
+++ b/README.md
@@ -3,9 +3,16 @@
## About
Plugin based on CSScomb algorithm.
-The algorithm of CSScomb simulates web-technologists actions upon working with CSS-code to the limit. Usually to re-order code you move lines over each other considering comments in the code, multilines records of property values, khaki and everything that could be found in the real file. CSScomb reproduces these actions for you. This means that the parser "thinks" as a person editing the text, not as a blind robot parsing CSS.
+The algorithm of CSScomb simulates web-technologists actions upon working with CSS-code to the limit. Usually to re-order code you move lines over each other considering comments in the code, multilines records of property values, hacks and everything that could be found in the real file. CSScomb reproduces these actions for you. This means that the parser "thinks" as a person editing the text, not as a blind robot parsing CSS.
+
+For more info, online demo and tests see [csscomb.com](http://csscomb.com/)
+
+
+## The Requirements
+
+CSScomb is written in pure PHP, without any external libraries or dependencies.
+See details at [wiki](https://github.com/miripiruni/CSScomb/wiki/Requirements).
-For more info, online demo and tests see [http://csscomb.com/](csscomb.com)
## Installation
@@ -13,16 +20,23 @@ For more info, online demo and tests see [http://csscomb.com/](csscomb.com)
```
cd ~/.vim/bundle
-git clone https://github.com/miripiruni/csscomb-for-vim.git
+git clone https://github.com/miripiruni/CSScomb-for-Vim.git
```
### With Vundle
Add this to .vimrc:
```
-Bundle 'git://github.com/miripiruni/csscomb-for-vim.git'
+Bundle 'git://github.com/miripiruni/CSScomb-for-Vim.git'
+```
+
+### Manual without plugins manager
+```
+git clone https://github.com/miripiruni/CSScomb-for-Vim.git csscomb
+cp -r csscomb/plugin/* ~/.vim/plugin/
```
-### Manual
+## Usage
+Vim command:
```
-git clone https://github.com/miripiruni/csscomb-for-vim.git
+:CSScomb
```
diff --git a/doc/csscomb.txt b/doc/csscomb.txt
new file mode 100644
index 0000000..289ffba
--- /dev/null
+++ b/doc/csscomb.txt
@@ -0,0 +1,71 @@
+*csscomb.txt* CSScomb for Vim
+
+Vim plugin author: Aleksandr Batsuev
+CSScomb author: Vyacheslav Oliyancuk
+WebSite: http://csscomb.com
+Repository: http://github.com/miripiruni/CSScomb-for-Vim
+
+==============================================================================
+CONTENTS *csscomb-contents*
+
+About |csscomb-about|
+Custom sort order |csscomb-custom-sort-order|
+Install |csscomb-install|
+Usage |csscomb-usage|
+
+==============================================================================
+ABOUT *csscomb-about*
+
+The algorithm of CSScomb simulates web-technologist's actions upon working
+with CSS-code to the limit. Usually to re-order code you move lines over each
+other considering comments in the code, multilines records of property values,
+hacks and everything that could be found in the real file. CSScomb reproduces
+these actions for you. This means that the parser "thinks" as a person editing
+the text, not as a blind robot parsing CSS.
+
+For more info, online demo and tests see http://csscomb.com
+
+What can CSScomb do?
+
+* Sorts CSS-properties within the selectors according to the settings.
+
+* Treats the initial formatting of style sheets carefully.
+
+* Sorts commented properties as if they are not commented.
+
+* Moves down unknown properties in the order they are met within the selector.
+ E.g.: he\ight: 100% and similar will be taken as the unknown ones.
+
+* Successfully parses @media ... {...} and any other constructions with @.
+
+* Successfully parses expressions and then moves them to the end of the
+ properties in the order they are met within the framework of properties of
+ one selector.
+
+==============================================================================
+CUSTOM SORT ORDER *csscomb-custom-sort-order*
+
+For adjusting plugins use one-dimensional and two-dimensional JSON arrays.
+In case of two-dimensional arrays the properties will be divided into groups
+with an empty line. In plugins you should pick open file csscomb.php
+
+==============================================================================
+INSTALL *csscomb-install*
+
+With Pathogen
+ cd ~/.vim/bundle
+ git clone https://github.com/miripiruni/csscomb-for-vim.git
+
+With Vundle
+ Add to .vimrc:
+ Bundle 'git://github.com/miripiruni/csscomb-for-vim.git'
+
+Manual without plugins manager
+ git clone https://github.com/miripiruni/CSScomb-for-Vim.git csscomb
+ cp -r csscomb/plugin/* ~/.vim/plugin/
+
+==============================================================================
+USAGE *csscomb-usage*
+
+For CSS resort you can use ':CSScomb' command.
+Also you can select a part of CSS file and type ':CSScomb'.
diff --git a/plugin/csscomb.vim b/plugin/csscomb.vim
index ebe81c5..2592300 100644
--- a/plugin/csscomb.vim
+++ b/plugin/csscomb.vim
@@ -4,13 +4,13 @@
" WebPage: https://github.com/batsuev/csscomb-vim
" License: MIT
-let g:CSSCombPluginDir = fnamemodify(expand(""), ":h")
+let g:CSScombPluginDir = fnamemodify(expand(""), ":h")
-function! g:CSSComb(count, line1, line2)
+function! g:CSScomb(count, line1, line2)
let content = join(getline(a:line1, a:line2), "\n")
- let res = system("php ".fnameescape(g:CSSCombPluginDir."/exec.php"), content)
+ let res = system("php ".fnameescape(g:CSScombPluginDir."/exec.php"), content)
let lines = split(res, "\n")
call setline(a:line1, lines)
endfunction
-command! -nargs=? -range=% CSSComb :call g:CSSComb(, , , )
+command! -nargs=? -range=% CSScomb :call g:CSScomb(, , , )
diff --git a/plugin/lib/csscomb.php b/plugin/lib/csscomb.php
index d7dde5c..d0a7cbb 100644
--- a/plugin/lib/csscomb.php
+++ b/plugin/lib/csscomb.php
@@ -1,692 +1,836 @@
+ * @license MIT
+ * @web http://csscomb.com/
*/
-
+
+error_reporting(E_ALL);
+
class csscomb{
var $sort_order = Array(),
$code = Array(
- 'original' => null, // оригинальный код, без изменений, то, что пришло на вход
- 'edited' => null, // код, который может меняться в процессе выполнения алгоритма пересортировки
- 'resorted' => null, // конечный, пересортированный CSS-код
+ // оригинальный код, без изменений, то, что пришло на вход
+ 'original' => null,
+ // код, который может меняться в процессе выполнения алгоритма пересортировки
+ 'edited' => null,
// TODO: избавиться от resorted
- 'expressions' => null, // если найдены expression, то эта переменная станет массивом, ячейки которого будут содержать код каждого найденного expression
- 'datauri' => null, // если найдены data uri, то эта переменная станет массивом...
- 'hacks' => null, // если найдены CSS-хаки мешающие парсить, то эта переменная станет массивом...
- 'braces' => null, // если найдены комментарии содержащие { или } мешающие парсить, то эта переменная станет массивом.
- 'entities' => null // если найдены entities мешающие парсить, то эта переменная станет массивом.
+ // конечный, пересортированный CSS-код
+ 'resorted' => null,
+ // если найдены expression, то эта переменная станет массивом, ячейки которого
+ // будут содержать код каждого найденного expression
+ 'expressions' => null,
+ // если найдены data uri, то эта переменная станет массивом...
+ 'datauri' => null,
+ // если найдены интерполированные переменные, то эта переменная станет массивом
+ 'interpolations' => null,
+ // Игнорируем комментарии
+ 'comments' => null,
+ 'inlinecomments' => null,
+ 'magicComments' => null,
+ // если найдены CSS-хаки мешающие парсить, то эта переменная станет массивом...
+ 'hacks' => null,
+ // если найдены комментарии содержащие { или } мешающие парсить,
+ // то эта переменная станет массивом.
+ 'braces' => null,
+ // если найдены entities мешающие парсить, то эта переменная станет массивом.
+ 'entities' => null
),
- /*
- * В переменной $mode лежит режим работы с CSS-кодом.
- * Возможны следующие значения:
- * css-file - только CSS-код
- * style-attribute - найден атрибут style="..."
- * properties - не найдено фигурных скобок, зато присутствуют точки с запятой и двоеточия.
- *
- */
+ // В переменной $mode лежит режим работы с CSS-кодом. Возможны следующие значения:
+ // css-file - только CSS-код
+ // style-attribute - найден атрибут style="..."
+ // properties - не найдено фигурных скобок, зато присутствуют точки с запятой и двоеточия.
$mode = 'properties',
-
- $default_sort_order = '
-[
- "position",
- "top",
- "right",
- "bottom",
- "left",
- "z-index",
- "float",
- "clear",
- "display",
- "visibility",
- "overflow",
- "overflow-x",
- "overflow-y",
- "overflow-style",
- "clip",
- "box-sizing",
- "margin",
- "margin-top",
- "margin-right",
- "margin-bottom",
- "margin-left",
- "padding",
- "padding-top",
- "padding-right",
- "padding-bottom",
- "padding-left",
- "width",
- "height",
- "max-width",
- "max-height",
- "min-width",
- "min-height",
- "outline",
- "outline-width",
- "outline-style",
- "outline-color",
- "outline-offset",
- "border",
- "border-collapse",
- "border-color",
- "border-style",
- "border-width",
- "border-top",
- "border-right",
- "border-bottom",
- "border-left",
- "-webkit-border-radius",
- "-khtml-border-radius",
- "-moz-border-radius",
- "border-radius",
- "-webkit-border-top-right-radius",
- "-khtml-border-top-right-radius",
- "-moz-border-top-right-radius",
- "-moz-border-radius-topright",
- "border-top-right-radius",
- "-webkit-border-bottom-right-radius",
- "-khtml-border-bottom-right-radius",
- "-moz-border-bottom-right-radius",
- "-moz-border-radius-bottomright",
- "border-bottom-right-radius",
- "-webkit-border-bottom-left-radius",
- "-khtml-border-bottom-left-radius",
- "-moz-border-bottom-left-radius",
- "-moz-border-radius-bottomleft",
- "border-bottom-left-radius",
- "-webkit-border-top-left-radius",
- "-khtml-border-top-left-radius",
- "-moz-border-top-left-radius",
- "-moz-border-radius-topleft",
- "border-top-left-radius",
- "-webkit-border-image",
- "-moz-border-image",
- "-o-border-image",
- "border-image",
- "-webkit-border-image-source",
- "-moz-border-image-source",
- "-o-border-image-source",
- "border-image-source",
- "-webkit-border-image-slice",
- "-moz-border-image-slice",
- "-o-border-image-slice",
- "border-image-slice",
- "-webkit-border-image-width",
- "-moz-border-image-width",
- "-o-border-image-width",
- "border-image-width",
- "-webkit-border-image-outset",
- "-moz-border-image-outset",
- "-o-border-image-outset",
- "border-image-outset",
- "-webkit-border-image-repeat",
- "-moz-border-image-repeat",
- "-o-border-image-repeat",
- "border-image-repeat",
- "-webkit-border-top-image",
- "-moz-border-top-image",
- "-o-border-top-image",
- "border-top-image",
- "-webkit-border-right-image",
- "-moz-border-right-image",
- "-o-border-right-image",
- "border-right-image",
- "-webkit-border-bottom-image",
- "-moz-border-bottom-image",
- "-o-border-bottom-image",
- "border-bottom-image",
- "-webkit-border-left-image",
- "-moz-border-left-image",
- "-o-border-left-image",
- "border-left-image",
- "-webkit-border-corner-image",
- "-moz-border-corner-image",
- "-o-border-corner-image",
- "border-corner-image",
- "-webkit-border-top-left-image",
- "-moz-border-top-left-image",
- "-o-border-top-left-image",
- "border-top-left-image",
- "-webkit-border-top-right-image",
- "-moz-border-top-right-image",
- "-o-border-top-right-image",
- "border-top-right-image",
- "-webkit-border-bottom-right-image",
- "-moz-border-bottom-right-image",
- "-o-border-bottom-right-image",
- "border-bottom-right-image",
- "-webkit-border-bottom-left-image",
- "-moz-border-bottom-left-image",
- "-o-border-bottom-left-image",
- "border-bottom-left-image",
- "background",
- "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
- "background-color",
- "background-image",
- "background-position",
- "background-size",
- "background-repeat",
- "background-attachment",
- "background-clip",
- "background-origin",
- "box-decoration-break",
- "-webkit-box-shadow",
- "-moz-box-shadow",
- "box-shadow",
- "color",
- "table-layout",
- "caption-side",
- "empty-cells",
- "list-style",
- "list-style-position",
- "list-style-type",
- "list-style-image",
- "quotes",
- "content",
- "counter-increment",
- "counter-reset",
- "vertical-align",
- "text-align",
- "text-decoration",
- "text-emphasis",
- "text-indent",
- "text-justify",
- "text-outline",
- "text-transform",
- "text-wrap",
- "text-overflow",
- "text-overflow-ellipsis",
- "text-overflow-mode",
- "text-shadow",
- "line-height",
- "white-space",
- "word-spacing",
- "word-wrap",
- "-moz-tab-size",
- "-o-tab-size",
- "tab-size",
- "letter-spacing",
- "font",
- "font-weight",
- "font-style",
- "font-variant",
- "font-size-adjust",
- "font-stretch",
- "font-size",
- "font-family",
- "src",
- "opacity",
- "-ms-filter:\'progid:DXImageTransform.Microsoft.Alpha",
- "filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
- "resize",
- "cursor",
- "nav-index",
- "nav-up",
- "nav-right",
- "nav-down",
- "nav-left",
- "-webkit-transition",
- "-moz-transition",
- "-o-transition",
- "transition",
- "-webkit-transition-delay",
- "-moz-transition-delay",
- "-o-transition-delay",
- "transition-delay",
- "-webkit-transition-timing-function",
- "-moz-transition-timing-function",
- "-o-transition-timing-function",
- "transition-timing-function",
- "-webkit-transition-duration",
- "-moz-transition-duration",
- "-o-transition-duration",
- "transition-duration",
- "-webkit-transition-property",
- "-moz-transition-property",
- "-o-transition-property",
- "transition-property",
- "-webkit-transform",
- "-moz-transform",
- "-o-transform",
- "transform",
- "-webkit-transform-origin",
- "-moz-transform-origin",
- "-o-transform-origin",
- "transform-origin",
- "unicode-bidi",
- "direction",
- "break-after",
- "break-before",
- "break-inside",
- "columns",
- "column-span",
- "column-width",
- "column-count",
- "column-fill",
- "column-gap",
- "column-rule",
- "column-rule-color",
- "column-rule-style",
- "column-rule-width",
- "page-break-before",
- "page-break-inside",
- "page-break-after",
- "orphans",
- "widows",
- "zoom",
- "max-zoom",
- "min-zoom",
- "user-zoom",
- "orientation"
-]',
-
-
-
-
-
-
+ $default_sort_order = '[
+ "position",
+ "top",
+ "right",
+ "bottom",
+ "left",
+ "z-index",
+ "display",
+ "visibility",
+ "-webkit-flex-direction",
+ "-moz-flex-direction",
+ "-ms-flex-direction",
+ "-o-flex-direction",
+ "flex-direction",
+ "-webkit-flex-order",
+ "-moz-flex-order",
+ "-ms-flex-order",
+ "-o-flex-order",
+ "flex-order",
+ "-webkit-flex-pack",
+ "-moz-flex-pack",
+ "-ms-flex-pack",
+ "-o-flex-pack",
+ "flex-pack",
+ "float",
+ "clear",
+ "-webkit-flex-align",
+ "-moz-flex-align",
+ "-ms-flex-align",
+ "-o-flex-align",
+ "flex-align",
+ "overflow",
+ "-ms-overflow-x",
+ "-ms-overflow-y",
+ "overflow-x",
+ "overflow-y",
+ "clip",
+ "-webkit-box-sizing",
+ "-moz-box-sizing",
+ "box-sizing",
+ "margin",
+ "margin-top",
+ "margin-right",
+ "margin-bottom",
+ "margin-left",
+ "padding",
+ "padding-top",
+ "padding-right",
+ "padding-bottom",
+ "padding-left",
+ "min-width",
+ "min-height",
+ "max-width",
+ "max-height",
+ "width",
+ "height",
+ "outline",
+ "outline-width",
+ "outline-style",
+ "outline-color",
+ "outline-offset",
+ "border",
+ "border-spacing",
+ "border-collapse",
+ "border-width",
+ "border-style",
+ "border-color",
+ "border-top",
+ "border-top-width",
+ "border-top-style",
+ "border-top-color",
+ "border-right",
+ "border-right-width",
+ "border-right-style",
+ "border-right-color",
+ "border-bottom",
+ "border-bottom-width",
+ "border-bottom-style",
+ "border-bottom-color",
+ "border-left",
+ "border-left-width",
+ "border-left-style",
+ "border-left-color",
+ "-webkit-border-radius",
+ "-moz-border-radius",
+ "border-radius",
+ "-webkit-border-top-left-radius",
+ "-moz-border-radius-topleft",
+ "border-top-left-radius",
+ "-webkit-border-top-right-radius",
+ "-moz-border-radius-topright",
+ "border-top-right-radius",
+ "-webkit-border-bottom-right-radius",
+ "-moz-border-radius-bottomright",
+ "border-bottom-right-radius",
+ "-webkit-border-bottom-left-radius",
+ "-moz-border-radius-bottomleft",
+ "border-bottom-left-radius",
+ "-webkit-border-image",
+ "-moz-border-image",
+ "-o-border-image",
+ "border-image",
+ "-webkit-border-image-source",
+ "-moz-border-image-source",
+ "-o-border-image-source",
+ "border-image-source",
+ "-webkit-border-image-slice",
+ "-moz-border-image-slice",
+ "-o-border-image-slice",
+ "border-image-slice",
+ "-webkit-border-image-width",
+ "-moz-border-image-width",
+ "-o-border-image-width",
+ "border-image-width",
+ "-webkit-border-image-outset",
+ "-moz-border-image-outset",
+ "-o-border-image-outset",
+ "border-image-outset",
+ "-webkit-border-image-repeat",
+ "-moz-border-image-repeat",
+ "-o-border-image-repeat",
+ "border-image-repeat",
+ "-webkit-border-top-image",
+ "-moz-border-top-image",
+ "-o-border-top-image",
+ "border-top-image",
+ "-webkit-border-right-image",
+ "-moz-border-right-image",
+ "-o-border-right-image",
+ "border-right-image",
+ "-webkit-border-bottom-image",
+ "-moz-border-bottom-image",
+ "-o-border-bottom-image",
+ "border-bottom-image",
+ "-webkit-border-left-image",
+ "-moz-border-left-image",
+ "-o-border-left-image",
+ "border-left-image",
+ "-webkit-border-corner-image",
+ "-moz-border-corner-image",
+ "-o-border-corner-image",
+ "border-corner-image",
+ "-webkit-border-top-left-image",
+ "-moz-border-top-left-image",
+ "-o-border-top-left-image",
+ "border-top-left-image",
+ "-webkit-border-top-right-image",
+ "-moz-border-top-right-image",
+ "-o-border-top-right-image",
+ "border-top-right-image",
+ "-webkit-border-bottom-right-image",
+ "-moz-border-bottom-right-image",
+ "-o-border-bottom-right-image",
+ "border-bottom-right-image",
+ "-webkit-border-bottom-left-image",
+ "-moz-border-bottom-left-image",
+ "-o-border-bottom-left-image",
+ "border-bottom-left-image",
+ "background",
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
+ "background-color",
+ "background-image",
+ "background-attachment",
+ "background-position",
+ "-ms-background-position-x",
+ "-ms-background-position-y",
+ "background-position-x",
+ "background-position-y",
+ "-webkit-background-clip",
+ "-moz-background-clip",
+ "background-clip",
+ "background-origin",
+ "-webkit-background-size",
+ "-moz-background-size",
+ "-o-background-size",
+ "background-size",
+ "background-repeat",
+ "box-decoration-break",
+ "-webkit-box-shadow",
+ "-moz-box-shadow",
+ "box-shadow",
+ "color",
+ "table-layout",
+ "caption-side",
+ "empty-cells",
+ "list-style",
+ "list-style-position",
+ "list-style-type",
+ "list-style-image",
+ "quotes",
+ "content",
+ "counter-increment",
+ "counter-reset",
+ "-ms-writing-mode",
+ "vertical-align",
+ "text-align",
+ "-webkit-text-align-last",
+ "-moz-text-align-last",
+ "-ms-text-align-last",
+ "text-align-last",
+ "text-decoration",
+ "text-emphasis",
+ "text-emphasis-position",
+ "text-emphasis-style",
+ "text-emphasis-color",
+ "text-indent",
+ "-ms-text-justify",
+ "text-justify",
+ "text-outline",
+ "text-transform",
+ "text-wrap",
+ "-ms-text-overflow",
+ "text-overflow",
+ "text-overflow-ellipsis",
+ "text-overflow-mode",
+ "text-shadow",
+ "white-space",
+ "word-spacing",
+ "-ms-word-wrap",
+ "word-wrap",
+ "-ms-word-break",
+ "word-break",
+ "-moz-tab-size",
+ "-o-tab-size",
+ "tab-size",
+ "-webkit-hyphens",
+ "-moz-hyphens",
+ "hyphens",
+ "letter-spacing",
+ "font",
+ "font-weight",
+ "font-style",
+ "font-variant",
+ "font-size-adjust",
+ "font-stretch",
+ "font-size",
+ "font-family",
+ "src",
+ "line-height",
+ "opacity",
+ "-ms-filter:\'progid:DXImageTransform.Microsoft.Alpha",
+ "filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
+ "-ms-interpolation-mode",
+ "-webkit-filter",
+ "-ms-filter",
+ "filter",
+ "resize",
+ "cursor",
+ "nav-index",
+ "nav-up",
+ "nav-right",
+ "nav-down",
+ "nav-left",
+ "-webkit-transition",
+ "-moz-transition",
+ "-ms-transition",
+ "-o-transition",
+ "transition",
+ "-webkit-transition-delay",
+ "-moz-transition-delay",
+ "-ms-transition-delay",
+ "-o-transition-delay",
+ "transition-delay",
+ "-webkit-transition-timing-function",
+ "-moz-transition-timing-function",
+ "-ms-transition-timing-function",
+ "-o-transition-timing-function",
+ "transition-timing-function",
+ "-webkit-transition-duration",
+ "-moz-transition-duration",
+ "-ms-transition-duration",
+ "-o-transition-duration",
+ "transition-duration",
+ "-webkit-transition-property",
+ "-moz-transition-property",
+ "-ms-transition-property",
+ "-o-transition-property",
+ "transition-property",
+ "-webkit-transform",
+ "-moz-transform",
+ "-ms-transform",
+ "-o-transform",
+ "transform",
+ "-webkit-transform-origin",
+ "-moz-transform-origin",
+ "-ms-transform-origin",
+ "-o-transform-origin",
+ "transform-origin",
+ "-webkit-animation",
+ "-moz-animation",
+ "-ms-animation",
+ "-o-animation",
+ "animation",
+ "-webkit-animation-name",
+ "-moz-animation-name",
+ "-ms-animation-name",
+ "-o-animation-name",
+ "animation-name",
+ "-webkit-animation-duration",
+ "-moz-animation-duration",
+ "-ms-animation-duration",
+ "-o-animation-duration",
+ "animation-duration",
+ "-webkit-animation-play-state",
+ "-moz-animation-play-state",
+ "-ms-animation-play-state",
+ "-o-animation-play-state",
+ "animation-play-state",
+ "-webkit-animation-timing-function",
+ "-moz-animation-timing-function",
+ "-ms-animation-timing-function",
+ "-o-animation-timing-function",
+ "animation-timing-function",
+ "-webkit-animation-delay",
+ "-moz-animation-delay",
+ "-ms-animation-delay",
+ "-o-animation-delay",
+ "animation-delay",
+ "-webkit-animation-iteration-count",
+ "-moz-animation-iteration-count",
+ "-ms-animation-iteration-count",
+ "-o-animation-iteration-count",
+ "animation-iteration-count",
+ "-webkit-animation-direction",
+ "-moz-animation-direction",
+ "-ms-animation-direction",
+ "-o-animation-direction",
+ "animation-direction",
+ "pointer-events",
+ "unicode-bidi",
+ "direction",
+ "-webkit-columns",
+ "-moz-columns",
+ "columns",
+ "-webkit-column-span",
+ "-moz-column-span",
+ "column-span",
+ "-webkit-column-width",
+ "-moz-column-width",
+ "column-width",
+ "-webkit-column-count",
+ "-moz-column-count",
+ "column-count",
+ "-webkit-column-fill",
+ "-moz-column-fill",
+ "column-fill",
+ "-webkit-column-gap",
+ "-moz-column-gap",
+ "column-gap",
+ "-webkit-column-rule",
+ "-moz-column-rule",
+ "column-rule",
+ "-webkit-column-rule-width",
+ "-moz-column-rule-width",
+ "column-rule-width",
+ "-webkit-column-rule-style",
+ "-moz-column-rule-style",
+ "column-rule-style",
+ "-webkit-column-rule-color",
+ "-moz-column-rule-color",
+ "column-rule-color",
+ "break-before",
+ "break-inside",
+ "break-after",
+ "page-break-before",
+ "page-break-inside",
+ "page-break-after",
+ "orphans",
+ "widows",
+ "-ms-zoom",
+ "zoom",
+ "max-zoom",
+ "min-zoom",
+ "user-zoom",
+ "orientation"
+ ]',
$yandex_sort_order = '[
-[
- "position",
- "z-index",
- "top",
- "right",
- "bottom",
- "left"
-],
-[
- "display",
- "visibility",
- "float",
- "clear",
- "overflow",
- "overflow-x",
- "overflow-y",
- "-ms-overflow-x",
- "-ms-overflow-y",
- "clip",
- "zoom",
- "flex-direction",
- "flex-order",
- "flex-pack",
- "flex-align"
-],
-[
- "-webkit-box-sizing",
- "-moz-box-sizing",
- "box-sizing",
- "width",
- "min-width",
- "max-width",
- "height",
- "min-height",
- "max-height",
- "margin",
- "margin-top",
- "margin-right",
- "margin-bottom",
- "margin-left",
- "padding",
- "padding-top",
- "padding-right",
- "padding-bottom",
- "padding-left"
-],
-[
- "table-layout",
- "empty-cells",
- "caption-side",
- "border-spacing",
- "border-collapse",
- "list-style",
- "list-style-position",
- "list-style-type",
- "list-style-image"
-],
-[
- "content",
- "quotes",
- "counter-reset",
- "counter-increment",
- "resize",
- "cursor",
- "nav-index",
- "nav-up",
- "nav-right",
- "nav-down",
- "nav-left",
- "-webkit-transition",
- "-moz-transition",
- "-ms-transition",
- "-o-transition",
- "transition",
- "-webkit-transition-delay",
- "-moz-transition-delay",
- "-ms-transition-delay",
- "-o-transition-delay",
- "transition-delay",
- "-webkit-transition-timing-function",
- "-moz-transition-timing-function",
- "-ms-transition-timing-function",
- "-o-transition-timing-function",
- "transition-timing-function",
- "-webkit-transition-duration",
- "-moz-transition-duration",
- "-ms-transition-duration",
- "-o-transition-duration",
- "transition-duration",
- "-webkit-transition-property",
- "-moz-transition-property",
- "-ms-transition-property",
- "-o-transition-property",
- "transition-property",
- "-webkit-transform",
- "-moz-transform",
- "-ms-transform",
- "-o-transform",
- "transform",
- "-webkit-transform-origin",
- "-moz-transform-origin",
- "-ms-transform-origin",
- "-o-transform-origin",
- "transform-origin",
- "-webkit-animation",
- "-moz-animation",
- "-ms-animation",
- "-o-animation",
- "animation",
- "-webkit-animation-name",
- "-moz-animation-name",
- "-ms-animation-name",
- "-o-animation-name",
- "animation-name",
- "-webkit-animation-duration",
- "-moz-animation-duration",
- "-ms-animation-duration",
- "-o-animation-duration",
- "animation-duration",
- "-webkit-animation-play-state",
- "-moz-animation-play-state",
- "-ms-animation-play-state",
- "-o-animation-play-state",
- "animation-play-state",
- "-webkit-animation-timing-function",
- "-moz-animation-timing-function",
- "-ms-animation-timing-function",
- "-o-animation-timing-function",
- "animation-timing-function",
- "-webkit-animation-delay",
- "-moz-animation-delay",
- "-ms-animation-delay",
- "-o-animation-delay",
- "animation-delay",
- "-webkit-animation-iteration-count",
- "-moz-animation-iteration-count",
- "-ms-animation-iteration-count",
- "-o-animation-iteration-count",
- "animation-iteration-count",
- "-webkit-animation-iteration-count",
- "-moz-animation-iteration-count",
- "-ms-animation-iteration-count",
- "-o-animation-iteration-count",
- "animation-iteration-count",
- "-webkit-animation-direction",
- "-moz-animation-direction",
- "-ms-animation-direction",
- "-o-animation-direction",
- "animation-direction",
- "text-align",
- "text-align-last",
- "-ms-text-align-last",
- "text-align-last",
- "vertical-align",
- "white-space",
- "text-decoration",
- "text-emphasis",
- "text-emphasis-color",
- "text-emphasis-style",
- "text-emphasis-position",
- "text-indent",
- "-ms-text-justify",
- "text-justify",
- "text-transform",
- "letter-spacing",
- "word-spacing",
- "-ms-writing-mode",
- "text-outline",
- "text-transform",
- "text-wrap",
- "text-overflow",
- "-ms-text-overflow",
- "text-overflow-ellipsis",
- "text-overflow-mode",
- "-ms-word-wrap",
- "word-wrap",
- "word-break",
- "-ms-word-break",
- "-moz-tab-size",
- "-o-tab-size",
- "tab-size",
- "-webkit-hyphens",
- "-moz-hyphens",
- "hyphens"
-],
-[
- "opacity",
- "filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
- "-ms-filter:\'progid:DXImageTransform.Microsoft.Alpha",
- "-ms-interpolation-mode",
- "color",
- "border",
- "border-collapse",
- "border-width",
- "border-style",
- "border-color",
- "border-top",
- "border-top-width",
- "border-top-style",
- "border-top-color",
- "border-right",
- "border-right-width",
- "border-right-style",
- "border-right-color",
- "border-bottom",
- "border-bottom-width",
- "border-bottom-style",
- "border-bottom-color",
- "border-left",
- "border-left-width",
- "border-left-style",
- "border-left-color",
- "-webkit-border-radius",
- "-moz-border-radius",
- "border-radius",
- "-webkit-border-top-right-radius",
- "-moz-border-top-right-radius",
- "border-top-right-radius",
- "-webkit-border-bottom-right-radius",
- "-moz-border-bottom-right-radius",
- "border-bottom-right-radius",
- "-webkit-border-bottom-left-radius",
- "-moz-border-bottom-left-radius",
- "border-bottom-left-radius",
- "-webkit-border-top-left-radius",
- "-moz-border-top-left-radius",
- "border-top-left-radius",
- "-webkit-border-image",
- "-moz-border-image",
- "-o-border-image",
- "border-image",
- "-webkit-border-image-source",
- "-moz-border-image-source",
- "-o-border-image-source",
- "border-image-source",
- "-webkit-border-image-slice",
- "-moz-border-image-slice",
- "-o-border-image-slice",
- "border-image-slice",
- "-webkit-border-image-width",
- "-moz-border-image-width",
- "-o-border-image-width",
- "border-image-width",
- "-webkit-border-image-outset",
- "-moz-border-image-outset",
- "-o-border-image-outset",
- "border-image-outset",
- "-webkit-border-image-repeat",
- "-moz-border-image-repeat",
- "-o-border-image-repeat",
- "border-image-repeat",
- "outline",
- "outline-width",
- "outline-style",
- "outline-color",
- "outline-offset",
- "background",
- "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
- "background-color",
- "background-image",
- "background-repeat",
- "background-attachment",
- "background-position",
- "background-position-x",
- "-ms-background-position-x",
- "background-position-y",
- "-ms-background-position-y",
- "background-clip",
- "background-origin",
- "background-size",
- "box-decoration-break",
- "-webkit-box-shadow",
- "-moz-box-shadow",
- "box-shadow",
- "-webkit-box-shadow",
- "-moz-box-shadow",
- "box-shadow",
- "-webkit-box-shadow",
- "-moz-box-shadow",
- "box-shadow",
- "-webkit-box-shadow",
- "-moz-box-shadow",
- "box-shadow",
- "filter:progid:DXImageTransform.Microsoft.gradient",
- "-ms-filter:\'progid:DXImageTransform.Microsoft.gradient",
- "text-shadow"
-],
-[
- "font",
- "font-family",
- "font-size",
- "font-weight",
- "font-style",
- "font-variant",
- "font-size-adjust",
- "font-stretch",
- "font-effect",
- "font-emphasize",
- "font-emphasize-position",
- "font-emphasize-style",
- "font-smooth",
- "line-height"
-]
-]';
+ [
+ "position",
+ "z-index",
+ "top",
+ "right",
+ "bottom",
+ "left"
+ ],
+ [
+ "display",
+ "visibility",
+ "float",
+ "clear",
+ "overflow",
+ "overflow-x",
+ "overflow-y",
+ "-ms-overflow-x",
+ "-ms-overflow-y",
+ "clip",
+ "zoom",
+ "flex-direction",
+ "flex-order",
+ "flex-pack",
+ "flex-align"
+ ],
+ [
+ "-webkit-box-sizing",
+ "-moz-box-sizing",
+ "box-sizing",
+ "width",
+ "min-width",
+ "max-width",
+ "height",
+ "min-height",
+ "max-height",
+ "margin",
+ "margin-top",
+ "margin-right",
+ "margin-bottom",
+ "margin-left",
+ "padding",
+ "padding-top",
+ "padding-right",
+ "padding-bottom",
+ "padding-left"
+ ],
+ [
+ "table-layout",
+ "empty-cells",
+ "caption-side",
+ "border-spacing",
+ "border-collapse",
+ "list-style",
+ "list-style-position",
+ "list-style-type",
+ "list-style-image"
+ ],
+ [
+ "content",
+ "quotes",
+ "counter-reset",
+ "counter-increment",
+ "resize",
+ "cursor",
+ "nav-index",
+ "nav-up",
+ "nav-right",
+ "nav-down",
+ "nav-left",
+ "-webkit-transition",
+ "-moz-transition",
+ "-ms-transition",
+ "-o-transition",
+ "transition",
+ "-webkit-transition-delay",
+ "-moz-transition-delay",
+ "-ms-transition-delay",
+ "-o-transition-delay",
+ "transition-delay",
+ "-webkit-transition-timing-function",
+ "-moz-transition-timing-function",
+ "-ms-transition-timing-function",
+ "-o-transition-timing-function",
+ "transition-timing-function",
+ "-webkit-transition-duration",
+ "-moz-transition-duration",
+ "-ms-transition-duration",
+ "-o-transition-duration",
+ "transition-duration",
+ "-webkit-transition-property",
+ "-moz-transition-property",
+ "-ms-transition-property",
+ "-o-transition-property",
+ "transition-property",
+ "-webkit-transform",
+ "-moz-transform",
+ "-ms-transform",
+ "-o-transform",
+ "transform",
+ "-webkit-transform-origin",
+ "-moz-transform-origin",
+ "-ms-transform-origin",
+ "-o-transform-origin",
+ "transform-origin",
+ "-webkit-animation",
+ "-moz-animation",
+ "-ms-animation",
+ "-o-animation",
+ "animation",
+ "-webkit-animation-name",
+ "-moz-animation-name",
+ "-ms-animation-name",
+ "-o-animation-name",
+ "animation-name",
+ "-webkit-animation-duration",
+ "-moz-animation-duration",
+ "-ms-animation-duration",
+ "-o-animation-duration",
+ "animation-duration",
+ "-webkit-animation-play-state",
+ "-moz-animation-play-state",
+ "-ms-animation-play-state",
+ "-o-animation-play-state",
+ "animation-play-state",
+ "-webkit-animation-timing-function",
+ "-moz-animation-timing-function",
+ "-ms-animation-timing-function",
+ "-o-animation-timing-function",
+ "animation-timing-function",
+ "-webkit-animation-delay",
+ "-moz-animation-delay",
+ "-ms-animation-delay",
+ "-o-animation-delay",
+ "animation-delay",
+ "-webkit-animation-iteration-count",
+ "-moz-animation-iteration-count",
+ "-ms-animation-iteration-count",
+ "-o-animation-iteration-count",
+ "animation-iteration-count",
+ "-webkit-animation-iteration-count",
+ "-moz-animation-iteration-count",
+ "-ms-animation-iteration-count",
+ "-o-animation-iteration-count",
+ "animation-iteration-count",
+ "-webkit-animation-direction",
+ "-moz-animation-direction",
+ "-ms-animation-direction",
+ "-o-animation-direction",
+ "animation-direction",
+ "text-align",
+ "-webkit-text-align-last",
+ "-moz-text-align-last",
+ "-ms-text-align-last",
+ "text-align-last",
+ "vertical-align",
+ "white-space",
+ "text-decoration",
+ "text-emphasis",
+ "text-emphasis-color",
+ "text-emphasis-style",
+ "text-emphasis-position",
+ "text-indent",
+ "-ms-text-justify",
+ "text-justify",
+ "text-transform",
+ "letter-spacing",
+ "word-spacing",
+ "-ms-writing-mode",
+ "text-outline",
+ "text-transform",
+ "text-wrap",
+ "text-overflow",
+ "-ms-text-overflow",
+ "text-overflow-ellipsis",
+ "text-overflow-mode",
+ "-ms-word-wrap",
+ "word-wrap",
+ "word-break",
+ "-ms-word-break",
+ "-moz-tab-size",
+ "-o-tab-size",
+ "tab-size",
+ "-webkit-hyphens",
+ "-moz-hyphens",
+ "hyphens",
+ "pointer-events"
+ ],
+ [
+ "opacity",
+ "filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
+ "-ms-filter:\'progid:DXImageTransform.Microsoft.Alpha",
+ "-ms-interpolation-mode",
+ "color",
+ "border",
+ "border-collapse",
+ "border-width",
+ "border-style",
+ "border-color",
+ "border-top",
+ "border-top-width",
+ "border-top-style",
+ "border-top-color",
+ "border-right",
+ "border-right-width",
+ "border-right-style",
+ "border-right-color",
+ "border-bottom",
+ "border-bottom-width",
+ "border-bottom-style",
+ "border-bottom-color",
+ "border-left",
+ "border-left-width",
+ "border-left-style",
+ "border-left-color",
+ "-webkit-border-radius",
+ "-moz-border-radius",
+ "border-radius",
+ "-webkit-border-top-left-radius",
+ "-moz-border-radius-topleft",
+ "border-top-left-radius",
+ "-webkit-border-top-right-radius",
+ "-moz-border-radius-topright",
+ "border-top-right-radius",
+ "-webkit-border-bottom-right-radius",
+ "-moz-border-radius-bottomright",
+ "border-bottom-right-radius",
+ "-webkit-border-bottom-left-radius",
+ "-moz-border-radius-bottomleft",
+ "border-bottom-left-radius",
+ "-webkit-border-image",
+ "-moz-border-image",
+ "-o-border-image",
+ "border-image",
+ "-webkit-border-image-source",
+ "-moz-border-image-source",
+ "-o-border-image-source",
+ "border-image-source",
+ "-webkit-border-image-slice",
+ "-moz-border-image-slice",
+ "-o-border-image-slice",
+ "border-image-slice",
+ "-webkit-border-image-width",
+ "-moz-border-image-width",
+ "-o-border-image-width",
+ "border-image-width",
+ "-webkit-border-image-outset",
+ "-moz-border-image-outset",
+ "-o-border-image-outset",
+ "border-image-outset",
+ "-webkit-border-image-repeat",
+ "-moz-border-image-repeat",
+ "-o-border-image-repeat",
+ "border-image-repeat",
+ "outline",
+ "outline-width",
+ "outline-style",
+ "outline-color",
+ "outline-offset",
+ "background",
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
+ "background-color",
+ "background-image",
+ "background-repeat",
+ "background-attachment",
+ "background-position",
+ "background-position-x",
+ "-ms-background-position-x",
+ "background-position-y",
+ "-ms-background-position-y",
+ "-webkit-background-clip",
+ "-moz-background-clip",
+ "background-clip",
+ "background-origin",
+ "-webkit-background-size",
+ "-moz-background-size",
+ "-o-background-size",
+ "background-size",
+ "box-decoration-break",
+ "-webkit-box-shadow",
+ "-moz-box-shadow",
+ "box-shadow",
+ "-webkit-box-shadow",
+ "-moz-box-shadow",
+ "box-shadow",
+ "-webkit-box-shadow",
+ "-moz-box-shadow",
+ "box-shadow",
+ "-webkit-box-shadow",
+ "-moz-box-shadow",
+ "box-shadow",
+ "filter:progid:DXImageTransform.Microsoft.gradient",
+ "-ms-filter:\'progid:DXImageTransform.Microsoft.gradient",
+ "text-shadow"
+ ],
+ [
+ "font",
+ "font-family",
+ "font-size",
+ "font-weight",
+ "font-style",
+ "font-variant",
+ "font-size-adjust",
+ "font-stretch",
+ "font-effect",
+ "font-emphasize",
+ "font-emphasize-position",
+ "font-emphasize-style",
+ "font-smooth",
+ "line-height"
+ ]
+ ]';
/**
- * Функция конструктор
- * @param css {string}
- * @param echo {boolean}
- * @custon_sort_order {string|JSON}
+ * @param string css
+ * @param boolean debug, OPTIONAL
+ * @param json custom_sort_order JSON expected, OPTIONAL
+ * @return string|false
*
* @TODO: https://github.com/miripiruni/CSScomb/issues/21
*
+ * Example:
+ *
+ *
+ * require_once 'PATH_TO_CSScomb/csscomb.php';
+ *
+ * $c = new csscomb();
+ * $result_code = $c->csscomb(
+ * 'div {margin-top:0; color: red; display: inline;}',
+ * false,
+ * $MY_JSON_SORT_ORDER
+ * );
+ *
+ *
*/
- function csscomb($css = '', $echo = false, $custom_sort_order = null){
- if($echo===0 or $echo===false){
- $this->output = false;
+ function csscomb($css = '', $debug = false, $custom_sort_order = null) {
+ $this->output = $debug ? true : false;
+
+ if ($css && is_string($css)) {
+ $this->code['original'] = $this->code['edited'] = $css;
+ $this->set_mode();
+ $this->set_sort_order($custom_sort_order);
+ $this->preprocess();
+ $this->parse_rules();
+ $this->postprocess();
+ return $this->end_of_process();
+ } else {
+ return false;
}
-
- $this->code['original'] = $this->code['edited'] = $css;
-
- $this->set_mode();
- $this->set_sort_order($custom_sort_order); // 1 задаем порядок сортировки
-
- $this->preprocess(); // 2 препроцессинг
- $this->parse_rules(); // 3,4,5 парсим на части по скобкам
- $this->postprocess(); // 6 постпроцессинг
-
- return $this->end_of_process();
}
-
-
-
/**
- * Функция сетит $this->sort_order
+ * Функция устанавливает $this->sort_order
*
* @param json_array {string/JSON}
*
*/
- function set_sort_order($json_array = null){
- if($json_array != null){
+ function set_sort_order($json_array = null) {
+ $this->sort_order = json_decode($this->default_sort_order);
+
+ if ($json_array !== null) {
$custom_sort_order = json_decode($json_array);
- if(is_array($custom_sort_order) AND count($custom_sort_order)>0){
+ if (is_array($custom_sort_order) AND count($custom_sort_order) > 0) {
$this->sort_order = $custom_sort_order;
}
- else {
- $this->sort_order = json_decode($this->default_sort_order);
- }
-
- }
- else {
- $this->sort_order = json_decode($this->default_sort_order);
}
- if($json_array === 'yandex'){
+ if ($json_array === 'yandex') {
$this->sort_order = json_decode($this->yandex_sort_order);
- switch(json_last_error()){
- case JSON_ERROR_DEPTH:
- echo 'JSON parse error: Достигнута максимальная глубина стека';
- break;
- case JSON_ERROR_STATE_MISMATCH:
- echo 'JSON parse error: Некорректные разряды или не совпадение режимов';
- break;
- case JSON_ERROR_CTRL_CHAR:
- echo 'JSON parse error: Некорректный управляющий символ';
- break;
- case JSON_ERROR_SYNTAX:
- echo 'JSON parse error: Синтаксическая ошибка, не корректный JSON';
- break;
- }
+ //switch(json_last_error()) {
+ //case JSON_ERROR_DEPTH:
+ //echo 'JSON parse error: Достигнута максимальная глубина стека';
+ //break;
+ //case JSON_ERROR_STATE_MISMATCH:
+ //echo 'JSON parse error: Некорректные разряды или не совпадение режимов';
+ //break;
+ //case JSON_ERROR_CTRL_CHAR:
+ //echo 'JSON parse error: Некорректный управляющий символ';
+ //break;
+ //case JSON_ERROR_SYNTAX:
+ //echo 'JSON parse error: Синтаксическая ошибка, не корректный JSON';
+ //break;
+ //}
}
}
-
/**
- * Функция сетит $this->mode
+ * Функция устанавливает $this->mode
*
* @TODO: а если и тег
'.$before.'';
@@ -1304,11 +1536,11 @@ function log($before, $after){
* @param {string}
* @return {bool|int}
*/
- private function get_through_number($value){
+ private function get_through_number($value) {
$i = 0;
- foreach($this->sort_order as $property_group){
- foreach($property_group as $key=>$val){
- if($val==$value) return $i;
+ foreach ($this->sort_order as $property_group) {
+ foreach ($property_group as $key => $val) {
+ if ($val == $value) return $i;
else $i++;
}
}
@@ -1321,19 +1553,24 @@ private function get_through_number($value){
* @param {array}
* @return {array}
*/
- private function separate_property_group($properties){
- if(is_array($this->sort_order[0])){ // Если в настройках нет разбиения на группы, то выходим входной массив без изменений
- foreach($properties as $key=>$property){
+ private function separate_property_group($properties) {
+ if (is_array($this->sort_order[0])) { // Если в настройках нет разбиения на группы, то выводим входной массив без изменений
+ foreach ($properties as $key => &$property) {
+ $property = preg_replace('@\n\s*?(\n\s*?)@ismx', '$1', $property);
$array = explode(':', $property);
$prop_name[$key] = trim($array[0]);
}
- foreach($this->sort_order as $group_num=>$property_group){ // Перебираем группы свойств
+ foreach ($this->sort_order as $group_num => $property_group) { // Перебираем группы свойств
$intersect = array_intersect($prop_name, $property_group);
- if(count($intersect)>0){
+ if (count($intersect) > 0) {
$num = array_keys($intersect);
$last_key = null;
- foreach($num as $n) $last_key = $n;
- if($properties[$last_key] != end($properties)) $properties[$last_key] = $properties[$last_key]."\n";
+ foreach ($num as $n) {
+ $last_key = $n;
+ }
+ if ($properties[$last_key] !== end($properties)) {
+ $properties[$last_key] = $properties[$last_key]."\n";
+ }
}
}
}
@@ -1341,3 +1578,4 @@ private function separate_property_group($properties){
}
}
+