parser

Полезные пользовательские операторы

Автор: Misha v.3 [20 мая 2011]
Версия: 1.22
Тэги: E-mail, XML, Файлы, Числа

Когда я только начинал использовать 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 $sURI with attributes $uAttr (string or hash) if $sURI specified, otherwise just print $sLabel
@href[sURI;sLabel;uAttr]


###########################################################################
# set location header for redirecting to $sURI and prevent caching
# $.bExternal option makes redirect 
@location[sURI;hParam]


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


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


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


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


###########################################################################
# looks over hash elements in specified order
@foreach[hHash;sKeyName;sValueName;jCode;sSeparator;sDirection]


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


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


###########################################################################
# creates 2-levels hash
@create2LevelHash[uData;sField1;sField2]


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]


###########################################################################
# $.bRecursive(true) - copy all subdirs
@copy[sFrom;tTo;hParam]


###########################################################################
# $.bRecursive(true) - copy all subdirs
@dirCopy[sDirFrom;sDirTo;hParam]


###########################################################################
# $.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 as string
@toString[xNode;sRootTag]


############################################################
# print $xNode VALUE as string: <aaa><bbb>ccc</bbb></aaa> => "<bbb>ccc</bbb>"
@valueToString[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]


Скачать:

Lib.zip (02.04.2012  13,1 КБ)
Архив файла со статическими классами Lib.p, FileSystem.p, Doc.p, Node.p, Convert.p, ArrayList.p, ArrayListEnumerator.p и классами, обеспечивающими обратную совместимость со старыми операторами