first commit
authorMatteo Nastasi (mop) <nastasi@alternativeoutput.it>
Sat, 8 Dec 2007 16:12:09 +0000 (16:12 +0000)
committerMatteo Nastasi (mop) <nastasi@alternativeoutput.it>
Sat, 8 Dec 2007 16:12:09 +0000 (16:12 +0000)
README.txt [new file with mode: 0644]
cv_exa_mple.data [new file with mode: 0644]
cv_template.data [new file with mode: 0644]
cv_template.htm [new file with mode: 0644]
cv_template.tex [new file with mode: 0644]
populate.sh [new file with mode: 0755]

diff --git a/README.txt b/README.txt
new file mode 100644 (file)
index 0000000..eb31c39
--- /dev/null
@@ -0,0 +1,77 @@
+
+PREAMBLE
+
+  The program is uncomplete (but work)
+  The program is more a Bash exercize then a application
+  
+GOAL
+  Create a template system to produce multi-format/multi-language documents from a single
+  content file.
+  As test the template system is used to produce a curriculum vitae.
+
+IDEA
+  The basic idea behind this program is the possibility to have three type of files:
+  - an infrastructural template (one for each format)
+  - a user-independent multi-language content template file
+  - a user-dependent multi-language content file
+  and combine them to produce all the output matrix [ formats X languages ] using a single file
+  as content description with all the languages inside.
+
+USAGE
+  - copy cv_exa_mple.data to cv_<your-name>_<your-surname>.data
+  - edit it to describe your curriculum
+  - run ./populate.sh cv_<your-name>_<your-surname>
+  - at the end you will find
+      cv_<your-name>_<your-surname>.tex
+      cv_<your-name>_<your-surname>_eng.tex
+      cv_<your-name>_<your-surname>.htm
+      cv_<your-name>_<your-surname>_eng.htm
+
+SUPPORTED FILE FORMATS
+  Currently html and latex are supported.
+
+SUPPORTED LANGUAGES
+  populate.sh havn't limitation but the europecv module (included in the texlive-latex-extra package)
+  have some language limitation.
+
+CHAR-SET SUPPORT
+  UTF-8 is the only supported charset.
+
+FILE FORMAT
+  Simple tag
+    Definition:  "#T_<tagname>#"
+    Description: Each simple tag will be substitute by the content of T_<tagname> variable for the main
+                 language and of T_<tagname>_<lang> for the others languages; if the T_<tagname>_<lang>
+                 is not defined the program fault-back to the T_<tagname> var.
+
+  Row block 
+    Definition:  "##T_<blkname>:start## ... ##T_<blkname>:stop##"
+    Description: Each block will be replaced by N occurences of itself with valorized tags (see below
+                 for the policy to define N)
+
+  Indexed row tag
+    Definition:  (start of a block) ... "#T_<tagname>_X#" ... (stop of a block)
+    Description: Each indexed row tag is substitute with the T_<blkname>_<tagname>_1 variable in the first line,
+                 with the T_<blkname>_<tagname>_2 variable in the second and so on.
+                The number of blocks row (N) is defined by the index of the variable associated with
+                the first indexed row tag in the alphabetical order (in the group of index row tags
+                of the current block).
+
+  Simple row tag
+    Definition:  (start of a block) ... "#T_<tagname>#" ... (stop of a block)
+    Description: Each simple row tag is substitute with the T_<blkname>_<tagname> variable for each line
+                 of the block.
+
+  Recursive tag
+    Definition: ..[#T_[#T_]]#T_<tagname>#[#[#]]..
+    Description: If a tag substitution produce a new tag this tag will be substitute with the relate var value.
+                 Recursive tags can be found in or out blocks.
+
+
+REQUIREMENTS
+
+  Packages:
+    latex
+    pdflatex
+    texlive-latex-extra
+
diff --git a/cv_exa_mple.data b/cv_exa_mple.data
new file mode 100644 (file)
index 0000000..55e858d
--- /dev/null
@@ -0,0 +1,161 @@
+T_LASTNAME="qui-il-cognome"
+T_LASTNAME_ENG="here-the-lastname"
+T_FIRSTNAME="qui-il-nome"
+T_FIRSTNAME_ENG="here-the-lastname"
+
+T_ADDRESS="qui l'indirizzo"
+T_ADDRESS_ENG="here the address"
+
+T_EMAIL="qui/here l'email"
+
+T_NATION="qui la nazionalità"
+T_NATION_ENG="here the nationality"
+
+T_BIRTH="qui la data di nascita"
+T_BIRTH_ENG="here the birth day"
+
+T_GENDER="qui il sesso"
+T_GENDER_ENG="here the gender"
+
+# "Autorizzo il trattamento dei miei dati personali ai sensi del D.lgs. 196 del 30 giugno 2003."
+T_AUTHMGR="qui l'autorizzazione al trattamento dei dati personali"
+T_AUTHMGR_ENG="here the authorization to treat your data"
+
+# --- Work Experiences ---
+
+# only htm
+T_FUNC_CUR="qui la posizione correntemente occupata"
+T_FUNC_CUR_ENG="here the current role covered"
+
+T_ESPROF_DATE_1="qui l'intervallo di tempo (da - a) dell'ultimo impiego"
+T_ESPROF_DATE_1_ENG="here the time interval of the last job"
+
+T_ESPROF_FUNC_1="qui la posizione occupata nell'ultimo impiego"
+T_ESPROF_FUNC_1_ENG="here the role covered in the last job"
+
+T_ESPROF_ROLE_1="qui la descrizione del lavoro svolto nell'ultimo impiego"
+T_ESPROF_ROLE_1_ENG="here the description of the last job"
+
+T_ESPROF_COMP_1="qui nome e indirizzo dell'azienda dell'ultimo lavoro"
+T_ESPROF_COMP_1_ENG="here name and address of the last job"
+
+T_ESPROF_TYCO_1="tipo di azienda dell'ultimo impiego"
+T_ESPROF_TYCO_1_ENG="type of the company of the last job"
+
+# ------------------------
+T_ESPROF_DATE_2="qui l'intervallo di tempo (da - a) del penultimo impiego"
+T_ESPROF_DATE_2_ENG="here the time interval of the penultimate job"
+
+T_ESPROF_FUNC_2="qui la posizione occupata nel penultimo impiego"
+T_ESPROF_FUNC_2_ENG="here the role covered in the penultimate job"
+
+T_ESPROF_ROLE_2="qui la descrizione del lavoro svolto nel penultimo impiego"
+T_ESPROF_ROLE_2_ENG="here the description of the penultimate job"
+
+T_ESPROF_COMP_2="qui nome e indirizzo dell'azienda del penultimo lavoro"
+T_ESPROF_COMP_2_ENG="here the name and address of the penultimate job"
+
+T_ESPROF_TYCO_2="qui tipo di azienda del penultimo impiego"
+T_ESPROF_TYCO_2_ENG="here the type of the company of the penultimate job"
+# -----------------------------
+# 
+#  ... until the first job
+#
+# -----------------------------
+
+#
+# uncompleted schools
+#
+T_SCHSHORT_DATE_1="qui l'intervallo di tempo (da - a) dell'ultima scuola frequentata"
+T_SCHSHORT_DATE_1_ENG="here the time interval of the last school attended"
+
+T_SCHSHORT_MATS_1="qui le materie più importanti"
+T_SCHSHORT_MATS_1_ENG="here the most significant subjects"
+
+T_SCHSHORT_SCHO_1="qui il nome della scuola"
+T_SCHSHORT_SCHO_1_ENG="here the name of the school"
+
+#
+# completed schools
+#
+T_SCHLONG_DATE_1="qui l'intervallo di tempo (da - a) dell'ultima scuola frequentata"
+T_SCHLONG_DATE_1_ENG="here the time interval of the last school attended"
+
+T_SCHLONG_CERT_1="qualifica conseguita"
+T_SCHLONG_CERT_1_ENG="grade achieved"
+
+T_SCHLONG_MATS_1="qui le materie più importanti"
+T_SCHLONG_MATS_1_ENG="here the most significant subjects"
+
+T_SCHLONG_SCHO_1="qui il nome della scuola"
+T_SCHLONG_SCHO_1_ENG="here the name of the school"
+
+T_SCHLONG_LEVL_1="qui il livello di classificazione"
+T_SCHLONG_LEVL_1_ENG="here the classification level"
+
+# -----------------------------
+# 
+#  ... until the first school
+#
+# -----------------------------
+
+# ------------------------
+T_MOTHTON="qui la madrelingua"
+T_MOTHTON_ENG="here the mothertongue"
+
+T_LANGARR_LANG_1="qui la prima lingua straniera"
+T_LANGARR_LANG_1_ENG="here the first foreign language"
+
+# --- qui le valutazioni per la prima lingua straniera
+T_LANGARR_VAL_A_1="B_TWO"
+T_LANGARR_VAL_B_1="B_TWO"
+T_LANGARR_VAL_C_1="B_ONE"
+T_LANGARR_VAL_D_1="B_ONE"
+T_LANGARR_VAL_E_1="B_ONE"
+# -------------------------------
+# 
+#  ... until the last language
+#
+# -------------------------------
+
+
+T_CAPREL="qui le capacità relazionali"
+T_CAPREL_ENG="here the social compentences"
+
+T_CAPORG="qui le competenze organizzative"
+T_CAPORG_ENG="here the organizational competences"
+
+T_CAPTEC="qui le competenze tecniche"
+T_CAPTEC_ENG="here the technological competences"
+
+T_CAPINF="qui le competenze informatiche"
+T_CAPINF_ENG="here the computer competences"
+
+T_CAPART="qui le competenze artistiche"
+T_CAPART_ENG="here the artistic competences"
+
+T_CAPOTH="qui altre competenze"
+T_CAPOTH_ENG="here other competences"
+
+T_LICENCE="qui le patenti di guida"
+
+T_LICENCE_ENG="here the licence(s)"
+
+T_PUBLIC_PUB_1="qui l'ultima pubblicazione"
+T_PUBLIC_PUB_1_ENG="here the last publication"
+
+T_PUBLIC_PUB_2="qui la penultima pubblicazione"
+T_PUBLIC_PUB_2_ENG="here the penultimate publication"
+
+# -----------------------------------
+# 
+#  ... until the first publication
+#
+# -----------------------------------
+
+
+T_PERSINT="qui gli interessi personali"
+T_PERSINT_ENG="here the personal interests"
+
+
+
diff --git a/cv_template.data b/cv_template.data
new file mode 100644 (file)
index 0000000..80a9f53
--- /dev/null
@@ -0,0 +1,168 @@
+T_LANGUAGE="italian"
+T_LANGUAGE_ENG="english"
+
+T_PERS_INFO_TIT="Informazioni personali"
+T_PERS_INFO_TIT_ENG="Personal information"
+
+T_NAME_TIT="Cognome/i Nome/i"
+T_NAME_TIT_ENG="Surname(s)/First name(s)"
+
+T_ADDRESS_TIT="Indirizzo/i"
+T_ADDRESS_TIT_ENG="Address(es)"
+
+T_TEL_TIT="Telefono/i"
+T_TEL_TIT_ENG="Telephone(s)"
+
+T_EMAIL_TIT="Email"
+
+T_NATION_TIT="Nazionalità"
+T_NATION_TIT_ENG="Nazionality(-ies)"
+
+T_BIRTH_TIT="Data di nascita"
+T_BIRTH_TIT_ENG="Date of birth"
+
+T_GENDER_TIT="Sesso"
+T_GENDER_TIT_ENG="Gender"
+
+
+
+T_ESPROF_TIT="Esperienza professionale"
+T_ESPROF_TIT_ENG="Work experience"
+
+T_ESPROF_DATE_TIT="Date"
+T_ESPROF_DATE_TIT_ENG="Dates"
+
+T_ESPROF_FUNC_TIT="Funzione o posto occupato"
+T_ESPROF_FUNC_TIT_ENG="Occupation or position held"
+
+T_ESPROF_ROLE_TIT="Principali mansioni e responsabilità"
+T_ESPROF_ROLE_TIT_ENG="Main activities and responsabilites"
+
+T_ESPROF_COMP_TIT="Nome e indirizzo del datore di lavoro"
+T_ESPROF_COMP_TIT_ENG="Name and address of employer"
+
+T_ESPROF_TYCO_TIT="Tipo o settore d'attività"
+T_ESPROF_TYCO_TIT_ENG="Type of business or sector"
+
+
+
+T_SCHOOL_TIT="Istruzione e formazione"
+T_SCHOOL_TIT_ENG="Education and training"
+
+
+
+T_SCHSHORT_DATE_TIT="Date"
+T_SCHSHORT_DATE_TIT_ENG="Dates"
+
+T_SCHSHORT_MATS_TIT="Principali materie"
+T_SCHSHORT_MATS_TIT_ENG="Principal subjects/Occupational skills covered"
+
+T_SCHSHORT_SCHO_TIT="Nome e tipo d'istituto"
+T_SCHSHORT_SCHO_TIT_ENG="Name and type of organization providing education and training"
+
+
+
+T_SCHLONG_DATE_TIT="Date"
+T_SCHLONG_DATE_TIT_ENG="Dates"
+
+T_SCHLONG_CERT_TIT="Certificato o diploma ottenuto"
+T_SCHLONG_CERT_TIT_ENG="Title of qualification awarded"
+
+T_SCHLONG_MATS_TIT="Principali materie"
+T_SCHLONG_MATS_TIT_ENG="Principal subjects/Occupational skills covered"
+
+T_SCHLONG_SCHO_TIT="Nome e tipo d'istituto"
+T_SCHLONG_SCHO_TIT_ENG="Name and type of organization providing education and training"
+
+T_SCHLONG_LEVL_TIT="Livello nella classificazione nazionale"
+T_SCHLONG_LEVL_TIT_ENG="Level in national or international classification"
+
+
+
+T_PROFESS_TIT="Capacità e competenze professionali"
+T_PROFESS_TIT_ENG="Professional skills and competences"
+
+T_MOTHTON_TIT="Madrelingua/e"
+T_MOTHTON_TIT_ENG="Mother tongue(s)"
+
+T_LANG_TIT="Lingua"
+T_LANG_TIT_ENG="Language"
+
+T_LANGARR_BASE_USER="Utente base"
+T_LANGARR_BASE_USER_ENG="Basic user"
+
+T_LANGARR_AUTO_USER="Utente autonomo"
+T_LANGARR_AUTO_USER_ENG="Independent user"
+
+T_LANGARR_PROF_USER="Utente avanzato"
+T_LANGARR_PROF_USER_ENG="Proficient user"
+
+T_LANGARR_A_ONE="<lang:htm><td><table class=\"tablangin\"><tr><td>A1</td><td>#T_BASE_USER#</td></tr></table></td></lang:htm><lang:tex>AOne</lang:tex>"
+T_LANGARR_A_TWO="<lang:htm><td><table class=\"tablangin\"><tr><td>A2</td><td>#T_BASE_USER#</td></tr></table></td></lang:htm><lang:tex>ATwo</lang:tex>"
+
+T_LANGARR_B_ONE="<lang:htm><td><table class=\"tablangin\"><tr><td>B1</td><td>#T_AUTO_USER#</td></tr></table></td></lang:htm><lang:tex>BOne</lang:tex>"
+T_LANGARR_B_TWO="<lang:htm><td><table class=\"tablangin\"><tr><td>B2</td><td>#T_AUTO_USER#</td></tr></table></td></lang:htm><lang:tex>BTwo</lang:tex>"
+
+T_LANGARR_C_ONE="<lang:htm><td><table class=\"tablangin\"><tr><td>C1</td><td>#T_PROF_USER#</td></tr></table></td></lang:htm><lang:tex>COne</lang:tex>"
+T_LANGARR_C_TWO="<lang:htm><td><table class=\"tablangin\"><tr><td>C2</td><td>#T_PROF_USER#</td></tr></table></td></lang:htm><lang:tex>CTwo</lang:tex>"
+
+
+T_LANG_NOTE="Livello del Quadro europeo comune di riferimento (QECR)"
+T_LANG_NOTE_ENG="Common European Framework of Reference (CEF) level"
+
+T_LANG_SELFEVAL="Autovalutazione"
+T_LANG_SELFEVAL_ENG="Self-assessment"
+
+T_LANG_EULEVEL="Livello europeo"
+T_LANG_EULEVEL_ENG="European level"
+
+T_LANG_COMP="Comprensione"
+T_LANG_COMP_ENG="Understanding"
+
+T_LANG_SPEAK="Parlato"
+T_LANG_SPEAK_ENG="Speaking"
+
+T_LANG_WRI="Scritto"
+T_LANG_WRI_ENG="Writing"
+
+T_LANG_EAR="Ascolto"
+T_LANG_EAR_ENG="Listening"
+
+T_LANG_READ="Lettura"
+T_LANG_READ_ENG="Reading"
+
+T_LANG_INTER="Interazione"
+T_LANG_INTER_ENG="Spoken Interaction"
+
+T_LANG_PROD="Produzione orale"
+T_LANG_PROD_ENG="Spoken Production"
+
+T_CAPREL_TIT="Capacità e competenze relazionali"
+T_CAPREL_TIT_ENG="Social skills and competences"
+
+T_CAPORG_TIT="Capacità e competenze organizzative"
+T_CAPORG_TIT_ENG="Organizational skills and competences"
+
+T_CAPTEC_TIT="Capacità e competenze tecniche"
+T_CAPTEC_TIT_ENG="Technical skills and competences"
+
+T_CAPINF_TIT="Capacità e competenze informatiche"
+T_CAPINF_TIT_ENG="Computer skills and competences"
+
+T_CAPART_TIT="Capacità e competenze artistiche"
+T_CAPART_TIT_ENG="Artistic skills and competences"
+
+T_CAPOTH_TIT="Altre capacità e competenze"
+T_CAPOTH_TIT_ENG="Other skills and competences"
+
+T_LICENCE_TIT="Patente/i"
+T_LICENCE_TIT_ENG="Driving licence(s)"
+
+T_OTHER_INFO_TIT="Ulteriori informazioni"
+T_OTHER_INFO_TIT_ENG="Additional information"
+
+T_PUBLIC_TIT="Pubblicazioni"
+T_PUBLIC_TIT_ENG="Publications"
+
+T_PERSINT_TIT="Interessi personali"
+T_PERSINT_TIT_ENG="Personal interests"
diff --git a/cv_template.htm b/cv_template.htm
new file mode 100644 (file)
index 0000000..b2ae2f9
--- /dev/null
@@ -0,0 +1,356 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <meta name="Description" content="Curriculum Vita&aelig; of Senior Software Engineer Matteo Nastasi">
+  <meta name="keywords" content="C, C++, PHP, JavaScript, HTML, XML, XHTML, CSS, DHTML, Java, XLST, PL/PGSQL, SQL, Postgresql, MySQL, Stored Procedures, Debian Packages, Web development, Consultant, Consulting, Web design, Implementation, Testing, Analysis, Linux, UNIX, bash, Apache, CVS, cv, europe, europass, documents, portfolio, language, passport, diploma">
+
+<!-- template professional experience
+</tr><tr>
+<td class="label"><br></td><td class="normal"></td>
+</tr><tr>
+<td class="label">Date</td><td class="normal">
+xxxx
+</td>
+</tr><tr>
+<td class="label">Principali mansioni e responsabilit&agrave;</td>
+<td class="normal">
+xxxx
+</td>
+</tr><tr>
+<td class="label">Nome e indirizzo del datore di lavoro</td>
+<td class="normal">
+xxxx
+</td>
+</tr><tr>
+<td class="label">Tipo o settore d'attivit&agrave;</td><td class="normal">
+xxxx
+</td>
+</tr><tr>
+-->
+
+
+
+<style type="text/css">
+table {
+   border-color: black;
+   border-style: solid;
+   border-width: 0px;
+   border-collapse: collapse;
+}
+td {
+   font-family: "Arial Narrow";
+   /* font-family: "Helvetica"; */
+   color: #222222;
+}
+
+body {
+   /* margin: 0px; */
+   }
+
+td.maintitle {
+   width: 256px;
+   border-top: 1px solid black;
+   border-right: 1px solid black;
+   /*border-left: 1px solid black;
+   border-bottom: 1px solid black; */
+   align: right;
+   text-align: right;
+   padding: 12px;
+   border-collapse: collapse;
+   font-size: 14pt;
+   font-weight: bold;
+}
+
+td.heab {
+   width: 256px;
+   border-right: 1px solid black;
+   align: right;
+   text-align: right;
+   padding: 6px 12px 6px 12px;
+   border-collapse: collapse;
+   font-size: 12pt; 
+   font-weight: bold;
+   vertical-align: top;
+}
+
+td.hea {
+   width: 256px;
+   border-right: 1px solid black;
+   align: right;
+   text-align: right;
+   padding: 6px 12px 6px 12px;
+   border-collapse: collapse;
+   font-size: 12pt; 
+   vertical-align: top;
+}
+
+td.heai {
+   width: 256px;
+   border-right: 1px solid black;
+   align: right;
+   text-align: right;
+   padding: 6px 12px 6px 12px;
+   border-collapse: collapse;
+   font-size: 12pt;
+   font-style: italic; 
+   vertical-align: top;
+}
+
+div.heai {
+   font-size: 10pt;
+   font-style: italic; 
+}
+
+
+td.conb {
+   align: left;
+   text-align: left;
+   padding: 6px 12px 6px 12px;
+   border-collapse: collapse;
+   font-size: 12pt; 
+   font-weight: bold;
+   vertical-align: top;
+   /* border: 1px solid black; */
+}
+
+td.con {
+   align: left;
+   text-align: left;
+   padding: 6px 12px 6px 12px;
+   border-collapse: collapse;
+   font-size: 12pt; 
+   vertical-align: top;
+}
+
+td.label {
+   width: 256px;
+   border-right: 1px solid black;
+   align: right;
+   text-align: right;
+   padding: 6px 12px 6px 12px;
+   border-collapse: collapse;
+   font-size: 10pt; 
+   vertical-align: top;
+}
+
+td.normal {
+   # border-right: 1px solid black;
+   align: left;
+   text-align: left;
+   padding: 6px 12px 6px 12px;
+   border-collapse: collapse;
+   font-size: 10pt; 
+   vertical-align: top;
+}
+
+table.tablang {
+   width: 650px;
+   border: 1px solid black;
+   border-collapse: collapse;
+}
+
+table.tablang td {
+   width: 20%;
+   align: center;
+   text-align: center;
+   vertical-align: top;
+   border: 1px solid black;
+   padding: 4px;
+   font-size: 8pt; 
+   font-weight: bold;
+}
+
+table.tablang td.con2 {
+   font-size: 12pt; 
+}
+
+table.tablangin {
+   width: 100%;
+   border: 1px none black; 
+   border-collapse: collapse;
+   font-weight: normal;
+}
+
+table.tablangin td {
+   width: 20%;
+   align: center;
+   text-align: center;
+   vertical-align: top;
+   border: 1px none black; 
+   padding: 2px;
+   font-size: 10pt;
+   font-weight: normal; 
+}
+
+table.formats {
+/*     border: 1px solid black;*/
+       width: auto;
+       margin: auto;
+       align: center;
+}
+
+table.formats td {
+       padding: 4px;
+       font-size: 10pt;
+}
+
+div.footer {
+       display: block;
+       position: relative; 
+        bottom: 0;
+        left: 0; width: 100%; height: 20px;
+       font-size: 10pt;
+       align: center;  
+       text-align: center;
+}
+</style>
+<title>#T_LASTNAME#,#T_FIRSTNAME# - #T_FUNC_CUR# - Curriculum Vitae</title>
+</head>
+<body>
+
+<table>
+<tr>
+<!-- <td class="first"><br>C&nbsp;u&nbsp;r&nbsp;r&nbsp;i&nbsp;c&nbsp;u&nbsp;l&nbsp;u&nbsp;m&nbsp;&nbsp;&nbsp;V&nbsp;i&nbsp;t&nbsp;a&nbsp;e<br>E&nbsp;u&nbsp;r&nbsp;o&nbsp;p&nbsp;a&nbsp;s&nbsp;s<br></td><td class="right"></td> -->
+<td class="maintitle"><br>Curriculum Vit&aelig;<br>Europass<br></td><td class="normal"></td>
+</tr><tr>
+<td class="hea"><img src="img/euflag64.png"></td><td class="normal"></td>
+</tr>
+<!--
+#
+#
+#    INFO PERSONALI
+#
+#
+-->
+<tr><td class="heab">#T_PERS_INFO_TIT#</td><td class="normal"></td></tr>
+
+<tr><td class="label">#T_NAME_TIT#</td><td class="conb">#T_LASTNAME# #T_FIRSTNAME#</td></tr>
+
+<tr><td class="label">#T_ADDRESS_TIT#</td><td class="con">#T_ADDRESS#</td></tr>
+
+<tr><td class="label">#T_TEL_TIT#</td><td class="con">#T_TEL#</td></tr>
+
+<tr><td class="label">#T_EMAIL_TIT#</td><td class="con"><a href="mailto:#T_EMAIL#">#T_EMAIL#</a></td></tr>
+
+<tr><td class="label">#T_NATION_TIT#</td><td class="normal">#T_NATION#</td></tr>
+
+<tr><td class="label">#T_BIRTH_TIT#</td><td class="normal">#T_BIRTH#</td></tr>
+
+<tr><td class="label">#T_GENDER_TIT#</td><td class="normal">#T_GENDER#</td></tr>
+
+<!--
+#
+#
+#    ESPERIENZA PROFESSIONALE
+#
+#
+-->
+<tr><td class="heab">#T_ESPROF_TIT#</td><td class="normal"></td></tr>
+
+##T_ESPROF:start##
+<tr><td class="label">#T_DATE_TIT#</td><td class="normal">#T_DATE_X#</td></tr>
+<tr><td class="label">#T_FUNC_TIT#</td><td class="normal">#T_FUNC_X#</td></tr>
+<tr><td class="label">#T_ROLE_TIT#</td><td class="normal">#T_ROLE_X#</td></tr>
+<tr><td class="label">#T_COMP_TIT#</td><td class="normal">#T_COMP_X#</td></tr>
+<tr><td class="label">#T_TYCO_TIT#</td><td class="normal">#T_TYCO_X#</td></tr>
+<tr><td class="label"><br></td><td class="normal"></td></tr>
+
+##T_ESPROF:end##
+
+<!--
+#
+#
+#    Istruzione e formazione
+#
+#
+-->
+<tr><td class="heab">#T_SCHOOL_TIT#</td><td class="normal"></td></tr>
+
+##T_SCHSHORT:start##
+<tr><td class="label">#T_DATE_TIT#</td><td class="normal">#T_DATE_X#</td></tr>
+<tr><td class="label">#T_MATS_TIT#</td><td class="normal">#T_MATS_X#</td></tr>
+<tr><td class="label">#T_SCHO_TIT#</td><td class="normal">#T_SCHO_X#</td></tr>
+<tr><td class="label"><br></td><td class="normal"></td></tr>
+
+##T_SCHSHORT:end##
+##T_SCHLONG:start##
+<tr><td class="label">#T_DATE_TIT#</td><td class="normal">#T_DATE_X#</td></tr>
+<tr><td class="label">#T_CERT_TIT#</td><td class="normal">#T_CERT_X#</td></tr>
+<tr><td class="label">#T_MATS_TIT#</td><td class="normal">#T_MATS_X#</td></tr>
+<tr><td class="label">#T_SCHO_TIT#</td><td class="normal">#T_SCHO_X#</td></tr>
+<tr><td class="label">#T_LEVL_TIT#</td><td class="normal">#T_LEVL_X#</td></tr>
+
+##T_SCHLONG:end##
+<!--
+#
+#
+#    Capacita' e competenza professionali
+#
+#
+-->
+<tr><td class="heab">#T_PROFESS_TIT#</td><td class="normal"></td></tr>
+
+<tr><td class="hea">#T_MOTHTON_TIT#</td><td class="conb">#T_MOTHTON#</td></tr>
+
+<tr><td class="hea">#T_LANG_TIT#</td><td class="normal"></td></tr>
+
+<tr><td class="heai" style="padding-bottom: 2px;">#T_LANG_SELFEVAL#<br><div class="heai">#T_LANG_EULEVEL#<sup>(*)</sup></div></td>
+<td class="normal" style="padding-bottom: 2px;">
+<table class="tablang">
+<tr><td class="con2" colspan="2">#T_LANG_COMP#</td><td class="con2" colspan="2">#T_LANG_SPEAK#</td><td class="con2" rowspan="2">#T_LANG_WRI#</td></tr>
+<tr><td>#T_LANG_EAR#</td><td>#T_LANG_READ#</td><td>#T_LANG_INTER#</td><td>#T_LANG_PROD#</td></tr>
+</table>
+
+</td></tr>
+##T_LANGARR:start##
+<tr><td class="heab" style="vertical-align: middle; padding-top: 2px;">#T_LANG_X#</td>
+<td class="normal" style="padding-top: 2px;">
+
+<table class="tablang"><tr>
+#T_#T_VAL_A_X##
+#T_#T_VAL_B_X##
+#T_#T_VAL_C_X##
+#T_#T_VAL_D_X##
+#T_#T_VAL_E_X##
+
+<!--
+<td><table class="tablangin"><tr><td>B2</td><td>#T_AUTO_USER#</td></tr></table></td>
+<td><table class="tablangin"><tr><td>B2</td><td>#T_AUTO_USER#</td></tr></table></td>
+<td><table class="tablangin"><tr><td>B1</td><td>#T_AUTO_USER#</td></tr></table></td>
+<td><table class="tablangin"><tr><td>B1</td><td>#T_AUTO_USER#</td></tr></table></td>
+<td><table class="tablangin"><tr><td>B1</td><td>#T_AUTO_USER#</td></tr></table></td>
+-->
+</tr></table>
+
+</td></tr>
+##T_LANGARR:end##
+<tr><td class="hea"></td><td class="normal"><div class="heai"><sup>(*)</sup>#T_LANG_NOTE#</div></td></tr>
+
+
+
+<tr><td class="hea">#T_CAPREL_TIT#</td><td class="normal">#T_CAPREL#</td></tr>
+<tr><td class="hea">#T_CAPORG_TIT#</td><td class="normal">#T_CAPORG#</td></tr>
+<tr><td class="hea">#T_CAPTEC_TIT#</td><td class="normal">#T_CAPTEC#</td></tr>
+<tr><td class="hea">#T_CAPINF_TIT#</td><td class="normal">#T_CAPINF#</td></tr>
+<tr><td class="hea">#T_CAPART_TIT#</td><td class="normal">#T_CAPART#</td></tr>
+<tr><td class="hea">#T_CAPOTH_TIT#</td><td class="normal">#T_CAPOTH#</td></tr>
+
+<tr><td class="hea">#T_LICENCE_TIT#</td><td class="normal">#T_LICENCE#</td></tr>
+
+<tr><td class="heab">#T_OTHER_INFO_TIT#</td>
+<td class="normal">
+<b>#T_PUBLIC_TIT#</b><br>
+##T_PUBLIC:start##
+#T_PUB_X#
+<br>
+<br>
+##T_PUBLIC:end##
+<b>#T_PERSINT_TIT#</b><br>
+#T_PERSINT#
+
+
+</td></tr>
+
+</table>
+<div class="footer"><br>Curriculum vit&aelig; - #T_LASTNAME# #T_FIRSTNAME# - #T_AUTHMGR#</div>
+</body>
\ No newline at end of file
diff --git a/cv_template.tex b/cv_template.tex
new file mode 100644 (file)
index 0000000..10ebaf8
--- /dev/null
@@ -0,0 +1,143 @@
+\documentclass[helvetica,narrow,openbib,#T_LANGUAGE#,nologo,flagCMYK]{europecv}
+\usepackage[T1]{fontenc}
+\usepackage[a4paper,top=1.27cm,left=1cm,right=1cm,bottom=2cm]{geometry}
+\usepackage{ifpdf}
+\usepackage{bibentry}
+\usepackage[#T_LANGUAGE#]{babel}
+\usepackage{url}
+
+\ifpdf
+    \usepackage[pdftex]{graphicx}
+\else
+     \usepackage{graphicx}
+\fi
+\renewcommand{\ttdefault}{phv} % Uses Helvetica instead of fixed width font
+
+\ecvlastname{#T_LASTNAME#}
+\ecvfirstname{#T_FIRSTNAME#}
+\ecvaddress{#T_ADDRESS#}
+% \ecvtelephone{#TEL_NUMBERS#}
+\ecvemail{\url{#T_EMAIL#}}
+\ecvnationality{#T_NATION#}
+\ecvdateofbirth{#T_BIRTH#}
+\ecvgender{#T_GENDER#}
+%\ecvpicture[width=2cm]{mypicture}
+
+\def\ecv@kern{\kern2pt}
+
+\renewcommand*\ecvtitle{\tabularnewline[1pt] %& \tabularnewline[5pt]
+\Large\textbf{C\ecv@kern u\ecv@kern r\ecv@kern r\ecv@kern
+i\ecv@kern c\ecv@kern u\ecv@kern l\ecv@kern u\ecv@kern m \ecv@kern V\ecv@kern
+i\ecv@kern t\ecv@kern a\ecv@kern e}\\
+\Large\textbf{E\ecv@kern u\ecv@kern
+r\ecv@kern o\ecv@kern p\ecv@kern a\ecv@kern s\ecv@kern s}\tabularnewline[1pt]}
+
+
+\begin{document}
+\selectlanguage{#T_LANGUAGE#}
+
+\ecvfootnote{#T_AUTHMGR#}
+%\ecvfootnote{Per ulteriori informazioni: \url{http://europass.cedefop.eu.int}\\
+%\textcopyright~European Communities, 2003.}
+
+\begin{europecv}
+
+
+\ecvpersonalinfo[20pt]
+
+% \ecvitem{\large\textbf{Impiego ricercato/ Settore di competenza}}{\large\textbf{Facoltativo}}
+
+\ecvsection{#T_ESPROF_TIT#}
+
+%\ecvitem{Date}{}
+%\ecvitem{Funzione o posto occupato}{}
+%\ecvitem{Principali mansioni e responsabilit\`a}{}
+%\ecvitem{Nome e indirizzo del datore di lavoro}{}
+%\ecvitem{Tipo o settore d'attivit\`a}{}
+
+##T_ESPROF:start##
+\ecvitem{#T_DATE_TIT#}{#T_DATE_X#}
+\ecvitem{#T_FUNC_TIT#}{#T_FUNC_X#}
+\ecvitem{#T_ROLE_TIT#}{#T_ROLE_X#}
+\ecvitem{#T_COMP_TIT#}{#T_COMP_X#}
+\ecvitem{#T_TYCO_TIT#}{#T_TYCO_X#}
+\\
+##T_ESPROF:end##
+
+\ecvsection{#T_SCHOOL_TIT#}
+
+%\ecvitem{Date}{Iniziare con le informazioni pi\'u recenti ed elencare separatamente ciascun corso frequentato con successo. Facoltativo.}
+%\ecvitem{Certificato o diploma ottenuto}{\ldots}
+%\ecvitem{Principali materie/Competenze professionali apprese}{\ldots}
+%\ecvitem{Nome e tipo d'istituto di istruzione o formazione}{\ldots}
+%\ecvitem{Livello nella classificazione nazionale o internazionale\footnote{Se pertinente.}}{\ldots}
+
+
+##T_SCHSHORT:start##
+\ecvitem{#T_DATE_TIT#}{#T_DATE_X#}
+\ecvitem{#T_MATS_TIT#}{#T_MATS_X#}
+\ecvitem{#T_SCHO_TIT#}{#T_SCHO_X#}
+\\
+##T_SCHSHORT:end##
+##T_SCHLONG:start##
+\ecvitem{#T_DATE_TIT#}{#T_DATE_X#}
+\ecvitem{#T_CERT_TIT#}{#T_CERT_X#}
+\ecvitem{#T_MATS_TIT#}{#T_MATS_X#}
+\ecvitem{#T_SCHO_TIT#}{#T_SCHO_X#}
+\ecvitem{#T_LEVL_TIT#}{#T_LEVL_X#}
+##T_SCHLONG:end##
+
+
+
+\ecvsection{#T_PROFESS_TIT#}
+
+\ecvmothertongue[5pt]{#T_MOTHTON#}
+\ecvitem{\large #T_LANG_TIT#}{}
+\ecvlanguageheader{(*)}
+##T_LANGARR:start##
+% \ecvlanguage{#T_LANG_X#}{\ecvBTwo}{\ecvBTwo}{\ecvBOne}{\ecvBOne}{\ecvBOne}
+\ecvlanguage{#T_LANG_X#}{\ecv#T_#T_VAL_A_X##}{\ecv#T_#T_VAL_B_X##}{\ecv#T_#T_VAL_C_X##}{\ecv#T_#T_VAL_D_X##}{\ecv#T_#T_VAL_E_X##}
+##T_LANGARR:end##
+\ecvlanguagefooter[10pt]{(*)}
+
+\ecvitem[10pt]{\large #T_CAPREL_TIT#}{#T_CAPREL#}
+\ecvitem[10pt]{\large #T_CAPORG_TIT#}{#T_CAPORG#}
+\ecvitem[10pt]{\large #T_CAPTEC_TIT#}{#T_CAPTEC#}
+
+\ecvitem[10pt]{\large #T_CAPINF_TIT#}{#T_CAPINF#}
+\ecvitem[10pt]{\large #T_CAPART_TIT#}{#T_CAPART#}
+\ecvitem[10pt]{\large #T_CAPOTH_TIT#}{#T_CAPOTH#}
+\ecvitem{\large #T_LICENCE_TIT#}{#T_LICENCE#}
+
+% per evitare l'orfano
+\ecvitem[10pt]{ }
+
+
+
+\ecvsection{#T_OTHER_INFO_TIT#}
+% \bibliographystyle{plain}
+% \nobibliography{cv_matteo_nastasi}
+\ecvitem{}{\textbf{#T_PUBLIC_TIT#}}
+##T_PUBLIC:start##
+\ecvitem[10pt]{}{#T_PUB_X#}
+##T_PUBLIC:end##
+
+%\ecvitem{}{\bibentry{pgsql} 
+
+%Avente come argomento la soluzione del problema della sovrapposizione di intervalli attraverso trigger functions.}
+%\ecvitem[10pt]{}{\bibentry{virtual}
+%
+%}
+%\ecvitem[10pt]{}{\bibentry{segre}
+%
+%}
+%\ecvitem[10pt]{}{\bibentry{brisk}
+%
+%}
+\ecvitem{}{\textbf{#T_PERSINT_TIT#}}
+\ecvitem{}{#T_PERSINT#}
+
+% \ecvsection{Allegati}
+% \ecvitem{}{Enumerare gli allegati al CV.}
+\end{europecv}
+\end{document} 
diff --git a/populate.sh b/populate.sh
new file mode 100755 (executable)
index 0000000..2010bd7
--- /dev/null
@@ -0,0 +1,411 @@
+#!/bin/bash
+# set -x
+
+#
+#   populate.sh
+#
+#   Copyright (C) 2007 nastasi@alternativeoutput.it
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful, but
+#  WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABLILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+#  General Public License for more details. You should have received a
+#  copy of the GNU General Public License along with this program; if
+#  not, write to the Free Software Foundation, Inc, 59 Temple Place -
+#  Suite 330, Boston, MA 02111-1307, USA.
+#
+
+#
+# Description of tag behaviors
+# ----------------------------
+#
+#                         |                            |
+#       Template Tag      |         Assoc. Var         |  Description
+# ------------------------+----------------------------+-------------------              
+#   #T_<tagname>#         | $T_<tagname>               |  simple tag
+#   ##T_<blkname>:start## | $B_<tagname>               |  block tag begin
+#        . . . . .        |                            |
+#      #T_<tagname>#      | $T_<blkname>_<tagname>     |  tag inside a block
+#      #T_<tagname>_X#    | $T_<blkname>_<tagname>_<#> |  indexed tag inside a block
+#                         |                            |  (the first in the alphab. order must
+#                         |                            |   exists to enable the entire block)
+#        . . . . .        |                            |
+#   ##T_<blkname>:stop##  |                            |  block tag finish
+#
+
+# TODO
+#
+#  Aggiungere la filtratura per tipo di output
+#
+#  loop formati
+#+   loop lingue
+#+     loop for recursion (general)
+#+       get blocchi dal template
+#+       sost TAG nei blocchi con le VAR
+#+           loop for recursion (for each row of each block)
+#+             per ogni set di var per quel blocco (flat o con indice)
+#+             fino a quando la prima con indice non e' stringa vuota
+#+           fine loop for recursion (for each row of each block)
+#+       sostituire i TAG nel template con i blocchi
+#+       sostituire i TAG nel template con le VAR
+#
+#+       produrre il file in output
+#+     fine loop for recursion (general)
+#+   fine loop lingue
+#  fine loop formati
+#
+#
+
+#  GLOBAL VARS
+# debug=1
+debug=""
+verbose=""
+NEWLI="#aCaPo#"
+
+TMPFILE="/tmp/populate1_$$.tmp"
+TMP2FILE="/tmp/populate2_$$.tmp"
+TMP3FILE="/tmp/populate3_$$.tmp"
+TMP4FILE="/tmp/populate4_$$.tmp"
+
+
+#
+#  FUNCTIONS
+#
+function usage() {
+    echo "Usage: $1 [-v] [-d] [-h] data-file"
+    echo "  -v     Verbose enable."
+    echo "  -d     Debug enable."
+    echo "  -h     This help."
+    exit 0
+}
+
+function vars_get() {
+    # echo "vars_get start"
+    sed -n 's/\(#T_[A-Z_]\+#\)/\n\1\n/gp' | grep '^#T_' | sort | uniq | sed 's/#\(T_[A-Z_]\+\)#/\1/g'
+    # echo "vars_get stop"
+    return 0
+}
+
+function unsedify() {
+    
+    (
+       if [ $# -eq 1 ]; then
+            echo "$1" 
+       else
+           cat
+        fi
+    ) | sed 's/\(["\\\/\$]\)/\\\1/g'
+
+    return 0
+}
+
+function formatify() {
+    (
+       if [ $# -eq 2 ]; then
+            echo "$2" 
+       else
+           cat
+        fi
+    ) | (
+       if [ "$1" = "tex" ]; then
+           sed 's/à/\\`a/g;s/è/\\`e/g;s/ì/\\`i/g;s/ò/\\`o/g;s/ù/\\`u/g;s/áéíóú/\\'"'"'a/g;
+s/é/\\'"'"'e/g;s/í/\\'"'"'i/g;s/ó/\\'"'"'o/g;s/ú/\\'"'"'u/g;s/°/\$\^\\circ\$/g;
+s/<i>/\\textit{/g;s/<b>/\\textbf{/g;s/<\/[ib]>/}/g;s/<url>/URL: \\textit\{/g;s/<\/url>/\}/g;
+s/‟/``/g;s/”/'"''"'/g;s/<lang:tex>//g;s/<\/lang:tex>//g;s/<lang:[^>]*>.*<\/lang:[^>]*>//g'
+       elif [ "$1" = "htm" ]; then
+           sed "s/${NEWLI}${NEWLI}/<br>${NEWLI}/g;"'s/<url>\([^<]*\)<\/url>/<a href="\1">\1<\/a>/g;
+s/<lang:htm>//g;s/<\/lang:htm>//g;s/<lang:[^>]*>.*<\/lang:[^>]*>//g'
+       fi
+    )
+
+    
+}
+
+function debecho() {
+    if [ -z $debug ]; then
+       return 0
+    fi
+    echo "debug "$*
+    return 0
+}
+
+function populator() {
+    local tmplname lng frmt
+
+    tmplname="$1"
+    contname="$2"
+    lng="$3"
+    frmt="$4"
+
+    tmplname="${tmplname}.${frmt}"
+    if [ $lng ]; then
+       lngsfx="_`echo "$lng" | tr '[:lower:]' '[:upper:]'`"
+       filesfx="_$lng"
+    else
+       lngsfx=""
+       filesfx=""
+    fi
+
+    oldifs="$IFS"
+    IFS="
+"
+    anotherloop=0
+
+    #
+    #  Recursion loop, resolve TAG created with a tag substitution, on the entire document.
+    #
+    while [ $anotherloop -eq 0 ]; do
+       debecho "ANOTHERLOOP"
+        #
+        # GET BLOCKS
+        #
+
+        # add normal tag before each block, output to TMPFILE
+        cat $tmplname | sed 's/^\(##\(T_[A-Z_0-9]\+\):start##\)$/#\2#\n\1/g' > $TMPFILE
+
+        # get all blocks from the template, output to TMP2FILE
+       cat $TMPFILE | sed -n '/##T_[A-Z_0-9]\+:start##/,/##T_[A-Z_0-9]\+:end##/p' > $TMP2FILE
+
+        # remove blocks from the template, output to TMP3FILE 
+       cat $TMPFILE | sed '/##T_[A-Z_0-9]\+:start##/,/##T_[A-Z_0-9]\+:end##/d' > $TMP3FILE
+
+        # get line number of the start of all blocks
+       blist="`cat $TMP2FILE | grep -n '^##T_[A-Z_0-9]\+:start##$' | cut -d : -f 1`"
+
+        # for each line number ...
+       for i in `echo "$blist"`; do
+            # extracts the current block
+           block_cur="`cat $TMP2FILE | sed -n $i',/##T_[A-Z_0-9]\+:end##/p'`"
+
+            # extracts the name of the block variable
+           block_var="`echo "$block_cur" | sed -n "1,1p" | sed 's/^\(##T\(_[A-Z_0-9]\+\):start##\)$/B\2/g'`"
+            # remove first and last line (block delimiters) and double '\' char, substitute \n with $NEWLI  
+           block_val="`echo "$block_cur" | sed '1d;$d;s/\\\\/\\\\\\\\/g' | sed "s/\$/$NEWLI\\\\\\/g"`"
+
+            # assign the value to the var
+           read $block_var <<< "$block_val"
+
+           debecho "vv------------------------------"
+           debecho "BLOCK_VAR: $block_var"
+           debecho "BLOCK_VAL: ${!block_var}"
+           debecho "^^------------------------------"
+       done
+
+        # 
+        #  SUBSTITUTE TAG INSIDE EACH BLOCK
+        #
+       if [ $debug ]; then
+           echo "debug blocks: ${!B_*}"
+       fi
+       for i in ${!B_*}; do
+           blk_var="`echo "$i" | sed 's/^B_/T_/g'`"
+            debecho "Tag_var: $tag_var"
+           blk_val=""
+           outindex=1
+           for idx in `seq 1 100`; do
+               debecho "ISFIRST YES"
+               isfirst="YES"
+
+               blk_src="${!i}"
+                #
+                #  Recursion loop, resolve TAG created with a tag substitution, for each row of each block.
+                #
+               blk_anotherloop=0
+               while [ $blk_anotherloop -eq 0 ]; do
+                   debecho "BLK_ANOTHERLOOP $i $idx"
+                   sedargs=""
+                   tlist="`echo "$blk_src" | vars_get`"
+                   debecho "TILIST $tlist"
+               
+                   for e in $tlist; do
+                       debecho "LOO1"
+                   
+                       tag_var="`echo "$i $e" | sed 's/^B_\([A-Z_]\+\) T_\([A-Z_]\+\)/T_\1_\2/g'`"
+                       echo "$tag_var" | grep -q '_X$'
+                       if [ $? -eq 0 ]; then
+                           # fault back to original language if not defined
+                           for ll in $lngsfx ""; do
+                               tag_ele="`echo "$tag_var" | sed 's/X$//g'`${idx}${ll}"
+                               debecho "tag_ele: $tag_ele"
+                               debecho "  BRA3"
+                               declare -p $tag_ele >/dev/null 2>&1
+                               if [ $? -eq 0 ]; then
+                                   break
+                               else
+                                   if [ "$isfirst" = "YES" -a -z "$ll" ]; then
+                                       outindex=0
+                                       break 4
+                                   fi
+                                   if [ -z "$ll" ]; then
+                                       echo "WARN: undefined [$tag_ele]"
+                                   elif [ "$verbose" ]; then
+                                       tag_fback="`echo "$tag_var" | sed 's/X$//g'`${idx}"
+                                       echo "WARN: undefined [$tag_ele]; fault back to main [${!tag_fback}]"
+                                   fi
+                               fi
+                               if [ -z "$ll" ]; then
+                                   debecho "  ISFIRST NO"
+                                   isfirst="NO"
+                               fi
+                           done
+
+                       else
+                           debecho "  BRA4"
+                           # faultback to original language if not defined
+                           for ll in $lngsfx ""; do
+                               tag_ele="${tag_var}${ll}"
+                               debecho "  tag_ele: $tag_ele"
+
+                               declare -p $tag_ele >/dev/null 2>&1
+                               if [ $? -eq 0 ]; then
+                                   break
+                               else
+                                   if [ -z "$ll" ]; then
+                                       echo "WARN: undefined [$tag_ele]"
+                                   elif [ "$verbose" ]; then
+                                       echo "WARN: undefined [$tag_ele]; fault back to main [${!tag_var}]"
+                                   fi
+                               fi
+                           done
+                       fi
+                       tag_val="`echo "${!tag_ele}" | sed "s/\$/$NEWLI/g" | tr -d '\n' | sed "s/$NEWLI\$//g" \
+                                | formatify $frmt`"
+                       debecho "  tag_val: $tag_val"
+
+                        # TAG replacement
+                       tag_val="`unsedify "$tag_val"`"
+                       sedargs="${sedargs}s/#${e}#/$tag_val/g;"
+                   done # for e ...
+                   debecho "----------------------------------"
+                   debecho "$sedargs" 
+                   blk_val="${blk_val}`echo "$blk_src" | sed "$sedargs"`"
+                   if [ $? -ne 0 ]; then
+                       echo "$sedargs" > sedargs.txt
+                       exit 111
+                   fi
+               
+                   echo "$blk_val" | grep -q '#\{1,2\}T_[A-Za-z_:]\+#\{1,2\}'
+                   if [ $? -eq 0 ]; then
+                       # echo "$blk_val" | grep '#\{1,2\}T_[A-Za-z_:]\+#\{1,2\}'
+                       # echo "POST BLK GREP"
+                       # read 
+                       blk_src="$blk_val"
+                       blk_val=""
+                       blk_anotherloop=0
+                   else
+                       blk_anotherloop=1
+                   fi
+               done # while [ $blk_another_loop ....
+               if [ $outindex -eq 0 ]; then
+                   break
+               fi
+           done
+           
+           debecho "++++++++++++++++++++++++++++++++++"
+           debecho "BLK_VAL: $blk_val"
+           debecho "**********************************"
+            # read $blk_var <<< "$blk_val"
+           
+            # TAG replacement
+           blk_val="`unsedify "$blk_val" | sed "s/$NEWLI\$//g"`"
+           debecho "BLK_VAR: $blk_var: $blk_val"
+           debecho "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
+           cat $TMP3FILE | sed "s/#${blk_var}#/$blk_val/g"  >$TMP4FILE
+           mv $TMP4FILE $TMP3FILE    
+       done
+
+        # cat, sed to avoid multitag on single line, grep of tags, sort, uniq, sed to remove '#' chars
+       t_vars="`cat $TMP3FILE | vars_get`"
+
+       for tag_var in $t_vars; do 
+            # echo "TAG_VAR: $tag_var"
+           for ll in $lngsfx ""; do
+               tag_ele="${tag_var}${ll}"
+               declare -p $tag_ele >/dev/null 2>&1
+               if [ $? -eq 0 ]; then
+                   break
+               else
+                   if [ -z "$ll" ]; then
+                       echo "WARN: undefined [$tag_ele]"
+                   elif [ "$verbose" ]; then
+                       echo "WARN: undefined [$tag_ele]; fault back to main [${!tag_var}]"
+                   fi
+               fi
+           done
+            # TAG replacement
+           tag_val="`echo "${!tag_ele}" | sed "s/\$/$NEWLI/g" | tr -d '\n' | sed "s/$NEWLI\$//g" \
+                  | formatify $frmt | unsedify`"
+           
+               
+           cat $TMP3FILE | sed "s/#${tag_var}#/$tag_val/g" >$TMP4FILE
+           mv $TMP4FILE $TMP3FILE    
+       done
+       
+       cat $TMP3FILE | grep -q '#\{1,2\}T_[A-Za-z_:]\+#\{1,2\}'
+       if [ $? -eq 0 ]; then
+           # cat $TMP3FILE | grep -q '#\{1,2\}T_[A-Za-z_:]\+#\{1,2\}'
+           # echo POSTGREP
+           # read 
+           anotherloop=0
+           cat $TMP3FILE | sed "s/$NEWLI/\n/g" > $TMP4FILE
+           tmplname="$TMP4FILE"
+       else
+           anotherloop=1
+       fi
+    done #  while [ $anotherloop -eq 0 ]; do
+    cat $TMP3FILE | sed "s/$NEWLI/\n/g" > ${contname}${filesfx}.$frmt
+
+    rm -f $TMPFILE $TMP2FILE $TMP3FILE $TMP4FILE
+
+    IFS="$oldifs"
+
+    return 0
+}
+
+#
+#  MAIN
+#
+
+# maybe parametrizable
+# tmplname="temptest"
+tmplname="cv_template"
+while [ $# ]; do
+    case $1 in
+       -v) verbose="Y"
+           ;;
+       -d) debug="Y"
+           ;;
+       -h) usage $0
+           ;;
+       *)  break
+    esac
+    shift
+done
+contname="$1"
+
+rm -f $TMPFILE $TMP2FILE $TMP3FILE $TMP4FILE
+
+if [ ! -f ${contname}.data ]; then
+    echo "File ${contname}.data not exists"
+    exit 1
+fi 
+
+# source the data file from template scope
+. ${tmplname}.data
+
+# source the data file from user scope
+. ${contname}.data
+
+for frmt in tex htm; do
+    for lng in "" eng; do
+       echo "Format: $frmt  Lang: $lng"
+        populator "$tmplname" "$contname" "$lng" "$frmt"
+    done
+done
+
+exit 0