Difference between revisions of "Team:EPF Lausanne/Project/Modelling/Code"
(21 intermediate revisions by the same user not shown) | |||
Line 20: | Line 20: | ||
max-height:50%; | max-height:50%; | ||
} | } | ||
− | .highlight > pre { background-color: #404040;} | + | .highlight > pre { background-color: #404040; display:block; height:600px; overflow:scroll} |
.highlight .hll { background-color: #49483e } | .highlight .hll { background-color: #49483e } | ||
.highlight { background: #272822; color: #f8f8f2 } | .highlight { background: #272822; color: #f8f8f2 } | ||
Line 198: | Line 198: | ||
<div class="col-md-12 col-centered"> | <div class="col-md-12 col-centered"> | ||
<h3>code2html</h3> | <h3>code2html</h3> | ||
− | <p>The following Python | + | <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. |
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">pygments</span> <span class="kn">import</span> <span class="n">highlight</span> | <div class="highlight"><pre><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> | ||
Line 232: | Line 232: | ||
<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"> | + | <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">"""</span> | <span class="sd">"""</span> | ||
− | <span class="sd"> Return the lexer | + | <span class="sd"> Return the lexer for the appropriate language and the HTML formatter</span> |
<span class="sd"> """</span> | <span class="sd"> """</span> | ||
Line 249: | Line 249: | ||
<span class="k">raise</span> <span class="ne">NameError</span><span class="p">(</span><span class="s">"Invalid language."</span><span class="p">)</span> | <span class="k">raise</span> <span class="ne">NameError</span><span class="p">(</span><span class="s">"Invalid language."</span><span class="p">)</span> | ||
− | <span class="k">return</span> <span class="n">L</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">"monokai"</span><span class="p">)</span> |
+ | |||
+ | <span class="k">return</span> <span class="n">L</span><span class="p">,</span> <span class="n">HF</span> | ||
Line 257: | Line 259: | ||
<span class="sd"> """</span> | <span class="sd"> """</span> | ||
− | <span class="c"># Obtain lexer</span> | + | <span class="c"># Obtain lexer and HtmlFormatter</span> |
− | <span class="n">L | + | <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> | ||
Line 276: | Line 275: | ||
<span class="sd"> """</span> | <span class="sd"> """</span> | ||
− | <span class="c"># Obtain lexer</span> | + | <span class="c"># Obtain lexer and HtmlFormatter</span> |
− | <span class="n">L | + | <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> | ||
Line 343: | Line 339: | ||
</pre></div> | </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> | </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)