parser

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

 

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

Ответ

gik 16.05.2009 15:59

@USE
FireBug.p


###########################################################################
@main[]
^FireBug:group[test group;[
		$.sColor[#880000]
		$.sCollapsed[true]
		]]
^FireBug:log[proc started;$status:rusage]
^FireBug:log[memory at start;$status:memory]

$table[^table::create{id	name
1	test1
2	test2
}]

^FireBug:table[test dump;$table]


^FireBug:info[date now;^date::now[];[
		$.sFile[test.p]
		$.sLine[10]
		]]

^FireBug:log[proc ended;$status:rusage]
^FireBug:log[memory at end;$status:memory]
^FireBug:group_end[]


^FireBug:group[test group]

^FireBug:warn[warning message]

^FireBug:error[error, html is empty )]

^try{
	^throw[test exception;]
	
	}{
	$exception.handled(1)
	^FireBug:exception[$exception]
	}

^FireBug:group_end[]

###########################################################################
@postprocess[sBody]
$result[$sBody]
^FireBug:print[]

###########################################################################
###########################################################################
# $Id: FireBug.p,v 0.1 2009-05-15 08:08:45 gik Exp $
# JSON based on misha JSHttpRequest Class
###########################################################################

@CLASS
FireBug

###########################################################################
@auto[]
$tLog[^table::create{str}]
$sProtocol[http://meta.wildfirehq.org/Protocol/JsonStream/0.2]
$sPlugin[http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3]
$sStructure[http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1]
$sType[]
#end @auto[]

###########################################################################
# start group
#
# hParam - hash
#		$.sColor[string]	
#		$.sCollapsed[true/false]
#
@group[sGroupLabel;hParam]
^_append[GROUP_START;$sGroupLabel;;$hParam]
#end @group[]

###########################################################################
# close group
#
@group_end[]
^_append[GROUP_END]
#end @group_end[]

###########################################################################
# log message
#
# sLabel - label
# uVar	  - any variable
# hParam - hash
# 		$.sFile[string]
#		$.sLine[integer]
#
@log[sLabel;uVar;hParam]
^_append[LOG;$sLabel;$uVar;$hParam]
#end @log[]

###########################################################################
# dump table (icon)
#
# sLabel - label
# uVar	  - table
# hParam - hash
# 		$.sFile[string]
#		$.sLine[integer]
#
@table[sLabel;uVar;hParam]
^if($uVar is "table"){
	^_append[TABLE;$sLabel;$uVar;$hParam]
	}{
	^_append[INFO;$sLabel;$uVar;$hParam]
	}
#end @table[]

###########################################################################
# info message (icon)
#
# sLabel - label
# uVar	  - any variable
# hParam - hash
# 		$.sFile[string]
#		$.sLine[integer]
#
@info[sLabel;uVar;hParam]
^_append[INFO;$sLabel;$uVar;$hParam]
#end @info[]

###########################################################################
# warning message (icon)
#
# sLabel - label
# uVar	  - any variable
# hParam - hash
# 		$.sFile[string]
#		$.sLine[integer]
#
@warn[sLabel;uVar;hParam]
^_append[WARN;$sLabel;$uVar;$hParam]
#end @warn[]

###########################################################################
# error message (icon)
#
# sLabel - label
# uVar	  - any variable
# hParam - hash
# 		$.sFile[string]
#		$.sLine[integer]
#
@error[sLabel;uVar;hParam]
^_append[ERROR;$sLabel;$uVar;$hParam]
#end @error[]

###########################################################################
# exception message (icon)
#
# hException -  $exception
#
@exception[hException][sLine]
$sLine[[{"Type":"EXCEPTION"},{"Class": "$caller.CLASS_NAME ", "Message": "$hException.source ($hException.comment) ", "File": "$hException.file ", "Line": "(${hException.lineno}:$hException.colno) ", "Type": "$hException.type ", "Trace": []}]]
^tLog.append{^sLine.length[]|$sLine|}
#end @error[]

###########################################################################
@print[][sHeader]
$response:X-Wf-Protocol-1[$self.sProtocol]
$response:X-Wf-1-Plugin-1[$self.sPlugin]
$response:X-Wf-1-Structure-1[$self.sStructure]
^tLog.menu{
	$sHeader[X-Wf-1-1-1-^tLog.line[]]
	$response:$sHeader[$tLog.str]
	}

###########################################################################
@_append[sTypeL;sLabel;uVar;hashParam][sLine]
$self.sType[$sTypeL]
$self.hParam[^hash::create[$hashParam]]
$sLine[[{"Type":"$sType"^if(def $sLabel){,"Label":"^taint[js][$sLabel]"}^if(def $hParam.sFile){,"File":"$hParam.sFile"}^if(def $hParam.sLine){,"Line":$hParam.sLine}^if(def $hParam.sColor){,"Color":"$hParam.sColor"}^if(def $hParam.sCollapsed){,"Collapsed":"$hParam.sCollapsed"}},^_object2js[$uVar]]]
^tLog.append{^sLine.length[]|$sLine|}
#end @_append[]

###########################################################################
# carefull: for empty strings returned 'null'
@_object2js[uVar]
$result[]
^if(!(
	($uVar is "bool" && ($uVar && ^self._return[true] || ^self._return[false]))
	|| (!def $uVar && ^self._return[null])
	|| ($uVar is "string" && ^self._return[^self._string2js[$uVar]])
	|| ($uVar is "double" && ^self._return[$uVar])
	|| ($uVar is "int" && ^self._return[$uVar])
	|| ($uVar is "table" && (($uVar && ^self._return[^if($sType eq "TABLE"){^self._table2js[$uVar]}{^self._array2js[$uVar]}]) || ^self._return[null]))
	|| ($uVar is "hash" && (($uVar && ^self._return[^self._hash2js[$uVar]]) || ^self._return[null]))
	|| ($uVar is "date" && ^self._return[new Date(^uVar.unix-timestamp[]000)])
)){
	^self._return[null]
}
#end @_object2js[]

###########################################################################
@_return[sType]
$caller.result[$sType]
$result(1)
#end @_return[]

###########################################################################
@_string2js[sData]
$result["^taint[js][$sData]"]
#end @_string2js[]

###########################################################################
@_hash2js[hData][bIsHashOfBool;sKey;uValue]
$bIsHashOfBool(1)
# check if our hash is hash of bool with only 'true' values
^hData.foreach[sKey;uValue]{
	^if($bIsHashOfBool && !($uValue is "bool" && $uValue)){
		$bIsHashOfBool(0)
	}
}

^if($bIsHashOfBool){
	$result[[^hData.foreach[sKey;]{^self._string2js[$sKey]}[, ]]]
}{
	^rem{ *** in other case return associated array *** }
	$result[{^hData.foreach[sKey;uValue]{^self._string2js[$sKey]:^if($uValue is "double" || $uValue is "bool" || $uValue is "int"){^self._object2js($uValue)}{^self._object2js[$uValue]}}[, ]}]
}
#end @_hash2js[]



###########################################################################
@_table2js[tData][tKeys]
$tKeys[^tData.columns[]]
^if($tKeys){
	$result[[[^tKeys.menu{^self._string2js[$tKeys.column]}[,]],^tData.menu{[^tKeys.menu{^self._string2js[$tData.[$tKeys.column]]}[, ]]}[, ]]]
}{
	^rem{ *** nameless tables are deprecated, lah. *** }
	$result[null]
}
#end @_table2js[]

###########################################################################
@t_table2js[tData][tKeys]
$tKeys[^tData.columns[]]
^if($tKeys){
	$result[[^tKeys.menu{^self._string2js[$tKeys.column]}[,]],^tData.menu{[^tKeys.menu{^self._string2js[$tData.[$tKeys.column]]}[, ]]}[, ]]
}{
	^rem{ *** nameless tables are deprecated, lah. *** }
	$result[null]
}
#end @_table2js[]


###########################################################################
@_array2js[tData][tKeys]
$tKeys[^tData.columns[]]
^if($tKeys){
	$result[[^tData.menu{{^tKeys.menu{^self._string2js[$tKeys.column]:^self._string2js[$tData.[$tKeys.column]]}[, ]}}[, ]]]
}{
	^rem{ *** nameless tables are deprecated, lah. *** }
	$result[null]
}
#end @_array2js[]