#!/usr/bin/env icarus
# NCCB Bacteria Catalogue - Syntax file
# Version 2004.12.17.01
# Last Updated December 17, 2004
# Author: Domenico Marra & Francesca Piersigilli & Paolo Romano
# (c) CABRI 1999-2023

$fn={
  Strain_number:strain_no
  Other_collection_numbers:other_nos
  Name:name
  Infrasubspecific_names:infra
  Organism_type:org_type
  Restrictions:restrictions
  Status:status
  History:history
  Other_names:oth_names
  Isolated_from:isol
  Geographic_origin:origin
  Mutant:mutant
  Enzyme_production:enzyme
  Metabolite_production:metab
  Applications:applic
  Literature:literature
  Conditions_for_growth:cond
  Form_of_supply:supply
  Genotype:genotype
  Plasmids:plasmids
  Sexual_state:sex_state
  Price_code:price_code
}

$rules={
  entry:        ~ {$In:[file:text] $Out pre $Skip:0}
                  ('Strain_number' {$Not} ln)*
                  ('Strain_number' {$entryFip=$Fip $Wrt} ln {$App}
                  ('Strain_number' {$Not} ln {$App})*)?
                ~

# fields
  fields:       ~ {$In:entry $Out $Skip:1}
                  (/\/[^\n]+\n/ {$Wrt} |
                  word {$Wrt:$fn.$Ct} 
                  (/[\/A-Z]/ {$Not} ln {$App})+)+ ~

#indexing
  strain_no:    ~ {$In:[fields c:strain_no] $Out}
                  word ' ' (word2{$Wrt} |punct2)* ~

  concat2: 	~ {$In:[fields c:oth_names] $Out} /[^\n]+/
		  {$Wrt} '\n' (/[^\n]+/ {$App} '\n')* ~

  concat3:      ~ {$In:[fields c:name] $Out} /[^\n]+/
                  {$Wrt} '\n' (/[^\n]+/ {$App} '\n')* ~

  name:         ~ {$In:concat3 $Out}
                  'Name ' (word1 {$Wrt:[s:$StrRep:[s:$Ct r:"[\"|\.]" to:""]]}|punct|numero*)  ~

  oth_names:	~ {$In:concat2 $Out}
		  word / /? (/;/? / /? 
		  word3{$Wrt:[ s:$StrRep:[s:$Ct r:"[\"|\.]" to:""]]} |
		   /,/ /[^;]/+)* ~

  concat: 	~ {$In:[fields c:other_nos] $Out} /[^\n]+/ 
		  {$Wrt} '\n' (/[^\n]+/ {$App} '\n')* ~

  other_nos:	~ {$In:concat $Out}
		  word / /? (word2{$Uniq} | /; ?/)* ~

  strX:         ~ {$In:[fields c:{name infra org_type restrictions status
                                  history oth_names isol origin mutant enzyme
                                  metab applic literature cond supply genotype
                                  plasmids sex_state price_code}] $Out}
                  word (str{$Uniq:$Itc}| /./ |punct)* ~

# HTML Stuff
 h_top:      ~ {$In:[fields c:strain_no t:html] pre if:$ParInt:isTable $Fail}
               word {$Rep:
                     |</TR><TR VALIGN=TOP>
                     |<TD colspan=2 bgcolor=\"#ffffff\">
                     |<font color=\"#000066\">
                     |This entry contains an HTML link to the reference
                     | database for synonyms of this catalogue.
                     |If there is no synonym data available, these links
                     |will be empty.<br><br>
                     |<B>CABRI:($entry.libName)</B></TD>
                     |</TR>
		     |<TR VALIGN=TOP><TD bgcolor=\"#ffffff\">
                     |<font color=\"#000066\"><b><i>$Ct</i></b></font></TD>
                     |<TD bgcolor=\"#ffffff\">
		    } 
		    /.*/ {$Rep:"$Ct</TD></TR>"}  ~
  
 h_name: ~ {$In:[fields c:name t:html] pre if:$ParInt:isTable $Fail} 
              'Name' {if:$isTable==0 
			 $Rep:
                          |<TR VALIGN=TOP><TD bgcolor=\"#ffffff\">
			  |<font color=\"#000066\"><b><i>$Ct</i></b>
			  |</font></TD><TD bgcolor=\"#ffffff\">
		      }
                     / */ (word1 {$r=$Ct.rep:['.' to: '']
			  $p=$r.rep:[' ' to:'%20']  
                         $Rep:$Hlink:[nccb_bact_namR p:{$p $Ct}]} | word2 |punct) ~

 h_cond: ~ {$In:[fields c:cond t:html] pre if:$ParInt:isTable $Fail} 
            'Conditions_for_growth' {if:$isTable==0 
               $Rep:
		 |<TR VALIGN=TOP><TD bgcolor=\"#ffffff\">
		 |<font color=\"#000066\"><b><i>$Ct</i></b>
		 |</font></TD><TD bgcolor=\"#ffffff\">
	       }
           (parola numero {$Rep:$Hlink:[nccb_bact_mediumR p:{$Ct $Ct}]}
             ','? /[^;]/* )* ~

 h_fields: ~ {$In:[fields t:html] pre if:$ParInt:isTable $Fail}
              word {if:$isTable==0
               $Rep:
	         |<TR VALIGN=TOP><TD bgcolor=\"#ffffff\">
	         |<font color=\"#000066\"><b><i>$Ct</i></b>
	         |</font></TD><TD bgcolor=\"#ffffff\">
	       } ':'? {$Rep:""} /.*/ {$Rep:"$Ct</TD></TR>"} ~

 t_fields: ~ {$In:[fields] $Out} tag /.*/ {$Wrt:$Itc} ~

# definitions
  tag:          ~ word ':'?~
  ln:           ~ /[^\n]*\n/ ~
  word:         ~ /[0-9a-zA-Z_\/]+/ ~
  word2:        ~ /[ 0-9a-zA-Z_:\\.\\(\\)\/-]+/ ~
  word1:        ~ /[A-Z][a-z]+[ ]*[a-zA-Z]*/ ~
  str:          ~ /[a-zA-Z0-9&.'=\/\\%_-]+/ ~
  punct:        ~ /[ \t,;:\\.\\(\\)\\+\\*-]+/ ~  
  punct2:       ~ /[\t,;\/\\+]+/ ~
  word3:        ~ /[ 0-9a-zA-Z_\\"\\.\\(\\)\/\\*-]+/ ~
  parola:       ~ /[^0-9]+/ ~
  numero:       ~ /[0-9]+/ ~
}