7 artemus - Programa de sustitución de texto mediante templates (moldes).
11 artemus [-i|--input=<fichero origen>]
12 [-o|--output=<fichero destino>]
13 [-d|--template_dir=<directorio>]
14 [-s|--start_mark=<marca inicio de comentario>]
15 [-e|--end_mark=<marca fin de comentario>]
18 artemus [-M|--dep] <fichero(s)>
31 ########################################
32 # Disposiciones iniciales y
34 ########################################
39 ########################################
41 ########################################
47 $prog_id="artemus 1.04";
49 # directorio de templates
50 $templ_dir="./templates";
55 # Marcas en los ficheros
57 $mid_mark="#artemus ";
73 # generar dependencias
77 ########################################
78 # Punto de entrada al programa
79 ########################################
81 if(!GetOptions
( "i|input=s" => \
$org,
82 "o|output=s" => \
$des,
83 "d|template_dir=s" => \
$templ_dir,
84 "s|start_mark=s" => \
$start_mark,
85 "e|end_mark=s" => \
$end_mark,
96 # Crea la marca de identificación
97 $mark=$start_mark . $mid_mark;
101 read_templates
() or die "Error leyendo templates $!";
116 ########################################
117 # Punto de salida del programa
118 ########################################
123 ########################################
124 # Métodos y funciones públicas
125 ########################################
133 return(undef) unless open(F
,"$templ_dir/VARS");
141 ($var,$value)=split("=",$_,2);
143 $vars{"\\\$".$var}=$value;
154 # Lee los templates del directorio
157 return(undef) unless opendir(DIR
, $templ_dir);
159 while($file=readdir(DIR
))
161 if(-f
$templ_dir."/".$file)
163 open(F
,$templ_dir."/".$file) or return(undef);
167 $templates{$file}.=$_;
181 # procesa origen y destino
184 my ($template,$params);
185 my ($t,$n,$c,$field,$value);
208 $org2 =~ s/\.[a-z]*$/\.src/g;
211 open(ORG
,$org2) or die "Imposible abrir $org2: $!";
221 open(DES
,">".$des) or die "Imposible crear $des: $!";
229 $vars{"\\\$base_rel"}=$base_rel;
230 $vars{"\\\$/"}=$base_rel;
232 print $o "$start_mark Built with $prog_id Angel Ortega 1999 $end_mark\n" unless($dep);
233 print $o "<meta name='generator' content='$prog_id'>\n\n";
243 # quita la marca inicial
249 # recoge el template y los parámetros
250 ($template,$params)=split(" ",$_,2);
252 # almacena en la lista de dependencias
254 $t=$templ_dir."/".$template;
256 push(@d,$t) unless grep(/\Q$t\E/,@d);
258 $t=$templates{$template} or
259 die "Template $template inexistente";
261 # recorre los parámetros haciendo
263 while(($field,$params)=split("=",$params,2))
265 $field="\\\$".$field;
271 # valor entre comillas
272 ($value,$params)=split(/"/,$params,2);
274 # extrae posibles espacios
279 # valor delimitado por espacio
280 ($value,$params)=split(" ",$params,2);
284 $t =~ s/$field/$value/g;
292 # sustituciones especiales
294 $now=scalar localtime;
295 $t =~ s/\$date/$now/g;
297 # sustitución de variables globales
299 foreach $i (keys %vars)
301 $t =~ s/$i/$vars{$i}/g;
304 print $o $t unless($dep);
307 print $o "$org: $org2 @d\n" if($dep);
314 ########### Fin del programa ############