parser

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

 

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

Обновил класс для форматированного вывода двух дат :)

Никита Козин 21.04.2007 10:43

Обновил класс для форматированного вывода двух дат

Работать можно, предварительно создав объект:
$oMdate[^Mdate::create[
	^rem{ *** Тип вывода, может быть html или xml *** }
	$.sMode[html]
	^rem{ *** Форматные строки: *** }
	$.sFormatString[%o / %n]
	$.sDtfFormatString[%d.%m.%Y %H:%M]
	$.sDtfLocale[rr-locale]
	^rem{ *** Обертка для свежей даты: *** }
	$.sNewTagName[font]
	$.sNewAttributes[color="#CC0000"]
	^rem{ *** Обертка для старой даты (отсутствует, если не определена явно): *** }
	$.sOldTagName[font]
	$.sOldAttributes[color="#CCCCCC"]
	^rem{ *** Обертка для всего вывода *** }
	$.sCanvasTagName[]
	$.sCanvasAttributes[]
	^rem{ *** Дата, начиная с которой дата считается свежей *** }
	$.dtLimit[^date::now(-1)]
]]
^oMdate.print[$dt1;$dt2]
Также можно работать, как со статическим классом:
$Mdate:sMode[xml]
$Mdate:sDtfLocale[ri-locale]
^Mdate:print[$dt1;$dt2]
Если в качестве типа вывода используется XML, то свежая дата по-умолчанию заключается в тег <new>, а старая, соответственно, в тег <old>

Код класса:
@CLASS
Mdate



@USE
dtf.p



@auto[]
^self.declareVariables[]
# end @auto[]



@create[hParams]
^self.declareVariables[$hParams]
# end @create[]



@declareVariables[hParams]
$hParams[^hash::create[$hParams]]
^if(def $hParams.sMode && ^hParams.sMode.lower[] eq "xml"){
	$sMode[xml]
}{
	$sMode[html]
}
^rem{ *** Форматные строки *** }
^if(def $hParams.sFormatString){
	$sFormatString[$hParams.sFormatString]
}{
	$sFormatString[%o / %n]
}
^if(def $hParams.sDtfFormatString){
	$sDtfFormatString[$hParams.sDtfFormatString]
}{
	$sDtfFormatString[%d.%m.%Y %H:%M]
}
^if(def $hParams.sDtfLocale){
	^dtf:setLocale[$dtf:[$hParams.sDtfLocale]]
}

^rem{ *** Обертка для свежей даты *** }
^if(def $hParams.sNewTagName){
	$sNewTagName[$hParams.sNewTagName]
}{
	$sNewTagName[font]
}
^if(def $hParams.sNewAttributes){
	$sNewAttributes[$hParams.sNewAttributes]
}{
	$sNewAttributes[color="#CC0000"]
}

^rem{ *** Обертка для старой даты *** }
^if(def $hParams.sOldTagName){
	$sOldTagName[$hParams.sOldTagName]
}
^if(def $hParams.sOldAttributes){
	$sOldAttributes[$hParams.sOldAttributes]
}

^rem{ *** Обертка для всего вывода *** }
$sCanvasTagName[$hParams.sCanvasTagName]
$sCanvasAttributes[$hParams.sCanvasAttributes]

^rem{ *** Дата, начиная с которой дата считается свежей *** }
^if(def $hParams.dtLimit){
	$dtLimit[^dtf:create[$hParams.dtLimit;^date::now(-1)]]
}{
	$dtLimit[^dtf:create[^date::now(-1)]]
}
# end @declareVariables[]



@print[dt1;dt2][result]
$dt1[^dtf:create[$dt1]]
^if(def $dt2){
	$dt2[^dtf::create[$dt2]]
}
^if(def $self.sCanvasTagName){
	^_printTag[^_printDate[$dt1;$dt2];$self.sCanvasTagName;$self.sCanvasAttributes]
}{
	^_printDate[$dt1;$dt2]
}
# end @print[]



@_printDate[dt1;dt2]
^if(!def $dt2 || $dt1 == $dt2){
	$result[^_printDateString[$dt1]]
}{
	$result[^self.sFormatString.match[%(.)][g]{^switch[$match.1]{
		^case[o]{^_printDateString[$dt1]}
		^case[n]{^_printDateString[$dt2]}
		^case[DEFAULT]{%$match.1}
	}}]
}
# end @_printDate[]



@_printDateString[dt][result;sDt]
$sDt[^dtf:format[$self.sDtfFormatString;$dt]]
^if($dt > $self.dtLimit){
	^if($self.sMode eq "xml"){
		^_printTag[$sDt;new]
	}{
		^_printTag[$sDt;$self.sNewTagName;$self.sNewAttributes]
	}
}{
	^if($self.sMode eq "xml"){
		^_printTag[$sDt;old]
	}{
		^_printTag[$sDt;$self.sOldTagName;$self.sOldAttributes]
	}
}
# end @_printDateString[]



@_printTag[sData;sTag;sAttributes]
^if(def $sTag){
	$result[<$sTag^if(def $sAttributes){ $sAttributes}>^sData.trim[]</$sTag>]
}{
	$result[^sData.trim[]]
}
# end @_printTag[]


  • Обновил класс для форматированного вывода двух дат :), Никита Козин [M] 21.04.2007 10:43