ФорумПрограммированиеPHP для идиотов → Sass для PHP

Sass для PHP

  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 1 октября 2009 г. 15:38, спустя 23 секунды


    http://lesscss.org/
    это хуйню смотрели?

    Это симпатичней. Привычней наблюдать "скобочную" иерархию, а не отступами. Наверное, сложно перестраивать мозги с PHP на SASS … здесь считаем скобки, а здесь пробелы.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 1 октября 2009 г. 16:21, спустя 42 минуты 45 секунд



    http://lesscss.org/
    это хуйню смотрели?

    Это симпатичней. Привычней наблюдать "скобочную" иерархию, а не отступами. Наверное, сложно перестраивать мозги с PHP на SASS … здесь считаем скобки, а здесь пробелы.
    лишь бы было зачем, а привыкнуть как известно дело n времени
    Сапожник без сапог
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 1 октября 2009 г. 19:14, спустя 2 часа 52 минуты 46 секунд

    это дело вкуса. мне, например, не по себе от haml. хотя вроде идея та же. а со стилями нормально на мой взгляд.
    готовый sass будет нетрудно переделать под less — те же миксины и выражения с переменными.

    вобщем надо калькулятор выражений. чтобы был простой и красивый как sass :) пока думаю сделать через классический рекурсивный разбор. в свое время писал компилятор Си за 1 день, надеюсь по старой памяти забубенить.

    AndryG, что ты там спрашивал про аргументы? на входе "выражение". сейчас имена переменных замещаются их значениями. в будущем этот же метод должен справляться с выражениями где аргументы могут быть трех типов
    - число. возможно с размерностью (in, pt, em, wm, mm, cm, px). дюймы могут сочетаться с пунктами, миллиметрами и сантиметрами. остальные не могут сочетаться
    - цвет. это или предопределённое название или #nnn или #nnnnnn или rgb(r,g,b)
    - строка в одинарных или двойных кавычках
    операции +, -, *, / и скобки. для строк + это катенация
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 1 октября 2009 г. 19:32, спустя 17 минут 49 секунд

    купил попкорн и наблюдаю за проектом :)
    Сапожник без сапог
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 1 октября 2009 г. 19:44, спустя 11 минут 48 секунд

    phpdude, не забудь выключить мобилу))))
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 1 октября 2009 г. 21:04, спустя 1 час 20 минут 36 секунд

    "- цвет. это или предопределённое название или #nnn или #nnnnnn или rgb(r,g,b)"
    От этого сразу расхотелось придумывать БНФ :-)
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 1 октября 2009 г. 21:06, спустя 1 минуту 27 секунд


    "- цвет. это или предопределённое название или #nnn или #nnnnnn или rgb(r,g,b)"
    От этого сразу расхотелось придумывать БНФ :-)
    зассал?)
    Сапожник без сапог
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 1 октября 2009 г. 21:21, спустя 15 минут 18 секунд

    нечто вот такое получается
    <expr_2> ::= <expr_1> { <oper_2> <expr_1> }
    <oper_2> ::= "+" | "-"

    <expr_1> ::= <operand> { <oper_1> <operand> }
    <oper_1> ::= "*" | "/"

    // [<ed_izm>] – для приведения типа, но, кажется, тут плохой рекурсией пахнет
    <operand>::= [<ed_izm>] "(" <expr> ")" | <.var> | <color> | <size> | <string> | ( "+" | "-" ) <operand>

    <color>  ::= "#" <digit> <digit> <digit> [ <digit> <digit> <digit>]
                | "rgb(" <number>, <number>, <number> ")"

    <.var>    ::= "!" <letter> { <letter> | <digit> }
               
    // Закр. кавычка == откр. Кривой вариант записи, но лучше в голову не лезет
    <string> ::= ("'" | """) { <char> } ("'" | """)

    <char>   ::= <digit> | <letter> | "'" | """

    <size>   :: <number> [<ed_izm>]

    <ed_izm> ::= "in" | "pt" | "em" | "wm" | "mm" | "cm" | "px"

    <number> ::= <digit> { <digit> }

    <letter> ::= "a..z" | "_" | "-"

    <digit>  ::= "0..9"
    Спустя 41 сек.
    "<.var>" Точка торчит, ибо разукрашивает плохо на форуме без неё
    Спустя 126 сек.
    "- цвет. это или предопределённое название или #nnn или #nnnnnn или rgb(r,g,b)"
    Спустя 206 сек.
    Фигня это полная. Всё делается намного проще.
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 1 октября 2009 г. 22:31, спустя 1 час 9 минут 34 секунды

    rgba(r,g,b,a)
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 2 октября 2009 г. 6:21, спустя 7 часов 50 минут 46 секунд

    CTAPbIu_MABP, да.
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 2 октября 2009 г. 15:21, спустя 8 часов 59 минут 18 секунд

    лексический разбор

    <?php

    header('Content-type: text/plain');

    $ss = array(
    '!alfa / !centavra',
    '!alfa + 23*(!beta - 111)',
    '"12+3" + "2"',
    );

    foreach ($ss as $s)
    {
    $split = preg_split('#\s*(\'.*?\'|".*?"|\+|-|\*|/|\(|\))\s*#', $s, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
    echo "\nString \"".$s."\" is:\n";
    foreach ($split as $p)
    echo $p."\n";
    }
    ?>
    ιιlllιlllι унц-унц
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 2 октября 2009 г. 16:03, спустя 41 минуту 59 секунд

    А где вывод ?
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 2 октября 2009 г. 16:28, спустя 25 минут 10 секунд

    [tt]String "!alfa / !centavra" is:
    !alfa
    /
    !centavra

    String "!alfa + 23*(!beta - 111)" is:
    !alfa
    +
    23
    *
    (
    !beta
    -
    111
    )

    String ""12+3" + "2"" is:
    "12+3"
    +
    "2"
    [/tt]Уважать надо собеседников :)
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 2 октября 2009 г. 18:50, спустя 2 часа 22 минуты 28 секунд

    lex_sass src переделан только лексер.
    Значение цвета сохраняется в массив RGB
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 2 октября 2009 г. 23:18, спустя 4 часа 27 минут 50 секунд

    спасибо, посмотрю на свежую голову.
    пока у меня есть калькулятор по алгоритму Бауэра и Замельзона
    умеет делать 4 арифметические операции для чисел и катенацию для строк. НЕ понимает px, em и прочие #color

    <?php

    class Expression
    {
    private static $_vars;
    private static $_operations = array(
    NULL, '(', '+', '-', '*', '/', ')');
    private static $_rules = array(
    array(6, 1, 1, 1, 1, 1, 5),
    array(5, 1, 1, 1, 1, 1, 3),
    array(4, 1, 2, 2, 1, 1, 4),
    array(4, 1, 2, 2, 1, 1, 4),
    array(4, 1, 4, 4, 2, 2, 4),
    array(4, 1, 4, 4, 2, 2, 4));
    private static $_E;
    private static $_T;

    private static function _token($topT, $token)
    {
    // Operand
    if (($curOp = array_search($token, self::$_operations)) === FALSE)
    {
    array_push(self::$_E, $token);
    }
    // Operation
    else
    {
    while (TRUE)
    {
    switch ($f = self::$_rules[$topT][$curOp]) {
    case 1:
    array_push(self::$_T, $curOp);
    break;
    case 2:
    case 4:
    $b = array_pop(self::$_E);
    $op = array_pop(self::$_T);
    $a = array_pop(self::$_E);
    $token = self::_func($a, $op, $b);
    array_push(self::$_E, $token);
    if ($f == 4)
    {
    $topT = end(self::$_T);
    continue 2;
    }
    array_push(self::$_T, $curOp);
    break;
    case 3:
    array_pop(self::$_T);
    break;
    case 5:
    die('ERROR: unclosed brackets');
    case 6:
    if (count(self::$_E) != 1)
    die('ERROR: missing operator');
    else
    return self::$_E[0];
    }
    break;
    }
    }

    return end(self::$_T);
    }

    private static function _func($a, $op, $b)
    {
    if ($a{0} == '!') $a = self::$_vars[$a];
    if ($b{0} == '!') $b = self::$_vars[$b];

    $as = ($a{0} == '"' || $a{0} == '\'');
    $bs = ($b{0} == '"' || $b{0} == '\'');

    if (($as || $bs) && $op == 2)
    return '"' . ($as ? trim($a, $a{0}) : $a) . ($bs ? trim($b, $b{0}) : $b) . '"';
    else if (!$as && !$bs)
    switch ($op) {
    case 2: return $a + $b;
    case 3: return $a - $b;
    case 4: return $a * $b;
    case 5: return $a / $b;
    }
    die('ERROR: wrong opeation '.$op);
    }

    public static function error($errno, $errstr, $errfile, $errline)
    {
    printf("\nLine: %d %s\n", $errline, $errstr);
    print_r(self::$_vars);
    print_r(self::$_E);
    print_r(self::$_T);
    die(1);
    }

    public static function calc($s, $variables=array())
    {
    self::$_vars = $variables;
    self::$_E = array();
    self::$_T = array(0); // put bottom of stack marker

    $split = preg_split('#\s*(\'.*?\'|".*?"|\+|-|\*|/|\(|\))\s*#', $s, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
    $split[] = NULL; // put end of tokens marker
    return array_reduce($split, array('self', '_token'), 0);
    }
    }


    set_error_handler(array('Expression', 'error'), E_ALL);

    header('Content-type: text/plain');

    $vars = array('!alfa' => 6, '!beta' => 2, '!gama' => 5);
    echo Expression::calc('2*!alfa + !beta + !gama', $vars)."\n"; // 19
    echo Expression::calc('2*(!alfa + !beta) + !gama', $vars)."\n"; // 21
    echo Expression::calc('12 + "3"', $vars)."\n"; // "123"

    ?>
    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!