diff --git a/README.md b/README.md
index 574ee18..dca0269 100644
--- a/README.md
+++ b/README.md
@@ -10,9 +10,11 @@ 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).
+CSScomb is written in pure JavaScript. Install with:
+```BASH
+npm install -g csscomb
+```
## Installation
@@ -20,18 +22,24 @@ See details at [wiki](https://github.com/miripiruni/CSScomb/wiki/Requirements).
```
cd ~/.vim/bundle
-git clone https://github.com/miripiruni/CSScomb-for-Vim.git
+git clone https://github.com/csscomb/vim-csscomb.git
```
### With Vundle
Add this to .vimrc:
```
-Bundle 'git://github.com/miripiruni/CSScomb-for-Vim.git'
+Bundle 'git://github.com/csscomb/vim-csscomb.git'
+```
+
+### With NeoBundle
+Add this to .vimrc:
+```
+NeoBundle 'csscomb/vim-csscomb'
```
### Manual without plugins manager
```
-git clone https://github.com/miripiruni/CSScomb-for-Vim.git csscomb
+git clone https://github.com/csscomb/vim-csscomb.git csscomb
cp -r csscomb/plugin/* ~/.vim/plugin/
```
@@ -40,3 +48,12 @@ Vim command:
```
:CSScomb
```
+
+## Suggested Configuration
+
+```VIML
+" Map bc to run CSScomb. bc stands for beautify css
+autocmd FileType css noremap bc :CSScomb
+" Automatically comb your CSS on save
+autocmd BufWritePre,FileWritePre *.css,*.less,*.scss,*.sass silent! :CSScomb
+```
diff --git a/doc/csscomb.txt b/doc/csscomb.txt
deleted file mode 100644
index 289ffba..0000000
--- a/doc/csscomb.txt
+++ /dev/null
@@ -1,71 +0,0 @@
-*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 2592300..dae1b6b 100644
--- a/plugin/csscomb.vim
+++ b/plugin/csscomb.vim
@@ -7,10 +7,17 @@
let g:CSScombPluginDir = fnamemodify(expand(""), ":h")
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 lines = split(res, "\n")
- call setline(a:line1, lines)
+ let content = getline(a:line1, a:line2)
+
+ let tempFile = tempname() . '.' . &filetype
+ call writefile(content, tempFile)
+ let systemOutput = system('csscomb ' . shellescape(tempFile))
+ if len(systemOutput)
+ echoerr split(systemOutput, "\n")[1]
+ else
+ let lines = readfile(tempFile)
+ call setline(a:line1, lines)
+ endif
endfunction
command! -nargs=? -range=% CSScomb :call g:CSScomb(, , , )
diff --git a/plugin/exec.php b/plugin/exec.php
deleted file mode 100644
index d565eaa..0000000
--- a/plugin/exec.php
+++ /dev/null
@@ -1,6 +0,0 @@
-csscomb($input);
-?>
diff --git a/plugin/lib/csscomb.php b/plugin/lib/csscomb.php
deleted file mode 100644
index d0a7cbb..0000000
--- a/plugin/lib/csscomb.php
+++ /dev/null
@@ -1,1581 +0,0 @@
-
- * @license MIT
- * @web http://csscomb.com/
- */
-
-error_reporting(E_ALL);
-
-class csscomb{
-
- var $sort_order = Array(),
- $code = Array(
- // оригинальный код, без изменений, то, что пришло на вход
- 'original' => null,
- // код, который может меняться в процессе выполнения алгоритма пересортировки
- 'edited' => null,
- // TODO: избавиться от resorted
- // конечный, пересортированный 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 = 'properties',
-
- $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",
- "-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 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 = '', $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->sort_order
- *
- * @param json_array {string/JSON}
- *
- */
- 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) {
- $this->sort_order = $custom_sort_order;
- }
- }
-
- 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;
- //}
- }
- }
-
-
- /**
- * Функция устанавливает $this->mode
- *
- * @TODO: а если и тег
-
-
-
';
- }
-
- if ($this->output === false) return $this->code['resorted'];
- }
-
-
- function log($before, $after) {
- echo '
-
- '.$before.'';
- echo '
';
- echo '
';
- echo ''.var_dump($after).'
';
- }
-
-
-
- /**
- * Возвращает сквозной прядковый номер элемента двумерного массива так, как если бы этот массив был одномерным
- * @param {string}
- * @return {bool|int}
- */
- 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;
- else $i++;
- }
- }
- return false;
- }
-
- /**
- * Разделяет свойства на группы пустой строкой
- * Внимание: вызывать только когда есть разделение на группы, иначе вернет входной массив без изменений
- * @param {array}
- * @return {array}
- */
- 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) { // Перебираем группы свойств
- $intersect = array_intersect($prop_name, $property_group);
- 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";
- }
- }
- }
- }
- return $properties;
- }
-
-}
-