Docker-in-Docker (DinD) capabilities of public runners deactivated. More info

Commit 34cba252 authored by Clément Haëck's avatar Clément Haëck
Browse files

Add html docs

parent 53c02f59
......@@ -12,5 +12,5 @@ Collocate submesoscale fronts to phytoplankton levels using satellite imagery
## Doc
Some documentation is available in orgmode format. See ([./docs/index](Index)).
Some documentation is available in orgmode and html format. See ([./docs/index.html](Index)).
#+TITLE: Args
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
[[file:index.org][Index]]
All scripts are written with a command-line use in mind.
To change some parameters, command-line arguments are retrieved. As always, things are quite automated.
......@@ -18,24 +20,24 @@ if __name__ == '__main__':
main(args)
#+end_src
`args` is a dictionnary containing arguments name and their values.
~args~ is a dictionnary containing arguments name and their values.
* Default arguments
The list of arguments names passed above are from a list of default arguments.
I won't keep this updated so see the source code of ~lib.get_args()~ to have a list of thoses.
These arguments have a default value that can be set in `lib/conf.ini`
These arguments have a default value that can be set in ~lib/conf.ini~.
Some arguments go through some processing.
** date
date is a YYYY/MM/[DD] format argument. The '/' separator can also be '-', a space, or nothing. ~args['date_str']~ is a tuple of the strings of year, month, and eventually day. ~args['date']~ stores a datetime object.
** fixes
Fixes are supplied as '-fix <matcher> <string>'. They can then be found as a dictionnary with the matchers name as keys. See [[*Fixes]]
Fixes are supplied as ~-fix <matcher> <string>~. They can then be found as a dictionnary with the matchers name as keys. See [[*Fixes]]
* Adding other arguments
Other arguments can be retrieved like so:
#+begin_src python
def add_args(parser):
parser.add_argument('-argument_name', type=int, default=0)
parser.add_argument(~-argument_name', type=int, default=0)
args = lib.get_args(['...'], add_args)
#+end_src
......@@ -56,7 +58,7 @@ ds = lib.data.dataset.get_data(args)
`ds` will only have data for the month of may. Convenient when testing a script on smaller data.
* Argument processing
You may have noticed that the function described in [[file:datasets.org::*create_data][create_data]] have the following signature ~(args: Dict = None, **kwargs: Any)~.
You may have noticed that the function described in [[file:datasets.org::*~create_data~][~create_data~]] have the following signature ~(args: Dict = None, **kwargs: Any)~.
Thoses functions process thoses arguments using ~lib.data.process_args(args_names, args, replace_defaults=None, **kwargs)~. The idea is that we define the argument the function *needs* with args_names. We then supply both args and kwargs. From those are only kept the needed arguments. If arguments are missing a default value is used (either defined with lib/conf.ini or replace_defaults). Arguments found in kwargs will replace those from args.
This system is a bit heavy but convenient, as the variable args can be passed to all functions from different datasets without worrying about which needs what. And if argument are missing, or must be overwritten kwargs can still be used.
#+TITLE: Boxes
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
[[file:index.org][Index]]
We sometime needs to define a rectangular area (a zone clean of clouds for instance).
`lib.box` defines several classes to help with this notion.
~lib.box~ defines several classes to help with this notion.
With those, it is easy to define a rectangular area. It can be used to slice a dataset easily. It can also be plotted easily.
#+TITLE: Datasets
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
[[file:index.org][Index]]
* Location
All data is found in ~$SUBMESOCOLOR_DATA_DIR/[Region]/[dataset name / abbreviation]~.
......@@ -6,21 +8,21 @@ The region folder is made to be able to work on different locations at the same
For now I am personally using 'GS' for 'Gulf-Stream'.
* Module file
To load a dataset in memory, its corresponding python file can be used. It can be found in `lib/data/[module].py`.
To load a dataset in memory, its corresponding python file can be used. It can be found in ~lib/data/[module].py~.
In this file can be found several things.
** Some constants
*** Directory arguments
A set of necessary arguments to get the root directory of data (typically its ~{'region', 'days'}~). See [[file:args.org]].
*** Pregex
The files pre-regex. See [[*create_data]].
The files pre-regex. See [[*~create_data~]].
*** Grid
The grid for this data. See [[file:grids.org]].
** get_root
A function that returns the root directory of data (including the [[*Time dependency]] folder).
** create_data
** ~get_root~
A function that returns the root directory of data (including the [[*Time dependency][time dependency]] folder).
** ~create_data~
At this point, we have all the information we need to find data files and load the data in memory. The steps described next are automated using the ~lib.data.create_data~ function. All functions receive the same arguments,
The first step is to retrieve the data files. Typically there is one file per day, or sometimes per set of parameter. We could use a simple loop or globbing, but this nowhere near as fun as what we do.
We use the [[https://github.com/Descanonge/filefinder]] package. It allows to find in the root directory all files corresponding to a specific filename structure, specified with the [[*Pregex]]. See the package readme and documentation to see what its other nice features.
We use the [[https://github.com/Descanonge/filefinder]] package. It allows to find in the root directory all files corresponding to a specific filename structure, specified with the pre-regex. See the package readme and documentation to see what its other nice features.
For that step we use the ~get_finder()~ function, which returns a Finder object.
The next step is to feed those files to Xarray with the function ~get_data()~.
It returns a dataset using ~xr.open_mfdataset()~.
......
#+TITLE: Grids
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
[[file:index.org][Index]]
Because of the datasets that I use, I currently uses 3 different grids.
......@@ -8,7 +10,7 @@ A 1km grid for the MODIS dataset.
* 4km
Two 4km grids for GlobColour and OSTIA.
Thoses grids have a slightly different resolution. But we need to overlap (pixel by pixel) the Chl-a data with the HI data (computed from SST), so on 2 different grids.
To avoid this hassle, we regrid the OSTIA SST on the GlobColour grid with `Compute/process_ostia_sst.py`. We also don't have to deal with 2 grids anymore.
To avoid this hassle, we regrid the OSTIA SST on the GlobColour grid with ~Compute/process_ostia_sst.py~. We also don't have to deal with 2 grids anymore.
This was choosen recently, so for a time I dealt with 2 grids. This is why most scripts (and zone/land rasters, see [[file:zones.org]]) actually support choosing one grid or the other, using the grid argument.
** OSTIA grid
......
#+TITLE: Hi
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
[[file:index.org][Index]]
* HI definition
* Compilation
......
#+TITLE: Histograms
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="stylesheet.css"/>
[[file:index.org][Index]]
* Method of computation
advantages / defaults of using xhistogram
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2022-01-05 mer. 20:01 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Args</title>
<meta name="author" content="Clément Haëck" />
<meta name="generator" content="Org Mode" />
<style>
#content { max-width: 60em; margin: auto; }
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #e6e6e6;
border-radius: 3px;
background-color: #f2f2f2;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: auto;
}
pre.src:before {
display: none;
position: absolute;
top: -8px;
right: 12px;
padding: 3px;
color: #555;
background-color: #f2f2f299;
}
pre.src:hover:before { display: inline; margin-top: 14px;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-authinfo::before { content: 'Authinfo'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.equation-container {
display: table;
text-align: center;
width: 100%;
}
.equation {
vertical-align: middle;
}
.equation-label {
display: table-cell;
text-align: right;
vertical-align: middle;
}
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
</style>
<link rel="stylesheet" type="text/css" href="stylesheet.css"/>
</head>
<body>
<div id="content" class="content">
<h1 class="title">Args</h1>
<div id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org7901cd8">1. Usage</a></li>
<li><a href="#orgc418db3">2. Default arguments</a>
<ul>
<li><a href="#orgc20f275">2.1. date</a></li>
<li><a href="#orgd804614">2.2. fixes</a></li>
</ul>
</li>
<li><a href="#org127d629">3. Adding other arguments</a></li>
<li><a href="#org97944c1">4. Fixes</a></li>
<li><a href="#org94347ee">5. Argument processing</a></li>
</ul>
</div>
</div>
<p>
<a href="index.html">Index</a>
</p>
<p>
All scripts are written with a command-line use in mind.
To change some parameters, command-line arguments are retrieved. As always, things are quite automated.
All the magic happens in <code>lib.get_args()</code>.
</p>
<div id="outline-container-org7901cd8" class="outline-2">
<h2 id="org7901cd8"><span class="section-number-2">1.</span> Usage</h2>
<div class="outline-text-2" id="text-1">
<p>
Typically a script is written as:
</p>
<div class="org-src-container">
<pre class="src src-python"><span style="color: #e45649;">import</span> lib
<span style="color: #e45649;">def</span> <span style="color: #a626a4;">main</span>(args):
<span style="color: #e45649;">pass</span>
<span style="color: #e45649;">if</span> <span style="color: #a626a4;">__name__</span> == <span style="color: #50a14f;">'__main__'</span>:
<span style="color: #6a1868;">args</span> = lib.get_args([<span style="color: #50a14f;">'region'</span>, <span style="color: #50a14f;">'days'</span>, <span style="color: #50a14f;">'fixes'</span>])
main(args)
</pre>
</div>
<p>
<code>args</code> is a dictionnary containing arguments name and their values.
</p>
</div>
</div>
<div id="outline-container-orgc418db3" class="outline-2">
<h2 id="orgc418db3"><span class="section-number-2">2.</span> Default arguments</h2>
<div class="outline-text-2" id="text-2">
<p>
The list of arguments names passed above are from a list of default arguments.
I won&rsquo;t keep this updated so see the source code of <code>lib.get_args()</code> to have a list of thoses.
These arguments have a default value that can be set in <code>lib/conf.ini</code>.
</p>
<p>
Some arguments go through some processing.
</p>
</div>
<div id="outline-container-orgc20f275" class="outline-3">
<h3 id="orgc20f275"><span class="section-number-3">2.1.</span> date</h3>
<div class="outline-text-3" id="text-2-1">
<p>
date is a YYYY/MM/[DD] format argument. The &rsquo;/&rsquo; separator can also be &rsquo;-&rsquo;, a space, or nothing. <code>args['date_str']</code> is a tuple of the strings of year, month, and eventually day. <code>args['date']</code> stores a datetime object.
</p>
</div>
</div>
<div id="outline-container-orgd804614" class="outline-3">
<h3 id="orgd804614"><span class="section-number-3">2.2.</span> fixes</h3>
<div class="outline-text-3" id="text-2-2">
<p>
Fixes are supplied as <code>-fix &lt;matcher&gt; &lt;string&gt;</code>. They can then be found as a dictionnary with the matchers name as keys. See <a href="#org97944c1">4</a>
</p>
</div>
</div>
</div>
<div id="outline-container-org127d629" class="outline-2">
<h2 id="org127d629"><span class="section-number-2">3.</span> Adding other arguments</h2>
<div class="outline-text-2" id="text-3">
<p>
Other arguments can be retrieved like so:
</p>
<div class="org-src-container">
<pre class="src src-python"><span style="color: #e45649;">def</span> <span style="color: #a626a4;">add_args</span>(parser):
parser.add_argument(~-argument_name<span style="color: #50a14f;">', type=int, default=0)</span>
<span style="color: #50a14f;">args = lib.get_args(['</span>...<span style="color: #50a14f;">'], add_args)</span>
</pre>
</div>
</div>
</div>
<div id="outline-container-org97944c1" class="outline-2">
<h2 id="org97944c1"><span class="section-number-2">4.</span> Fixes</h2>
<div class="outline-text-2" id="text-4">
<p>
Fixes are a important feature of the filefinder package. When <a href="datasets.html#orgf087825">finding datafiles</a>, one can &rsquo;fix&rsquo; a matcher (part of the filename that vary, the date for daily files for instance) to a certain value.
That can be a string (which can be a regex!), or a value. Quick example, we only want the month of may:
</p>
<div class="org-src-container">
<pre class="src src-python"><span style="color: #6a1868;">finder</span> = lib.data.dataset.get_finder()
finder.fix_matchers(m=<span style="color: #da8548; font-weight: bold;">5</span>)
</pre>
</div>
<p>
Now, we can do this automatically from the command line by supplying the appropriate argument: <code>python script.py -fix m 05</code> (we can only supply a string, so it must match the date format). This will end up in the args dictionnary, where it can be passed to <code>get_finder()</code> or <code>get_data()</code>. So:
</p>
<div class="org-src-container">
<pre class="src src-python"><span style="color: #6a1868;">args</span> = lib.get_args([<span style="color: #50a14f;">'fixes'</span>])
<span style="color: #6a1868;">ds</span> = lib.data.dataset.get_data(args)
</pre>
</div>
<p>
`ds` will only have data for the month of may. Convenient when testing a script on smaller data.
</p>
</div>
</div>
<div id="outline-container-org94347ee" class="outline-2">
<h2 id="org94347ee"><span class="section-number-2">5.</span> Argument processing</h2>
<div class="outline-text-2" id="text-5">
<p>
You may have noticed that the function described in <a href="datasets.html#org13c57fa"><code>create_data</code></a> have the following signature <code>(args: Dict = None, **kwargs: Any)</code>.
Thoses functions process thoses arguments using <code>lib.data.process_args(args_names, args, replace_defaults=None, **kwargs)</code>. The idea is that we define the argument the function <b>needs</b> with args<sub>names</sub>. We then supply both args and kwargs. From those are only kept the needed arguments. If arguments are missing a default value is used (either defined with lib/conf.ini or replace<sub>defaults</sub>). Arguments found in kwargs will replace those from args.
</p>
<p>
This system is a bit heavy but convenient, as the variable args can be passed to all functions from different datasets without worrying about which needs what. And if argument are missing, or must be overwritten kwargs can still be used.
</p>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="author">Author: Clément Haëck</p>
<p class="date">Created: 2022-01-05 mer. 20:01</p>
</div>
</body>
</html>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2022-01-05 mer. 20:01 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Boxes</title>
<meta name="author" content="Clément Haëck" />
<meta name="generator" content="Org Mode" />
<style>
#content { max-width: 60em; margin: auto; }
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #e6e6e6;
border-radius: 3px;
background-color: #f2f2f2;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: auto;
}
pre.src:before {
display: none;
position: absolute;
top: -8px;
right: 12px;
padding: 3px;
color: #555;
background-color: #f2f2f299;
}
pre.src:hover:before { display: inline; margin-top: 14px;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-authinfo::before { content: 'Authinfo'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }