Difference between revisions of "Team:EPF Lausanne/Project/Modelling/Code"

(Created page with "<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr"> <head> <style type="text/css"> #contentSub, #footer-box, #catlinks, #search-controls, #p-logo...")
 
 
(29 intermediate revisions by 2 users not shown)
Line 20: Line 20:
 
   max-height:50%;
 
   max-height:50%;
 
}
 
}
 +
.highlight > pre { background-color: #404040;  display:block; height:600px; overflow:scroll}
 +
.highlight .hll { background-color: #49483e }
 +
.highlight  { background: #272822; color: #f8f8f2 }
 +
.highlight .c { color: #75715e } /* Comment */
 +
.highlight .err { color: #960050; background-color: #1e0010 } /* Error */
 +
.highlight .k { color: #66d9ef } /* Keyword */
 +
.highlight .l { color: #ae81ff } /* Literal */
 +
.highlight .n { color: #f8f8f2 } /* Name */
 +
.highlight .o { color: #f92672 } /* Operator */
 +
.highlight .p { color: #f8f8f2 } /* Punctuation */
 +
.highlight .cm { color: #75715e } /* Comment.Multiline */
 +
.highlight .cp { color: #75715e } /* Comment.Preproc */
 +
.highlight .c1 { color: #75715e } /* Comment.Single */
 +
.highlight .cs { color: #75715e } /* Comment.Special */
 +
.highlight .gd { color: #f92672 } /* Generic.Deleted */
 +
.highlight .ge { font-style: italic } /* Generic.Emph */
 +
.highlight .gi { color: #a6e22e } /* Generic.Inserted */
 +
.highlight .gs { font-weight: bold } /* Generic.Strong */
 +
.highlight .gu { color: #75715e } /* Generic.Subheading */
 +
.highlight .kc { color: #66d9ef } /* Keyword.Constant */
 +
.highlight .kd { color: #66d9ef } /* Keyword.Declaration */
 +
.highlight .kn { color: #f92672 } /* Keyword.Namespace */
 +
.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */
 +
.highlight .kr { color: #66d9ef } /* Keyword.Reserved */
 +
.highlight .kt { color: #66d9ef } /* Keyword.Type */
 +
.highlight .ld { color: #e6db74 } /* Literal.Date */
 +
.highlight .m { color: #ae81ff } /* Literal.Number */
 +
.highlight .s { color: #e6db74 } /* Literal.String */
 +
.highlight .na { color: #a6e22e } /* Name.Attribute */
 +
.highlight .nb { color: #f8f8f2 } /* Name.Builtin */
 +
.highlight .nc { color: #a6e22e } /* Name.Class */
 +
.highlight .no { color: #66d9ef } /* Name.Constant */
 +
.highlight .nd { color: #a6e22e } /* Name.Decorator */
 +
.highlight .ni { color: #f8f8f2 } /* Name.Entity */
 +
.highlight .ne { color: #a6e22e } /* Name.Exception */
 +
.highlight .nf { color: #a6e22e } /* Name.Function */
 +
.highlight .nl { color: #f8f8f2 } /* Name.Label */
 +
.highlight .nn { color: #f8f8f2 } /* Name.Namespace */
 +
.highlight .nx { color: #a6e22e } /* Name.Other */
 +
.highlight .py { color: #f8f8f2 } /* Name.Property */
 +
.highlight .nt { color: #f92672 } /* Name.Tag */
 +
.highlight .nv { color: #f8f8f2 } /* Name.Variable */
 +
.highlight .ow { color: #f92672 } /* Operator.Word */
 +
.highlight .w { color: #f8f8f2 } /* Text.Whitespace */
 +
.highlight .mb { color: #ae81ff } /* Literal.Number.Bin */
 +
.highlight .mf { color: #ae81ff } /* Literal.Number.Float */
 +
.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */
 +
.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */
 +
.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */
 +
.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */
 +
.highlight .sc { color: #e6db74 } /* Literal.String.Char */
 +
.highlight .sd { color: #e6db74 } /* Literal.String.Doc */
 +
.highlight .s2 { color: #e6db74 } /* Literal.String.Double */
 +
.highlight .se { color: #ae81ff } /* Literal.String.Escape */
 +
.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */
 +
.highlight .si { color: #e6db74 } /* Literal.String.Interpol */
 +
.highlight .sx { color: #e6db74 } /* Literal.String.Other */
 +
.highlight .sr { color: #e6db74 } /* Literal.String.Regex */
 +
.highlight .s1 { color: #e6db74 } /* Literal.String.Single */
 +
.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */
 +
.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
 +
.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */
 +
.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */
 +
.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */
 +
.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */
 +
 +
 
</style>
 
</style>
 
     <!--  
 
     <!--  
Line 120: Line 187:
 
             <div class="row">
 
             <div class="row">
 
                 <div class="col-md-12 text-center">
 
                 <div class="col-md-12 text-center">
                     <h3>Description</h3>
+
                     <h3>Code</h3>
 
                 </div>
 
                 </div>
 
             </div>
 
             </div>
Line 126: Line 193:
 
     </div>
 
     </div>
  
    <div class="second-section">
+
<div class="second-section">
 
         <div class="container">
 
         <div class="container">
 
             <div class="row">
 
             <div class="row">
                 <div class="col-md-8 col-centered">
+
                 <div class="col-md-12 col-centered">
                     <h3>Biologic Orthogonal GRNA-Implemented Circuit</h3>
+
                     <h3>code2html</h3>
                    <p>This summer, the EPFL iGEM team strives to pave the way for simpler implementation of digital circuits in vivo. Using the newly discovered dCas9 as a synthetic transcription factor, we aim to design biocompatible transistor-like elements. Our ultimate goal is to make cells smarters by assembling these transistors into logic gates that are both chainable and parallelizable in a homogenous logic framework.</p>
+
<p>The following Python script allows to generate HTML (and CSS) code from source files in C++ and Python languages. It is based on <a href="http://pygments.org/" target="blank">Pygment</a>, a Python syntax highlighter. All code in our Wiki is formatted using this script.
                    <h2>Thinking Binary</h2>
+
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">pygments</span> <span class="kn">import</span> <span class="n">highlight</span>
                    <p>Boolean Logic is the bedrock of the digital revolution. Developed by George Boole in the mid-19th century, it is based on a simple set of values: 0 (“FALSE”) or 1 (“TRUE”). Modern computers represent all forms of information using strings of the same 0s and 1s (also named “Bits”). The processing of bits is handled by logical transistors - which can be seen as electronically controllable switches. Elementary logic operation are performed using cleverly assembled transistors. Such assemblies are named “logic gates”. Gates are the bricks with which complex behaviour is produced.</p>
+
<span class="kn">from</span> <span class="nn">pygments.lexers</span> <span class="kn">import</span> <span class="n">PythonLexer</span>
                    <h2>Biological computers</h2>
+
<span class="kn">from</span> <span class="nn">pygments.lexers</span> <span class="kn">import</span> <span class="n">CppLexer</span>
                    <p>Since the early 2000’s, multiple synthetic biological gates have been built, revolutionizing our ability to dictate the way organisms react to stimuli. Their applications range from intelligent biosensors to cellular therapeutics with improved in vivo targeting and curing.<br>
+
<span class="kn">from</span> <span class="nn">pygments.formatters</span> <span class="kn">import</span> <span class="n">HtmlFormatter</span>
                    Unfortunately, the development of programmable cells has been hampered by difficulties in the multiplication and chaining of logic elements. This has hindered the complexification of bio-circuits as well as the automation and flexibility of their design.<br>
+
 
                    To overcome these limitations, an ideal in vivo logic element should be modular, reusable, and orthogonal - i.e avoiding unwanted cross-talk with its host organism as well as other elements of the engineered circuit.</p>
+
<span class="c"># C++ extensions</span>
                    <h2>Cas9 Logic Gates</h2>
+
<span class="n">cpp</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;cpp&quot;</span><span class="p">,</span><span class="s">&quot;cxx&quot;</span><span class="p">,</span><span class="s">&quot;cc&quot;</span><span class="p">,</span><span class="s">&quot;h&quot;</span><span class="p">]</span>
                    <p>Cas9 (CRISPR associated protein 9) is an RNA-guided DNA endonuclease that targets and cleaves any DNA sequence complementary to its guide RNA (gRNA). Our project will be based upon a derivative of this technology : catalytically “dead” Cas9 (dCas9) that lack the ability to cleave DNA. When fused to a RNA polymerase (RNAP) recruiting element (e.g. the omega subunit of RNAP in E. Coli or VP64 in eukaryotes), chimeric dCas9 can act as a  programmable transcription activator. In addition, activating dCas9 may also act as a DNA transcription inhibitor: depending on its gRNA-determined binding site, it has been shown in yeasts to sterically hinder RNAP recruitment to promoter sequences.<br>
+
 
                    Exploiting dCas9-omega/VP64’s ambivalence, we propose the creation of gRNA-controlled switch-like elements analogous to transistors. The state of the switch would be solely dependent on the position of dCas9 relative to the promoter. The content of the gRNA-targeted sequences might therefore be designed such that each transistor is orthogonal to other logic elements. Using gRNA to make what could be seen as “biological wires”, we also hope to achieve chainability of the transistors and thus complexification of bio-circuits.</p>
+
<span class="c"># Python extensions</span>
                </div>
+
<span class="n">py</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;py&quot;</span><span class="p">]</span>
            </div>
+
 
         </div>
+
<span class="k">def</span> <span class="nf">load_file_as_sting</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span>
    </div>
+
    <span class="sd">&quot;&quot;&quot;</span>
 +
<span class="sd">    Open the file FNAME and save all its content in an unformatted string</span>
 +
<span class="sd">    &quot;&quot;&quot;</span>
 +
   
 +
    <span class="n">content</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
 +
   
 +
    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span><span class="s">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> <span class="c"># Open the file (read only)</span>
 +
        <span class="n">content</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> <span class="c"># Read file and store it in an unformatted string</span>
 +
        <span class="c"># The file is automatically closed</span>
 +
   
 +
    <span class="k">return</span> <span class="n">content</span>
 +
   
 +
<span class="k">def</span> <span class="nf">save_string_as_file</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span><span class="n">string</span><span class="p">):</span>
 +
    <span class="sd">&quot;&quot;&quot;</span>
 +
<span class="sd">    Save the unformatted string STRING into the file FNAME</span>
 +
<span class="sd">    &quot;&quot;&quot;</span>
 +
   
 +
    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span><span class="s">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> <span class="c"># Open the file (write only)</span>
 +
        <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
 +
        <span class="c"># The file is automatically closed</span>
 +
       
 +
<span class="k">def</span> <span class="nf">lexer_formatter</span><span class="p">(</span><span class="n">language</span><span class="p">,</span><span class="n">css</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
 +
    <span class="sd">&quot;&quot;&quot;</span>
 +
<span class="sd">    Return the lexer for the appropriate language and the HTML formatter</span>
 +
<span class="sd">    &quot;&quot;&quot;</span>
 +
   
 +
    <span class="n">L</span> <span class="o">=</span> <span class="bp">None</span>
 +
   
 +
    <span class="k">if</span> <span class="n">language</span> <span class="ow">in</span> <span class="n">py</span><span class="p">:</span>
 +
        <span class="c"># Python Lexer</span>
 +
        <span class="n">L</span> <span class="o">=</span> <span class="n">PythonLexer</span><span class="p">()</span>
 +
       
 +
    <span class="k">elif</span> <span class="n">language</span> <span class="ow">in</span> <span class="n">cpp</span><span class="p">:</span>
 +
        <span class="c"># C++ Lexer</span>
 +
        <span class="n">L</span> <span class="o">=</span> <span class="n">CppLexer</span><span class="p">()</span>
 +
    <span class="k">else</span><span class="p">:</span>
 +
        <span class="k">raise</span> <span class="ne">NameError</span><span class="p">(</span><span class="s">&quot;Invalid language.&quot;</span><span class="p">)</span>
 +
       
 +
    <span class="n">HF</span> <span class="o">=</span> <span class="n">HtmlFormatter</span><span class="p">(</span><span class="n">full</span><span class="o">=</span><span class="n">css</span><span class="p">,</span><span class="n">style</span><span class="o">=</span><span class="s">&quot;monokai&quot;</span><span class="p">)</span>
 +
       
 +
    <span class="k">return</span> <span class="n">L</span><span class="p">,</span> <span class="n">HF</span>
 +
 
 +
 
 +
<span class="k">def</span> <span class="nf">code_to_htmlcss</span><span class="p">(</span><span class="n">code</span><span class="p">,</span><span class="n">language</span><span class="p">):</span>
 +
    <span class="sd">&quot;&quot;&quot;</span>
 +
<span class="sd">    Transform CODE into html and css (separate files)</span>
 +
<span class="sd">    &quot;&quot;&quot;</span>
 +
   
 +
    <span class="c"># Obtain lexer and HtmlFormatter</span>
 +
    <span class="n">L</span><span class="p">,</span> <span class="n">HF</span> <span class="o">=</span> <span class="n">lexer_formatter</span><span class="p">(</span><span class="n">language</span><span class="p">,</span><span class="n">css</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
 +
   
 +
    <span class="c"># Create html code</span>
 +
    <span class="n">html</span> <span class="o">=</span> <span class="n">highlight</span><span class="p">(</span><span class="n">code</span><span class="p">,</span><span class="n">L</span><span class="p">,</span><span class="n">HF</span><span class="p">)</span>
 +
   
 +
    <span class="c"># Create css code</span>
 +
    <span class="n">css</span> <span class="o">=</span> <span class="n">HF</span><span class="o">.</span><span class="n">get_style_defs</span><span class="p">(</span><span class="s">&#39;.highlight&#39;</span><span class="p">)</span>
 +
   
 +
    <span class="k">return</span> <span class="n">html</span><span class="p">,</span><span class="n">css</span>
 +
   
 +
<span class="k">def</span> <span class="nf">code_to_html</span><span class="p">(</span><span class="n">code</span><span class="p">,</span><span class="n">language</span><span class="p">):</span>
 +
    <span class="sd">&quot;&quot;&quot;</span>
 +
<span class="sd">    Transform CODE into html and css (all in the same file)</span>
 +
<span class="sd">    &quot;&quot;&quot;</span>
 +
   
 +
    <span class="c"># Obtain lexer and HtmlFormatter</span>
 +
    <span class="n">L</span><span class="p">,</span> <span class="n">HF</span> <span class="o">=</span> <span class="n">lexer_formatter</span><span class="p">(</span><span class="n">language</span><span class="p">)</span>
 +
   
 +
    <span class="c"># Create fill html code</span>
 +
    <span class="n">html</span> <span class="o">=</span> <span class="n">highlight</span><span class="p">(</span><span class="n">code</span><span class="p">,</span><span class="n">L</span><span class="p">,</span><span class="n">HF</span><span class="p">)</span>
 +
   
 +
    <span class="k">return</span> <span class="n">html</span>
 +
 
 +
<span class="kn">import</span> <span class="nn">sys</span>
 +
 
 +
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span>
 +
    <span class="sd">&quot;&quot;&quot;</span>
 +
<span class="sd">    Command:</span>
 +
<span class="sd">    </span>
 +
<span class="sd">    ######################################</span>
 +
<span class="sd">    </span>
 +
<span class="sd">        python code2html INPUTFILE [CSS]</span>
 +
<span class="sd">        </span>
 +
<span class="sd">    ######################################</span>
 +
<span class="sd">        </span>
 +
<span class="sd">    INPUTFILE: name (with path) of the file to convert to html</span>
 +
<span class="sd">    CSS: write &quot;true&quot; in order to obtain separate .html and .css files (&quot;false&quot; by default)</span>
 +
<span class="sd">    &quot;&quot;&quot;</span>
 +
   
 +
    <span class="c"># Command line arguments</span>
 +
    <span class="n">args</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span>
 +
   
 +
    <span class="c"># Check command line arguments</span>
 +
    <span class="n">ncla</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="c"># number of command line arguments</span>
 +
   
 +
    <span class="k">if</span> <span class="n">ncla</span> <span class="o">!=</span> <span class="mi">2</span> <span class="ow">and</span> <span class="n">ncla</span> <span class="o">!=</span> <span class="mi">3</span> <span class="p">:</span>
 +
        <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">&quot;Invalid number of command line arguments.&quot;</span><span class="p">)</span>
 +
       
 +
    <span class="n">css_bool</span> <span class="o">=</span> <span class="bp">False</span>
 +
   
 +
    <span class="k">if</span> <span class="n">ncla</span> <span class="o">==</span> <span class="mi">3</span> <span class="ow">and</span> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&quot;true&quot;</span><span class="p">:</span>
 +
        <span class="n">css_bool</span> <span class="o">=</span> <span class="bp">True</span> <span class="c"># Export css separately</span>
 +
   
 +
    <span class="c"># Input file</span>
 +
    <span class="n">fname_code</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="c"># Name of the file containing the code to convert in html</span>
 +
   
 +
    <span class="c"># Input file extension</span>
 +
    <span class="n">language</span> <span class="o">=</span> <span class="n">fname_code</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
 +
   
 +
    <span class="c"># Output files</span>
 +
    <span class="n">fname_html</span> <span class="o">=</span> <span class="n">fname_code</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">&quot;.html&quot;</span> <span class="c"># Name of the file where the html code will be stored</span>
 +
    <span class="n">fname_css</span> <span class="o">=</span> <span class="n">fname_code</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">&quot;.css&quot;</span> <span class="c"># Name of the file where the css code will be stored</span>
 +
   
 +
    <span class="c"># Save code into a unformatted string</span>
 +
    <span class="n">code</span> <span class="o">=</span> <span class="n">load_file_as_sting</span><span class="p">(</span><span class="n">fname_code</span><span class="p">)</span>
 +
   
 +
    <span class="k">if</span> <span class="n">css_bool</span> <span class="o">==</span> <span class="bp">False</span><span class="p">:</span> <span class="c"># Convert to standalone html</span>
 +
        <span class="n">html</span> <span class="o">=</span> <span class="n">code_to_html</span><span class="p">(</span><span class="n">code</span><span class="p">,</span><span class="n">language</span><span class="p">)</span>
 +
    <span class="k">else</span><span class="p">:</span> <span class="c"># Convert to html and css separately</span>
 +
        <span class="n">html</span><span class="p">,</span><span class="n">css</span> <span class="o">=</span> <span class="n">code_to_htmlcss</span><span class="p">(</span><span class="n">code</span><span class="p">,</span><span class="n">language</span><span class="p">)</span>
 +
   
 +
    <span class="c"># Save html</span>
 +
    <span class="n">save_string_as_file</span><span class="p">(</span><span class="n">fname_html</span><span class="p">,</span><span class="n">html</span><span class="p">)</span>
 +
   
 +
    <span class="k">if</span> <span class="n">css_bool</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
 +
         <span class="c"># Save css</span>
 +
        <span class="n">save_string_as_file</span><span class="p">(</span><span class="n">fname_css</span><span class="p">,</span><span class="n">css</span><span class="p">)</span>
 +
</pre></div>
 +
 
 +
<center><div>
 +
<a href="https://static.igem.org/mediawiki/2015/b/bf/Code2html.zip" class="btn btn-default"><span class="glyphicon glyphicon-circle-arrow-down"></span></a></div></center>
 +
</div></div></div></div>
 +
 
 +
 
  
  

Latest revision as of 16:57, 30 July 2015

Code

code2html

The following Python script allows to generate HTML (and CSS) code from source files in C++ and Python languages. It is based on Pygment, a Python syntax highlighter. All code in our Wiki is formatted using this script.

from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.lexers import CppLexer
from pygments.formatters import HtmlFormatter

# C++ extensions
cpp = ["cpp","cxx","cc","h"]

# Python extensions
py = ["py"]

def load_file_as_sting(fname):
    """
    Open the file FNAME and save all its content in an unformatted string
    """
    
    content = ""
    
    with open(fname,'r') as f: # Open the file (read only)
        content = f.read() # Read file and store it in an unformatted string
        # The file is automatically closed
    
    return content
    
def save_string_as_file(fname,string):
    """
    Save the unformatted string STRING into the file FNAME
    """
    
    with open(fname,'w') as f: # Open the file (write only)
        f.write(string)
        # The file is automatically closed
        
def lexer_formatter(language,css=False):
    """
    Return the lexer for the appropriate language and the HTML formatter
    """
    
    L = None
    
    if language in py:
        # Python Lexer
        L = PythonLexer()
        
    elif language in cpp:
        # C++ Lexer
        L = CppLexer() 
    else:
        raise NameError("Invalid language.")
        
    HF = HtmlFormatter(full=css,style="monokai")
        
    return L, HF


def code_to_htmlcss(code,language):
    """
    Transform CODE into html and css (separate files)
    """
    
    # Obtain lexer and HtmlFormatter
    L, HF = lexer_formatter(language,css=True)
    
    # Create html code
    html = highlight(code,L,HF)
    
    # Create css code
    css = HF.get_style_defs('.highlight')
    
    return html,css
    
def code_to_html(code,language):
    """
    Transform CODE into html and css (all in the same file)
    """
    
    # Obtain lexer and HtmlFormatter
    L, HF = lexer_formatter(language)
    
    # Create fill html code
    html = highlight(code,L,HF)
    
    return html

import sys

if __name__ == "__main__":
    """
    Command:
    
    ######################################
    
        python code2html INPUTFILE [CSS]
        
    ######################################
        
    INPUTFILE: name (with path) of the file to convert to html
    CSS: write "true" in order to obtain separate .html and .css files ("false" by default)
    """
    
    # Command line arguments
    args = sys.argv
    
    # Check command line arguments
    ncla = len(args) # number of command line arguments
    
    if ncla != 2 and ncla != 3 :
        raise TypeError("Invalid number of command line arguments.")
        
    css_bool = False
    
    if ncla == 3 and args[-1].lower() == "true":
        css_bool = True # Export css separately
    
    # Input file
    fname_code = sys.argv[1] # Name of the file containing the code to convert in html
    
    # Input file extension
    language = fname_code.split('.')[-1]
    
    # Output files
    fname_html = fname_code.split('.')[0] + ".html" # Name of the file where the html code will be stored
    fname_css = fname_code.split('.')[0] + ".css" # Name of the file where the css code will be stored
    
    # Save code into a unformatted string
    code = load_file_as_sting(fname_code)
    
    if css_bool == False: # Convert to standalone html
        html = code_to_html(code,language)
    else: # Convert to html and css separately
        html,css = code_to_htmlcss(code,language)
    
    # Save html
    save_string_as_file(fname_html,html)
    
    if css_bool == True:
        # Save css
        save_string_as_file(fname_css,css)

Still under construction