parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

JSHttpRequest | преобразование Парсерных типов данных в JS

Sergey M. 10.06.2005 01:30

Парсерный вариант функции _php2js() для тех, кого интересует subj. Функции можно передавать hash, string, таблицу, и т.д.

Хеш любой вложенности и содержания преобразуется в JavaScript-хеш с аналогичной структурой.

Hash of Bool преобразуется в нумерованый массив.

Из таблицы получается такой хитрый массив с ключами в виде хешей.
Доступ к любому элементу такой таблицы/массива можно будет получить через Имя_таблицы.номер_строки.имя_столбца. Nameless-таблицы не преобразуются (обнуляются).
@object2js[test]
^if($test is void && ^return[null] ||
    $test is bool && ($test && ^return[true] || ^return[false]) ||
    $test is string && ^return['^taint[js][$test]'] ||
   ($test is int || $test is double) && ^return[$test] ||
    $test is hash && ($test && ^return[^_hash2js[$test]] || ^return[null]) ||
    $test is table && ($test && ^return[^_table2js[$test]] || ^return[null]) ||
    $test is date && ^return[new Date(^test.unix-timestamp[]000)]
){}{
	^return[null]
}


@return[type]
$caller.result[$type]
$result(1)


@_hash2js[hash]
# проверяем, а не hash ли это of bool
^if(^hash.foreach[;v]{^if($v is bool && $v;0;1)}){
# если не он - возвращаем ассоциативный массив (хеш)
    $result[^{^hash.foreach[k;v]{'^taint[js][$k]': ^if($v is bool || $v is int || $v is double){^object2js($v)}{^object2js[$v]}}[, ]^}]
}{
# если, таки, он - возвращаем нумерованый
    $result[^[^hash.foreach[key;]{'^taint[js][$key]'}[, ]^]]
}

@_table2js[table][keys]
$keys[^table.columns[]]
^if($keys){
    $result[^[^table.menu{^{^keys.menu{'^taint[js][$keys.column]':'^taint[js][$table.[$keys.column]]'}[, ]^}}[, ]^]]
}{
# nameless tables are deprecated!
    $result[null]
}
Местами может содержать ошибки, на серьезное тестирование пока не было времени.