parser

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

 

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

debug.p

Никита Козин 07.09.2006 11:25 / 07.09.2006 11:26

Очень удобно выводить отладочную информацию в процессе работы скрипа. ASharky писал класс visualization.p, но мне было неудобно использовать такое длинное название, я его немного исправил.

Использование:
^debug:print[$form:fields]
^debug:print[$form:tables]
# или сокращенная запись:
^MAIN:p[$form:fields]
Код класса:
###################################################################################################
# $Id: debug.p, v 1.92 2006/01/31 22:50:14 fant-ik@yandex.ru Exp $
# BASED:
# $Id: visualization.p,v 1.91 2005/10/19 15:52:40 asharky@opensea.ru Exp $
###################################################################################################
@CLASS
debug



@auto[]
$MAIN:p[$self.print]




@print[object;toFile][_strOut;_now]
###################################################################################################
$_strOut[^taint[optimized-as-is][
	^if(!def $object){
		^if($object is "bool"){
			^_bool[$object]
		}{
			^_void[$object]
		}
	}{
		^if($object is "date"){^_date[$object]}
		^if($object is "file"){^_file[$object]}
		^if($object is "image"){^_image[$object]}
		^if($object is "bool"){^_bool[$object]}
		^if($object is "table"){^_table[$object]}
		^if($object is "string"){^_string[$object]}
		^if($object is "int" || $object is "double"){^_double[$object]}
		^if($object is "hash"){^_hash[$object]}
	}
]]
^if(def $toFile){
	$_now[^date::now[]]
	$_strOut[<br />Begin (${_now.day}.${_now.month}.${_now.year} ${_now.hour}^:${_now.minute}^:${_now.second})^:${_strOut}End<br />]
	^_strOut.save[append;$toFile]
}{
	$result[$_strOut]
}
#end @debugShowObject[]




@_string[text;shash]
###################################################################################################
$result[^text.replace[^table::create[nameless]{^taint[^#0A]	<br>}]^if(!def $shash){ (string)}]
#end @_string[]




@_double[d;shash]
###################################################################################################
$result[$d^if(!def $shash){( (int/double))}]
#end @_double[]




@_bool[b;shash]
###################################################################################################
$result[^if($b){TRUE}{FALSE}^if(!def $shash){ (bool)}]
#end @_bool[]




@_void[v;shash]
###################################################################################################
$result[^if(!def $shash){Значение не присвоено (void)}]
#end @_void[]




@_file[f][_f]
###################################################################################################
^try{
	$_f[^file::stat[$f.name]]
	$result[Файл <strong>^file:fullpath[$f.name]</strong><br />
		Размер: <strong>$_f.size байт</strong><br />
		Создан: <strong>${_f.cdate.day}.${_f.cdate.month}.${_f.cdate.year} в 
		${_f.cdate.hour}ч.${_f.cdate.minute}мин</strong><br />
		Изменен: <strong>${_f.mdate.day}.${_f.mdate.month}.${_f.mdate.year} в 
		${_f.mdate.hour}ч.${_f.mdate.minute}мин</strong><br />
		Последний раз обращение к файлу производилось <strong>${_f.adate.day}.${_f.adate.month}.${_f.adate.year} в 
		${_f.adate.hour}ч.${_f.adate.minute}мин.</strong><br />
		MIME-тип файла: <strong>$_f.content-type</strong><br />
		^if(${_f.content-type} eq "text/plain" || ${_f.content-type} eq "text/html"){
		Первые 100 символов файла:<br />
		<strong><i>^f.text.left(100)...</i></strong><br />
		Последние 100 символов файла:<br />
		<strong><i>...^f.text.right(100)</i></strong><br />
		}
	]
}{
	$exception.handled(1)
	$result[<font color="red">^file:fullpath[$f.name] (file) не найден!</font>]
}
#end @_file[]




@_date[d]
###################################################################################################
$result[${d.day}.${d.month}.${d.year}, ${d.hour}:${d.minute}<small>:${d.second}</small>, $d.yearday день года]
#end @_date[]




@_image[i]
###################################################################################################
$result[^if(def $i.src){^i.html[]}{Графический объект созданный Parser3.}<br />
Высота изображения^: ${i.height}px, ширина^: ${i.width}px<br />
^if(def $i.exif){^_hash[$i.exif]}{EXIF информация в файле отсутствует!<br />}]
#end @_image[]




@_table[t][_tcol;_t;_path]
###################################################################################################
^if(!^t.columns[]){
	$_path[/^math:uid64[]]
	^t.save[$_path]
	$_t[^table::load[$_path]]
	^file:delete[$_path]
	Объект является <strong>nameless</strong> таблицей!<br />
	^_table[$_t]
}{
	$_tcol[^t.columns[]]
	$result[<table class="debug" cellSpacing="0" cellPadding="5" border="1">
	<tr align="center">
	^_tcol.menu{
		<td><strong>$_tcol.column</strong></td>
	}
	</tr>

	^t.menu{
	<tr>
		^_tcol.menu{
		<td>$t.[$_tcol.column]</td>
		}
	</tr>
	}
	</table>]
}
#end @_table[]




@_hash[h][k;v;_sdiv]
###################################################################################################
^if(!def $caller.$_sdiv){$_sdiv(0)}

^_sdiv.inc(50)

^h.foreach[k;v]{<div style="padding-left: ${_sdiv}px">
	^if($v is "int" || $v is "double"){
		$ls[^(]
		$rs[^)]
	}{
		$ls[^[]
		$rs[^]]
	}
	<strong>^$.${k}$ls</strong>
	^if(!def $v){
		^if($v is "bool"){
			^_bool[$v;1]<br />
		}{
			^_void[$v;1]<br />
		}
	}{
		^if($v is "bool"){<b>^_bool[$v;1]</b>}
		^if($v is "string"){^_string[$v;1]}
		^if($v is "date"){^_date[$v]}
		^if($v is "image"){<div style="padding-left: 50px">^_image[$v]</div>}
		^if($v is "file"){<div style="padding-left: 50px">^_file[$v]</div>}
		^if($v is "table"){<div style="padding-left: 50px">^_table[$v]</div>}
		^if($v is "int" || $v is "double"){^_double($v;1)}
		^if($v is "hash"){
			^_sdiv.inc(50)
			^_hash[$v]
			^_sdiv.dec(50)
		}
	}
	<strong>$rs</strong>
</div>}
#end @_hash[]


@rusage[comment;toFile][v;now;prefix;message;line;usec]
$v[$status:rusage]
$now[^date::now[]]
$usec(^v.tv_usec.double[])
$prefix[[^now.sql-string[].^usec.format[%06.0f]] $env:REMOTE_ADDR: $comment]
$message[$v.utime	$v.stime	$request:uri]
$line[$prefix	$message	^#0A]
^line.save[append;^if(def $toFile){$toFile}{/rusage.log}]
$result[]
# end @rusage[]


@musage[comment][v;now;prefix;message;line]
$v[$status:memory]
$now[^date::now[]]
$prefix[[^now.sql-string[]] $env:REMOTE_ADDR: $comment]
$message[$v.used	$v.free	$v.ever_allocated_since_compact	$v.ever_allocated_since_start	$request:uri]
$line[$prefix	$message ^#0A]
^line.save[append;^if(def $toFile){$toFile}{/musage.log}]
$result[]
# end @musage[]