Difference between revisions of "Team:EPF Lausanne/Software"

Line 153: Line 153:
 
         <p>This script accepts two command line arguments: the first argument is the name of the file to convert, the second one (optional) is to ask separate HTML and CSS files.</p>
 
         <p>This script accepts two command line arguments: the first argument is the name of the file to convert, the second one (optional) is to ask separate HTML and CSS files.</p>
  
        <div class="highlight"><pre><span class="sd">&quot;&quot;&quot;</span>
+
<div class="highlight"><pre><span class="sd">&quot;&quot;&quot;</span>
 
<span class="sd">Command:</span>
 
<span class="sd">Command:</span>
  
Line 162: Line 162:
 
<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">INPUTFILE: name (with path) of the file to convert to html</span>
        <span class="sd">CSS: write &quot;true&quot; (ot &quot;t&quot;, &quot;yes&quot;, &quot;y&quot;) in order to obtain separate .html and .css files (&quot;false&quot; by default)</span>
+
<span class="sd">CSS: write &quot;true&quot; (ot &quot;t&quot;, &quot;yes&quot;, &quot;y&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="sd">&quot;&quot;&quot;</span>
  
        <span class="kn">from</span> <span class="nn">pygments</span> <span class="kn">import</span> <span class="n">highlight</span>
+
<span class="kn">from</span> <span class="nn">pygments</span> <span class="kn">import</span> <span class="n">highlight</span>
        <span class="kn">from</span> <span class="nn">pygments.lexers</span> <span class="kn">import</span> <span class="n">PythonLexer</span>
+
<span class="kn">from</span> <span class="nn">pygments.lexers</span> <span class="kn">import</span> <span class="n">PythonLexer</span>
        <span class="kn">from</span> <span class="nn">pygments.lexers</span> <span class="kn">import</span> <span class="n">CppLexer</span>
+
<span class="kn">from</span> <span class="nn">pygments.lexers</span> <span class="kn">import</span> <span class="n">CppLexer</span>
        <span class="kn">from</span> <span class="nn">pygments.lexers</span> <span class="kn">import</span> <span class="n">BashLexer</span>
+
<span class="kn">from</span> <span class="nn">pygments.lexers</span> <span class="kn">import</span> <span class="n">BashLexer</span>
        <span class="kn">from</span> <span class="nn">pygments.formatters</span> <span class="kn">import</span> <span class="n">HtmlFormatter</span>
+
<span class="kn">from</span> <span class="nn">pygments.formatters</span> <span class="kn">import</span> <span class="n">HtmlFormatter</span>
  
        <span class="c"># Code formatting style</span>
+
<span class="c"># Code formatting style</span>
        <span class="n">style</span> <span class="o">=</span> <span class="s">&quot;monokai&quot;</span>
+
<span class="n">style</span> <span class="o">=</span> <span class="s">&quot;monokai&quot;</span>
  
        <span class="c"># C++ extensions</span>
+
<span class="c"># C++ extensions</span>
        <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>
+
<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>
  
        <span class="c"># Python extensions</span>
+
<span class="c"># Python extensions</span>
        <span class="n">py</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;py&quot;</span><span class="p">]</span>
+
<span class="n">py</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;py&quot;</span><span class="p">]</span>
  
        <span class="c"># Bash extensions</span>
+
<span class="c"># Bash extensions</span>
        <span class="n">bash</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;sh&quot;</span><span class="p">,</span><span class="s">&quot;bash&quot;</span><span class="p">]</span>
+
<span class="n">bash</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;sh&quot;</span><span class="p">,</span><span class="s">&quot;bash&quot;</span><span class="p">]</span>
  
        <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>
+
<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>
            <span class="sd">&quot;&quot;&quot;</span>
+
    <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">    Open the file FNAME and save all its content in an unformatted string</span>
        <span class="sd">    &quot;&quot;&quot;</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="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="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="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="c"># The file is automatically closed</span>
  
            <span class="k">return</span> <span class="n">content</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="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">&quot;&quot;&quot;</span>
        <span class="sd">    Save the unformatted string STRING into the file FNAME</span>
+
<span class="sd">    Save the unformatted string STRING into the file FNAME</span>
        <span class="sd">    &quot;&quot;&quot;</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="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="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="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="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">&quot;&quot;&quot;</span>
        <span class="sd">    Return the lexer for the appropriate language and the HTML formatter</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="sd">    &quot;&quot;&quot;</span>
  
            <span class="n">L</span> <span class="o">=</span> <span class="bp">None</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="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="c"># Python Lexer</span>
                <span class="n">L</span> <span class="o">=</span> <span class="n">PythonLexer</span><span class="p">()</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="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="c"># C++ Lexer</span>
                <span class="n">L</span> <span class="o">=</span> <span class="n">CppLexer</span><span class="p">()</span>
+
        <span class="n">L</span> <span class="o">=</span> <span class="n">CppLexer</span><span class="p">()</span>
  
            <span class="k">elif</span> <span class="n">language</span> <span class="ow">in</span> <span class="n">bash</span><span class="p">:</span>
+
    <span class="k">elif</span> <span class="n">language</span> <span class="ow">in</span> <span class="n">bash</span><span class="p">:</span>
                <span class="c"># Bash Lexer</span>
+
        <span class="c"># Bash Lexer</span>
                <span class="n">L</span> <span class="o">=</span> <span class="n">BashLexer</span><span class="p">()</span>
+
        <span class="n">L</span> <span class="o">=</span> <span class="n">BashLexer</span><span class="p">()</span>
  
            <span class="k">else</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="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="ow">not</span> <span class="n">css</span><span class="p">,</span><span class="n">style</span><span class="o">=</span><span class="n">style</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="ow">not</span> <span class="n">css</span><span class="p">,</span><span class="n">style</span><span class="o">=</span><span class="n">style</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">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="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">&quot;&quot;&quot;</span>
        <span class="sd">    Transform CODE into html and css (separate files)</span>
+
<span class="sd">    Transform CODE into html and css (separate files)</span>
        <span class="sd">    &quot;&quot;&quot;</span>
+
<span class="sd">    &quot;&quot;&quot;</span>
  
            <span class="c"># Obtain lexer and HtmlFormatter</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="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="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="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="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="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">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="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">&quot;&quot;&quot;</span>
        <span class="sd">    Transform CODE into html and css (all in the same file)</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="sd">    &quot;&quot;&quot;</span>
  
            <span class="c"># Obtain lexer and HtmlFormatter</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">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="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="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="k">return</span> <span class="n">html</span>
  
        <span class="kn">import</span> <span class="nn">sys</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="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">&quot;&quot;&quot;</span>
        <span class="sd">    Command:</span>
+
<span class="sd">    Command:</span>
  
        <span class="sd">    ######################################</span>
+
<span class="sd">    ######################################</span>
  
        <span class="sd">        python code2html INPUTFILE [CSS]</span>
+
<span class="sd">        python code2html INPUTFILE [CSS]</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">    INPUTFILE: name (with path) of the file to convert to html</span>
        <span class="sd">    CSS: write &quot;true&quot; (ot &quot;t&quot;, &quot;yes&quot;, &quot;y&quot;) in order to obtain separate .html and .css files (&quot;false&quot; by default)</span>
+
<span class="sd">    CSS: write &quot;true&quot; (ot &quot;t&quot;, &quot;yes&quot;, &quot;y&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="sd">    &quot;&quot;&quot;</span>
  
            <span class="c"># Command line arguments</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="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="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="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">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="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="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="ow">in</span> <span class="p">[</span><span class="s">&quot;true&quot;</span><span class="p">,</span><span class="s">&#39;t&#39;</span><span class="p">,</span><span class="s">&quot;yes&quot;</span><span class="p">,</span><span class="s">&#39;y&#39;</span><span class="p">]:</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="ow">in</span> <span class="p">[</span><span class="s">&quot;true&quot;</span><span class="p">,</span><span class="s">&#39;t&#39;</span><span class="p">,</span><span class="s">&quot;yes&quot;</span><span class="p">,</span><span class="s">&#39;y&#39;</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="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="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="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="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="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="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_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="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="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="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="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="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="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="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="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="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="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="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>
+
        <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>
+
</pre></div>
  
 
         <center>
 
         <center>

Revision as of 17:04, 24 August 2015

EPFL 2015 iGEM bioLogic Logic Orthogonal gRNA Implemented Circuits EPFL 2015 iGEM bioLogic Logic Orthogonal gRNA Implemented Circuits

Software

Name Description
code2html Script creating automatically HTML and CSS code from source files in Python, C++ or BASH.
ODEs Generator Program generating automatically the ODEs governing our system from the circuit structure.

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.

This script accepts two command line arguments: the first argument is the name of the file to convert, the second one (optional) is to ask separate HTML and CSS files.

"""
Command:

######################################

    python code2html INPUTFILE [CSS]

######################################

INPUTFILE: name (with path) of the file to convert to html
CSS: write "true" (ot "t", "yes", "y") in order to obtain separate .html and .css files ("false" by default)
"""

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

# Code formatting style
style = "monokai"

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

# Python extensions
py = ["py"]

# Bash extensions
bash = ["sh","bash"]

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()

    elif language in bash:
        # Bash Lexer
        L = BashLexer()

    else:
        raise NameError("Invalid language.")

    HF = HtmlFormatter(full=not css,style=style)

    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" (ot "t", "yes", "y") 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() in ["true",'t',"yes",'y']:
        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)
EPFL 2015 iGEM bioLogic Logic Orthogonal gRNA Implemented Circuits

NOT PROOFREAD