Фильтр “CF_interpreter” Документ Статус Дата последнего изменения Использованные обозначения –1– подсистема “ CF_interpreter ”. Версии Alex Ponomarenko Alex Ponomarenko Содержание 1. Команды интерпретатора......................................................................................................2 1.1. IF ...............................................................................................................................................2 1.2. IF1 ............................................................................................................................................2 1.3. insertVar ................................................................................................................................3 1.4. loop ..........................................................................................................................................3 1.5. setVar ......................................................................................................................................4 1.6. math ........................................................................................................................................4 1.7. if2 ..............................................................................................................................................4 1.8. loopMainArray ......................................................................................................................6 1.9. for .............................................................................................................................................6 1.10. setAr ....................................................................................................................................6 1.11. exec......................................................................................................................................7 1.12. loopAssoc ...........................................................................................................................7 1.13. if3 ..........................................................................................................................................8 1.14. findInMA .............................................................................................................................8 1.15. echoMA ...............................................................................................................................8 1.16. # ...........................................................................................................................................8 1.17. getValMA ............................................................................................................................9 1.18. getRecordsNumberMA ..................................................................................................9 1.19. getStrLen ...........................................................................................................................9 Фильтр “CF_interpreter” 1. –2– Команды интерпретатора packed value – это константа, если она указана в одинарных кавычках, либо имя переменной интерпретатора, если она указана без одинарных кавычек Обозначения: красным цветом указаны изменения по сравнению с предыдущей версией 1.1. IF команда IF Описание Алгоритм IF позволяет вывести содержимое блока <cmd> </cmd> при выполнении условия. Поддеррживается ветка @else@ Интерфейс: if(txtVarName, txtOp, txtValue) txtVarName: packed value txtOp: {==,!=,<=,<,gt,gte} txtValue – имя переменной интрепретатора Пример: <cmd process="if" params="'txtVal',==,txtVal"></cmd> <cmd process="if" params="'txtVal',==,txtVal"> … @else@ … </cmd> 1.2. IF1 IF1 Алгоритм IF1 позволяет вывести содержимое блока <cmd> </cmd> при выполнении условия равенства одному из значений Интерфейс: if(txtVarName, txtOp, valuesList) txtVarName: packed value txtOp: {==or} valuesList := <значение> | <значение>\|<Список значений> (\| означает, что символ | используется для разделения элементов списка значений) Пример: <cmd process="if1" params="'txtVal',==or,txtVal|txtVal1|txtVal2"></cmd> <cmd process="if1" params="'txtVal',==or,txtVal|txtVal1|txtVal2">… …</cmd> @else@ Фильтр “CF_interpreter” –3– 1.3. insertVar insertVar Алгоритм “insertVar” позволяет вставить в указанное место текста значение переменной (name), которая была передана в интерпретатор Пример: <cmd process="insertVar" varName="workDir"></cmd> (эта инструкция обрабатывается в порядке обработки других инструкций cmd) Пример2: <insertVar varName="workDir"> (эта инструкция обрабатывается при первой возможности, т.е. до обработки стандартных инструкций вроде cmd) 1.4. loop loop Алгоритм “loop” позволяет повторить указанный кусок текста указанное число раз Пример1: <cmd process="loop" varName="workDir"></cmd> <cmd process="loop" varName="text"> <td id="chapterInfo"> @loopIndex; @text; @count; </td> </cmd> (вставить на место последовательности @text; - значение текущей ячейки одномерного array-массива, который передан в интерпретатор под именем “text”) (вставить на место @loopIndex; - текущее значение переменной цикла (цикл начинается с 0) (вставить на место @count; - количество элементов в массиве) $interpreterFilter->setVar("text ", array(“text1”, “text2”)); означает: поторить цикл 2 раза, вставить на место “@text;” сначала “text1”, потом - “text2”; вставить на место “@loopIndex;” сначала “0”, потом “1” Пример2: <cmd process="loop" varName="text"> <td id="chapterInfo"> @loopIndex; @text-0; @text-1; </td> </cmd> (если значение переменной text на очередной итерации – массив array(), то выполняется замена @text-0; на первый элемент массива, @text-1; на второй, и т.д. Т.е. внутрь интерпретатора можно передать одномерный array-массив одномерных array-массивов, и на очередной итерации можно адресоваться к элементу одного из n array-массивов (при адресации нумерация начинается с 0) (вставить на место @count; - количество элементов в массиве) Фильтр “CF_interpreter” –4– 1.5. setVar setVar Алгоритм “setVar” позволяет запомнить в переменной интерпретатора значение между парными тэгами <cmd></cmd> 1.6. math math Алгоритм “math” позволяет вычислить значение выражения. Интерфейс: math (txtVarName, txtOp, valuesList) param1: const без кавычек txtOp: {+ | -} param2: const без кавычек Пример: <cmd process="math" params="2,+,10"></cmd> 1.7. if2 Фильтр “CF_interpreter” if2 –5– Алгоритм IF2 позволяет вывести содержимое блока <cmd> </cmd> при выполнении условия. Пддерживается ветка else @if2_else_cmd@ Интерфейс: if(leftPart, txtOp, valuesList) leftPart: packed value txtOp: {==, != , gt, lte } valuesList: {packed value, packed value \| valuesList } если команда == и справа – список значений, то предполагается ИЛИ: (==) || (==) если команда =! и справа – список значений, то предполагается И: (!=) && (!=) если команда gt и справа – список значений, то предполагается И: (>) && (>) Пример1: <cmd process="if2" params="var1,==,’2’"> … </cmd> Пример2: <cmd process="if2" params="var1,==,’2’|var2"> … </cmd> Пример3: <cmd process="if2" params="’2’,==,’2’"> … </cmd> Пример4: <cmdX process="if2" params="’2’,==,’2’"> … @if2_else_cmdX@ </cmdX> Фильтр “CF_interpreter” –6– 1.8. loopMainArray loopMainA Алгоритм loopMainArray позволяет повторить указанный кусок текста указанное rray число раз. В качестве основы цикла используется основной массив, который хранится в указанной переменной интерпретатора Интерфейс: loopMainArray (varName : string, [startIndex : int ], [endIndex : int]) Вероятный пример1: <cmd1 process=”loopMainArray” varName=”arrayName”> <loopMainArray-cmd1 cmd=”myGet,1,@cmd1-curRecNumber@”></loopMainArraycmd1> <loopMainArray-cmd1 cmd=”myGet,NODE_ID,@cmd1-curRecNumber@”> </loopMainArray-cmd1> <loopMainArray-cmd1 cmd=”myGetData,’NODE_DATA’,’@cmd1curRecNumber@’,’w’”></loopMainArray-cmd1> </cmd1> здесь в параметрах после myGet можно указывать PHP-константы 1.9. for for for(loopVarName, startVal, compareCmd, stopVal, changeCounter) compareCmd: {lt, elt} Вероятный пример1: <cmd1 process=”for” params=”i,1,lt,5,1”> @i;<br> </cmd1> 1.10. setAr setAr Алгоритм setAr присваивает внутренней переменной array-массив setAr(varName,val1,val2,…) Вероятный пример1: <cmd1 process=”setAr” params=”varName,1,2,3,4,5”></cmd1> Фильтр “CF_interpreter” –7– 1.11. exec exec Алгоритм exec вызывает внутреннюю инструкцию интерпретатора Вероятный пример1: <cmd1 process=”exec” code=”get,eval,APP_WINDOW_NAME”></cmd1> Вероятный пример2: <cmd1 process=”exec” code=”eval,APP_WINDOW_NAME”></cmd1> Вероятный пример3: <cmd1 process=”exec” SYS_FW_FP__NAME”></cmd1> code=”get,mainAr,internalVarName,1D,eval, Вероятный пример4: <cmd1 process=”exec” code=”get,mainAr,internalVarName,1D,int,2”></cmd1> Вероятный пример5: <cmd1 process=”exec” code=”get,mainAr,internalVarName,2D,eval, SYS_FW_FP__NAME,eval,1”></cmd1> Вероятный пример6: <cmd1 process=”exec” SYS_FW_FP__NAME,int,1”></cmd1> code=”get,mainAr,internalVarName,2D,eval, 1.12. loopAssoc loopAssoc Алгоритм loopAssoc (модификация loop) - цикл по масиву ассоциативных массивов Пример1: <cmd process="loopAssoc" varName="doc"> @doc-key; </cmd> Пример2: <cmd process="loopAssoc" varName="doc"> @doc; @loopIndex; @count; </cmd> Фильтр “CF_interpreter” –8– 1.13. if3 if3 Алгоритм IF3 позволяет вывести содержимое блока <cmd> </cmd> при выполнении всех условий <cmd process="if3" params="’2’,==,’2’"> … @if3_else_cmd@ </cmd> 1.14. findInMA findInMA Алгоритм findInMA(X,Y,Z,Q) ищет в основном массиве X запись, у которой в поле Y находится значение Z". номер записи записывается в переменную интерпретатора Q Пример: <cmd0 process="findInMA" params="'partitionNode','NODE_ID',nodeID,'recNum'"></cmd0> 1.15. echoMA echoMA Алгоритм echoMA(X) распечатываем содержимое основного массива X (массив должен храниться в переменной интерпретатора под именем X) Пример: <cmd0 process="echoMA" params="'partitionNode'"></cmd0> nodeID=<insertVar varName="nodeID"> 1.16. # # можно закомментировать команду. Тогда она не выполняется и возвращает пустую строку Пример: <cmd0 process="#echoMA" params="'partitionNode'"></cmd0> … Распечатываем: recNum=<cmd0 process="insertVar" varName="recNum"></cmd0> ВНИМАНИЕ! для использования полученного значения нужно использовать не <insertVar varName=” recNum”>, а <cmd0 process="insertVar" varName="recNum"></cmd0> Фильтр “CF_interpreter” –9– 1.17. getValMA getValMA Алгоритм getValMA(X,Y,Z,Q) извлекает из поля (Z) записи (Y) основного массива (X) значение, и помещает полученное значение в переменную интерпретатора (Q) (массив должен храниться в переменной интерпретатора под именем X) <cmd0 process="getValMA" params="'partitionNode','NODE_CAPTION',recNum,'curPartitionCaption'"></cmd0> … Распечатываем: curPartitionCaption=<cmd0 process="insertVar" varName="curPartitionCaption"></cmd0> 1.18. getRecordsNumberMA getRecords Алгоритм getRecordsNumberMA(X,Q) вычисляет количество записей в основном NumberM массиве (X), и помещает полученное значение в переменную интерпретатора (Q) A (массив должен храниться в переменной интерпретатора под именем X) Интерфейс: getRecordsNumberMA(X,Q) X: packed value Q: packed value Пример1: <cmd0 process="getRecordsNumberMA" params="'partitionNode', 'recsNumber'"></cmd0> … Распечатываем: recsNumber=<cmd0 process="insertVar" varName="recsNumber"></cmd0> 1.19. getStrLen getStrLen Алгоритм getStrLen(X,Y) вычисляет длину строки (X), и помещает полученное значение в переменную интерпретатора (Y) Интерфейс: getStrLen(X,Y) X: packed value Q: packed value Пример: <cmd0 process="getStrLen" params="shortInfo2,'shortInfo2Len'"></cmd0> Распечатываем: len=<cmd0 process="insertVar" varName="shortInfo2Len"></cmd0> Фильтр “CF_interpreter” – 10 –