<p><b>dwj07@fsu.edu</b> 2013-02-25 11:23:13 -0700 (Mon, 25 Feb 2013)</p><p><br>
        -- BRANCH COMMIT --<br>
<br>
        Creating a new script, which generates latex documentation for core specific variables, namelist options, and dimensions.<br>
<br>
        It parses Registry, and currently a Registry.description file to get the data for the tables.<br>
</p><hr noshade><pre><font color="gray">Added: branches/tools/python_scripts/namelist_generation/generate_namelist_latex.py
===================================================================
--- branches/tools/python_scripts/namelist_generation/generate_namelist_latex.py                                (rev 0)
+++ branches/tools/python_scripts/namelist_generation/generate_namelist_latex.py        2013-02-25 18:23:13 UTC (rev 2508)
@@ -0,0 +1,348 @@
+#!/usr/bin/python
+from collections import defaultdict
+from optparse import OptionParser
+
+parser = OptionParser()
+parser.add_option(&quot;-f&quot;, &quot;--file&quot;, dest=&quot;registry_path&quot;, help=&quot;Path to Registry file&quot;, metavar=&quot;FILE&quot;)
+parser.add_option(&quot;-d&quot;, &quot;--tex_dir&quot;, dest=&quot;latex_dir&quot;, help=&quot;Path to directory with latex addition files.&quot;, metavar=&quot;DIR&quot;)
+parser.add_option(&quot;-p&quot;, &quot;--tex_path&quot;, dest=&quot;latex_path&quot;, help=&quot;Path to latex input files that will be written to generated latex.&quot;, metavar=&quot;PATH&quot;)
+
+options, args = parser.parse_args()
+
+if not options.registry_path:
+        parser.error(&quot;Registry file is required&quot;)
+
+if not options.latex_dir:
+        print 'Directory with group latex files is missing. Skipping addition of latex files.'
+        extra_latex = False
+else:
+        if not options.latex_path:
+                parser.error('Need latex path with latex directory.')
+        extra_latex = True
+
+latex_missing_string = '{\\bf \color{red} MISSING}'
+dimension_table_header = 'Name &amp; Description'
+variable_table_header = 'Type Persistence Name ( Dimensions ) &amp; I/O &amp; Units &amp; Super Array'
+namelist_table_header = 'Type Name &amp; Default Value &amp; Possible Values'
+
+variable_table_header = 'Name &amp; Description'
+namelist_table_header = 'Name &amp; Description'
+
+registry_path = options.registry_path
+registry_description_path = '%s.description'%registry_path
+
+try:
+        registry = open(registry_path, 'r')
+except:
+        print '%s does not exist. Exiting.'%registry_path
+
+try:
+        registry_description = open(registry_description_path, 'r')
+except:
+        print '%s does not exist. Descriptions will all be *MISSING*.'%registry_description_path
+
+dimensions = list()
+
+namelist_groups = list()
+namelist_params = defaultdict(list)
+namelist_types = defaultdict(list)
+namelist_values = defaultdict(list)
+namelist_possible_values = defaultdict(list)
+
+variable_groups = list()
+variable_names = defaultdict(list)
+variable_dimensions = defaultdict(list)
+variable_io = defaultdict(list)
+variable_persistence = defaultdict(list)
+variable_types = defaultdict(list)
+variable_super_arrays = defaultdict(list)
+
+registry_descriptions = defaultdict(list)
+registry_units = defaultdict(list)
+last_namelist_group = ''
+last_variable_group = ''
+
+# Build descriptions for namelist and variables in registry.
+# Parse Registry.description
+
+for block in iter(lambda: registry_description.readline(), &quot;&quot;):
+        if block[0] != '%' and len(block) &gt; 1:
+                block_arr = block.split(' % ')
+                try:
+                        registry_units[block_arr[0]].append(block_arr[1].replace('</font>
<font color="blue">','').replace('-','None'))
+                except:
+                        registry_units[block_arr[0]].append(latex_missing_string)
+
+                try:
+                        registry_descriptions[block_arr[0]].append(block_arr[2].replace('</font>
<font color="blue">',''))
+                except:
+                        registry_descriptions[block_arr[0]].append(latex_missing_string)
+
+for block in iter(lambda: registry.readline(), &quot;&quot;):
+        if block[0] != '%' and len(block) &gt; 1:
+                block_arr = block.split()
+                if block_arr[0] == 'namelist':
+                        group = block_arr[2].replace('</font>
<font color="blue">','')
+                        name = block_arr[3].replace('</font>
<font color="blue">','')
+                        namelist_type = block_arr[1].replace('</font>
<font color="blue">','')
+                        value = block_arr[4].replace('</font>
<font color="blue">','')
+                        if group != last_namelist_group:
+                                last_namelist_group = group
+                                namelist_groups.append(group)
+                        namelist_params[group].append(name)
+                        namelist_types[name].append(namelist_type.replace('character','string'))
+                        namelist_values[name].append(value)
+
+                        block_arr1 = block.split(' % ')
+                        try:
+                                namelist_possible_values[name].append(block_arr1[1].replace('</font>
<font color="blue">','').replace('&gt;','$&gt;$').replace('&lt;','$&lt;$'))
+                        except:
+                                namelist_possible_values[name].append(latex_missing_string)
+                elif block_arr[0] == 'var':
+                        block_arr2 = block.split('(')
+                        block_arr3 = block_arr2[1].split(')')
+                        block_arr4 = block_arr3[1].split()
+
+                        dims = block_arr3[0].split()
+                        io_flags = block_arr4[1].replace('</font>
<font color="blue">','')
+                        #name = block_arr4[2].replace('</font>
<font color="blue">','')
+                        struct = block_arr4[3].replace('</font>
<font color="blue">','')
+                        super_array = block_arr4[4].replace('-','None')
+
+                        block_arr4 = block_arr2[0].split()
+                        persistence = block_arr4[1].replace('</font>
<font color="blue">','')
+                        var_type = block_arr4[2].replace('</font>
<font color="blue">','')
+                        name = block_arr[3].replace('</font>
<font color="blue">','')
+
+                        alread_added = False
+                        for group in variable_groups:
+                                if struct == group:
+                                        alread_added = True
+
+                        if not alread_added:
+                                variable_groups.append(struct)
+
+                        variable_names[struct].append(name)
+                        try:
+                                del variable_dimensions[name]
+                        except:
+                                deleted = False
+                        for dim in dims:
+                                variable_dimensions[name].append(dim)
+
+                        variable_io[name].append(io_flags)
+                        variable_persistence[name].append(persistence)
+                        variable_types[name].append(var_type.replace('text','string'))
+                        variable_super_arrays[name].append(super_array)
+                elif block_arr[0] == 'dim':
+                        dimensions.append(block_arr[1])
+
+# Write namelist.input.generated
+namelist = open('namelist.input.generated', 'w+')
+for group in namelist_groups:
+        namelist.write('&amp;%s</font>
<font color="blue">'%group)
+        for param in namelist_params[group]:
+                value = namelist_values[param][0]
+                namelist.write('\t%s = %s</font>
<font color="blue">'%(param,value))
+        namelist.write('/</font>
<font color="blue">')
+namelist.close()
+
+# Write namelist latex chapter
+latex = open('namelist_section_documentation.tex', 'w+')
+latex.write('\chapter{Namelist options}</font>
<font color="blue">')
+for group in namelist_groups:
+        latex.write('\section{%s}</font>
<font color="blue">'%group.replace('_','\_'))
+        latex.write('\label{sec:nm_sec_%s}</font>
<font color="blue">'%group)
+
+        try:
+                junk_file = open('%s/%s.tex'%(options.latex_dir,group), 'r')
+                latex.write('\input{%s/%s.tex}</font>
<font color="blue">'%(options.latex_path, group))
+                junk_file.close()
+        except:
+                latex.write('')
+
+        for param in namelist_params[group]:
+                latex.write('\subsection{%s}</font>
<font color="blue">'%param.replace('_','\_'))
+                latex.write('\label{subsec:nm_sec_%s}</font>
<font color="blue">'%param)
+                nm_type = namelist_types[param][0].replace('_','\_')
+                nm_value = namelist_values[param][0].replace('_','\_')
+                nm_possibles = namelist_possible_values[param][0].replace('_','\_')
+                try:
+                        nm_units = registry_units[param][0].replace('_','\_')
+                except:
+                        nm_units = latex_missing_string.replace('_','\_')
+
+                try:
+                        nm_desc = registry_descriptions[param][0].replace('_','\_')
+                except:
+                        nm_desc = latex_missing_string.replace('_','\_')
+
+                latex.write('\\begin{center}</font>
<font color="blue">')
+                latex.write('\\begin{longtable}{| p{2.0in} | p{4.0in} |}</font>
<font color="blue">')
+                latex.write('    \hline</font>
<font color="blue">')
+                latex.write('    Type: &amp; %s \\\\</font>
<font color="blue">'%nm_type)
+                latex.write('    \hline</font>
<font color="blue">')
+                latex.write('    Units: &amp; %s \\\\</font>
<font color="blue">'%nm_units)
+                latex.write('    \hline</font>
<font color="blue">')
+                latex.write('    Default Value: &amp; %s \\\\</font>
<font color="blue">'%nm_value)
+                latex.write('    \hline</font>
<font color="blue">')
+                latex.write('    Possible Values: &amp; %s \\\\</font>
<font color="blue">'%nm_possibles)
+                latex.write('    \hline</font>
<font color="blue">')
+                latex.write('    \caption{%s: %s}</font>
<font color="blue">'%(param.replace('_','\_'), nm_desc))
+                latex.write('\end{longtable}</font>
<font color="blue">')
+                latex.write('\end{center}</font>
<font color="blue">')
+latex.close()
+
+# Write variable latex chapter
+latex = open('variable_section_documentation.tex', 'w+')
+latex.write('\chapter{Variable definions}</font>
<font color="blue">')
+for group in variable_groups:
+        latex.write('\section{%s}</font>
<font color="blue">'%group.replace('_','\_'))
+        latex.write('\label{sec:var_sec_%s}</font>
<font color="blue">'%group)
+
+        try:
+                junk_file = open('%s/%s.tex'%(options.latex_dir,group), 'r')
+                latex.write('\input{%s/%s.tex}</font>
<font color="blue">'%(options.latex_path, group))
+                junk_file.close()
+        except:
+                latex.write('')
+
+        for var in variable_names[group]:
+                var_type = variable_types[var][0].replace('_','\_')
+                var_persistence = variable_persistence[var][0].replace('_','\_')
+                try:
+                        var_desc = registry_descriptions[var][0].replace('_','\_')
+                except:
+                        var_desc = latex_missing_string
+
+                try:
+                        var_units = registry_units[var][0].replace('_','\_')
+                except:
+                        var_units = latex_missing_string
+
+                var_dims = '('
+                for dim in variable_dimensions[var]:
+                        var_dims = '%s %s'%(var_dims, dim.replace(' ',''))        
+                var_dims = '%s )'%var_dims
+
+                latex.write('\subsection{%s}</font>
<font color="blue">'%var.replace('_','\_'))
+                latex.write('\label{subsec:var_sec_%s_%s}</font>
<font color="blue">'%(group,var))
+                # Tabular Format:
+                latex.write('\\begin{center}</font>
<font color="blue">')
+                latex.write('\\begin{longtable}{| p{2.0in} | p{4.0in} |}</font>
<font color="blue">')
+                latex.write('        \hline </font>
<font color="blue">')
+                latex.write('        Type: &amp; %s \\\\</font>
<font color="blue">'%var_type)
+                latex.write('        \hline </font>
<font color="blue">')
+                latex.write('        Units: &amp; %s \\\\</font>
<font color="blue">'%var_units)
+                latex.write('        \hline </font>
<font color="blue">')
+                latex.write('        Dimension: &amp; %s \\\\</font>
<font color="blue">'%var_dims)
+                latex.write('        \hline </font>
<font color="blue">')
+                latex.write('        Persistence: &amp; %s \\\\</font>
<font color="blue">'%var_persistence)
+                latex.write('        \hline </font>
<font color="blue">')
+                latex.write('    \caption{%s: %s}</font>
<font color="blue">'%(var.replace('_','\_'),var_desc))
+                latex.write('\end{longtable}</font>
<font color="blue">')
+                latex.write('\end{center}</font>
<font color="blue">')
+latex.close()
+
+# Write namelist latex chapter
+latex = open('namelist_table_documentation.tex', 'w+')
+latex.write('\chapter{Namelist options}</font>
<font color="blue">')
+for group in namelist_groups:
+        latex.write('\section{%s}</font>
<font color="blue">'%group.replace('_','\_'))
+        latex.write('\label{sec:nm_tab_%s}</font>
<font color="blue">'%group)
+
+        try:
+                junk_file = open('%s/%s.tex'%(options.latex_dir,group), 'r')
+                latex.write('\input{%s/%s.tex}</font>
<font color="blue">'%(options.latex_path, group))
+                junk_file.close()
+        except:
+                latex.write('')
+
+        latex.write('{\small</font>
<font color="blue">')
+        latex.write('\\begin{center}</font>
<font color="blue">')
+        latex.write('\\begin{longtable}{| p{2.0in} | p{4.0in} |}</font>
<font color="blue">')
+        latex.write('        \hline</font>
<font color="blue">')
+        latex.write('        %s \\\\</font>
<font color="blue">'%namelist_table_header)
+        latex.write('        \hline</font>
<font color="blue">')
+        for param in namelist_params[group]:
+                namelist_type = namelist_types[param][0].replace('_','\_')
+                value = namelist_values[param][0].replace('_','\_')
+                possible_values = namelist_possible_values[param][0].replace('_','\_')
+                try:
+                        description = registry_descriptions[param][0].replace('_','\_')
+                except:
+                        description = latex_missing_string.replace('_','\_')
+
+                latex.write('        \hyperref[subsec:nm_sec_%s]{%s} &amp; %s \\\\</font>
<font color="blue">'%(param, param.replace('_','\_'), description))
+                latex.write('        \hline</font>
<font color="blue">')
+
+        latex.write('\end{longtable}</font>
<font color="blue">')
+        latex.write('\end{center}</font>
<font color="blue">')
+        latex.write('}</font>
<font color="blue">')
+latex.close()
+
+# Write variable latex chapter
+latex = open('variable_table_documentation.tex', 'w+')
+latex.write('\chapter{Variable definions}</font>
<font color="blue">')
+for group in variable_groups:
+        latex.write('\section{%s}</font>
<font color="blue">'%group.replace('_','\_'))
+        latex.write('\label{sec:var_tab_%s}</font>
<font color="blue">'%group)
+
+        try:
+                junk_file = open('%s/%s.tex'%(options.latex_dir,group), 'r')
+                latex.write('\input{%s/%s.tex}</font>
<font color="blue">'%(options.latex_path, group))
+                junk_file.close()
+        except:
+                latex.write('')
+
+        latex.write('{\small</font>
<font color="blue">')
+        latex.write('\\begin{center}</font>
<font color="blue">')
+        latex.write('\\begin{longtable}{| p{2.0in} | p{4.0in} |}</font>
<font color="blue">')
+        latex.write('        \hline</font>
<font color="blue">')
+        latex.write('        %s \\\\</font>
<font color="blue">'%variable_table_header)
+        latex.write('        \hline</font>
<font color="blue">')
+        for var in variable_names[group]:
+                var_type = variable_types[var][0].replace('_','\_')
+                var_persistence = variable_persistence[var][0].replace('_','\_')
+                var_io = variable_io[var][0].replace('i','Input').replace('r','Restart').replace('o','Output').replace('tI','t/I').replace('tR','t/R'). replace('tO','t/O').replace('-','None')
+                var_super_array = variable_super_arrays[var][0]
+                try:
+                        var_desc = registry_descriptions[var][0].replace('_','\_')
+                except:
+                        var_desc = latex_missing_string.replace('_','\_')
+
+                try:
+                        var_units = registry_units[var][0]
+                except:
+                        var_units = latex_missing_string.replace('_','\_')
+
+                var_dims = ''
+                for dim in variable_dimensions[var]:
+                        var_dims = '%s %s'%(var_dims,dim)
+
+                latex.write('        \hyperref[subsec:var_sec_%s_%s]{%s} &amp; %s \\\\</font>
<font color="blue">'%(group, var, var.replace('_','\_'), var_desc))
+                latex.write('        \hline</font>
<font color="blue">')
+        latex.write('\end{longtable}</font>
<font color="blue">')
+        latex.write('\end{center}</font>
<font color="blue">')
+        latex.write('}</font>
<font color="blue">')
+latex.close()
+
+# Write dimension table
+latex = open('dimension_table_documentation.tex', 'w+')
+latex.write('\chapter{Dimensions}</font>
<font color="blue">')
+latex.write('{\small</font>
<font color="blue">')
+latex.write('\\begin{center}</font>
<font color="blue">')
+latex.write('\\begin{longtable}{| p{2.0in} | p{4.0in} |}</font>
<font color="blue">')
+latex.write('        \hline </font>
<font color="blue">')
+latex.write('        %s \\\\</font>
<font color="blue">'%dimension_table_header)
+latex.write('        \hline </font>
<font color="blue">')
+for dim in dimensions:
+        try:
+                latex.write('        %s &amp; %s \\\\ </font>
<font color="blue">'%(dim.replace('_','\_'), registry_descriptions[dim].replace('_','\_')))
+        except:
+                latex.write('        %s &amp; %s \\\\ </font>
<font color="blue">'%(dim.replace('_','\_'), latex_missing_string.replace('_','\_')))
+        latex.write('        \hline</font>
<font color="blue">')
+
+latex.write('\end{longtable}</font>
<font color="blue">')
+latex.write('\end{center}</font>
<font color="blue">')
+latex.write('}</font>
<font color="blue">')


Property changes on: branches/tools/python_scripts/namelist_generation/generate_namelist_latex.py
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
</font>
</pre>