Обработка шаблонов
По-моему, дольше искать. Бери любой скриптовый язык и сделай за полминуты.
с
------------- .tmpl
#for $i in $l1
#for $j in $l2
blahblah i blahblah j
#end for
#end for
-------------- .py
data = getInput
return renderTemplate(data)
без
-------------- .py
data = getInput
tmpl = """ blahblah %s blahblah %s """
return '\n'.join(tmpl%(i,j) for i in data['l1'] for j in data['l2'])
Но потом осознал, что очень даже захочется произвольное количество параметров. Типа
def $clients = ...
def $servers = ...
def $ports =
allow ip from $client to $servers ports $ports
И вот тут уже начал задумываться, а может есть уже готовые решения на это.
А если и нету, то есть же всякие xslt, xml и что-то там еще, которые тоже являются шаблонами, которые генерят html (если я правильно понимаю). Может на них можно и не только www задачи решать, но и такую вот прикладную.
http://perl.apache.org/docs/tutorials/tmpl/comparison/compar...
Приложив немного усилий по поиску в инете, можно найти десятки шаблонизаторов для языка, который нравится больше.
Абстрактный пример для масона:
template.mhtml:
% for (my $i = 0; $i < 5; $i++) {
Здесь в тексте <% $value %> будет это значение.
Если строка начинается с процента, значит, это перловый код.
% }
<%init>
# Здесь можно код какой-нибудь написать
my $value = 123;
</%init>
<%args>
$arg0 => $ARGS{'paramtaram'},
$arg1 => $ARGS{'taramparam'},
</%args>
script.pl:
use strict;
use warnings;
use HTML::Mason;
my $output;
HTML::Mason::Interp->new (
comp_root => <путь к папке с шаблонами>,
out_method => \$output,
)->exec(
"/template.mhtml",
taramparam => 'asd',
paramtaram => 'dsa'
);
Тут вроде недавно что-то такое за бабки продавали, в одной из тем, лол.
видимо тогда я был занят другими идеями, что-то не вспомню похожей темы. А может просто пропустил ее.
def $clients = 192.168.1.1 192.168.2.1а если у ентих массивов будет разная длина? что делать?
def $servers = 192.168.1.2 192.168.2.2
я так понял, на вход подается так:
<шаблон>\n
<параметр> значение значение значение ...
<параметр2> значение значение значение ...
<параметр3> значение значение значение ...
в идеале параметры уже упорядочены.
тогда делаем так: шаблон загоняем в строку, остальные строки с параметрами - в массив. Потом делаем в шаблоне замену <параметр> -> %s, если такой параметр имеется (проверяем первые элементы строк массива).
Потом тупо итератором проходимся, считая каждую строку в массиве параметров как отдельный массив, и подставляя их в форматный вывод. Число параметров известно на стадии считывания, так что все должно работать
Это, так сказать, php-like решение. Извиняйте, сейчас занят, мб чуть позже напишу код
ipfw table 1 add ip2
ipfw table 1 add ip3
...
ipfw table 1 add ipn
ipfw table 2 add ip1
ipfw table 2 add ip2
ipfw table 2 add ip3
...
ipfw table 2 add ipn
ipfw add allow ip from 'table(1)' to 'table(2)'
ipfw add allow ip from 'table(2)' to 'table(1)'
видимо тогда я был занят другими идеями, что-то не вспомню похожей темы. А может просто пропустил ее.
<?php
$in=fopen("input","r");
$stream=fread($in,filesize('input';
fclose($in);
$strings=explode("\n",$stream);
for($i=1;$i<count($strings);$i++)
$strings[$i]=explode(" ",$strings[$i]);
replacer(1,$strings[0]);
function replacer($level,$str)
{
global $strings;
if ($level>=count($strings print($str."\n");
else
for ($i=1; $i<(count($strings[$level])-1); $i++ )
replacer($level+1,str_replace($strings[$level][0],$strings[$level][$i],$str;
return;
}
?>
Вот, наваял
Звиняй что на пхп и через анус, но щас утро раннее, сложно на что-то более серьезное переключиться.
allow ip from $clients to $servers ports $ports
$clients 192.168.1.1 192.168.2.1 .
$servers 192.168.1.2 192.168.2.2 .
$ports 21 23 80 137 445 1080 6667 8080 .
синтаксис такой, точка в конце обязательна, хотя это решается. Скрипт будет глючить, если на вход дать несколько одинаково названных параметров, но это тоже решается. ввод из файла 'input', но это думаю сам уже поправишь.
allow ip from 192.168.1.1 to 192.168.1.2 ports 21
allow ip from 192.168.1.1 to 192.168.1.2 ports 23
allow ip from 192.168.1.1 to 192.168.1.2 ports 80
allow ip from 192.168.1.1 to 192.168.1.2 ports 137
allow ip from 192.168.1.1 to 192.168.1.2 ports 445
allow ip from 192.168.1.1 to 192.168.1.2 ports 1080
allow ip from 192.168.1.1 to 192.168.1.2 ports 6667
allow ip from 192.168.1.1 to 192.168.1.2 ports 8080
allow ip from 192.168.1.1 to 192.168.2.2 ports 21
allow ip from 192.168.1.1 to 192.168.2.2 ports 23
allow ip from 192.168.1.1 to 192.168.2.2 ports 80
allow ip from 192.168.1.1 to 192.168.2.2 ports 137
allow ip from 192.168.1.1 to 192.168.2.2 ports 445
allow ip from 192.168.1.1 to 192.168.2.2 ports 1080
allow ip from 192.168.1.1 to 192.168.2.2 ports 6667
allow ip from 192.168.1.1 to 192.168.2.2 ports 8080
allow ip from 192.168.2.1 to 192.168.1.2 ports 21
allow ip from 192.168.2.1 to 192.168.1.2 ports 23
allow ip from 192.168.2.1 to 192.168.1.2 ports 80
allow ip from 192.168.2.1 to 192.168.1.2 ports 137
allow ip from 192.168.2.1 to 192.168.1.2 ports 445
allow ip from 192.168.2.1 to 192.168.1.2 ports 1080
allow ip from 192.168.2.1 to 192.168.1.2 ports 6667
allow ip from 192.168.2.1 to 192.168.1.2 ports 8080
allow ip from 192.168.2.1 to 192.168.2.2 ports 21
allow ip from 192.168.2.1 to 192.168.2.2 ports 23
allow ip from 192.168.2.1 to 192.168.2.2 ports 80
allow ip from 192.168.2.1 to 192.168.2.2 ports 137
allow ip from 192.168.2.1 to 192.168.2.2 ports 445
allow ip from 192.168.2.1 to 192.168.2.2 ports 1080
allow ip from 192.168.2.1 to 192.168.2.2 ports 6667
allow ip from 192.168.2.1 to 192.168.2.2 ports 8080
и для ipfw и pf это пойдет, но мне надо строить acl для Cisco, там такое не пройдет.
при этом шаблоны будут не нужны ( так понял ты пытаешься stateful firewall на коленке сделать таким образом)
Оставить комментарий
Sharp
Хочется счастья, а именно — какая нить прога, которой давался бы шаблон и список параметров. А она на выходе бы давала все подстановки параметров в шаблон.То есть, если указаны два параметра:
а в шаблоне есть строка
то на выходе хочется получить 4 строчки вида
В общем, есть ли какие-нить готовые для этого программы или надо самому писать? Если писать, то какие языки/средства для этого заточены больше всего?