parser


Misha v.3 [February 17, 2007]

Когда я только начинал использовать Parser 3 (вместо Parser 2) мне очень не хватало операторов ^ifdef[] & Co. Поэтому я написал свои, пользовательские операторы, и использовал их.

А затем я решил, что плодить кучу сущностей в MAIN — незачем, и вынес их в отдельные статические классы (а заодно выкинул методы, не используемые мной больше, в результате размер четырех новых файлов составляет примерно 10 КБ против 15 КБ — одного старого). Тем не менее если вам лениво писать префиксы классов (^Lib:trim[$sVar]) и вы хотите использовать старый синтаксис (^trim[$sVar]), то входящие в архив файлы LibComp.p и LibCompFull.p помогут вам, т.к. содержат в себе операторы-обертки, а также те операторы, которые я счёл бесполезными и не включил в свою обновлённую библиотеку.

В новой библиотеке улучшен метод проверки формата email адреса. Он конечно не считает корректными все email адреса, которые должны таковыми считаться согласно RFC 822, тем не менее... Посмотреть на различия старого, нового метода и метода, проверяющего адрес согласно RFC (размер регулярного выражения — более 6 КБ!), вы можете на этой странице.

Lib.p:
###########################################################################
# cut trailing and leading chars $sChars (whitespaces by default) for $sText
@trim[sText;sChars]


###########################################################################
# print link to $sUrl with attributes $uAttr (string or hash) if $sUrl specified, otherwise just print $sLabel
@href[sUrl;sLabel;uAttr]


###########################################################################
# set location header for redirect to $sUrl and prevent cacheing
# $.bExternal options allow 'external' redirect
@location[sUrl;hParam]


###########################################################################
# check email format
@isEmail[sEmail]


###########################################################################
# print $iNum as a binary string
@dec2bin[iNum;iLength]


###########################################################################
# make hash of tables from $tData. if $sKeyColumn not specified 'parent_id' will be used
@createTreeHash[tData;sKeyColumn]


###########################################################################
# print number. options $.iFracLength, $.sThousandDivider and $.sDecimalDivider are available
@numberFormat[dNumber;hParam]


###########################################################################
# operator look over all hash elements with specified order
@foreach[hHash;sKeyName;sValueName;jCode;sSeparator;sDirection]


###########################################################################
# return hash with parser version
@getParserVersion[]


###########################################################################
# every odd call return $sColor1, every even - $sColor2, without parameters - reset sequence
@color[sColor1;sColor2]


FileSystem.p:
###########################################################################
# return size for specified file or file with specified filename
@getFileSize[uFile]


###########################################################################
# print string with file size. $.hName with bytes/KB/MB texts $.sDecimalDivider and $.sFormat can be specified
@printFileSize[iSize;hParam]


###########################################################################
# copy file
@fileCopy[sFileFrom;sFileTo]


###########################################################################
# with $.bRecursive(true) all subdirs will be copyed
@dirCopy[sDirFrom;sDirTo;hParam]


###########################################################################
# with $.bRecursive(true) all subdirs will be deleted
@dirDelete[sDir;hParam]


Doc.p:
###########################################################################
# print $xDoc as string without DOCTYPE and XML declaration
@toString[xDoc]


Node.p:
###########################################################################
# print $xNode value as string (like ^xdoc.string[])
@toString[xNode;sRootTag]


###########################################################################
# go through all nodes in $hNodeList and execute $jCode
@foreach[hNodeList;hNodeName;sNode;sAttr;jCode;sSeparator]


###########################################################################
# go through all children for $xParent and execute $jCode
@foreachChild[xParent;hNodeName;sNode;sAttr;jCode;sSeparator]


###########################################################################
# get children of $xParent as hash
@getChildren[xParent;hNodeName]


###########################################################################
# return node attrubutes (or string with attributes) as hash
@getAttributes[uData]


###########################################################################
# print hash with attributes as attr's string
@printAttributes[uData;hExclude]


Скачать:
Lib.zip (19.05.2008  10.0 KB)
Архив файла со статическими классами Lib.p, FileSystem.p, Doc.p, Node.p, Convert.p, ArrayList.p, ArrayListEnumerator.p и классами, обеспечивающими обратную совместимость со старыми операторами
lib.1.69.zip (26.12.2006  4.6 KB)
Старый архив с пользовательскими операторами, обновляться больше не будет