[med-svn] [seqan2] 06/06: Files removed in upstream source
Andreas Tille
tille at debian.org
Sat Aug 6 22:12:22 UTC 2016
This is an automated email from the git hooks/post-receive script.
tille pushed a commit to branch master
in repository seqan2.
commit e2253d5b9d371366ba45c9e255bc38ea2c5307c9
Author: Andreas Tille <tille at debian.org>
Date: Sat Aug 6 23:09:56 2016 +0200
Files removed in upstream source
---
debian/patches/spelling.patch | 33 -
util/py_lib/pyratemp.py | 1193 --
util/py_lib/seqan/app_tests.py | 458 -
util/py_lib/seqan/auto_build.py | 532 -
util/py_lib/seqan/dddoc/__init__.py | 7 -
util/py_lib/seqan/dddoc/core.py | 1033 --
util/py_lib/seqan/dddoc/dddoc.py | 703 -
util/py_lib/seqan/dddoc/html.py | 903 --
util/py_lib/seqan/dddoc/main.py | 131 -
util/py_lib/seqan/dox/dot_diagrams.py | 51 -
util/py_lib/seqan/dox/dox_parser.py | 977 --
util/py_lib/seqan/dox/dox_tokens.py | 113 -
util/py_lib/seqan/dox/file_mgr.py | 142 -
util/py_lib/seqan/dox/inc_mgr.py | 93 -
util/py_lib/seqan/dox/lexer.py | 140 -
util/py_lib/seqan/dox/migration.py | 802 -
util/py_lib/seqan/dox/proc_doc.py | 1794 ---
util/py_lib/seqan/dox/pure.py | 210 -
util/py_lib/seqan/dox/raw_doc.py | 1429 --
util/py_lib/seqan/dox/sig_parser.py | 327 -
util/py_lib/seqan/dox/test/test_dox_parser.py | 974 --
util/py_lib/seqan/dox/test/test_file_mgr.py | 30 -
util/py_lib/seqan/dox/test/test_inc_mgr.py | 32 -
util/py_lib/seqan/dox/test/test_lexer.py | 76 -
util/py_lib/seqan/dox/test/test_proc_doc.py | 1390 --
util/py_lib/seqan/dox/test/test_raw_doc.py | 624 -
util/py_lib/seqan/dox/test/test_sig_parser.py | 317 -
util/py_lib/seqan/dox/tpl/css/full_list.css | 31 -
.../bootstrap-treeview/css/bootstrap-treeview.css | 60 -
.../bootstrap-treeview/js/bootstrap-treeview.js | 1248 --
util/py_lib/seqan/dox/tpl/list.html | 14744 -------------------
util/py_lib/seqan/dox/validation.py | 139 -
util/py_lib/seqan/dox/write_html.py | 561 -
util/py_lib/seqan/fixgcov/__init__.py | 10 -
util/py_lib/seqan/fixgcov/app.py | 291 -
util/py_lib/seqan/paths.py | 65 -
util/py_lib/seqan/pyclangcheck/__init__.py | 10 -
util/py_lib/seqan/pyclangcheck/app.py | 322 -
util/py_lib/seqan/pyclangcheck/rules.py | 201 -
util/py_lib/seqan/pyclangcheck/simple_checks.py | 117 -
util/py_lib/seqan/pyclangcheck/suppressions.py | 1 -
util/py_lib/seqan/pyclangcheck/violations.py | 91 -
util/py_lib/seqan/skel.py | 467 -
43 files changed, 32872 deletions(-)
diff --git a/debian/patches/spelling.patch b/debian/patches/spelling.patch
index 63f5e0f..ca67bb9 100644
--- a/debian/patches/spelling.patch
+++ b/debian/patches/spelling.patch
@@ -49,17 +49,6 @@ Description: Fix some spelling issues
std::ofstream tsvOut(toCString(options.outTsvPath), std::ios::out | std::ios::binary);
bool failed = false;
if (!tsvOut.good())
---- a/util/py_lib/seqan/dox/validation.py
-+++ b/util/py_lib/seqan/dox/validation.py
-@@ -97,7 +97,7 @@ class ReturnVoidValidator(ProcDocValidat
- return # Skip if type has no returns member.
- for r in proc_entry.returns:
- if r.type == 'void':
-- msg = '@return superflous for "void" type -- simply show "void" in signature.'
-+ msg = '@return superfluous for "void" type -- simply show "void" in signature.'
- self.msg_printer.printTokenError(r.raw.first_token, msg, 'warning')
-
-
--- a/apps/razers3/razers.cpp
+++ b/apps/razers3/razers.cpp
@@ -437,7 +437,7 @@ void setUpArgumentParser(ArgumentParser
@@ -445,17 +434,6 @@ Description: Fix some spelling issues
template <typename TFragmentStore>
void addGaps(TFragmentStore & store, unsigned alignID, unsigned pos)
{
---- a/util/py_lib/pyratemp.py
-+++ b/util/py_lib/pyratemp.py
-@@ -865,7 +865,7 @@ class EvalPseudoSandbox:
- Since "import" is insecure, the PseudoSandbox does not allow to
- import other modules. But since some functions need to import
- other modules (e.g. "datetime.datetime.strftime" imports "time"),
-- this function replaces the builtin "import" and allows to use
-+ this function replaces the builtin "import" and allows one to use
- modules which are already accessible by the sandboxed code.
-
- :Note:
--- a/apps/fiona/error_rate_from_sam.cpp
+++ b/apps/fiona/error_rate_from_sam.cpp
@@ -71,7 +71,7 @@ int main(int argc, char const ** argv)
@@ -839,17 +817,6 @@ Description: Fix some spelling issues
* @param[in] haystack The text strings.
* @param[in] needle The set of patterns.
* @param[in] algoTag The tag to select the online text search algorithm with.
---- a/util/py_lib/seqan/dox/proc_doc.py
-+++ b/util/py_lib/seqan/dox/proc_doc.py
-@@ -61,7 +61,7 @@ class ProcDoc(object):
- """Collection of the top-level documentation entries.
-
- @ivar doc_processor The DocProcessor that created this ProcDoc.
-- @ivar local_name_counter Number of occurences for local names, used for
-+ @ivar local_name_counter Number of occurrences for local names, used for
- shortening @link display to second level entries.
- """
-
--- a/apps/sgip/sgip.cpp
+++ b/apps/sgip/sgip.cpp
@@ -72,7 +72,7 @@ enum SearchingType
diff --git a/util/py_lib/pyratemp.py b/util/py_lib/pyratemp.py
deleted file mode 100644
index 39528c2..0000000
--- a/util/py_lib/pyratemp.py
+++ /dev/null
@@ -1,1193 +0,0 @@
-#!/usr/bin/env python2
-# -*- coding: utf-8 -*-
-"""
-Small, simple and powerful template-engine for python.
-
-A template-engine for python, which is very simple, easy to use, small,
-fast, powerful, modular, extensible, well documented and pythonic.
-
-See documentation for a list of features, template-syntax etc.
-
-:Version: 0.2.0
-
-:Usage:
- see class ``Template`` and examples below.
-
-:Example:
-
- quickstart::
- >>> t = Template("hello @!name!@")
- >>> print t(name="marvin")
- hello marvin
-
- generic usage::
- >>> t = Template("output is in Unicode äöü€")
- >>> t #doctest: +ELLIPSIS
- <...Template instance at 0x...>
- >>> t()
- u'output is in Unicode \\xe4\\xf6\\xfc\\u20ac'
- >>> unicode(t)
- u'output is in Unicode \\xe4\\xf6\\xfc\\u20ac'
-
- with data::
- >>> t = Template("hello @!name!@", data={"name":"world"})
- >>> t()
- u'hello world'
- >>> t(name="worlds")
- u'hello worlds'
-
- # >>> t(note="data must be Unicode or ASCII", name=u"ä")
- # u'hello \\xe4'
-
- escaping::
- >>> t = Template("hello escaped: @!name!@, unescaped: $!name!$")
- >>> t(name='''<>&'"''')
- u'hello escaped: <>&'", unescaped: <>&\\'"'
-
- result-encoding::
- # encode the unicode-object to your encoding with encode()
- >>> t = Template("hello äöü€")
- >>> result = t()
- >>> result
- u'hello \\xe4\\xf6\\xfc\\u20ac'
- >>> result.encode("utf-8")
- 'hello \\xc3\\xa4\\xc3\\xb6\\xc3\\xbc\\xe2\\x82\\xac'
- >>> result.encode("ascii")
- Traceback (most recent call last):
- ...
- UnicodeEncodeError: 'ascii' codec can't encode characters in position 6-9: ordinal not in range(128)
- >>> result.encode("ascii", 'xmlcharrefreplace')
- 'hello äöü€'
-
- python-expressions::
- >>> Template('formatted: @! "%8.5f" % value !@')(value=3.141592653)
- u'formatted: 3.14159'
- >>> Template("hello --@!name.upper().center(20)!@--")(name="world")
- u'hello -- WORLD --'
- >>> Template("calculate @!var*5+7!@")(var=7)
- u'calculate 42'
-
- blocks (if/for/macros/...)::
- >>> t = Template("<!--(if foo == 1)-->bar<!--(elif foo == 2)-->baz<!--(else)-->unknown(@!foo!@)<!--(end)-->")
- >>> t(foo=2)
- u'baz'
- >>> t(foo=5)
- u'unknown(5)'
-
- >>> t = Template("<!--(for i in mylist)-->@!i!@ <!--(else)-->(empty)<!--(end)-->")
- >>> t(mylist=[])
- u'(empty)'
- >>> t(mylist=[1,2,3])
- u'1 2 3 '
-
- >>> t = Template("<!--(for i,elem in enumerate(mylist))--> - @!i!@: @!elem!@<!--(end)-->")
- >>> t(mylist=["a","b","c"])
- u' - 0: a - 1: b - 2: c'
-
- >>> t = Template('<!--(macro greetings)-->hello <strong>@!name!@</strong><!--(end)--> @!greetings(name=user)!@')
- >>> t(user="monty")
- u' hello <strong>monty</strong>'
-
- exists::
- >>> t = Template('<!--(if exists("foo"))-->YES<!--(else)-->NO<!--(end)-->')
- >>> t()
- u'NO'
- >>> t(foo=1)
- u'YES'
- >>> t(foo=None) # note this difference to 'default()'
- u'YES'
-
- default-values::
- # non-existing variables raise an error
- >>> Template('hi @!optional!@')()
- Traceback (most recent call last):
- ...
- TemplateRenderError: Cannot eval expression 'optional'. (NameError: name 'optional' is not defined)
-
- >>> t = Template('hi @!default("optional","anyone")!@')
- >>> t()
- u'hi anyone'
- >>> t(optional=None)
- u'hi anyone'
- >>> t(optional="there")
- u'hi there'
-
- # the 1st parameter can be any eval-expression
- >>> t = Template('@!default("5*var1+var2","missing variable")!@')
- >>> t(var1=10)
- u'missing variable'
- >>> t(var1=10, var2=2)
- u'52'
-
- # also in blocks
- >>> t = Template('<!--(if default("opt1+opt2",0) > 0)-->yes<!--(else)-->no<!--(end)-->')
- >>> t()
- u'no'
- >>> t(opt1=23, opt2=42)
- u'yes'
-
- >>> t = Template('<!--(for i in default("optional_list",[]))-->@!i!@<!--(end)-->')
- >>> t()
- u''
- >>> t(optional_list=[1,2,3])
- u'123'
-
-
- # but make sure to put the expression in quotation marks, otherwise:
- >>> Template('@!default(optional,"fallback")!@')()
- Traceback (most recent call last):
- ...
- TemplateRenderError: Cannot eval expression 'default(optional,"fallback")'. (NameError: name 'optional' is not defined)
-
- setvar::
- >>> t = Template('$!setvar("i", "i+1")!$@!i!@')
- >>> t(i=6)
- u'7'
-
- >>> t = Template('''<!--(if isinstance(s, (list,tuple)))-->$!setvar("s", '"\\\\\\\\n".join(s)')!$<!--(end)-->@!s!@''')
- >>> t(isinstance=isinstance, s="123")
- u'123'
- >>> t(isinstance=isinstance, s=["123", "456"])
- u'123\\n456'
-
-:Author: Roland Koebler (rk at simple-is-better dot org)
-:Copyright: Roland Koebler
-:License: MIT/X11-like, see __license__
-"""
-
-__version__ = "0.2.0"
-__author__ = "Roland Koebler <rk at simple-is-better dot org>"
-__license__ = """Copyright (c) Roland Koebler, 2007-2010
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE."""
-
-#=========================================
-
-import __builtin__, os
-import re
-
-#=========================================
-# some useful functions
-
-#----------------------
-# string-position: i <-> row,col
-
-def srow(string, i):
- """Get line numer of ``string[i]`` in `string`.
-
- :Returns: row, starting at 1
- :Note: This works for text-strings with ``\\n`` or ``\\r\\n``.
- """
- return string.count('\n', 0, max(0, i)) + 1
-
-def scol(string, i):
- """Get column number of ``string[i]`` in `string`.
-
- :Returns: column, starting at 1 (but may be <1 if i<0)
- :Note: This works for text-strings with ``\\n`` or ``\\r\\n``.
- """
- return i - string.rfind('\n', 0, max(0, i))
-
-def sindex(string, row, col):
- """Get index of the character at `row`/`col` in `string`.
-
- :Parameters:
- - `row`: row number, starting at 1.
- - `col`: column number, starting at 1.
- :Returns: ``i``, starting at 0 (but may be <1 if row/col<0)
- :Note: This works for text-strings with '\\n' or '\\r\\n'.
- """
- n = 0
- for _ in range(row-1):
- n = string.find('\n', n) + 1
- return n+col-1
-
-#----------------------
-
-def dictkeyclean(d):
- """Convert all keys of the dict `d` to strings.
- """
- new_d = {}
- for k, v in d.iteritems():
- new_d[str(k)] = v
- return new_d
-
-#----------------------
-
-def dummy(*args, **kwargs):
- """Dummy function, doing nothing.
- """
- pass
-
-def dummy_raise(exception, value):
- """Create an exception-raising dummy function.
-
- :Returns: dummy function, raising ``exception(value)``
- """
- def mydummy(*args, **kwargs):
- raise exception(value)
- return mydummy
-
-#=========================================
-# escaping
-
-(NONE, HTML, LATEX) = range(0, 3)
-ESCAPE_SUPPORTED = {"NONE":None, "HTML":HTML, "LATEX":LATEX} #for error-/parameter-checking
-
-def escape(s, format=HTML):
- """Replace special characters by their escape sequence.
-
- :Parameters:
- - `s`: string or unicode-string to escape
- - `format`:
-
- - `NONE`: nothing is replaced
- - `HTML`: replace &<>'" by &...;
- - `LATEX`: replace \#$%&_{} (TODO! - this is very incomplete!)
- :Returns:
- the escaped string in unicode
- :Exceptions:
- - `ValueError`: if `format` is invalid.
-
- :TODO: complete LaTeX-escaping, optimize speed
- """
- #Note: If you have to make sure that every character gets replaced
- # only once (and if you cannot achieve this with the following code),
- # use something like u"".join([replacedict.get(c,c) for c in s])
- # which is about 2-3 times slower (but maybe needs less memory).
- #Note: This is one of the most time-consuming parts of the template.
- # So maybe speed this up.
-
- if format is None or format == NONE:
- pass
- elif format == HTML:
- s = s.replace(u"&", u"&") # must be done first!
- s = s.replace(u"<", u"<")
- s = s.replace(u">", u">")
- s = s.replace(u'"', u""")
- s = s.replace(u"'", u"'")
- elif format == LATEX:
- #TODO: which are the "reserved" characters for LaTeX?
- # are there more than these?
- s = s.replace("\\", u"\\backslash{}") #must be done first!
- s = s.replace("#", u"\\#")
- s = s.replace("$", u"\\$")
- s = s.replace("%", u"\\%")
- s = s.replace("&", u"\\&")
- s = s.replace("_", u"\\_")
- s = s.replace("{", u"\\{")
- s = s.replace("}", u"\\}")
- else:
- raise ValueError('Invalid format (only None, HTML and LATEX are supported).')
- return unicode(s)
-
-#=========================================
-
-#-----------------------------------------
-# Exceptions
-
-class TemplateException(Exception):
- """Base class for template-exceptions."""
- pass
-
-class TemplateParseError(TemplateException):
- """Template parsing failed."""
- def __init__(self, err, errpos):
- """
- :Parameters:
- - `err`: error-message or exception to wrap
- - `errpos`: ``(filename,row,col)`` where the error occurred.
- """
- self.err = err
- self.filename, self.row, self.col = errpos
- TemplateException.__init__(self)
- def __str__(self):
- if not self.filename:
- return "line %d, col %d: %s" % (self.row, self.col, str(self.err))
- else:
- return "file %s, line %d, col %d: %s" % (self.filename, self.row, self.col, str(self.err))
-
-class TemplateSyntaxError(TemplateParseError, SyntaxError):
- """Template syntax-error."""
- pass
-
-class TemplateIncludeError(TemplateParseError):
- """Template 'include' failed."""
- pass
-
-class TemplateRenderError(TemplateException):
- """Template rendering failed."""
- pass
-
-#-----------------------------------------
-# Loader
-
-class LoaderString:
- """Load template from a string/unicode.
-
- Note that 'include' is not possible in such templates.
- """
- def __init__(self, encoding='utf-8'):
- self.encoding = encoding
-
- def load(self, string):
- """Return template-string as unicode.
- """
- if isinstance(string, unicode):
- u = string
- else:
- u = unicode(string, self.encoding)
- return u
-
-class LoaderFile:
- """Load template from a file.
-
- When loading a template from a file, it's possible to including other
- templates (by using 'include' in the template). But for simplicity
- and security, all included templates have to be in the same directory!
- (see ``allowed_path``)
- """
- def __init__(self, allowed_path=None, encoding='utf-8'):
- """Init the loader.
-
- :Parameters:
- - `allowed_path`: path of the template-files
- - `encoding`: encoding of the template-files
- :Exceptions:
- - `ValueError`: if `allowed_path` is not a directory
- """
- if allowed_path and not os.path.isdir(allowed_path):
- raise ValueError("'allowed_path' has to be a directory.")
- self.path = allowed_path
- self.encoding = encoding
-
- def load(self, filename):
- """Load a template from a file.
-
- Check if filename is allowed and return its contens in unicode.
-
- :Parameters:
- - `filename`: filename of the template without path
- :Returns:
- the contents of the template-file in unicode
- :Exceptions:
- - `ValueError`: if `filename` contains a path
- """
- if filename != os.path.basename(filename):
- raise ValueError("No path allowed in filename. (%s)" %(filename))
- filename = os.path.join(self.path, filename)
-
- f = open(filename, 'rb')
- string = f.read()
- f.close()
-
- u = unicode(string, self.encoding)
-
- return u
-
-#-----------------------------------------
-# Parser
-
-class Parser(object):
- """Parse a template into a parse-tree.
-
- Includes a syntax-check, an optional expression-check and verbose
- error-messages.
-
- See documentation for a description of the parse-tree.
- """
- # template-syntax
- _comment_start = "#!"
- _comment_end = "!#"
- _sub_start = "$!"
- _sub_end = "!$"
- _subesc_start = "@!"
- _subesc_end = "!@"
- _block_start = "<!--("
- _block_end = ")-->"
-
- # build regexps
- # comment
- # single-line, until end-tag or end-of-line.
- _strComment = r"""%s(?P<content>.*?)(?P<end>%s|\n|$)""" \
- % (re.escape(_comment_start), re.escape(_comment_end))
- _reComment = re.compile(_strComment, re.M)
-
- # escaped or unescaped substitution
- # single-line ("|$" is needed to be able to generate good error-messges)
- _strSubstitution = r"""
- (
- %s\s*(?P<sub>.*?)\s*(?P<end>%s|$) #substitution
- |
- %s\s*(?P<escsub>.*?)\s*(?P<escend>%s|$) #escaped substitution
- )
- """ % (re.escape(_sub_start), re.escape(_sub_end),
- re.escape(_subesc_start), re.escape(_subesc_end))
- _reSubstitution = re.compile(_strSubstitution, re.X|re.M)
-
- # block
- # - single-line, no nesting.
- # or
- # - multi-line, nested by whitespace indentation:
- # * start- and end-tag of a block must have exactly the same indentation.
- # * start- and end-tags of *nested* blocks should have a greater indentation.
- # NOTE: A single-line block must not start at beginning of the line with
- # the same indentation as the enclosing multi-line blocks!
- # Note that " " and "\t" are different, although they may
- # look the same in an editor!
- _s = re.escape(_block_start)
- _e = re.escape(_block_end)
- _strBlock = r"""
- ^(?P<mEnd>[ \t]*)%send%s(?P<meIgnored>.*)\r?\n? # multi-line end (^ <!--(end)-->IGNORED_TEXT\n)
- |
- (?P<sEnd>)%send%s # single-line end (<!--(end)-->)
- |
- (?P<sSpace>[ \t]*) # single-line tag (no nesting)
- %s(?P<sKeyw>\w+)[ \t]*(?P<sParam>.*?)%s
- (?P<sContent>.*?)
- (?=(?:%s.*?%s.*?)??%send%s) # (match until end or i.e. <!--(elif/else...)-->)
- |
- # multi-line tag, nested by whitespace indentation
- ^(?P<indent>[ \t]*) # save indentation of start tag
- %s(?P<mKeyw>\w+)\s*(?P<mParam>.*?)%s(?P<mIgnored>.*)\r?\n
- (?P<mContent>(?:.*\n)*?)
- (?=(?P=indent)%s(?:.|\s)*?%s) # match indentation
- """ % (_s, _e,
- _s, _e,
- _s, _e, _s, _e, _s, _e,
- _s, _e, _s, _e)
- _reBlock = re.compile(_strBlock, re.X|re.M)
-
- # "for"-block parameters: "var(,var)* in ..."
- _strForParam = r"""^(?P<names>\w+(?:\s*,\s*\w+)*)\s+in\s+(?P<iter>.+)$"""
- _reForParam = re.compile(_strForParam)
-
- # allowed macro-names
- _reMacroParam = re.compile(r"""^\w+$""")
-
-
- def __init__(self, loadfunc=None, testexpr=None, escape=HTML):
- """Init the parser.
-
- :Parameters:
- - `loadfunc`: function to load included templates
- (i.e. ``LoaderFile(...).load``)
- - `testexpr`: function to test if a template-expressions is valid
- (i.e. ``EvalPseudoSandbox().compile``)
- - `escape`: default-escaping (may be modified by the template)
- :Exceptions:
- - `ValueError`: if `testexpr` or `escape` is invalid.
- """
- if loadfunc is None:
- self._load = dummy_raise(NotImplementedError, "'include' not supported, since no 'loadfunc' was given.")
- else:
- self._load = loadfunc
-
- if testexpr is None:
- self._testexprfunc = dummy
- else:
- try: # test if testexpr() works
- testexpr("i==1")
- except Exception,err:
- raise ValueError("Invalid 'testexpr' (%s)." %(err))
- self._testexprfunc = testexpr
-
- if escape not in ESCAPE_SUPPORTED.values():
- raise ValueError("Unsupported 'escape' (%s)." %(escape))
- self.escape = escape
- self._includestack = []
-
- def parse(self, template):
- """Parse a template.
-
- :Parameters:
- - `template`: template-unicode-string
- :Returns: the resulting parse-tree
- :Exceptions:
- - `TemplateSyntaxError`: for template-syntax-errors
- - `TemplateIncludeError`: if template-inclusion failed
- - `TemplateException`
- """
- self._includestack = [(None, template)] # for error-messages (_errpos)
- return self._parse(template)
-
- def _errpos(self, fpos):
- """Convert `fpos` to ``(filename,row,column)`` for error-messages."""
- filename, string = self._includestack[-1]
- return filename, srow(string, fpos), scol(string, fpos)
-
- def _testexpr(self, expr, fpos=0):
- """Test a template-expression to detect errors."""
- try:
- self._testexprfunc(expr)
- except SyntaxError,err:
- raise TemplateSyntaxError(err, self._errpos(fpos))
-
- def _parse_sub(self, parsetree, text, fpos=0):
- """Parse substitutions, and append them to the parse-tree.
-
- Additionally, remove comments.
- """
- curr = 0
- for match in self._reSubstitution.finditer(text):
- start = match.start()
- if start > curr:
- parsetree.append(("str", self._reComment.sub('', text[curr:start])))
-
- if match.group("sub") is not None:
- if not match.group("end"):
- raise TemplateSyntaxError("Missing closing tag '%s' for '%s'."
- % (self._sub_end, match.group()), self._errpos(fpos+start))
- if len(match.group("sub")) > 0:
- self._testexpr(match.group("sub"), fpos+start)
- parsetree.append(("sub", match.group("sub")))
- else:
- assert(match.group("escsub") is not None)
- if not match.group("escend"):
- raise TemplateSyntaxError("Missing closing tag '%s' for '%s'."
- % (self._subesc_end, match.group()), self._errpos(fpos+start))
- if len(match.group("escsub")) > 0:
- self._testexpr(match.group("escsub"), fpos+start)
- parsetree.append(("esc", self.escape, match.group("escsub")))
-
- curr = match.end()
-
- if len(text) > curr:
- parsetree.append(("str", self._reComment.sub('', text[curr:])))
-
- def _parse(self, template, fpos=0):
- """Recursive part of `parse()`.
-
- :Parameters:
- - template
- - fpos: position of ``template`` in the complete template (for error-messages)
- """
- # blank out comments
- # (So that its content does not collide with other syntax, and
- # because removing them completely would falsify the character-
- # position ("match.start()") of error-messages)
- template = self._reComment.sub(lambda match: self._comment_start+" "*len(match.group(1))+match.group(2), template)
-
- # init parser
- parsetree = []
- curr = 0 # current position (= end of previous block)
- block_type = None # block type: if,for,macro,raw,...
- block_indent = None # None: single-line, >=0: multi-line
-
- # find blocks
- for match in self._reBlock.finditer(template):
- start = match.start()
- # process template-part before this block
- if start > curr:
- self._parse_sub(parsetree, template[curr:start], fpos)
-
- # analyze block syntax (incl. error-checking and -messages)
- keyword = None
- block = match.groupdict()
- pos__ = fpos + start # shortcut
- if block["sKeyw"] is not None: # single-line block tag
- block_indent = None
- keyword = block["sKeyw"]
- param = block["sParam"]
- content = block["sContent"]
- if block["sSpace"]: # restore spaces before start-tag
- if len(parsetree) > 0 and parsetree[-1][0] == "str":
- parsetree[-1] = ("str", parsetree[-1][1] + block["sSpace"])
- else:
- parsetree.append(("str", block["sSpace"]))
- pos_p = fpos + match.start("sParam") # shortcuts
- pos_c = fpos + match.start("sContent")
- elif block["mKeyw"] is not None: # multi-line block tag
- block_indent = len(block["indent"])
- keyword = block["mKeyw"]
- param = block["mParam"]
- content = block["mContent"]
- pos_p = fpos + match.start("mParam")
- pos_c = fpos + match.start("mContent")
- ignored = block["mIgnored"].strip()
- if ignored and ignored != self._comment_start:
- raise TemplateSyntaxError("No code allowed after block-tag.", self._errpos(fpos+match.start("mIgnored")))
- elif block["mEnd"] is not None: # multi-line block end
- if block_type is None:
- raise TemplateSyntaxError("No block to end here/invalid indent.", self._errpos(pos__) )
- if block_indent != len(block["mEnd"]):
- raise TemplateSyntaxError("Invalid indent for end-tag.", self._errpos(pos__) )
- ignored = block["meIgnored"].strip()
- if ignored and ignored != self._comment_start:
- raise TemplateSyntaxError("No code allowed after end-tag.", self._errpos(fpos+match.start("meIgnored")))
- block_type = None
- elif block["sEnd"] is not None: # single-line block end
- if block_type is None:
- raise TemplateSyntaxError("No block to end here/invalid indent.", self._errpos(pos__))
- if block_indent is not None:
- raise TemplateSyntaxError("Invalid indent for end-tag.", self._errpos(pos__))
- block_type = None
- else:
- raise TemplateException("FATAL: Block regexp error. Please contact the author. (%s)" % match.group())
-
- # analyze block content (mainly error-checking and -messages)
- if keyword:
- keyword = keyword.lower()
- if 'for' == keyword:
- if block_type is not None:
- raise TemplateSyntaxError("Missing block-end-tag before new block at '%s'." %(match.group()), self._errpos(pos__))
- block_type = 'for'
- cond = self._reForParam.match(param)
- if cond is None:
- raise TemplateSyntaxError("Invalid 'for ...' at '%s'." %(param), self._errpos(pos_p))
- names = tuple(n.strip() for n in cond.group("names").split(","))
- self._testexpr(cond.group("iter"), pos_p+cond.start("iter"))
- parsetree.append(("for", names, cond.group("iter"), self._parse(content, pos_c)))
- elif 'if' == keyword:
- if block_type is not None:
- raise TemplateSyntaxError("Missing block-end-tag before new block at '%s'." %(match.group()), self._errpos(pos__))
- if not param:
- raise TemplateSyntaxError("Missing condition for 'if' at '%s'." %(match.group()), self._errpos(pos__))
- block_type = 'if'
- self._testexpr(param, pos_p)
- parsetree.append(("if", param, self._parse(content, pos_c)))
- elif 'elif' == keyword:
- if block_type != 'if':
- raise TemplateSyntaxError("'elif' may only appear after 'if' at '%s'." %(match.group()), self._errpos(pos__))
- if not param:
- raise TemplateSyntaxError("Missing condition for 'elif' at '%s'." %(match.group()), self._errpos(pos__))
- self._testexpr(param, pos_p)
- parsetree.append(("elif", param, self._parse(content, pos_c)))
- elif 'else' == keyword:
- if block_type not in ('if', 'for'):
- raise TemplateSyntaxError("'else' may only appear after 'if' of 'for' at '%s'." %(match.group()), self._errpos(pos__))
- if param:
- raise TemplateSyntaxError("'else' may not have parameters at '%s'." %(match.group()), self._errpos(pos__))
- parsetree.append(("else", self._parse(content, pos_c)))
- elif 'macro' == keyword:
- if block_type is not None:
- raise TemplateSyntaxError("Missing block-end-tag before new block '%s'." %(match.group()), self._errpos(pos__))
- block_type = 'macro'
- # make sure param is "\w+" (instead of ".+")
- if not param:
- raise TemplateSyntaxError("Missing name for 'macro' at '%s'." %(match.group()), self._errpos(pos__))
- if not self._reMacroParam.match(param):
- raise TemplateSyntaxError("Invalid name for 'macro' at '%s'." %(match.group()), self._errpos(pos__))
- #remove last newline
- if len(content) > 0 and content[-1] == '\n':
- content = content[:-1]
- if len(content) > 0 and content[-1] == '\r':
- content = content[:-1]
- parsetree.append(("macro", param, self._parse(content, pos_c)))
-
- # parser-commands
- elif 'raw' == keyword:
- if block_type is not None:
- raise TemplateSyntaxError("Missing block-end-tag before new block '%s'." %(match.group()), self._errpos(pos__))
- if param:
- raise TemplateSyntaxError("'raw' may not have parameters at '%s'." %(match.group()), self._errpos(pos__))
- block_type = 'raw'
- parsetree.append(("str", content))
- elif 'include' == keyword:
- if block_type is not None:
- raise TemplateSyntaxError("Missing block-end-tag before new block '%s'." %(match.group()), self._errpos(pos__))
- if param:
- raise TemplateSyntaxError("'include' may not have parameters at '%s'." %(match.group()), self._errpos(pos__))
- block_type = 'include'
- try:
- u = self._load(content.strip())
- except Exception,err:
- raise TemplateIncludeError(err, self._errpos(pos__))
- self._includestack.append((content.strip(), u)) # current filename/template for error-msg.
- p = self._parse(u)
- self._includestack.pop()
- parsetree.extend(p)
- elif 'set_escape' == keyword:
- if block_type is not None:
- raise TemplateSyntaxError("Missing block-end-tag before new block '%s'." %(match.group()), self._errpos(pos__))
- if param:
- raise TemplateSyntaxError("'set_escape' may not have parameters at '%s'." %(match.group()), self._errpos(pos__))
- block_type = 'set_escape'
- esc = content.strip().upper()
- if esc not in ESCAPE_SUPPORTED:
- raise TemplateSyntaxError("Unsupported escape '%s'." %(esc), self._errpos(pos__))
- self.escape = ESCAPE_SUPPORTED[esc]
- else:
- raise TemplateSyntaxError("Invalid keyword '%s'." %(keyword), self._errpos(pos__))
- curr = match.end()
-
- if block_type is not None:
- raise TemplateSyntaxError("Missing end-tag.", self._errpos(pos__))
-
- if len(template) > curr: # process template-part after last block
- self._parse_sub(parsetree, template[curr:], fpos)
-
- return parsetree
-
-#-----------------------------------------
-# Evaluation
-
-# some checks
-assert len(eval("dir()", {'__builtins__':{'dir':dir}})) == 1, \
- "FATAL: 'eval' does not work as expected (%s)."
-assert compile("0 .__class__", "<string>", "eval").co_names == ('__class__',), \
- "FATAL: 'compile' does not work as expected."
-
-class EvalPseudoSandbox:
- """An eval-pseudo-sandbox.
-
- The pseudo-sandbox restricts the available functions/objects, so the
- code can only access:
-
- - some of the builtin python-functions, which are considered "safe"
- (see safe_builtins)
- - some additional functions (exists(), default(), setvar())
- - the passed objects incl. their methods.
-
- Additionally, names beginning with "_" are forbidden.
- This is to prevent things like '0 .__class__', with which you could
- easily break out of a "sandbox".
-
- Be careful to only pass "safe" objects/functions to the template,
- because any unsafe function/method could break the sandbox!
- For maximum security, restrict the access to as few objects/functions
- as possible!
-
- :Warning:
- Note that this is no real sandbox! (And although I don't know any
- way to break out of the sandbox without passing-in an unsafe object,
- I cannot guarantee that there is no such way. So use with care.)
-
- Take care if you want to use it for untrusted code!!
- """
-
- safe_builtins = {
- "True" : __builtin__.True,
- "False" : __builtin__.False,
- "None" : __builtin__.None,
-
- "abs" : __builtin__.abs,
- "chr" : __builtin__.chr,
- "cmp" : __builtin__.cmp,
- "divmod" : __builtin__.divmod,
- "hash" : __builtin__.hash,
- "hex" : __builtin__.hex,
- "len" : __builtin__.len,
- "max" : __builtin__.max,
- "min" : __builtin__.min,
- "oct" : __builtin__.oct,
- "ord" : __builtin__.ord,
- "pow" : __builtin__.pow,
- "range" : __builtin__.range,
- "round" : __builtin__.round,
- "sorted" : __builtin__.sorted,
- "sum" : __builtin__.sum,
- "unichr" : __builtin__.unichr,
- "zip" : __builtin__.zip,
-
- "bool" : __builtin__.bool,
- "complex" : __builtin__.complex,
- "dict" : __builtin__.dict,
- "enumerate" : __builtin__.enumerate,
- "float" : __builtin__.float,
- "int" : __builtin__.int,
- "list" : __builtin__.list,
- "long" : __builtin__.long,
- "reversed" : __builtin__.reversed,
- "str" : __builtin__.str,
- "tuple" : __builtin__.tuple,
- "unicode" : __builtin__.unicode,
- "xrange" : __builtin__.xrange,
- }
-
- def __init__(self):
- self._compile_cache = {}
- self.locals_ptr = None
- self.eval_allowed_globals = self.safe_builtins.copy()
- self.register("__import__", self.f_import)
- self.register("exists", self.f_exists)
- self.register("default", self.f_default)
- self.register("setvar", self.f_setvar)
-
- def register(self, name, obj):
- """Add an object to the "allowed eval-globals".
-
- Mainly useful to add user-defined functions to the pseudo-sandbox.
- """
- self.eval_allowed_globals[name] = obj
-
- def compile(self, expr):
- """Compile a python-eval-expression.
-
- - Use a compile-cache.
- - Raise a `NameError` if `expr` contains a name beginning with ``_``.
-
- :Returns: the compiled `expr`
- :Exceptions:
- - `SyntaxError`: for compile-errors
- - `NameError`: if expr contains a name beginning with ``_``
- """
- if expr not in self._compile_cache:
- c = compile(expr, "", "eval")
- # TODO(holtgrew): Disabling the breakout check here so our code works in Python 2.6.
- #for i in c.co_names: #prevent breakout via new-style-classes
- # if i[0] == '_':
- # raise NameError("Name '%s' is not allowed." %(i))
- self._compile_cache[expr] = c
- return self._compile_cache[expr]
-
- def eval(self, expr, locals):
- """Eval a python-eval-expression.
-
- Sets ``self.locals_ptr`` to ``locales`` and compiles the code
- before evaluating.
- """
- sav = self.locals_ptr
- self.locals_ptr = locals
- x = eval(self.compile(expr), {"__builtins__":self.eval_allowed_globals}, locals)
- self.locals_ptr = sav
- return x
-
- def f_import(self, name, *args, **kwargs):
- """``import``/``__import__()`` for the sandboxed code.
-
- Since "import" is insecure, the PseudoSandbox does not allow to
- import other modules. But since some functions need to import
- other modules (e.g. "datetime.datetime.strftime" imports "time"),
- this function replaces the builtin "import" and allows to use
- modules which are already accessible by the sandboxed code.
-
- :Note:
- - This probably only works for rather simple imports.
- - For security, it may be better to avoid such (complex) modules
- which import other modules. (e.g. use time.localtime and
- time.strftime instead of datetime.datetime.strftime)
-
- :Example:
-
- >>> from datetime import datetime
- >>> import pyratemp
- >>> t = pyratemp.Template('@!mytime.strftime("%H:%M:%S")!@')
- >>> print t(mytime=datetime.now())
- Traceback (most recent call last):
- ...
- ImportError: import not allowed in pseudo-sandbox; try to import 'time' yourself and pass it to the sandbox/template
- >>> import time
- >>> print t(mytime=datetime.strptime("13:40:54", "%H:%M:%S"), time=time)
- 13:40:54
-
- # >>> print t(mytime=datetime.now(), time=time)
- # 13:40:54
- """
- import types
- if self.locals_ptr is not None and name in self.locals_ptr and isinstance(self.locals_ptr[name], types.ModuleType):
- return self.locals_ptr[name]
- else:
- raise ImportError("import not allowed in pseudo-sandbox; try to import '%s' yourself and pass it to the sandbox/template" % name)
-
- def f_exists(self, varname):
- """``exists()`` for the sandboxed code.
-
- Test if the variable `varname` exists in the current locals-namespace.
-
- This only works for single variable names. If you want to test
- complicated expressions, use i.e. `default`.
- (i.e. `default("expr",False)`)
-
- :Note: the variable-name has to be quoted! (like in eval)
- :Example: see module-docstring
- """
- return (varname in self.locals_ptr)
-
- def f_default(self, expr, default=None):
- """``default()`` for the sandboxed code.
-
- Try to evaluate an expression and return the result or a
- fallback-/default-value; the `default`-value is used
- if `expr` does not exist/is invalid/results in None.
-
- This is very useful for optional data.
-
- :Parameter:
- - expr: eval-expression
- - default: fallback-falue if eval(expr) fails or is None.
- :Returns:
- the eval-result or the "fallback"-value.
-
- :Note: the eval-expression has to be quoted! (like in eval)
- :Example: see module-docstring
- """
- try:
- r = self.eval(expr, self.locals_ptr)
- if r is None:
- return default
- return r
- #TODO: which exceptions should be catched here?
- except (NameError, IndexError, KeyError):
- return default
-
- def f_setvar(self, name, expr):
- """``setvar()`` for the sandboxed code.
-
- Set a variable.
-
- :Example: see module-docstring
- """
- self.locals_ptr[name] = self.eval(expr, self.locals_ptr)
- return ""
-
-#-----------------------------------------
-# basic template / subtemplate
-
-class TemplateBase:
- """Basic template-class.
-
- Used both for the template itself and for 'macro's ("subtemplates") in
- the template.
- """
-
- def __init__(self, parsetree, renderfunc, data=None):
- """Create the Template/Subtemplate/Macro.
-
- :Parameters:
- - `parsetree`: parse-tree of the template/subtemplate/macro
- - `renderfunc`: render-function
- - `data`: data to fill into the template by default (dictionary).
- This data may later be overridden when rendering the template.
- :Exceptions:
- - `TypeError`: if `data` is not a dictionary
- """
- #TODO: parameter-checking?
- self.parsetree = parsetree
- if isinstance(data, dict):
- self.data = data
- elif data is None:
- self.data = {}
- else:
- raise TypeError('"data" must be a dict (or None).')
- self.current_data = data
- self._render = renderfunc
-
- def __call__(self, **override):
- """Fill out/render the template.
-
- :Parameters:
- - `override`: objects to add to the data-namespace, overriding
- the "default"-data.
- :Returns: the filled template (in unicode)
- :Note: This is also called when invoking macros
- (i.e. ``$!mymacro()!$``).
- """
- self.current_data = self.data.copy()
- self.current_data.update(override)
- u = u"".join(self._render(self.parsetree, self.current_data))
- self.current_data = self.data # restore current_data
- return _dontescape(u) # (see class _dontescape)
-
- def __unicode__(self):
- """Alias for __call__()."""
- return self.__call__()
- def __str__(self):
- """Only here for completeness. Use __unicode__ instead!"""
- return self.__call__()
-
-#-----------------------------------------
-# Renderer
-
-class _dontescape(unicode):
- """Unicode-string which should not be escaped.
-
- If ``isinstance(object,_dontescape)``, then don't escape the object in
- ``@!...!@``. It's useful for not double-escaping macros, and it's
- automatically used for macros/subtemplates.
-
- :Note: This only works if the object is used on its own in ``@!...!@``.
- It i.e. does not work in ``@!object*2!@`` or ``@!object + "hi"!@``.
- """
- __slots__ = []
-
-
-class Renderer(object):
- """Render a template-parse-tree.
-
- :Uses: `TemplateBase` for macros
- """
-
- def __init__(self, evalfunc, escapefunc):
- """Init the renderer.
-
- :Parameters:
- - `evalfunc`: function for template-expression-evaluation
- (i.e. ``EvalPseudoSandbox().eval``)
- - `escapefunc`: function for escaping special characters
- (i.e. `escape`)
- """
- #TODO: test evalfunc
- self.evalfunc = evalfunc
- self.escapefunc = escapefunc
-
- def _eval(self, expr, data):
- """evalfunc with error-messages"""
- try:
- return self.evalfunc(expr, data)
- #TODO: any other errors to catch here?
- except (TypeError,NameError,IndexError,KeyError,AttributeError, SyntaxError), err:
- raise TemplateRenderError("Cannot eval expression '%s'. (%s: %s)" %(expr, err.__class__.__name__, err))
-
- def render(self, parsetree, data):
- """Render a parse-tree of a template.
-
- :Parameters:
- - `parsetree`: the parse-tree
- - `data`: the data to fill into the template (dictionary)
- :Returns: the rendered output-unicode-string
- :Exceptions:
- - `TemplateRenderError`
- """
- _eval = self._eval # shortcut
- output = []
- do_else = False # use else/elif-branch?
-
- if parsetree is None:
- return ""
- for elem in parsetree:
- if "str" == elem[0]:
- output.append(elem[1])
- elif "sub" == elem[0]:
- output.append(unicode(_eval(elem[1], data)))
- elif "esc" == elem[0]:
- obj = _eval(elem[2], data)
- #prevent double-escape
- if isinstance(obj, _dontescape) or isinstance(obj, TemplateBase):
- output.append(unicode(obj))
- else:
- output.append(self.escapefunc(unicode(obj), elem[1]))
- elif "for" == elem[0]:
- do_else = True
- (names, iterable) = elem[1:3]
- try:
- loop_iter = iter(_eval(iterable, data))
- except TypeError, e:
- print data
- print iterable
- print type(_eval(iterable, data))
- print e
- raise TemplateRenderError("Cannot loop over '%s'." % iterable)
- for i in loop_iter:
- do_else = False
- if len(names) == 1:
- data[names[0]] = i
- else:
- data.update(zip(names, i)) #"for a,b,.. in list"
- output.extend(self.render(elem[3], data))
- elif "if" == elem[0]:
- do_else = True
- if _eval(elem[1], data):
- do_else = False
- output.extend(self.render(elem[2], data))
- elif "elif" == elem[0]:
- if do_else and _eval(elem[1], data):
- do_else = False
- output.extend(self.render(elem[2], data))
- elif "else" == elem[0]:
- if do_else:
- do_else = False
- output.extend(self.render(elem[1], data))
- elif "macro" == elem[0]:
- data[elem[1]] = TemplateBase(elem[2], self.render, data)
- else:
- raise TemplateRenderError("Invalid parse-tree (%s)." %(elem))
-
- return output
-
-#-----------------------------------------
-# template user-interface (putting all together)
-
-class Template(TemplateBase):
- """Template-User-Interface.
-
- :Usage:
- ::
- t = Template(...) (<- see __init__)
- output = t(...) (<- see TemplateBase.__call__)
-
- :Example:
- see module-docstring
- """
-
- def __init__(self, string=None,filename=None,parsetree=None, encoding='utf-8', data=None, escape=HTML,
- loader_class=LoaderFile,
- parser_class=Parser,
- renderer_class=Renderer,
- eval_class=EvalPseudoSandbox,
- escape_func=escape):
- """Load (+parse) a template.
-
- :Parameters:
- - `string,filename,parsetree`: a template-string,
- filename of a template to load,
- or a template-parsetree.
- (only one of these 3 is allowed)
- - `encoding`: encoding of the template-files (only used for "filename")
- - `data`: data to fill into the template by default (dictionary).
- This data may later be overridden when rendering the template.
- - `escape`: default-escaping for the template, may be overwritten by the template!
- - `loader_class`
- - `parser_class`
- - `renderer_class`
- - `eval_class`
- - `escapefunc`
- """
- if [string, filename, parsetree].count(None) != 2:
- raise ValueError('Exactly 1 of string,filename,parsetree is necessary.')
-
- tmpl = None
- # load template
- if filename is not None:
- incl_load = loader_class(os.path.dirname(filename), encoding).load
- tmpl = incl_load(os.path.basename(filename))
- if string is not None:
- incl_load = dummy_raise(NotImplementedError, "'include' not supported for template-strings.")
- tmpl = LoaderString(encoding).load(string)
-
- # eval (incl. compile-cache)
- templateeval = eval_class()
-
- # parse
- if tmpl is not None:
- p = parser_class(loadfunc=incl_load, testexpr=templateeval.compile, escape=escape)
- parsetree = p.parse(tmpl)
- del p
-
- # renderer
- renderfunc = renderer_class(templateeval.eval, escape_func).render
-
- #create template
- TemplateBase.__init__(self, parsetree, renderfunc, data)
-
-
-#=========================================
-#doctest
-
-def _doctest():
- """doctest this module."""
- import doctest
- doctest.testmod()
-
-#----------------------
-if __name__ == '__main__':
- _doctest()
-
-#=========================================
-
diff --git a/util/py_lib/seqan/app_tests.py b/util/py_lib/seqan/app_tests.py
deleted file mode 100644
index 2cc71bc..0000000
--- a/util/py_lib/seqan/app_tests.py
+++ /dev/null
@@ -1,458 +0,0 @@
-#!/usr/bin/env python2
-"""Helper code for app tests.
-
-This module contains helper functions and classes for making app tests easy.
-The advantage of using Python for this is easier portability instead of relying
-on Unix tools such as bash and diff which are harder to install on Windows than
-Python.
-
-App tests are performed by executing the programs on test data and comparing
-their output to previously generated "golden" output files.
-
-Classes/Functions:
-
- class TestConf -- stores configuration of a test.
- class TestPathHelper -- helps with constructing paths.
- function runTest -- runs a test configured by a TestConf object.
- function autolocateBinary -- locates a binary, possibly in an intermediary
- directory.
-"""
-
-from __future__ import with_statement
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-import difflib
-import hashlib
-import logging
-import optparse
-import os
-import os.path
-import re
-import subprocess
-import shutil
-import sys
-import tempfile
-import gzip
-
-def md5ForFile(f, block_size=2**20):
- """Compute MD5 of a file.
-
- Taken from http://stackoverflow.com/a/1131255/84349.
- """
- md5 = hashlib.md5()
- while True:
- data = f.read(block_size)
- if not data:
- break
- md5.update(data)
- return md5.hexdigest()
-
-
-# Valgrind flags, taken from CMake output, ideally given to test script by CMake?
-SUPPRESSIONS = '--suppressions=' + os.path.join(os.path.dirname(__file__), '..', '..', '..', 'misc', 'seqan.supp')
-VALGRIND_FLAGS = [SUPPRESSIONS] + '--error-exitcode=1 -q --tool=memcheck --leak-check=yes --show-reachable=yes --workaround-gcc296-bugs=yes --num-callers=50 --'.split()
-VALGRIND_PATH = '/usr/bin/valgrind'
-
-class BadResultException(Exception):
- pass
-
-
-class TestConf(object):
- """Configuration for one tests.
-
- A test configuration consists of the parameters to give to the
- program and the expected result.
-
- Attrs:
- program -- string, path to binary to execute.
- args -- list of strings with arguments to the program.
- to_diff -- optional list of pairs with (output-file, expected-file) paths
- diff, the contents of output-file should be equal to the
- contents of expected-file.
- name -- optional string, name of the test.
- redir_stdout -- optional string that gives the path to redirect stdout to
- if the variable is not None.
- redir_stderr -- optional string that gives the path to redirect stderr to
- if the variable is not None.
- check_callback -- callable throwing an exception on erorrs.
- """
-
- def __init__(self, program, args, to_diff=[], name=None,
- redir_stdout=None, redir_stderr=None,
- check_callback=None):
- """Constructor, args correspond to attrs."""
- self.program = program
- self.args = args
- self.to_diff = to_diff
- self.name = name
- self.redir_stdout = redir_stdout
- self.redir_stderr = redir_stderr
- if not hasattr(TestConf, 'valgrind'):
- self.valgrind = False
- else:
- self.valgrind = TestConf.valgrind
- self.check_callback = check_callback
-
- def __str__(self):
- fmt = 'TestConf(%s, %s, %s, %s, %s, %s)'
- return fmt % (repr(self.program), self.args, self.to_diff, self.name,
- self.redir_stdout, self.redir_stderr)
-
- def commandLineArgs(self):
- """Returns the command line."""
- args = [x for x in self.args if x != '']
- args = [self.program] + args
- if self.valgrind:
- args = [VALGRIND_PATH] + VALGRIND_FLAGS + args
- return args
-
-
-class TestPathHelper(object):
- """Helper class for paths.
-
- TestPathHelper objects are configured with the appropriate paths. The
- provide functions to construct when executing tests.
- """
-
- def __init__(self, source_base_path, binary_base_path,
- tests_dir):
- self.temp_dir = None
- self.source_base_path = source_base_path
- self.binary_base_path = binary_base_path
- self.tests_dir = tests_dir
- self.created_paths = []
-
- def inFile(self, path):
- """Convert the path of a test file.
-
- The given path, relative to the test directory, will be transformed into an
- absolute path to the file.
-
- Args:
- path -- relative path to a file in the test directory.
-
- Returns:
- Absolute to the file.
- """
- result = os.path.join(self.source_base_path, self.tests_dir, path)
- logging.debug('inFile(%s) = %s', path, result)
- return result
-
- def outFile(self, path, subdir=None):
- """Convert the path of an output file.
-
- The given path will be converted to a path to a temporary file. The path
- to this file will be created.
-
- If subdir is set then a subdirectory with this name will be created and
- the output will be relative to subdir.
- """
- if not self.temp_dir:
- self.temp_dir = tempfile.mkdtemp()
- if not os.path.isdir(self.temp_dir):
- self.created_paths.append(self.temp_dir)
- os.makedirs(self.temp_dir)
- target_dir = self.temp_dir
- if subdir:
- target_dir = os.path.join(self.temp_dir, subdir)
- if not os.path.isdir(target_dir):
- self.created_paths.append(target_dir)
- os.makedirs(target_dir)
- logging.debug('outFile(%s, %s) = %s', path, subdir, self.temp_dir)
- res = os.path.join(target_dir, path)
- self.created_paths.append(res)
- return res
-
- def deleteTempDir(self):
- """Remove the temporary directory created earlier and all files below."""
- print >>sys.stderr, 'DELETING TEMP DIR', self.temp_dir
- if self.temp_dir:
- shutil.rmtree(self.temp_dir)
-
-
-def autolocateBinary(base_path, relative_path, binary_name):
- """Autolocates a binary, possibly in an intermediary path.
-
- When building applications with CMake, they do not always have the same
- relative path from the binary build directory. For Unix Makefiles, the path
- could be 'apps/tree_recon' whereas for Visual Studio, it could be
- 'apps/Release/tree_recon'.
-
- Also, it searches for the binary name in "${base_path}/bin".
-
- This function tries to automatically guess the name of the file and return
- the first one it finds.
- """
- # Names of intermediary directories and possible file extensions.
- intermediary_dir_names = ['', 'Debug', 'Release']
- extensions = ['', '.exe']
- paths = [os.path.join(base_path, 'bin', binary_name),
- os.path.join(base_path, 'bin', 'Debug', binary_name),
- os.path.join(base_path, 'bin', 'Release', binary_name),
- os.path.join(base_path, 'bin', binary_name + '.exe'),
- os.path.join(base_path, 'bin', 'Debug', binary_name + '.exe'),
- os.path.join(base_path, 'bin', 'Release', binary_name + '.exe')]
- # Try all possible paths.
- for dir_name in intermediary_dir_names:
- for ext in extensions:
- # With CMAKE_BINARY_DIR not set to "bin".
- res_list = [base_path, relative_path, dir_name, binary_name + ext]
- filtered_list = [x for x in res_list if x] # Filter out empty strings.
- paths.append(os.path.join(*filtered_list))
- if dir_name:
- paths.append('/'.join([base_path] + relative_path.split('/')[:-1] +
- [dir_name] + relative_path.split('/')[-1:] +
- [binary_name]))
- for path in paths:
- logging.debug('Trying path %s', path)
- if os.path.isfile(path):
- logging.debug(' Found binary %s', path)
- return path
- # Fall back ot Unix default.
- return os.path.join(base_path, relative_path, binary_name)
-
-
-def runTest(test_conf):
- """Run the test configured in test_conf.
-
- Args:
- test_conf -- TestConf object to run test for.
-
- Returns:
- True on success, False on any errors.
-
- Side Effects:
- Errors are printed to stderr.
- """
- # Execute the program.
- logging.debug('runTest(%s)', test_conf)
- logging.debug('Executing "%s"', ' '.join(test_conf.commandLineArgs()))
- stdout_file = subprocess.PIPE
- if test_conf.redir_stdout:
- logging.debug(' Redirecting stdout to "%s".' % test_conf.redir_stdout)
- stdout_file = open(test_conf.redir_stdout, 'w+')
- stderr_file = subprocess.PIPE
- if test_conf.redir_stderr:
- logging.debug(' Redirecting stderr to "%s".' % test_conf.redir_stderr)
- stderr_file = open(test_conf.redir_stderr, 'w+')
- try:
- process = subprocess.Popen(test_conf.commandLineArgs(), stdout=stdout_file,
- stderr=stderr_file)
- retcode = process.wait()
- logging.debug(' return code is %d', retcode)
- if retcode != 0:
- fmt = 'Return code of command "%s" was %d.'
- print >>sys.stderr, '--- stdout begin --'
- print >>sys.stderr, fmt % (' '.join(test_conf.commandLineArgs()), retcode)
- print >>sys.stderr, stdout_file.read()
- print >>sys.stderr, '--- stdout end --'
- stdout_file.close()
- if process.stderr:
- stderr_contents = process.stderr.read()
- else:
- stderr_contents = ''
- print >>sys.stderr, '-- stderr begin --'
- print >>sys.stderr, stderr_contents
- print >>sys.stderr, '-- stderr end --'
- return False
- except Exception, e:
- # Print traceback.
- import traceback
- exc_type, exc_value, exc_traceback = sys.exc_info()
- traceback.print_exception(exc_type, exc_value, exc_traceback)
- fmt = 'ERROR (when executing "%s"): %s'
- if stdout_file is not subprocess.PIPE:
- stdout_file.close()
- print >>sys.stderr, fmt % (' '.join(test_conf.commandLineArgs()), e)
- return False
- # Handle error of program, indicated by return code != 0.
- if retcode != 0:
- print >>sys.stderr, 'Error when executing "%s".' % ' '.join(test_conf.commandLineArgs())
- print >>sys.stderr, 'Return code is %d' % retcode
- if stdout_file is not subprocess.PIPE:
- stdout_file.seek(0)
- stdout_contents = process.stdout.read()
- if stdout_contents:
- print >>sys.stderr, '-- stdout begin --'
- print >>sys.stderr, stdout_contents
- print >>sys.stderr, '-- stdout end --'
- else:
- print >>sys.stderr, '-- stdout is empty --'
- stderr_contents = process.stderr.read()
- if stderr_contents:
- print >>sys.stderr, '-- stderr begin --'
- print >>sys.stderr, stderr_contents
- print >>sys.stderr, '-- stderr end --'
- else:
- print >>sys.stderr, '-- stderr is empty --'
- # Close standard out file if necessary.
- if stdout_file is not subprocess.PIPE:
- stdout_file.close()
- # Compare results with expected results, if the expected and actual result
- # are not equal then print diffs.
- result = True
- for tuple_ in test_conf.to_diff:
- expected_path, result_path = tuple_[:2]
- binary = False
- gunzip = False
- transforms = [NormalizeLineEndingsTransform()]
- if len(tuple_) >= 3:
- if tuple_[2] == 'md5':
- binary = True
- elif tuple_[2] == 'gunzip':
- binary = True
- gunzip = True
- else:
- transforms += tuple_[2]
- try:
- if gunzip:
- f = gzip.open(expected_path, 'rb')
- expected_md5 = md5ForFile(f)
- f.close()
- f = gzip.open(result_path, 'rb')
- result_md5 = md5ForFile(f)
- f.close()
- if expected_md5 == result_md5:
- continue
- else:
- tpl = (expected_path, expected_md5, result_md5, result_path)
- print >>sys.stderr, 'md5(gunzip(%s)) == %s != %s == md5(gunzip(%s))' % tpl
- result = False
- if binary:
- with open(expected_path, 'rb') as f:
- expected_md5 = md5ForFile(f)
- with open(result_path, 'rb') as f:
- result_md5 = md5ForFile(f)
- if expected_md5 == result_md5:
- continue
- else:
- tpl = (expected_path, expected_md5, result_md5, result_path)
- print >>sys.stderr, 'md5(%s) == %s != %s == md5(%s)' % tpl
- result = False
- else:
- with open(expected_path, 'rb') as f:
- expected_str = f.read()
- for t in transforms:
- expected_str = t.apply(expected_str, True)
- with open(result_path, 'rb') as f:
- result_str = f.read()
- for t in transforms:
- result_str = t.apply(result_str, False)
- if expected_str == result_str:
- continue
- fmt = 'Comparing %s against %s'
- print >>sys.stderr, fmt % (expected_path, result_path)
- diff = difflib.unified_diff(expected_str.splitlines(),
- result_str.splitlines())
- for line in diff:
- print >>sys.stderr, line
- result = False
- except Exception, e:
- fmt = 'Error when trying to compare %s to %s: %s ' + str(type(e))
- print >>sys.stderr, fmt % (expected_path, result_path, e)
- result = False
- # Call check callable.
- if test_conf.check_callback:
- try:
- test_conf.check_callback()
- except BadResultException, e:
- print >>sys.stderr, 'Bad result: ' + str(e)
- result = False
- except Exception, e:
- print >>sys.stderr, 'Error in checker: ' + str(type(e)) + ' ' + str(e)
- result = False
- return result
-
-
-class ReplaceTransform(object):
- """Transformation on left and/or right files to diff."""
-
- def __init__(self, needle, replacement, left=True, right=True):
- self.needle = needle
- self.replacement = replacement
- self.left = left
- self.right = right
-
- def apply(self, text, is_left):
- if (is_left and not self.left) or (not is_left and not self.right):
- return text # Skip if no transform is to be applied.
- return text.replace(self.needle, self.replacement)
-
-
-class NormalizeLineEndingsTransform(object):
- """Normalizes line endings to '\n'."""
-
- def __init__(self, left=True, right=True):
- self.left = left
- self.right = right
-
- def apply(self, text, is_left):
- if (is_left and not self.left) or (not is_left and not self.right):
- return text # Skip if no transform is to be applied.
- return text.replace('\r\n', '\n')
-
-
-class NormalizeScientificExponentsTransform(object):
- """Transformation that normalized scientific notation exponents.
-
- On Windows, scientific numbers are printed with an exponent padded to
- a width of three with zeros, e.g. 1e003 instead of 1e03 as on Unix.
-
- This transform normalizes to Unix or Windows.
- """
-
- def __init__(self, normalize_to_unix=True):
- self.normalize_to_unix = normalize_to_unix
-
- def apply(self, text, is_left):
- """Apply the transform."""
- if self.normalize_to_unix:
- return re.sub(r'([-+]?(?:[0-9]*\.)?[0-9]+[eE][\-+]?)0([0-9]{2})', r'\1\2', text)
- else:
- return re.sub(r'([-+]?(?:[0-9]*\.)?[0-9]+[eE][\-+]?)([0-9]{2})', r'\10\2', text)
-
-
-class RegexpReplaceTransform(object):
- """Transformation that applies regular expression replacement."""
-
- def __init__(self, needle, replacement, left=True, right=True):
- self.needle = needle
- self.replacement = replacement
- self.left = left
- self.right = right
-
- def apply(self, text, is_left):
- """Apply the transform."""
- if (is_left and not self.left) or (not is_left and not self.right):
- return text # Skip if no transform is to be applied.
- return re.sub(self.needle, self.replacement, text)
-
-
-class UniqueTransform(object):
- """Unique sort transformation on left and/or right files to diff."""
-
- def __init__(self, left=True, right=True):
- self.left = left
- self.right = right
-
- def apply(self, text, is_left):
- if (is_left and not self.left) or (not is_left and not self.right):
- return text # Skip if no transform is to be applied.
- return ''.join(sorted(set(text.splitlines(True))))
-
-
-def main(main_func, **kwargs):
- """Run main_func with the first and second positional parameter."""
- parser = optparse.OptionParser("usage: run_tests [options] SOURCE_ROOT_PATH BINARY_ROOT_PATH")
- parser.add_option('-v', '--verbose', dest='verbose', action='store_true')
- parser.add_option('--valgrind', dest='valgrind', action='store_true')
- (options, args) = parser.parse_args()
- if len(args) != 2:
- parser.error('Incorrect number of arguments!')
- return 2
- if options.verbose:
- logging.root.setLevel(logging.DEBUG)
- if options.valgrind:
- TestConf.valgrind = True
- return main_func(args[0], args[1], **kwargs)
diff --git a/util/py_lib/seqan/auto_build.py b/util/py_lib/seqan/auto_build.py
deleted file mode 100755
index 9ae7e27..0000000
--- a/util/py_lib/seqan/auto_build.py
+++ /dev/null
@@ -1,532 +0,0 @@
-#!/usr/bin/env python2
-"""
-Automatic building of SeqAn apps and releases.
-"""
-
-from __future__ import print_function
-
-import subprocess
-import optparse
-import os.path
-import re
-import sys
-import shutil
-import tempfile
-
-# The git command to use.
-GIT_BINARY='git'
-# The CMake command to use.
-CMAKE_BINARY='cmake'
-
-# The default repository URL.
-REPOSITORY_URL='https://github.com/seqan/seqan.git'
-# The path to the package repository.
-DEFAULT_PACKAGE_DB='.'
-
-# Regular expression to use for tag names.
-TAG_RE=r'.*-v\d+\.\d+\.\d(-\w+)?'
-
-class MinisculeGitWrapper(object):
- """Minimal git wrapper."""
-
- def lsRemote(self, url):
- """Execute 'git ls-remote ${url} --tags'."""
- # Execute ls-remote command.
- print('Executing "%s %s %s"' % (GIT_BINARY, 'ls-remote --tags', url), file=sys.stderr)
- popen = subprocess.Popen([GIT_BINARY, 'ls-remote', '--tags', url],
- stdout=subprocess.PIPE)
- out_data, err_data = popen.communicate()
- print(' => %d' % popen.returncode, file=sys.stderr)
- if popen.returncode != 0:
- print('ERROR during git call.', file=sys.stderr)
- return 1
- # Parse out revisions and tags names.
- lines = out_data.splitlines()
- revs_tags = [(line.split()[0], line.split()[-1]) for line in lines]
- res = []
- for rev, tag in revs_tags:
- if '^{}' in tag:
- continue # Skip with ^{} in tag name
- tag2 = tag[10:]
- res.append((rev, tag2))
- return res
-
- def checkout(self, path, treeish):
- """Execute "git checkout" in the checkout at path."""
- # Executing git checkout.
- args = [GIT_BINARY, 'checkout', treeish]
- print('Executing "%s" in "%s"' % (' '.join(args), path), file=sys.stderr)
- popen = subprocess.Popen(args, cwd=path)
- out_data, err_data = popen.communicate()
- if popen.returncode != 0:
- print('ERROR during git call.', file=sys.stderr)
- # Executing force resetting to current revision.
- args = [GIT_BINARY, 'rm', '--cached', '.']
- print('Executing "%s" in "%s"' % (' '.join(args), path), file=sys.stderr)
- popen = subprocess.Popen(args, cwd=path)
- out_data, err_data = popen.communicate()
- if popen.returncode != 0:
- print('ERROR during git call.', file=sys.stderr)
- args = [GIT_BINARY, 'reset', '--hard']
- print('Executing "%s" in "%s"' % (' '.join(args), path), file=sys.stderr)
- popen = subprocess.Popen(args, cwd=path)
- out_data, err_data = popen.communicate()
- if popen.returncode != 0:
- print('ERROR during git call.', file=sys.stderr)
- return popen.returncode
-
- def archive(self, path, treeish, output, prefix):
- """Execute git archive."""
- args = [GIT_BINARY, 'archive', '--prefix=%s/' % prefix, '--output=%s' % output, treeish]
- print('Executing "%s" in "%s"' % (' '.join(args), path), file=sys.stderr)
- popen = subprocess.Popen(args, cwd=path)
- out_data, err_data = popen.communicate()
- if popen.returncode != 0:
- print('ERROR during git call.', file=sys.stderr)
- return popen.returncode
-
- def clone(self, url, tag, dest_dir):
- """Execute 'git clone ${url} ${dest_dir}' and then get specific tag."""
- # Clone repository
- args = [GIT_BINARY, 'clone', url, dest_dir]
- print('Executing "%s"' % ' '.join(args), file=sys.stderr)
- popen = subprocess.Popen(args)
- popen.wait()
- print(' => %d' % popen.returncode, file=sys.stderr)
- if popen.returncode != 0:
- return popen.returncode
- return self.checkout(dest_dir, tag)
-
-
-class Package(object):
- """Represent a package with a given name, version, OS and architeture."""
-
- def __init__(self, name, version, os, word_size, pkg_format):
- self.name = name
- self.version = version
- self.os = os
- self.word_size = word_size
- SYS_NAMES = {'Windows': {'32': 'win32-i686', '64': 'win64-x86_64'},
- 'Linux': {'32': 'Linux-i686', '64': 'Linux-x86_64'},
- 'Mac': {'32': 'Darwin-i686', '64': 'Darwin-x86_64'}}
- self.system_name = SYS_NAMES[os][word_size]
- self.pkg_format = pkg_format
-
- def fileName(self):
- if self.name == 'seqan-library':
- return '%s-%s.%s' % (self.name, self.version, self.pkg_format)
- else:
- return '%s-%s-%s.%s' % (self.name, self.version, self.system_name,
- self.pkg_format)
-
-
-class BuildStep(object):
- """Management of one build step."""
-
- def __init__(self, path, treeish, name, version, os, word_size, pkg_formats,
- repository_url, make_args, options, tmp_dir=None):
- self.base_path = path
- self.treeish = treeish
- self.name = name
- self.version = version.split('-', 1)[0]
- print ( 'Version: %s Self.Version: %s' % (version, self.version), file=sys.stdout)
- self.major_version = int(self.version.split('.')[0])
- print ( 'Major_Version: %s' % self.major_version, file=sys.stdout)
- self.minor_version = int(self.version.split('.')[1])
- print ( 'Minor_Version: %s' % self.minor_version, file=sys.stdout)
- self.patch_version = 0
- if len(self.version.split('.')) > 2:
- self.patch_version = int(self.version.split('.')[2])
- self.version = '%d.%d.%d' % (self.major_version, self.minor_version, self.patch_version)
- print ( 'Self_Version: %s' % self.version, file=sys.stdout)
- self.os = os
- self.word_size = word_size
- self.pkg_formats = pkg_formats
- if name == 'seqan':
- self.packages = [Package(name + suffix, self.version, os, word_size, f)
- for f in pkg_formats for suffix in ['-apps', '-library']]
- else:
- self.packages = [Package(name, self.version, os, word_size, f)
- for f in pkg_formats]
- self.repository_url = repository_url
- self.make_args = make_args
- self.options = options
- # If set then this is used instead of a random name in TMPDIR.
- self.tmp_dir = tmp_dir
-
- def buildNeeded(self):
- """Returns whether one of the package files is missing."""
- for p in self.packages:
- package_path = os.path.join(self.base_path, p.name, p.fileName())
- if 'x86' in package_path and 'x86_64' not in package_path: # fix processor name
- package_path = package_path.replace('x86', 'x86_64')
- if 'win32' in package_path or 'win64' in package_path: # fix OS name
- package_path = package_path.replace('win32', 'Windows').replace('win64', 'Windows')
- if 'Darwin' in package_path: # fix OS name
- package_path = package_path.replace('Darwin', 'Mac')
- if not os.path.exists(package_path):
- if self.options.verbosity >= 1:
- print('File %s does not exist yet.' % package_path, file=sys.stderr)
- return True
- elif self.options.verbosity >= 1:
- print('File %s exists.' % package_path, file=sys.stderr)
- return False
-
- def copyArchives(self, build_dir):
- """Copy built packages to base_path directory."""
- for p in self.packages:
- from_ = os.path.join(build_dir, p.fileName())
- if os.path.exists(from_):
- to = os.path.join(self.base_path, p.name, os.path.basename(from_))
- if not os.path.exists(os.path.dirname(to)): # Create directory if necessary.
- os.makedirs(os.path.dirname(to))
- print("Copying %s => %s" % (from_, to), file=sys.stderr)
- if 'x86' in to and 'x86_64' not in to: # fix processor name
- to = to.replace('x86', 'x86_64')
- if 'win32' in to or 'win64' in to: # fix OS name
- to = to.replace('win32', 'Windows').replace('win64', 'Windows')
- if 'Darwin' in to: # fix OS name
- to = to.replace('Darwin', 'Mac')
- shutil.copyfile(from_, to)
- else:
- print('%s does not exist (not fatal)' % from_, file=sys.stderr)
-
- def buildSeqAnRelease(self, checkout_dir, build_dir):
- """Build SeqAn release: Apps and library build."""
- # Build seqan-apps.
- #
- # Create build directory.
- if not os.path.exists(build_dir):
- print('Creating build directory %s' % (build_dir,), file=sys.stderr)
- os.mkdir(build_dir)
- # Execute CMake.
- cmake_args = [CMAKE_BINARY, checkout_dir,
- '-DSEQAN_BUILD_SYSTEM=SEQAN_RELEASE_APPS']
- # Use appropriate CMake flags for OS and processor.
- # Use appropriate CMake flags for OS and processor.
- if self.word_size == '32':
- cmake_args.append('-DSEQAN_SYSTEM_PROCESSOR=i686')
- if self.os != 'Windows':
- cmake_args.append('-DCMAKE_CXX_FLAGS=-m32')
- else:
- cmake_args += ['-G', 'Visual Studio 10']
- else: # self.word_size == '64'
- cmake_args.append('-DSEQAN_SYSTEM_PROCESSOR=x86_64')
- if self.os == 'Windows':
- cmake_args += ['-G', 'Visual Studio 10 Win64']
- print('Executing CMake: "%s"' % (' '.join(cmake_args),), file=sys.stderr)
- popen = subprocess.Popen(cmake_args, cwd=build_dir, env=os.environ.copy())
- out_data, err_data = popen.communicate()
- if popen.returncode != 0:
- print('ERROR during make call.', file=sys.stderr)
- print(out_data, file=sys.stderr)
- print(err_data, file=sys.stderr)
- return 1
- # Execute Make.
- cmake_args = [CMAKE_BINARY, '--build', build_dir, '--target', 'package', '--config', 'Release', '--'] + self.make_args
- print('Building with CMake: "%s"' % (' '.join(cmake_args),), file=sys.stderr)
- popen = subprocess.Popen(cmake_args, cwd=build_dir, env=os.environ.copy())
- out_data, err_data = popen.communicate()
- if popen.returncode != 0:
- print('ERROR during make call.', file=sys.stderr)
- print(out_data, file=sys.stderr)
- print(err_data, file=sys.stderr)
- return 1
- # Copy over the archives.
- self.copyArchives(build_dir)
- # Remove build directory.
- if not self.options.keep_build_dir:
- print('Removing build directory %s' % build_dir, file=sys.stderr)
- shutil.rmtree(build_dir)
- # Build seqan-library.
- #
- # Create build directory.
- if not os.path.exists(build_dir):
- print("Creating build directory %s" % (build_dir,), file=sys.stderr)
- os.mkdir(build_dir)
- # Execute CMake.
- cmake_args = [CMAKE_BINARY, checkout_dir,
- "-DSEQAN_BUILD_SYSTEM=SEQAN_RELEASE_LIBRARY"]
- print('Executing CMake: "%s"' % (' '.join(cmake_args),), file=sys.stderr)
- popen = subprocess.Popen(cmake_args, cwd=build_dir, env=os.environ.copy())
- out_data, err_data = popen.communicate()
- if popen.returncode != 0:
- print('ERROR during make call.', file=sys.stderr)
- print(out_data, file=sys.stderr)
- print(err_data, file=sys.stderr)
- return 1
- # Build Docs
- cmake_args = [CMAKE_BINARY, '--build', build_dir, '--target', 'docs', '--'] + self.make_args
- print('Building with CMake: "%s"' % (' '.join(cmake_args),), file=sys.stderr)
- popen = subprocess.Popen(cmake_args, cwd=build_dir, env=os.environ.copy())
- out_data, err_data = popen.communicate()
- if popen.returncode != 0:
- print('ERROR during make dox call.', file=sys.stderr)
- print(out_data, file=sys.stderr)
- print(err_data, file=sys.stderr)
- # Execute Make.
- cmake_args = [CMAKE_BINARY, '--build', build_dir, '--target', 'package', '--'] + self.make_args
- print('Building with CMake: "%s"' % (' '.join(cmake_args),), file=sys.stderr)
- popen = subprocess.Popen(cmake_args, cwd=build_dir, env=os.environ.copy())
- out_data, err_data = popen.communicate()
- if popen.returncode != 0:
- print('ERROR during make call.', file=sys.stderr)
- print(out_data, file=sys.stderr)
- print(err_data, file=sys.stderr)
- return 1
- self.copyArchives(build_dir)
- # Remove build directory.
- if not self.options.keep_build_dir:
- print('Removing build directory %s' % build_dir, file=sys.stderr)
- shutil.rmtree(build_dir)
-
- def buildApp(self, checkout_dir, build_dir):
- """Build an application."""
- # Create build directory.
- print("Creating build directory %s" % (build_dir,), file=sys.stderr)
- if not os.path.exists(build_dir):
- os.mkdir(build_dir)
- # Execute CMake.
- cmake_args = [CMAKE_BINARY, checkout_dir,# '-G', 'Visual Studio 10',
- "-DCMAKE_BUILD_TYPE=Release",
- "-DSEQAN_BUILD_SYSTEM=APP:%s" % self.name,
- "-DSEQAN_APP_VERSION=%d.%d.%d" %
- (self.major_version, self.minor_version, self.patch_version)]
- # Use appropriate CMake flags for OS and processor.
- if self.word_size == '32':
- cmake_args.append('-DSEQAN_SYSTEM_PROCESSOR=i686')
- if self.os != 'Windows':
- cmake_args.append('-DCMAKE_CXX_FLAGS=-m32')
- else:
- cmake_args += ['-G', 'Visual Studio 10']
- else: # self.word_size == '64'
- cmake_args.append('-DSEQAN_SYSTEM_PROCESSOR=x86_64')
- if self.os == 'Windows':
- cmake_args += ['-G', 'Visual Studio 10 Win64']
- print('Executing CMake: "%s"' % (' '.join(cmake_args),), file=sys.stderr)
- #for key in sorted(os.environ.keys()):
- # print(key, ': ', os.environ[key], file=sys.stderr)
- popen = subprocess.Popen(cmake_args, cwd=build_dir, env=os.environ.copy())
- out_data, err_data = popen.communicate()
- if popen.returncode != 0:
- print('ERROR during make call.', file=sys.stderr)
- print(out_data, file=sys.stderr)
- print(err_data, file=sys.stderr)
- return 1
- # Build and package project.
- make_args = [CMAKE_BINARY, '--build', build_dir, '--target', 'package', '--config', 'Release']
- if self.options.verbosity > 1:
- make_args.insert(1, 'VERBOSE=1')
- print('Building with CMake: "%s"' % (' '.join(make_args),), file=sys.stderr)
- popen = subprocess.Popen(make_args, cwd=build_dir)
- out_data, err_data = popen.communicate()
- if popen.returncode != 0:
- print('ERROR during make call.', file=sys.stderr)
- print(out_data, file=sys.stderr)
- print(err_data, file=sys.stderr)
- return 1
- # Copy out archives.
- self.copyArchives(build_dir)
- # Remove build directory.
- if not self.options.keep_co_dir:
- print('Removing build directory %s' % build_dir, file=sys.stderr)
- shutil.rmtree(build_dir)
-
- def tmpDir(self):
- print('self.tmp_dir = %s' % self.tmp_dir, file=sys.stderr)
- if self.tmp_dir:
- if not os.path.exists(self.tmp_dir):
- os.makedirs(self.tmp_dir)
- return self.tmp_dir
- else:
- return tempfile.mkdtemp()
-
- def execute(self):
- """Execute build step."""
- # Create temporary directory.
- tmp_dir = self.tmpDir()
- print('Temporary directory is %s' % (tmp_dir,), file=sys.stderr)
- # Create Git checkout in temporary directory.
- checkout_dir = os.path.join(tmp_dir, os.path.basename(self.repository_url))
- print('Creating checkout in %s' % checkout_dir, file=sys.stderr)
- git = MinisculeGitWrapper()
- git.clone(self.repository_url, self.treeish, checkout_dir)
- # Create build directory.
- suffix = '-build-%s-%s' % (self.os, self.word_size)
- build_dir = os.path.join(tmp_dir, os.path.basename(self.repository_url) + suffix)
- if os.path.exists(build_dir) and not self.options.keep_build_dir:
- print('Removing build directory %s' % (build_dir,), file=sys.stderr)
- shutil.rmtree(build_dir)
- # insert app tags
- subprocess.call(['../tag-apps.sh', checkout_dir])
- # Perform the build. We have to separate between app and whole SeqAn releases.
- if self.name == 'seqan':
- self.buildSeqAnRelease(checkout_dir, build_dir)
- else:
- self.buildApp(checkout_dir, build_dir)
- if not self.options.keep_co_dir:
- print('Removing checkout directory %s' % (checkout_dir,), file=sys.stderr)
- shutil.rmtree(checkout_dir)
- # Remove temporary directory again.
- if self.tmp_dir and not self.options.keep_tmp_dir:
- # Only remove if not explicitely given and not forced to keep.
- print('Removing temporary directory %s' % (tmp_dir,), file=sys.stderr)
- shutil.rmtree(tmp_dir)
-
-
-def workTags(options):
- """Run the individual steps for tags."""
- # Get the revisions and tag names.
- git = MinisculeGitWrapper()
- #revs_tags = [(rev, tag) for (rev, tag) in git.lsRemote(options.repository_url)
- #if re.match(TAG_RE, tag)]
- tags = [tag for (rev, tag) in git.lsRemote(options.repository_url)
- if re.match(TAG_RE, tag)]
- tags.extend(subprocess.check_output(['../tag-apps.sh', os.getcwd(), 'printonly']).split('\n'))
- # Enumerate all package names that we could enumerate.
- print('tags = %s' % tags, file=sys.stderr)
- print('word_sizes = %s' % options.word_sizes, file=sys.stderr)
- for tag in tags:
- name, version = tag.rsplit('-v', 1)
- #version = version[1:]
- print ('Tag: %s Name: %s Version: %s' % (tag, name, version), file=sys.stdout)
- for word_size in options.word_sizes.split(','):
- # Create build step for this package name.
- pkg_formats = options.package_formats.split(',')
- build_step = BuildStep(options.package_db, tag, name, version, options.os,
- word_size, pkg_formats, options.repository_url,
- options.make_args.split(), options, options.tmp_dir)
- # Check whether we need to build this.
- if not build_step.buildNeeded():
- continue # Skip
- # Execute build step.
- build_step.execute()
- return 0
-
-
-def workTrunk(options):
- """Run the individual steps for the trunk with fake tag name."""
- # Get the revisions and tag names.
- git = MinisculeGitWrapper()
- # Enumerate all package names that we could enumerate.
- print('fake tag = %s' % options.build_trunk_as, file=sys.stderr)
- print('word_sizes = %s' % options.word_sizes, file=sys.stderr)
- name, version = options.build_trunk_as.rsplit('-', 1)
- version = version[1:]
- for word_size in options.word_sizes.split(','):
- # Create build step for this package name.
- pkg_formats = options.package_formats.split(',')
- build_step = BuildStep(options.package_db, 'master', name, version, options.os,
- word_size, pkg_formats, options.repository_url,
- options.make_args.split(), options, options.tmp_dir)
- # Check whether we need to build this.
- if not build_step.buildNeeded():
- continue # Skip
- # Execute build step.
- build_step.execute()
- return 0
-
-
-def workSrcTar(options):
- """Build the source tarball."""
- # Get the revisions and tag names.
- git = MinisculeGitWrapper()
- revs_tags = [(rev, tag) for (rev, tag) in git.lsRemote(options.repository_url)
- if re.match(TAG_RE, tag)]
- # Enumerate all package names that we could enumerate.
- for rev, tag in revs_tags:
- # Build URL.
- name, version = tag.rsplit('-', 1)
- version = version[1:] # remove prefix "v"
- if name != 'seqan':
- continue # only build source tarballs for seqan
- # Create destination file name.
- file_name = '%s-src-%s.tar.gz' % (name, version)
- dest = os.path.join(options.package_db, '%s-src' % name, file_name)
- # Check whether we need to rebuild.
- if os.path.exists(dest):
- print('Skipping %s; already exists.' % dest, file=sys.stderr)
- continue
- # Create temporary directory.
- if options.tmp_dir:
- if not os.path.exists(options.tmp_dir):
- os.makedirs(options.tmp_dir)
- tmp_dir = options.tmp_dir
- else:
- tmp_dir = tempfile.mkdtemp()
- print('Temporary directory is %s' % tmp_dir, file=sys.stderr)
- # Create git checkout in temporary directory.
- checkout_dir = os.path.join(tmp_dir, tag)
- print('Creating checkout in %s' % checkout_dir, file=sys.stderr)
- from_ = os.path.join(tmp_dir, file_name)
- git.clone(options.repository_url, tag, checkout_dir)
- # Create target directory if it does not exist yet.
- if not os.path.exists(os.path.dirname(dest)): # Create directory if necessary.
- os.makedirs(os.path.dirname(dest))
- # Create tarball.
- git.archive(checkout_dir, tag, dest, prefix='%s-%s' % (name, version))
- # Remove temporary directory again.
- if tmp_dir and not options.keep_tmp_dir:
- # Only remove if not explicitely given and not forced to keep.
- print('Removing temporary directory %s' % (tmp_dir,), file=sys.stderr)
- shutil.rmtree(tmp_dir)
- return 0
-
-
-def work(options):
- """Run the steps."""
- if options.src_tar:
- return workSrcTar(options)
- elif not options.build_trunk_as:
- return workTags(options)
- else:
- return workTrunk(options)
-
-
-def main():
- """Program entry point."""
- # Parse Arguments.
- parser = optparse.OptionParser()
-
- parser.add_option('-u', '--repository-url', default=REPOSITORY_URL,
- help='The git repository URL.', metavar='URL')
- parser.add_option('--package-db', dest='package_db', type='string',
- default=DEFAULT_PACKAGE_DB,
- help='Path the directory with the packages.')
-
- parser.add_option('--src-tar', dest='src_tar', action='store_true',
- help='If specified then only the src tarball will be created')
- parser.add_option('-v', dest='verbosity', action='count', default=1,
- help='Increase verbosity.')
- parser.add_option('--package-formats', dest='package_formats',
- default='tar.bz2,zip',
- help='Expect the following packages to be created.')
- parser.add_option('--os', dest='os', help='Expect the packages to be created for this OS.',
- default='Linux')
- parser.add_option('--word-sizes', dest='word_sizes', default='32,64',
- help='Build binaries with the given word sizes')
- parser.add_option('--make-args', dest='make_args', type="string", default='',
- help='Arguments for make.')
- parser.add_option('--tmp-dir', dest='tmp_dir', type='string', default=None,
- help='Temporary directory to use. Use this to reuse the same checkout.')
- parser.add_option('--build-trunk-as', dest='build_trunk_as', type='string', default=None,
- help='Build current trunk with this string as a tag name.')
- parser.add_option('--keep-build-dir', dest='keep_build_dir', default=False,
- action='store_true', help='Keep build directory.')
- parser.add_option('--keep-tmp-dir', dest='keep_tmp_dir', default=False,
- action='store_true', help='Keep temporary directory.')
- parser.add_option('--keep-co-dir', dest='keep_co_dir', default=False,
- action='store_true', help='Keep checkout directory.')
- parser.epilog = ('The program will use the environment variable TMPDIR as '
- 'the directory for temporary files.')
-
- options, args = parser.parse_args()
- if args:
- parser.error('No arguments expected!')
- return 1
-
- options.package_db = os.path.abspath(options.package_db)
-
- # Fire up work.
- print('Running SeqAn Auto Builder', file=sys.stderr)
- return work(options)
diff --git a/util/py_lib/seqan/dddoc/__init__.py b/util/py_lib/seqan/dddoc/__init__.py
deleted file mode 100644
index a576e73..0000000
--- a/util/py_lib/seqan/dddoc/__init__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env python2
-
-import main as m
-import sys
-
-def main():
- sys.exit(m.main(sys.argv))
diff --git a/util/py_lib/seqan/dddoc/core.py b/util/py_lib/seqan/dddoc/core.py
deleted file mode 100644
index a168a16..0000000
--- a/util/py_lib/seqan/dddoc/core.py
+++ /dev/null
@@ -1,1033 +0,0 @@
-#!/usr/bin/env python2
-
-import copy
-import operator
-import os
-import os.path
-import pickle
-import string
-import sys
-
-# Constant for C++ files.
-FILETYPE_CPP = 2
-# Constant for DDDOC files.
-FILETYPE_DDDOC = 1
-# Constant for none of the above.
-FILETYPE_OTHER = 0
-
-SOURCE_ENCODING = 'iso8859-1'
-
-# Extension of C++ files.
-CPP_EXTS = ['c', 'C', 'cpp', 'CPP', 'c++', 'C++', 'h', 'H', 'hpp', 'HPP',
- 'h++', 'H++']
-# Extensions of DDDOC files.
-DDDOC_EXTS = ['dddoc', 'DDDOC']
-
-# List of ignored directory names.
-IGNORED_DIRS = ['CSV', '.svn', 'seeds2', 'find2', 'cmake']
-
-DATA = None
-ID = 0
-
-# Text attribute node keys.
-TEXT_ATTRIBUTE_KEYS = set(['text', 'table', 'tableheader', 'code', 'console', 'section',
- 'subsection', 'image', 'contents', 'note', 'file', 'snippet',
- 'output'])
-
-# Nodes having paths matching the following patterns are considered text
-# container nodes. Their children having only one more component which is in
-# TEXT_ATTRIBUTE_KEYS are processed in a special way. The last component is
-# replaced with 'text' and their content is prefixed by "type=$key:" where $key
-# is the original key. The content of the text container nodes is prefixed with
-# "type=$text:" and moved to a child with key 'text'.
-TEXT_CONTAINER_PATHS = [
- 'Indexpage.*.description',
- 'Page.*.description',
- 'Page.*.summary',
- 'Page.*.glossary.*',
- 'Function.*.example',
- 'Function.*.summary',
- 'Function.*.description',
- 'Function.*.remarks',
- 'Function.*.status',
- 'Class.*.example',
- 'Class.*.summary',
- 'Class.*.description',
- 'Class.*.remarks',
- 'Class.*.status',
- 'Metafunction.*.example',
- 'Metafunction.*.summary',
- 'Metafunction.*.description',
- 'Metafunction.*.remarks',
- 'Metafunction.*.status',
- 'Memfunc.*.example',
- 'Memfunc.*.summary',
- 'Memfunc.*.description',
- 'Memfunc.*.remarks',
- 'Memfunc.*.status',
- 'Memvar.*.example',
- 'Memvar.*.summary',
- 'Memvar.*.description',
- 'Memvar.*.remarks',
- 'Memvar.*.status',
- 'Macro.*.example',
- 'Macro.*.summary',
- 'Macro.*.description',
- 'Macro.*.remarks',
- 'Macro.*.status',
- 'Enum.*.example',
- 'Enum.*.summary',
- 'Enum.*.description',
- 'Enum.*.remarks',
- 'Enum.*.status',
- 'Spec.*.example',
- 'Spec.*.summary',
- 'Spec.*.description',
- 'Spec.*.remarks',
- 'Spec.*.status',
- 'Shortcut.*.example',
- 'Shortcut.*.summary',
- 'Shortcut.*.description',
- 'Shortcut.*.remarks',
- 'Shortcut.*.status',
- 'Tag.*.example',
- 'Tag.*.summary',
- 'Tag.*.description',
- 'Tag.*.remarks',
- 'Tag.*.status',
- 'Typedef.*.example',
- 'Typedef.*.summary',
- 'Typedef.*.description',
- 'Typedef.*.remarks',
- 'Typedef.*.status',
- 'Demo.*.summary',
- 'Demo.*.description',
- 'Demo.*.remarks',
- 'Demo.*.output',
- 'Adaption.*.example',
- 'Adaption.*.summary',
- 'Adaption.*.description',
- 'Adaption.*.remarks',
- 'Adaption.*.status',
- 'Concept.*.example',
- 'Concept.*.summary',
- 'Concept.*.description',
- 'Concept.*.remarks',
- 'Concept.*.status',
- ]
-
-def _pathsMatch(path1, path2):
- """Compare two paths with wildcards."""
- if not type(path1) is list:
- path1 = splitKeys(path1[int(path1[0] == '.'):], '.') # Strip leading '.', if any.
- if not type(path2) is list:
- path2 = splitKeys(path2[int(path2[0] == '.'):], '.')
- if len(path1) != len(path2):
- return False
- for i, p1 in enumerate(path1):
- p2 = path2[i]
- if not (p1 == '*' or p2 == '*' or p1 == p2):
- return False
- return True
-
-
-def transformDddocEntry(entry):
- """Performs the text container node transformations.
-
- Returns list of entries to add if any.
- """
- for path in TEXT_CONTAINER_PATHS:
- if _pathsMatch(path, entry.path) and entry.content: # Is text container.
- new_entry = copy.deepcopy(entry)
- new_entry.content = 'type=text:' + entry.content
- entry.content = ''
- return [new_entry] # Done.
- if not entry.path[-1] in TEXT_ATTRIBUTE_KEYS:
- continue # Skip if last component does not match.
- if not _pathsMatch(path, entry.path[:-1]):
- continue # Skip non-matching path.
- # If we reach here, it is a text node.
- ## print 'TRANSFORMING ', entry
- last = entry.path[-1]
- entry.path = entry.path[:-1]
- entry.content = 'type=' + last + ':' + entry.content
- ## print ' to ', entry
- return [] # Done
- return [] # No updates.
-
-
-class FileCache(object):
- """Simple file contents cache.
-
- Maps paths to (mtime, file contents) pairs.
-
- Attrs:
-
- path Path to the cache file.
- content Dict with cache content mapping file name to pair of mtime
- and data associated with the cache.
- """
-
- def __init__(self, path):
- self.path = path
- self.content = {}
- self._tryLoad()
-
- def _tryLoad(self):
- try:
- with open(self.path, 'rb') as f:
- self.content = pickle.load(f)
- except:
- print >>sys.stderr, 'Could not load cache %s' % self.path
- return False
- print >>sys.stderr, 'Successfully loaded cache %s' % self.path
- return True
-
- def flush(self):
- """Store the cache to its file."""
- try:
- with open(self.path, 'wb') as f:
- pickle.dump(self.content, f)
- except:
- print >>sys.stderr, 'Could not store cache %s' % self.path
- return False
- print >>sys.stderr, 'Successfully stored cache %s' % self.path
- return True
-
- def has_key(self, key):
- """Returns True if the cache has data for this key."""
- return self.content.has_key(key)
-
- def isFresh(self, filename):
- """Returns True if the cache is fresh.
-
- The cache is fresh if the file at the given path is not newer than the
- data in the cache.
- """
- if not self.has_key(filename):
- return False
- mtime = os.stat(filename).st_mtime
- return mtime >= self.content[filename][0]
-
- def get(self, key, defaultValue=None):
- """Return content of the given entry."""
- return self.content.get(key, (None, defaultValue))[1]
-
- def set(self, filename, value):
- """Set cache content and mtime."""
- mtime = os.stat(filename).st_mtime
- self.content[filename] = (mtime, value)
-
-
-class DddocEntry(object):
- def __init__(self, path, content, filename, line_no_begin, line_no_end):
- self.path = path
- self.content = content
- self.filename = filename
- self.line_no_begin = line_no_begin
- self.line_no_end = line_no_end
-
- def __str__(self):
- tpl = ('DddocEntry(path=%s, content=%s, filename=%s, line_no_begin=%s, '
- 'line_no_end=%s)')
- values = (self.path, self.content, self.filename, self.line_no_begin,
- self.line_no_end)
- return tpl % tuple(map(repr, values))
-
- def __repr__(self):
- return self.__str__()
-
- @classmethod
- def cmpPathLocation(klass, lhs, rhs):
- """Comparator, by entry path then filename and line number."""
- lhs_t = (lhs.path, lhs.filename, lhs.line_no_begin)
- rhs_t = (rhs.path, rhs.filename, rhs.line_no_begin)
- if lhs_t < rhs_t:
- return -1
- elif lhs_t > rhs_t:
- return 1
- else:
- return 0
-
-
-def splitKeys(text, delimiters, limit=None, _cache={}):
- """Splitting that considers escaping of keys using quotes.
-
- >>> splitKeys('.Adaption.\'std::string\'.summary')
- ['', 'Adaption', '\'std::string\'', 'summary']
- """
- if '\u0001' in text:
- text = text.split('\u0001', 1)[0] # Remove optional label, used in inheritance.
- if _cache.has_key((text, delimiters)):
- return _cache[(text, delimiters)]
- count = 0
- current = []
- result = []
- str_delimiter = None
- for i in range(0, len(text)):
- # Handle text in strings.
- if str_delimiter:
- if text[i] == str_delimiter:
- str_delimiter = None
- current.append(text[i])
- continue
- elif text[i] in '\'"':
- str_delimiter = text[i]
- current.append(text[i])
- continue
- # Handle non-in-string text.
- if text[i] in delimiters:
- result.append(''.join(current))
- current = []
- count += 1
- if limit and count >= limit:
- result.append(text[i+1:])
- _cache[(text, delimiters)] = result
- return result
- else:
- current.append(text[i])
- result.append(''.join(current))
- _cache[(text, delimiters)] = result
- return result
-
-
-def cleanPath(path_arr):
- """Takes a list with a path and cleans its element.
-
- Cleaning its element currently only consists in removing singel and double
- quotes.
- """
- def _cleanPathElement(x):
- return x.strip().replace('\'', '').replace('"', '')
- return map(_cleanPathElement, path_arr)
-
-
-class FileLoader(object):
- """File loader helper class.
-
- Attrs:
-
- cache FileCache to use for caching.
- entries List of DddocEntries objects.
- """
-
- def __init__(self, cache):
- self.cache = cache
- self.entries = []
-
- def _loadDDDOCFile(self, filename, cache): # TODO(holtgrew): Make Top-Level Function?
- # Try to load from cache.
- if cache.isFresh(filename):
- return cache.get(filename)
-
- # Load file.
- with open(filename, 'rb') as f:
- text = [x.decode(SOURCE_ENCODING).encode("ascii", "xmlcharrefreplace") for x in f.readlines()]
- cache.set(filename, text)
- return text
-
- def _loadCPPFile(self, filename, cache): # TODO(holtgrew): Make Top-Level Function?
- if cache.isFresh(filename):
- return cache.get(filename)
-
- # TODO(holtgrew): This looks overly complicated.
- f = open(filename)
- lines = [x.decode(SOURCE_ENCODING).encode("ascii", "xmlcharrefreplace") for x in f.readlines()]
- f.close()
-
- ret = []
-
- #test for SEQAN_NO_DDDOC
- for line in lines:
- if line.find("SEQAN_NO_DDDOC") >= 0:
- cache.set(filename, ret)
- return ret;
-
-
- incomment = False
- innextcomment = False
- inextract = False
-
- for line in lines:
- line = line.rstrip()
- str_line = ""
- if len(line) == 0:
- if not innextcomment and not incomment:
- str_line = "."
- else:
- str_line = " "
-
- while len(line) > 0 :
- if innextcomment:
- if line[len(line)-1] == "\\" :
- if inextract: str_line += line[: len(line)-1]
- else:
- if inextract: str_line += line
- innextcomment = False
- break
-
- elif incomment:
- pos1 = line.find("*/")
- if pos1 < 0:
- if inextract: str_line += line;
- break;
- else:
- if inextract:
- str_line += line[:pos1];
- line = line[pos1 + 3:];
- else:
- line = line[pos1 + 2:];
- incomment = False;
-
- else:
- pos1 = line.find("/*")
- pos2 = line.find("//")
- pos3 = line.find('"')
- if (pos1 >= 0) and ((pos2 < 0) or (pos1 < pos2)) and ((pos3 < 0) or (pos1 < pos3)):
- pos9 = line.find("*/", pos1 + 2)
- if (len(line) > pos1 + 2):
- inextract = (line[pos1 + 2] == "/") or (line[pos1 + 2] == "*")
- else:
- inextract = False
- if pos9 < 0 :
- if inextract: str_line += line[pos1 + 3:]
- incomment = True
- break
- else:
- if inextract:
- str_line += line[pos1 + 3: pos3]
- line = line[pos9 + 3:]
- else:
- line = line[pos9 + 2:]
-
- elif (pos2 >= 0) and ((pos3 < 0) or (pos2 < pos3)):
- pos2b = pos2 + 2;
- while ((pos2b < len(line)) and ((line[pos2b] == "/") or (line[pos2b] == "*"))):
- pos2b += 1
- inextract = (pos2b > pos2 + 2)
- if line[len(line)-1] == "\\" :
- if inextract: str_line += line[pos2b: len(line)-1]
- innextcomment = True
- else:
- if inextract: str_line += line[pos2b:]
- break
-
- elif pos3 >= 0:
- pos9 = line.find('"', pos3 + 2)
- if pos9 < 0:
- line = line[pos9+1:]
- break
- else:
- break
-
- else:
- break
-
- ret = ret + [str_line]
-
- cache.set(filename, ret)
- return ret
-
- def _getFileType(self, filename): # TODO(holtgrew): Make Top-Level Function?
- """Determines file type from filename.
-
- Determines the file type from the extension of the given filename.
-
- >>> getFileType('test.cpp') == FILETYPE_CPP
- True
- >>> getFileType('path/file.h') == FILETYPE_CPP
- True
- >>> getFileType('test.dddoc') == FILETYPE_DDDOC
- True
-
- Args:
-
- filename Filename to parse.
-
- Returns:
-
- One of {FILETYPE_CPP, FILETYPE_DDDOC, FILETYPE_OTHER}, depending
- on the extension of filename.
- """
- # Get file extension.
- base, ext = os.path.splitext(filename)
- if ext[1:] in CPP_EXTS:
- return FILETYPE_CPP
- elif ext[1:] in DDDOC_EXTS:
- return FILETYPE_DDDOC
- else:
- return FILETYPE_OTHER
-
- def _loadFile(self, filename):
- """Load the file with the given filename.
-
- The line is then split into DDDoc entries, unwrapping entries that span
- more than one line. Finally, the keys are expanded, and surrounding
- whitespace is stripped.
- """
- ## print filename
- # Load file contents, through a cache.
- file_type = self._getFileType(filename)
- if file_type == FILETYPE_CPP:
- text = self._loadCPPFile(filename, self.cache)
- elif file_type == FILETYPE_DDDOC:
- text = self._loadDDDOCFile(filename, self.cache)
- else:
- raise Error("Unknown file type of file %s." % path)
- text.append('.')
- ## print 'LOADING', filename
- ## print '\n'.join(text)
-
- # Process all lines in the input, join lines that do not begin with a
- # dot with the previous ones. This allows the wrapping of lines.
- str = False
- dddoc_entries = [] # [(path, filename, begin line no, end line no)]
- line_no_begin, line_no_end = 1, 1
- for line in text:
- ## if line and line != '.':
- ## print 'LINE', line
- line_no_end += 1
- if not line:
- continue
- if line[0] == '.':
- if str is not False and str[0] == '.' and str != '.' and str.strip(): # Skip empty dummy lines.
- dddoc_entries.append([str, filename, line_no_begin, line_no_end])
- ## print dddoc_entries[-1]
- line_no_begin = line_no_end
- str = line
- if str == '.':
- str = False
- elif str:
- if str[-1] != '\n':
- str += '\n'
- str += line
-
- # Now, expand the keys of dddoc_entries, e.g. dddoc_entries[i][0].
- # TODO(holtgrew): Consider escaping of keys here.
- stack = []
- stack_len_sum = 0
- for entry in dddoc_entries:
- ## print 'ENTRY', entry
- ## print 'stack=%s' % (stack)
- # Split out $key:$value of the entry and $the.$path.$elements from $key.
- maybe_pair = splitKeys(entry[0].strip(), ':', 1)
- if len(maybe_pair) == 2:
- key, value = splitKeys(entry[0].strip(), ':', 1)
- else:
- key, value = entry[0].strip(), ''
- path = splitKeys(key, '.')[1:]
- # Count empty entries in the path.
- ## print ' ', path
- empty_count = reduce(operator.add, [1 for x in path if not x], 0)
- ## print ' empty_count', empty_count
- if empty_count <= len(stack):
- stack = stack[:empty_count]
- stack_len_sum = reduce(operator.add, map(len, stack), 0)
- stack.append(path[empty_count:])
- stack_len_sum += len(stack[-1])
- path = reduce(operator.add, stack, [])
- # Remove any leading and trailing whitespace from value and compute
- # updated begin and end line no.
- line_count = len(value.splitlines())
- value_no_leading = value.lstrip()
- line_count2 = len(value_no_leading.splitlines())
- line_no_begin = entry[2] + line_count - line_count2
- value_no_trailing = value_no_leading.rstrip()
- line_count3 = len(value_no_trailing.splitlines())
- line_no_end = entry[3] - line_count2 + line_count3
-
- # Store the DDDoc entry.
- if path:
- self.entries.append(DddocEntry(cleanPath(path), value_no_trailing, filename, line_no_begin, line_no_end))
- new_entries = transformDddocEntry(self.entries[-1])
- ## if new_entries:
- ## print 'NEW ENTRIES', new_entries
- self.entries += new_entries
- ## print self.entries[-1]
-
- def run(self, search_path):
- """Call parseFile() on files.
-
- All files below search_path will be searched that have file type
- FILETYPE_CPP or FILETYPE_DOC as determined by getFileType().
- Directories with names of IGNORED_DIRS are skipped.
-
- Args:
- search_path String, path to search files under.
- """
- for root, dirs, files in os.walk(search_path):
- # Parse all files.
- for file in files:
- if os.path.basename(file).startswith('.'):
- continue # Skipp hidden files.
- path = os.path.join(root, file)
- if self._getFileType(path) in [FILETYPE_CPP, FILETYPE_DDDOC]:
- self._loadFile(path)
- # Exclude ignored diretories.
- for ignored in IGNORED_DIRS:
- if ignored in dirs:
- dirs.remove(ignored)
-
-
-class DddocTreeNode(object):
- """Represents one entry in the DddocTree.
-
- Attrs:
-
- tree The DddocTree that the node belongs to.
- key The key of this child, last element of path.
- path The full path to the child.
- entry Range [beg, end) of DddocEntry that this node represents.
- children dict with the children as key/value pairs.
- texts Array of strings with the texts.
- """
-
- def __init__(self, tree, key, path, entry, children={}):
- self.tree = tree
- self.key = key
- self.path = path
- self.entry = entry
- self.children = children
- self.texts = []
-
- def text(self, spacer=' '):
- return spacer.join(self.texts)
-
- def __str__(self):
- """Returns dump for the whole tree in a user-readable manner."""
- def _str(node, level=0, prefix=''):
- space = ' ' * level
- if prefix:
- prefix = prefix + ' --> '
- res = '%s %sDddocTreeNode(key=%s, texts=%s)' % (space, prefix, repr(node.key), repr(node.texts))
- for k, child in node.children.iteritems():
- res += '\n' + _str(child, level + 1, k)
- return res
- return _str(self)
-
- def dump(self, stream=sys.stdout):
- """Debug recursive dumping of a tree node."""
- print >>stream, self
-
-
-class DddocTree(object):
- """Tree with the information from the DDDoc contents.
-
- Attrs:
-
- entries The raw entries.
- root The root DddocTreeNode.
- glossary_nodes List of nodes that contain glossary entries. Built
- in finalize().
- """
-
- def __init__(self, entries):
- self.entries = entries
- #for e in self.entries:
- # print e
- self.root = DddocTreeNode(self, 'ROOT', [], (0, 0), self._buildSubtree([], 0, len(entries), 0))
- self.cache = None
- self.glossary_nodes = []
- ## self.root.dump()
- ## for entry in self.entries:
- ## print entry.path, entry.content
-
- def _enableFindCache(self):
- if self.cache is None:
- self.cache = {}
-
- def finalize(self):
- """Called after tree will not be modified any more.
-
- Enables caching and builds some indices.
- """
- self._enableFindCache()
- print >>sys.stderr, 'Indexing Glossary Pages'
- if 'Page' in self.root.children:
- for key, node in self.root.children['Page'].children.iteritems():
- if 'glossary' in node.children:
- self.glossary_nodes.append(node.children['glossary'])
- print >>sys.stderr, ' Found Page.%s' % node.key
-
- def _buildSubtree(self, path, begin_index, end_index, level):
- # First, identify the entries belonging to each node (entry.path[i] are
- # equal for i = level, inductively, also i <= level).
- prev_key = None
- prev_beg = None
- subseqs = []
- for i in range(begin_index, end_index):
- if prev_key != self.entries[i].path[level]:
- if prev_key != None:
- subseqs.append((prev_beg, i))
- prev_key = self.entries[i].path[level]
- prev_beg = i
- if prev_key != None and prev_beg != end_index: # Handle last.
- subseqs.append((prev_beg, end_index))
- # Now, subseqs contains a sequence of contiguous half-open intervals.
- # Each contains the data for one tree node. There is a possibly empty
- # sequence of leading entries with paths of length level + 1 containing
- # the data for the current level node. The rest is for the level below.
- result = {}
- for (b, c) in subseqs:
- assert b != c
- # Split into entries for this and for next level: [a, b); [b, c).
- a = b # [a, b) will be for this vertex.
- while b < c and len(self.entries[b].path) == level + 1:
- b += 1
- # Compute node.
- path = self.entries[a].path[:(level + 1)]
- key = path[level]
- node = DddocTreeNode(self, key, path, (a, b))
- ## print 'new node', key
- for i in range(a, b):
- if self.entries[i].content:
- node.texts.append(self.entries[i].content)
- # Compute subtree.
- node.children = self._buildSubtree(path, b, c, level + 1)
- result[key] = node
- return result
-
- def find(self, path):
- """Query tree for a DddocTreeNode.
-
- The argument path can either be a dot-separated string or a list with
- this information. If path is a string then one optional leading dot is
- optional. Returns None if nothing could be found.
-
- tree.find(['path', 'to', 'node'])
- tree.find('path.to.node')
- tree.find('.path.to.node')
- """
- ## print 'FIND(%s)' % repr(path)
- # Try to retrieve from cache if there is a cache.
- if not self.cache is None:
- if not type(path) is str:
- key = '.'.join(path)
- else:
- key = path
- if self.cache.has_key(key):
- return self.cache[key]
- # Split path if is string, ignore leading dot if any.
- if type(path) is str:
- path = splitKeys(path, '.')
- if path and path[0] == '':
- path = path[1:]
- # Now, query the tree.
- def findRecurse(node, path):
- """Helper function that searches for the node with given path."""
- if not path:
- return node
- if not node.children.has_key(path[0]):
- return None
- return findRecurse(node.children[path[0]], path[1:])
- res = findRecurse(self.root, path)
- if not self.cache is None:
- self.cache['.'.join(path)] = res
- return res
-
-# Paths where the inline summary is moved into a .summary child. See
-# documentation of processInlineSummaries() for details.
-SUMMARY_PATHS = [
- '*.*.param.*',
- '*.*.returns',
- '*.*.tag.*',
- '*.*.value.*',
- '*.*.returns.param.*', # TODO(holtgrew): Used for metafunctions, could be improved.
- 'Adaption.*',
- 'Class.*',
- 'Concept.*',
- 'Demo.*',
- 'Enum.*',
- 'Function.*',
- 'Macro.*',
- 'Memfunc.*',
- 'Metafunction.*',
- 'Shortcut.*',
- 'Spec.*',
- 'Tag.*',
- ]
-
-# TODO(holtgrew): Also use for generateAutomaticReferences()
-
-def _matchTreesInNode(tree, node, path, func, block_paths=[['globals']], level=0):
- """Calls func on nodes matching path."""
- ## print ' ' * level, '_matchTreesInNode(tree', node.path, path, func, level, ')'
- if path:
- if path[0] == '*':
- for child in node.children.itervalues():
- _matchTreesInNode(tree, child, path[1:], func, block_paths, level+1)
- else:
- if node.children.has_key(path[0]):
- _matchTreesInNode(tree, node.children[path[0]], path[1:], func, block_paths, level+1)
- else:
- for block_path in block_paths:
- ## print node.path[:len(block_path)], '==', block_path
- if node.path[:len(block_path)] == block_path:
- return # Path is blocked.
- func(node)
-
-
-def processInlineSummaries(tree, paths):
- """Move inline documentation to .summary subpaths.
-
- The nodes matching the values in path are such that inline values are moved
- to .summary subnodes for greater consistency and lower variance.
-
- E.g. the following:
-
- .Function.f.param.x:This is param x.
-
- will be transformed into
-
- .Function.f.param.x
- ..summary:This is param x.
- """
- # First, collect nodes for the summary transfer.
- collected_nodes = set()
- def f(node):
- if node.texts:
- collected_nodes.add(node)
- for path in paths:
- _matchTreesInNode(tree, tree.root, splitKeys(path, '.'), f)
- # Then, move the inline summaries into a summary node.
- for node in collected_nodes:
- if not 'summary' in node.children: # Create node if necessary.
- summaryNode = DddocTreeNode(tree, 'summary', node.path + ['summary'], (-2,-2))
- node.children['summary'] = summaryNode
- node.children['summary'].texts += node.texts
- node.texts = []
-
-
-def generateAutomaticReferences(tree):
- """Interpret the globals.relations entries."""
- print >>sys.stderr, 'Generating Automatic References'
- relations_node = tree.find('globals.relations')
- if not relations_node:
- return # Empty, do nothing.
-
- # We first collect all automatic links, scheduled to be added later.
- additions = []
- def appendToAdditions(node):
- for node_path in node.texts:
- node_path = splitKeys(node_path, '.')
- ## print ' ' * level, ' ', node_path
- res = tree.find(node_path)
- ## print ' ' * level, ' ', res is not None
- if not res:
- continue # Not found, Skip # TODO(holtgrew): Warning?
- additions.append((res.path + [key], '.'.join(node.path[:2])))
- for key, node in relations_node.children.iteritems():
- ## print 'GENERATE', key, node
- for txt in node.texts:
- path = splitKeys(txt, '.')
- _matchTreesInNode(tree, tree.root, splitKeys(txt, '.'), appendToAdditions)
-
- # Now, add these additions. This circumvents problems leading to infinite
- # recursions.
- for path, text in additions:
- res = tree.find(path)
- if not res:
- parent = tree.find(path[:-1])
- assert parent
- res = DddocTreeNode(tree, path[-1], path, None)
- parent.children[path[-1]] = res
- if not text in res.texts:
- res.texts.append(text)
-
-
-def generateInheritedElements(tree):
- """Push through inheritances."""
- print >>sys.stderr, 'Linking Inherited Entities'
- inherit_node = tree.find('globals.inherit')
- # Contains children: $TARGET_FIELD:$THROUGH_FIELD.$SOURCE_FIELD
-
- all_paths = set()
- depends_on = {}
- inheritance_rules = []
-
- # First build a dependency graph.
- for target_field, child in inherit_node.children.items():
- for txt in child.texts:
- arr = splitKeys(txt, '.')
- through_field = arr[0]
- if len(arr) > 1:
- source_field = arr[1]
- else:
- source_field = target_field
- inheritance_rules.append((target_field, through_field, source_field))
- def registerDependencies(node):
- all_paths.add('.'.join(node.path))
- if not through_field in node.children:
- return
- for path in node.children[through_field].texts:
- pth = '.'.join(node.path)
- depends_on.setdefault(pth, set()).add(path)
- _matchTreesInNode(tree, tree.root, ['*', '*'], registerDependencies)
- ## print 'ALL PATHS', all_paths
-
- # Now, push through references by inheritance for all paths that are not
- # linked to and not completed yet.
- done = set()
- to_do = all_paths - done - set(depends_on.keys())
- while to_do:
- # Process all that are not completed and have no dependencies.
- if not to_do:
- raise Exception('Could not process all dependencies. Cyclic dependencies?')
- # Actually perform the preprocessing.
- for target_path in to_do:
- for target_field, through_field, source_field in inheritance_rules:
- target_node = tree.find(target_path)
- if not through_field in target_node.children:
- continue # Skip if no source children.
- ## print 'TRYING', target_path, through_field, source_field
- for source_path in target_node.children[through_field].texts:
- source_node = tree.find(source_path)
- if not source_field in source_node.children:
- continue # Skip if no source field.
- for path in source_node.children[source_field].texts:
- if not '\u0001' in path: # We use this ugly hack to add the inheritance source here.
- path = path + '\u0001' + '.'.join(source_node.path)
- # If necessary then create child in target node.
- if not target_field in target_node.children:
- target_node.children[target_field] = DddocTreeNode(tree, target_field, target_node.path + [target_field], source_node.children[source_field].entry)
- # Copy over path.
- target_node.children[target_field].texts.append(path)
- ## print ' appending', path
-
- # Clear out the stuff that we completed.
- to_delete = []
- for key in depends_on: # Clear out all done.
- depends_on[key] -= to_do
- if not depends_on[key]:
- to_delete.append(key)
- for key in to_delete:
- del depends_on[key]
- done |= to_do # Add done.
- to_do = all_paths - done - set(depends_on.keys())
-
-
-def removeDuplicateTexts(tree):
- """Remove duplicates from texts members.
-
- Suffixes starting with '\u0001' are ignored for the comparisons
- and strings with these suffixes are preferred.
- """
- ##print 'remove duplicates'
- def recurse(node):
- in_cleaned = {}
- cleaned = []
- for txt in node.texts:
- clean = txt
- pos = txt.find('\u0001')
- if pos != -1:
- clean = txt[:pos]
- ##print cleaned, repr(clean)
- if clean in in_cleaned:
- if '\u0001' in clean and not '\u0001' in cleaned[in_cleaned[clean]]:
- cleaned[in_cleaned[clean]] = txt
- else:
- in_cleaned[clean] = len(cleaned)
- cleaned.append(txt)
- node.texts = cleaned
- for child in node.children.itervalues():
- recurse(child)
- for child in tree.root.children.itervalues():
- recurse(child)
-
-
-# TODO(holtgrew): If needed, this could easily be generalized.
-def buildByTypeAndCatIndex(tree):
- """Build an index into the given DddocTree.
-
- The index will be a two-dimensional dict, mapping (first element of path,
- value of cat field) to a list of nodes in the DddocTree.
- """
- result = {}
- def recurse(result, path, node):
- ## print path, node.path
- if len(path) == 2:
- if node.children.has_key('cat'):
- for cat in node.children['cat'].texts:
- result.setdefault(path[0], {}).setdefault(cat, []).append(node)
- else:
- result.setdefault(path[0], {})[path[1]] = node
- if len(path) < 2:
- for key, child in node.children.iteritems():
- recurse(result, path + [key], child)
- for key, child in tree.root.children.iteritems():
- recurse(result, [key], child)
- ## for k1, v1 in result.iteritems():
- ## for k2, v2 in v1.iteritems():
- ## print 'k1=%s\tk2=%s\tv=%s' % (k1, k2, [x.path for x in v2])
- return result
-
-
-class ErrorLogger(object):
- def __init__(self):
- self.error_count = 0
- def invalidReference(self, txt, locations):
- self.error_count += 1
- if not locations:
- print >>sys.stderr, 'ERROR: Invalid Reference %s in unknown location (sorry).' % txt
- else:
- print >>sys.stderr, 'ERROR: Invalid Reference %s in one of the following locations:' % txt
- for filename, line in locations:
- print >>sys.stderr, ' %s:%s' % (filename, line)
-
-
-class App(object):
- """Application object for DDDoc.
-
- Provides a facade to the functionality of the core module.
-
- Usage:
- app = App()
- app.loadFiles([<files>])
- app.loadFiles([<files>])
- app.loadingComplete()
-
- Attrs:
- data The global state Data object.
- """
-
- def __init__(self):
- """Initialize object members."""
- self.cache = FileCache('dddoc_cache.bin')
- self.file_loader = FileLoader(self.cache)
- self.dddoc_tree = None
- self.error_logger = ErrorLogger()
-
- def loadFiles(self, path):
- """Load the files with the given file name."""
- self.file_loader.run(path)
-
- def loadingComplete(self):
- """Initialize data object.
-
- This method is called after all calls to loadFiles().
- """
- # Save the cache to disk again.
- self.cache.flush()
- # Sort Dddoc Entries and build tree.
- self.file_loader.entries.sort(cmp=DddocEntry.cmpPathLocation)
- self.dddoc_tree = DddocTree(self.file_loader.entries)
- # Generate automatic references.
- generateAutomaticReferences(self.dddoc_tree)
- # Perform inheritance as configured in global configuration.
- generateInheritedElements(self.dddoc_tree)
- # Clean duplicates from 'texts' members
- removeDuplicateTexts(self.dddoc_tree)
- # Move inline summaries into .summary children.
- processInlineSummaries(self.dddoc_tree, SUMMARY_PATHS)
- # Finally, after all modifications, enable caching and build indices in
- # tree.
- self.dddoc_tree.finalize()
-
- def getNextId(self):
- """Returns an identifier.
-
- Each id is only returned once.
- """
- assert False, "For future use."
- self.next_id += 1
- return self.next_id - 1
diff --git a/util/py_lib/seqan/dddoc/dddoc.py b/util/py_lib/seqan/dddoc/dddoc.py
deleted file mode 100644
index 829407e..0000000
--- a/util/py_lib/seqan/dddoc/dddoc.py
+++ /dev/null
@@ -1,703 +0,0 @@
-#!/usr/bin/env python2
-
-import os
-import os.path
-import copy
-import pickle
-import string
-import sys
-
-# Constant for C++ files.
-FILETYPE_CPP = 2
-# Constant for DDDOC files.
-FILETYPE_DDDOC = 1
-# Constant for none of the above.
-FILETYPE_OTHER = 0
-
-# Extension of C++ files.
-CPP_EXTS = ['c', 'C', 'cpp', 'CPP', 'c++', 'C++', 'h', 'H', 'hpp', 'HPP',
- 'h++', 'H++']
-# Extensions of DDDOC files.
-DDDOC_EXTS = ['dddoc', 'DDDOC']
-
-# List of ignored directory names.
-IGNORED_DIRS = ['CSV', '.svn', 'seeds2', 'find2', 'cmake']
-
-DATA = None
-ID = 0
-
-class DddocCache(object):
- def __init__(self, path):
- self.path = path
- self.content = {}
- self._tryLoad()
-
- def _tryLoad(self):
- try:
- with open(self.path, 'rb') as f:
- self.content = pickle.load(f)
- except:
- print >>sys.stderr, 'Could not load cache %s' % self.path
- return False
- print >>sys.stderr, 'Successfully loaded cache %s' % self.path
- return True
-
- def flush(self):
- try:
- with open(self.path, 'wb') as f:
- pickle.dump(self.content, f)
- except:
- print >>sys.stderr, 'Could not store cache %s' % self.path
- return False
- print >>sys.stderr, 'Successfully stored cache %s' % self.path
- return True
-
- def has_key(self, key):
- return self.content.has_key(key)
-
- def isFresh(self, filename):
- if not self.has_key(filename):
- return False
- mtime = os.stat(filename).st_mtime
- return mtime >= self.content[filename][0]
-
- def get(self, key, defaultValue=None):
- return self.content.get(key, (None, defaultValue))[1]
-
- def set(self, filename, value):
- mtime = os.stat(filename).st_mtime
- self.content[filename] = (mtime, value)
-
-
-class App(object):
- """Application object for DDDoc.
-
- Provides a facade to the functionality of the core module.
-
- Usage:
- app = App()
- app.loadFiles([<files>])
- app.loadFiles([<files>])
- app.loadingComplete()
-
- Attrs:
- data The global state Data object.
- """
-
- def __init__(self):
- """Initialize object members."""
- global DATA
- DATA = Data([], 0)
- self.data = DATA
- self.next_id = ID
- self.cache = DddocCache('dddoc_cache.bin')
-
- def loadFiles(self, filenames):
- """Load the files with the given file name."""
- loadFiles(filenames, self.cache)
-
- def loadingComplete(self):
- """Initialize data object.
-
- This method is called after all calls to LoadFiles().
- """
- self.cache.flush()
- self.data.init()
-
- def getNextId(self):
- """Returns an identifier.
-
- Each id is only returned once.
- """
- assert False, "For future use."
- self.next_id += 1
- return self.next_id - 1
-
-
-
-class Line:
- def __init__(self, _nodes, _text, file_name, line_no):
- global ID
-
- self.nodes = _nodes
- self._text = _text.rstrip()
- self.id = ID
- self.file_name = file_name
- self.line_no = line_no
- ID += 1
-
- def __repr__(self):
- return 'Line(%s, %s, %s, %s)' % (repr(self.nodes), repr(self._text), repr(self.file_name), repr(self.line_no))
-
- def name(self, index = 0):
- if len(self.nodes) > index:
- return self.nodes[index]
- else:
- return '(unknown)'
-
- def text(self):
- return self._text
-
-
-class Data:
- def __init__ (self, _lines, _level):
- self.lines = _lines
- self.level = _level
- self.cache = {}
-
- def __repr__(self):
- return 'Data(\n %s,\n%d)' % (',\n '.join(map(repr, self.lines)), self.level)
-
- def init(self):
- self.lines.sort(sortLineCompare)
-
- relations = self["globals.relations"].at_level(1).lines
- for relation in relations:
- to = relation.name(2)
- arr = splitName(relation.text())
- if len(arr) > 0:
- findRelation(self, arr, to)
-
- self.lines.sort(sortLineCompare)
-
- def __getitem__(self, str):
- return self.find(str)
-
- def find(self, str):
- """Find all lines below the given path.
-
- Args:
- str String with a dot separated path to the lines to find.
-
- Returns:
- Data object with the lines below the given path.
- """
- # If possible, return from cache.
- if self.cache.has_key(str):
- return self.cache[str]
-
- arr = splitName(str)
- lines = []
-
- # TODO(holtgrew): Keeping linear code for linear search to be able to fix things quickly.
- if True:
- # Use binary search for finding the first hit.
- def isHit(line, arr, level):
- """Return True iff arr matches the key of line, from the given level on."""
- i = 0
- while (i < len(arr)) and (i + level < len(line.nodes)) and (arr[i] == line.nodes[i + level]):
- i += 1
- return i == len(arr)
-
- # Use binary search to find the first hit.
- query = arr
- lo = 0
- hi = len(self.lines)
- while lo < hi:
- mid = (lo + hi) // 2
- slice = self.lines[mid].nodes[self.level:self.level + len(query)]
- if slice < query:
- lo = mid + 1
- else:
- hi = mid
- result = lo
-
- # Output all consecutive hits, if any.
- if result < len(self.lines) and isHit(self.lines[result], arr, self.level):
- for line in self.lines[result:]:
- if isHit(line, arr, self.level):
- lines.append(line)
- else:
- break
- else:
- # Use linear search for finding the first hit. Deactivated for now.
- maxi = 0
- for line in self.lines:
- i = 0
- while (i < len(arr)) and (i + self.level < len(line.nodes)) and (arr[i] == line.nodes[i + self.level]):
- i += 1
- if i == len(arr):
- lines.append(line)
-
- elif maxi > i:
- break
- maxi = i
-
-
- data = Data(lines, self.level + len(arr))
- # Cache result.
- self.cache[str] = data
- return data
-
- def at_level(self, level = 0):
- lines = []
- for line in self.lines:
- if len(line.nodes) == self.level + level:
- lines.append(line)
-
- data = Data(lines, self.level + level)
- return data
-
- def sub_level(self, level = 1):
- lines = []
- for line in self.lines:
- if len(line.nodes) >= self.level + level:
- lines.append(line)
-
- data = Data(lines, self.level + level)
- return data
-
- def by_occ(self):
- lines = copy.copy(self.lines)
- lines.sort(sortLinesByOcc)
- data = Data(lines, self.level)
- return data
-
- def empty(self):
- return len(self.lines) == 0
-
- def name(self, index = 0):
- if len(self.lines) > 0:
- return self.lines[0].name(index)
- return '(empty)'
-
- def text(self):
- str = ''
- for line in self.at_level(0).lines:
- if (str != ''): str += '\n'
- str += line.text()
- return str
-
- def keys(self, level = 0):
- dict = {}
- for line in self.lines:
- if len(line.nodes) > self.level + level:
- dict[line.nodes[self.level + level]] = 1
-
- arr = dict.keys()
- arr.sort()
- return arr
-
- def keys_by_occ(self, level = 0):
- dict = {}
- for line in self.lines:
- if len(line.nodes) > self.level + level:
- key = line.nodes[self.level + level]
- if not dict.has_key(key) or (dict[key] > line.id):
- dict[key] = line.id
-
- dict2 = {}
- for key in dict:
- dict2[dict[key]] = key
-
- arr2 = dict2.keys()
- arr2.sort()
-
- arr = []
- for i in arr2:
- arr.append(dict2[i])
-
- return arr
-
-
-################################################################################
-
-def sortLineCompare(left, right):
- l = left.nodes
- r = right.nodes
-
- i = 0
- while (i < len(l)) and (i < len(r)):
- ret = cmp(l[i], r[i])
- if ret != 0:
- return ret
- i += 1
-
- if len(l) < len(r): return -1
- elif len(l) > len(r): return 1
- elif left.id < right.id: return -1
- else: return 1
-
-################################################################################
-
-def sortLinesByOcc(left, right):
- if left.id < right.id: return -1
- else: return 1
-
-################################################################################
-
-def findRelation(data, arr, to):
- global DATA
-
- if len(arr) > 0:
- if (arr[0] == '*'):
- sub_data = data.sub_level(1)
- else:
- lines = []
- for line in data.lines:
- if line.name(data.level) == arr[0]:
- lines.append(line)
- sub_data = Data(lines, data.level + 1)
-
- findRelation(sub_data, arr[1:], to)
-
- else:
- for line in data.at_level(0).lines:
- text = line.name(0) + '.' + line.name(1)
- entry = splitName(line.text())
- entry = entry[:2] + [to]
- DATA.lines.append(Line(entry, text, '<through-relation>', 0))
-
-################################################################################
-
-def clearData():
- global DATA
- DATA = Data([], 0)
- global ID
- ID = 0
-
-################################################################################
-
-def loadDDDOCFile(filename, cache):
- if cache.isFresh(filename):
- return cache.get(filename)
-
- f = open(filename)
- text = f.readlines()
- f.close()
-
- cache.set(filename, text)
- return text
-
-################################################################################
-
-def loadCPPFile(filename, cache):
- if cache.isFresh(filename):
- return cache.get(filename)
-
- f = open(filename)
- lines = f.readlines()
- f.close()
-
- ret = []
-
- #test for SEQAN_NO_DDDOC
- for line in lines:
- if line.find("SEQAN_NO_DDDOC") >= 0:
- cache.set(filename, ret)
- return ret;
-
-
- incomment = False
- innextcomment = False
- inextract = False
-
- for line in lines:
- line = line.rstrip()
- str_line = ""
- if len(line) == 0:
- if not innextcomment and not incomment:
- str_line = "."
- else:
- str_line = " "
-
- while len(line) > 0 :
- if innextcomment:
- if line[len(line)-1] == "\\" :
- if inextract: str_line += line[: len(line)-1]
- else:
- if inextract: str_line += line
- innextcomment = False
- break
-
- elif incomment:
- pos1 = line.find("*/")
- if pos1 < 0:
- if inextract: str_line += line;
- break;
- else:
- if inextract:
- str_line += line[:pos1];
- line = line[pos1 + 3:];
- else:
- line = line[pos1 + 2:];
- incomment = False;
-
- else:
- pos1 = line.find("/*")
- pos2 = line.find("//")
- pos3 = line.find('"')
- if (pos1 >= 0) and ((pos2 < 0) or (pos1 < pos2)) and ((pos3 < 0) or (pos1 < pos3)):
- pos9 = line.find("*/", pos1 + 2)
- if (len(line) > pos1 + 2):
- inextract = (line[pos1 + 2] == "/") or (line[pos1 + 2] == "*")
- else:
- inextract = False
- if pos9 < 0 :
- if inextract: str_line += line[pos1 + 3:]
- incomment = True
- break
- else:
- if inextract:
- str_line += line[pos1 + 3: pos3]
- line = line[pos9 + 3:]
- else:
- line = line[pos9 + 2:]
-
- elif (pos2 >= 0) and ((pos3 < 0) or (pos2 < pos3)):
- pos2b = pos2 + 2;
- while ((pos2b < len(line)) and ((line[pos2b] == "/") or (line[pos2b] == "*"))):
- pos2b += 1
- inextract = (pos2b > pos2 + 2)
- if line[len(line)-1] == "\\" :
- if inextract: str_line += line[pos2b: len(line)-1]
- innextcomment = True
- else:
- if inextract: str_line += line[pos2b:]
- break
-
- elif pos3 >= 0:
- pos9 = line.find('"', pos3 + 2)
- if pos9 < 0:
- line = line[pos9+1:]
- break
- else:
- break
-
- else:
- break
-
- ret = ret + [str_line]
-
- cache.set(filename, ret)
- return ret
-
-################################################################################
-
-def getFileType(filename):
- """Determines file type from filename.
-
- Determines the file type from the extension of the given filename.
-
- >>> getFileType('test.cpp') == FILETYPE_CPP
- True
- >>> getFileType('path/file.h') == FILETYPE_CPP
- True
- >>> getFileType('test.dddoc') == FILETYPE_DDDOC
- True
-
- Args:
-
- filename Filename to parse.
-
- Returns:
-
- One of {FILETYPE_CPP, FILETYPE_DDDOC, FILETYPE_OTHER}, depending
- on the extension of filename.
- """
- # Get file extension.
- base, ext = os.path.splitext(filename)
- if ext[1:] in CPP_EXTS:
- return FILETYPE_CPP
- elif ext[1:] in DDDOC_EXTS:
- return FILETYPE_DDDOC
- else:
- return FILETYPE_OTHER
-
-
-################################################################################
-
-def loadFile(filename, cache):
- file_type = getFileType(filename)
- if (file_type == 2): return loadCPPFile(filename, cache)
- elif (file_type == 1): return loadDDDOCFile(filename, cache)
- else: raise "unknown file type"
-
-
-################################################################################
-
-def parseFile(filename, cache):
- text = loadFile(filename, cache)
- text.append('.')
-
- context = [[]]
- str = False
-
- line_no = 0
- for line in text:
- line_no += 1
- if line != '':
- if line[0] == '.':
- parseString(str, context, filename, line_no)
- str = line
- elif str:
- if str[len(str)-1] != '\n': str += '\n'
- str += line
-
-################################################################################
-
-def parseString(str, context, file_name, line_no):
- global DATA
-
- if not str or (str == '.'):
- return [[]]
-
- level = 0
- while (level < len(str)) and (str[level] == '.'):
- level += 1
-
- str = str[level:]
-
- if (level < len(context)):
- del context[level:]
-
- if len(context) > 0:
- entry = copy.copy(context[len(context) - 1])
- else:
- entry = []
-
- key = ''
- text = ''
-
- pos = 0
- is_escaped = False
- c_quoted = ''
- while (pos < len(str)):
- c = str[pos]
- if c == "\x0d":
- pos += 1
- continue
- if c_quoted != "":
- if c_quoted == c: c_quoted = ""
- else: key += c
- elif is_escaped:
- key += c
- is_escaped = False
- else:
- if c == '\\': is_escaped = True
- elif c in ['"', "'"]: c_quoted = c
- elif (c == ':'):
- key = str[0:pos]
- text = str[pos+1:]
- break
- else: key += c
-
- pos += 1
-
- entry += splitName(key)
- DATA.lines.append(Line(entry, text, file_name, line_no))
- context.append(entry)
-
-
-################################################################################
-
-def splitName(line):
- pos = 0
- key = ""
- c_quoted = ""
- is_escaped = False
- li = []
- while (pos < len(line)):
- c = line[pos]
- if c_quoted != "":
- if c_quoted == c: c_quoted = ""
- else: key += c
- elif is_escaped:
- key += c
- is_escaped = False
- else:
- if c == '\\': is_escaped = True
- elif c in ['"', "'"]: c_quoted = c
- elif c == '.':
- if key != "":
- li.append(key)
- key = ""
- elif c == '|':
- if key != "":
- li.append(key)
- key = ""
- rest = line[pos+1:]
- if len(rest)>0: li.append(rest)
- break;
- elif c != '\n':
- key += c
-
- pos += 1
-
- if key != "": li.append(key)
-
- return li
-
-
-def splitUrl(line):
- """Splits a tuple at separator characters.
-
- The separator character is '|'. These characters can be escaped
- using the backslash sign '\', entries can also be quoted.
-
- >>> splitUrl('a|b|c')
- ['a', 'b', 'c']
- >>> splitUrl('a\|b|c')
- ['a|b', 'c']
- >>> splitUrl('"a|b"|c')
- ['a|b', 'c']
-
- Args:
- line String to split.
-
- Returns
- List with strings, split at | symbols, excluding these symbols
- themselves.
- """
- pos = 0
- key = ""
- c_quoted = ""
- is_escaped = False
- li = []
- while (pos < len(line)):
- c = line[pos]
- if c_quoted != "":
- if c_quoted == c: c_quoted = ""
- else: key += c
- elif is_escaped:
- key += c
- is_escaped = False
- else:
- if c == '\\': is_escaped = True
- elif c in ['"', "'"]: c_quoted = c
- elif c == '|':
- if key != "":
- li.append(key)
- key = ""
- elif c != '\n':
- key += c
-
- pos += 1
-
- if key != "": li.append(key)
-
- return li
-
-
-def loadFiles(search_path, cache):
- """Call parseFile() on files.
-
- All files below search_path will be searched that have file type
- FILETYPE_CPP or FILETYPE_DOC as determined by getFileType().
- Directories with names of IGNORED_DIRS are skipped.
-
- Args:
- search_path String, path to search files under.
- """
- for root, dirs, files in os.walk(search_path):
- # Parse all files.
- for file in files:
- if os.path.basename(file).startswith('.'):
- continue # Skipp hidden files.
- path = os.path.join(root, file)
- if getFileType(path) in [FILETYPE_CPP, FILETYPE_DDDOC]:
- parseFile(path, cache)
- # Exclude ignored diretories.
- for ignored in IGNORED_DIRS:
- if ignored in dirs:
- dirs.remove(ignored)
diff --git a/util/py_lib/seqan/dddoc/html.py b/util/py_lib/seqan/dddoc/html.py
deleted file mode 100644
index c08fe33..0000000
--- a/util/py_lib/seqan/dddoc/html.py
+++ /dev/null
@@ -1,903 +0,0 @@
-#!/usr/bin/env python2
-
-import sys
-import os
-import os.path
-import shutil
-import json
-import string
-import StringIO
-import re
-import datetime
-import time
-
-import pyratemp
-import json
-
-import core
-
-# TODO(holtgrew): Take this from dddoc tree ;)
-TPL_FILES = [
- # Javascript Files
- 'js/jquery-1.3.2.min.js',
- 'js/jquery-effect.js',
- 'js/hierarchy-tree.js',
- 'js/seqan-dddoc.js',
- 'js/main.js',
- 'js/searchdoc.js',
- 'js/excanvas.compiled.js',
- # CSS Files
- 'css/main.css',
- 'css/panel.css',
- 'css/reset.css',
- 'css/hierarchy-tree.css',
- # Images
- 'favicon.ico',
- 'i/link.png',
- 'i/arrows.png',
- 'i/results_bg.png',
- 'i/tree_bg.png',
- 'i/seqan_logo.png',
- # Search Panel
- 'panel/tree.js',
- 'panel/search_index.js',
- 'panel/index.html'
- ]
-
-SITE_TITLE = 'SeqAn'
-FRONT_PAGE = 'files/index.html'
-FILE_DIRS = ['images']
-
-TYPE_CLASS = 1
-TYPE_FUNCTION = 2
-TYPE_FILE = 3
-
-def escapeFiles(text):
- """Escaping of file names."""
- text = text.replace("_", "__")
-
- ret = ""
- for i in range(len(text)):
- if (text[i] >= 'A') and (text[i] <= 'Z'):
- ret += "_"
- ret += text[i]
-
- ret = ret.replace("\t", "_09")
- ret = ret.replace("\n", "_0a")
- ret = ret.replace("!", "_21")
- ret = ret.replace("\"", "_22")
- ret = ret.replace("#", "_23")
- ret = ret.replace("$", "_24")
- ret = ret.replace("%", "_25")
- ret = ret.replace("&", "_26")
- ret = ret.replace("'", "_27")
- ret = ret.replace("(", "_28")
- ret = ret.replace(")", "_29")
- ret = ret.replace("*", "_2a")
- ret = ret.replace("+", "_2b")
- ret = ret.replace("/", "_2f")
- ret = ret.replace(":", "_3a")
- ret = ret.replace(",", "_2c")
- ret = ret.replace("<", "_3c")
- ret = ret.replace(">", "_3e")
- ret = ret.replace("?", "_3f")
- ret = ret.replace("\\", "_5c")
- ret = ret.replace("|", "_7c")
- ret = ret.replace(" ", "+")
-
- if not ret or ret[0] == '_':
- return ret
- else:
- return '.' + ret
-
-
-def translate(text):
- """Replaces some escape sequences with HTML/XML entities."""
- # Line Breaks.
- text = text.replace("\\br", "<br>")
-
- # Umlaute
- text = text.replace("\\\"a", "ä")
- text = text.replace("\\\"o", "ö")
- text = text.replace("\\\"u", "ü")
- text = text.replace("\\\"A", "Ä")
- text = text.replace("\\\"O", "Ö")
- text = text.replace("\\\"U", "Ü")
- text = text.replace("\\3", "ß")
- text = text.replace("\\ss", "ß")
-
- # Escaping Special Characters
- text = text.replace("\\colon", ":")
- text = text.replace("\\dot", ".")
- text = text.replace("\\at", "@")
- text = text.replace("\\pipe", "|")
- text = text.replace("\\dollar", "$")
- text = text.replace("\\quote", "\"")
- text = text.replace("\\backslash", "\\")
-
- # Comparisons
- text = text.replace("\\neq", "≠")
- text = text.replace("\\approx", "≈")
- text = text.replace("\\equiv", "≡")
- text = text.replace("\\leq", "≤")
- text = text.replace("\\geq", "≥")
-
- # Binary Operators
- text = text.replace("\\pm", "±") #"<font face=\"symbol\">±</font>")
- text = text.replace("\\times", "×") #"<font face=\"symbol\">´</font>")
- text = text.replace("\\cdot", "·") #"<font face=\"symbol\">×</font>")
- text = text.replace("\\div", "÷") #"<font face=\"symbol\">¸</font>")
- text = text.replace("\\ast", "*")
- text = text.replace("\\circ", "○") #"<font face=\"symbol\">°</font>")
- text = text.replace("\\otimes", "<font face=\"symbol\">Ä</font>")
- text = text.replace("\\oplus", "<font face=\"symbol\">Å</font>")
-
- # Logic
- text = text.replace("\\exists", "<font face=\"symbol\">$</font>")
- text = text.replace("\\forall", "<font face=\"symbol\">"</font>")
- text = text.replace("\\neg", "<font face=\"symbol\">Ø</font>")
- text = text.replace("\\vee", "<font face=\"symbol\">Ú</font>")
- text = text.replace("\\wedge", "<font face=\"symbol\">Ù</font>")
-
- # Set Theory
- text = text.replace("\\in", "<font face=\"symbol\">Î</font>")
- text = text.replace("\\ni", "<font face=\"symbol\">'</font>")
- text = text.replace("\\notin", "<font face=\"symbol\">Ï</font>")
- text = text.replace("\\cup", "<font face=\"symbol\">È</font>")
- text = text.replace("\\cap", "<font face=\"symbol\">Ç</font>")
- text = text.replace("\\subset", "<font face=\"symbol\">Ì</font>")
- text = text.replace("\\supset", "<font face=\"symbol\">É</font>")
- text = text.replace("\\subseteq", "<font face=\"symbol\">Í</font>")
- text = text.replace("\\supseteq", "<font face=\"symbol\">Ê</font>")
-
- # Arrows
- text = text.replace("\\leftarrow", "←")
- text = text.replace("\\rightarrow", "→")
- text = text.replace("\\leftrightarrow", "↔")
- text = text.replace("\\Leftarrow", "<font face=\"symbol\">Ü</font>")
- text = text.replace("\\Rightarrow", "<font face=\"symbol\">Þ</font>")
- text = text.replace("\\Leftrightarrow", "<font face=\"symbol\">Û</font>")
-
- # Special Chars
- text = text.replace("\\infty", "∞")
- text = text.replace("\\ldots", "...")
- text = text.replace("\\squared", "²")
- text = text.replace("\\cubic", "³")
-
- # Greek
- text = text.replace("\\Gamma", "Γ")
- text = text.replace("\\Delta", "Δ")
- text = text.replace("\\Theta", "Θ")
- text = text.replace("\\Lambda", "Λ")
- text = text.replace("\\Xi", "Ξ")
- text = text.replace("\\Pi", "Π")
- text = text.replace("\\Sigma", "Σ")
- text = text.replace("\\Phi", "Φ")
- text = text.replace("\\Psi", "Ψ")
- text = text.replace("\\Omega", "Ω")
-
- text = text.replace("\\alpha", "α")
- text = text.replace("\\beta", "β")
- text = text.replace("\\gamma", "γ")
- text = text.replace("\\delta", "δ")
- text = text.replace("\\epsilon", "ε")
- text = text.replace("\\zeta", "ζ")
- text = text.replace("\\eta", "η")
- text = text.replace("\\theta", "θ")
- text = text.replace("\\iota", "ι")
- text = text.replace("\\kappa", "κ")
- text = text.replace("\\lambda", "λ")
- text = text.replace("\\mu", "μ")
- text = text.replace("\\nu", "ν")
- text = text.replace("\\xi", "ξ")
- text = text.replace("\\omicron", "ο")
- text = text.replace("\\pi", "π")
- text = text.replace("\\rho", "ρ")
- text = text.replace("\\varsigma", "ς")
- text = text.replace("\\sigma", "σ")
- text = text.replace("\\tau", "τ")
- text = text.replace("\\upsilon", "υ")
- text = text.replace("\\phi", "φ")
- text = text.replace("\\chi", "χ")
- text = text.replace("\\psi", "ψ")
- text = text.replace("\\omega", "ω")
-
- return text
-
-def getPagePath(cat, subcat, prefix=None):
- result = cat.upper() + escapeFiles(subcat) + ".html"
- if prefix:
- result = os.path.join(prefix, result)
- return result
-
-
-def getIndexPagePath(tree, cat, prefix=None):
- if tree.find('globals.project.indexcategory').text().startswith(cat):
- result = 'index.html'
- else:
- result = "INDEXPAGE" + escapeFiles(cat) + ".html"
- if prefix:
- result = os.path.join(prefix, result)
- return result
-
-
-class TplDocsCreator(object):
- """Contains the code for the template-driven documentation creation.
-
- This
-
- Attrs:
-
- tpl_path Path to and including the tpl directory.
- outPath Destination path for the documentation. Existing files are
- overwritten there.
- """
-
- def __init__(self, error_logger, tree, tpl_path, out_path, include_dirs):
- """Initialize the DocsCreator object.
-
- Args:
-
- tree core.DddocTree to use as information.
- tpl_path Path to and including the tpl directory.
- out_path Destination path for the documentation. Existing files are
- overwritten there.
- """
- self.error_logger = error_logger
- self.tree = tree
- self.tpl_path = tpl_path
- self.out_path = out_path
- self.include_dirs = include_dirs
- self.html_helper = HtmlHelper(self.error_logger, self.tree, out_path, self.include_dirs)
-
- def good(self):
- return True
-
- def copyTemplates(self):
- """Copy template files.
-
- The files in TPL_FILE are copied verbatimly.
- """
- print >>sys.stderr, 'Copying Template Files'
- for path in TPL_FILES:
- # Get target path name.
- targetPath = os.path.join(self.out_path, os.path.dirname(path))
- if not os.path.exists(targetPath): # Make sure targetPath exists.
- os.makedirs(targetPath)
- # Copy file.
- srcPath = os.path.join(self.tpl_path, path)
- destPath = os.path.join(self.out_path, path)
- print >>sys.stderr, ' %s => %s' % (srcPath, destPath)
- shutil.copyfile(srcPath, destPath)
-
- def createRootIndexPage(self):
- """Create the file /index.html.
-
- The file is basically copied from tpl, but some small replacements are
- done using Python string templates.
- """
- print >>sys.stderr, 'Creating Index Page'
- srcPath = os.path.join(self.tpl_path, 'index.html')
- destPath = os.path.join(self.out_path, 'index.html')
- with open(srcPath, 'rb') as f:
- contents = f.read()
- template = string.Template(contents)
- mapping = {'site_title': SITE_TITLE,
- 'front_page': FRONT_PAGE}
- with open(destPath, 'wb') as f:
- f.write(template.substitute(mapping))
-
- def _registerCategories(self, cat_type, search_index, long_search_index, infos):
- """Helper function for createPanelSearchIndex().
-
- Register all categories of type cat_type in search_index,
- long_search_index, infos.
- """
- if not self.tree.find([cat_type]):
- return # Nothing to document here!
- # TODO(holtgrew): This distinction is bogus and an artefact of the JS expected by the rdoc JS.
- if cat_type == 'Function':
- type_num = TYPE_FUNCTION
- else:
- type_num = TYPE_CLASS
- # Index functions.
- for name, node in sorted(self.tree.find([cat_type]).children.iteritems()):
- ## if node.children.has_key('hidefromindex'):
- ## continue # Skip those that are not to appear in search.
- summary = ''
- if node.children.has_key('summary') and node.children['summary'].texts:
- if not ':' in node.children['summary'].texts[0]:
- continue
- summary = self.html_helper.translateMarkup(node.children['summary'].texts[0].split(':', 1)[1])
- summary = summary.replace('&', '&').replace('"', '"')
- summary = re.sub('<.*?>', '', summary)
- summary = summary[:100] # TODO(holtgrew): Smarter trimming?
- # Get title of entry type.
- type_ = ' ' + ', '.join(self.tree.find(['globals', 'categories', node.path[0]]).texts)
- search_index.append(name.lower())
- long_search_index.append(name.lower()) # TODO(holtgrew): Could be parent, ...
- # Build filename.
- filename = getPagePath(cat_type, name, 'files')
- # Build list of include headers.
- includes = ''
- if node.children.has_key('include'):
- includes = ' ' + ', '.join(node.children['include'].texts)
- if type_num == TYPE_FUNCTION:
- name = name + '()'
- infos.append([name, # Entity name.
- includes, # Info
- filename, # klass.path
- type_,
- summary,
- type_num])
- ## print infos[-1]
-
- def createPanelSearchIndex(self):
- """Create the file /panel/search_index.js.
-
- This file contains a dictionary with the entries 'searchIndex',
- 'longSearchIndex, 'info' that are used by searchdoc.js for providing the
- search index.
- """
- print >>sys.stderr, 'Creating Search Index'
- destPath = os.path.join(self.out_path, 'panel', 'search_index.js')
- search_index = []
- long_search_index = []
- info = []
- # Get category types to index from DddocTree tree and build the index
- # data for this.
- items = self.tree.find('globals.indexes').children.items()
- key_entries = [(x[0], x[1].entry) for x in items if x[1].entry]
- key_linenos = [(x[0], self.tree.entries[x[1][0]].line_no_begin) for x in key_entries]
- cats = [x[0] for x in sorted(key_linenos, key=lambda a:a[1])]
- for cat_type in cats:
- self._registerCategories(cat_type, search_index, long_search_index, info)
- with open(destPath, 'wb') as f:
- s = 'var search_data = {"index":{"searchIndex":%s,"longSearchIndex":%s,"info":%s}};'
- f.write(s % (json.dumps(search_index), json.dumps(long_search_index), json.dumps(info)))
-
- def createPanelTree(self):
- """Create the file /panel/tree.js.
-
- This file contains the JavaScript information for building the naviation
- tree in the left frame.
- """
- print >>sys.stderr, 'Creating Panel Tree'
- # Translate cat/element type from internal to user-readable.
- node = self.tree.find('globals.indexes')
- cats = [(k, v.text(), v) for k, v in node.children.iteritems() if not v.children.has_key('hidefromindex')]
- def getLocation(x):
- return (self.tree.entries[x[2].entry[0]].filename,
- self.tree.entries[x[2].entry[0]].line_no_begin)
- cats.sort(key=getLocation)
- ## print cats
- trees_data = []
- index = core.buildByTypeAndCatIndex(self.tree)
- for cat, cat_title, cat_node in cats:
- ## print 'XXX', cat, cat_title
- ## if cat not in cats:
- ## continue # Skip if not in globals.indexes.
- ## print 'cat =', cat
- subcat_nodes = []
- for subcat in sorted(index[cat].keys()):
- if type(index[cat][subcat]) is core.DddocTreeNode:
- node = index[cat][subcat]
- if 'hidefromindex' in node.children:
- continue # Skip if not to show in tree/index.
- ## print cat, node.key
- filename = getPagePath(cat, node.key, 'files')
- ## print filename
- subcat_node = [subcat, filename, '', []] # is uncategorized element
- ## print 'subcat_node = ', subcat_node
- else: # is category
- assert type(index[cat][subcat]) is list
- element_nodes = []
- for node in sorted(index[cat][subcat]):
- if 'hidefromindex' in node.children:
- continue # Skip if not to show in tree/index.
- filename = getPagePath(cat, node.key, 'files')
- ## print filename
- element_nodes.append([node.key, filename, '', []])
- ## print 'element_node = ', [node.key, '', '', []]
- filename = getIndexPagePath(self.tree, cat, 'files')
- anchor = self.html_helper.toGlossaryAnchor(subcat)
- link = filename + '#' + anchor
- subcat_node = [subcat, link, '', element_nodes]
- ## print 'subcat_node = ', subcat_node
- subcat_nodes.append(subcat_node)
- filename = getIndexPagePath(self.tree, cat, 'files')
- trees_data.append([cat_title, filename, '', subcat_nodes])
- if cat_node.children.has_key('hidefromindex'):
- continue
- # Write out tree as JavaScript/JSON.
- ## print 'trees_data =', trees_data
- if not os.path.exists(os.path.join(self.out_path, 'panel')):
- os.makedirs(os.path.join(self.out_path, 'panel'))
- destPath = os.path.join(self.out_path, 'panel', 'tree.js')
- with open(destPath, 'wb') as f:
- f.write('var tree = %s;' % json.dumps(trees_data))
-
-
-class MarkupParser(object):
- def __init__(self, error_logger, tree, html):
- self.error_logger = error_logger
- self.tree = tree
- self.html = html
-
- def parse(self, txt):
- """Transform Markup into a parse-tree."""
- ## print 'parse(%s)' % txt
- curr = 0
- result = []
- for m in re.finditer('\$|@|\|', txt):
- ## print 'curr=%d, m.start(0)=%d' % (curr, m.start(0))
- if m.start(0) < curr:
- continue # Skip if already processed.
- if curr != m.start(0):
- result.append(('TEXT', txt[curr:m.start(0)]))
- if txt[m.start(0)] == '$':
- end_pos = txt.find('$', m.start(0) + 1)
- if end_pos == -1: end_pos = len(txt)
- result.append(('PRE', txt[m.start(0) + 1:end_pos]))
- curr = end_pos + 1
- elif txt[m.start(0)] == '@':
- end_pos = txt.find('@', m.start(0) + 1)
- if end_pos == -1: end_pos = len(txt)
- if m.start(0) + 1 < end_pos:
- result.append(('LINK', txt[m.start(0) + 1:end_pos]))
- curr = end_pos + 1
- elif txt[m.start(0)] == '|':
- end_pos = m.start(0) + 1
- result.append(('CELL_SPLITTER', None))
- curr = end_pos
- if curr < len(txt):
- result.append(('TEXT', txt[curr:]))
- ## print txt, result
- ## print 'DONE'
- ## print ' ', result
- return result
-
- def toHtml(self, parseTree, node=None):
- """Translate parse tree into HTML."""
- ## print 'toHtml'
- result = []
- for type_, txt in parseTree:
- ## print ' ', type_, txt
- if type_ == 'TEXT':
- result.append(pyratemp.escape(txt))
- elif type_ == 'LINK':
- result.append(self.html.pageLink(txt, node=node))
- elif type_ == 'PRE':
- result += ['<tt>', pyratemp.escape(txt), '</tt>']
- elif type_ == 'CELL_SPLITTER':
- result.append('|')
- else:
- raise Error('Invalid type: %s' % type_)
- ## print 'DONE'
- ## print parseTree, result
- return ''.join(result)
-
-
-class HtmlHelper(object):
- def __init__(self, error_logger, tree, out_path, include_dirs):
- self.error_logger = error_logger
- self.tree = tree
- self.markup_parser = MarkupParser(self.error_logger, tree, self)
- self.out_path = out_path
- self.include_dirs = include_dirs
-
- def classHierarchyJS(self, node):
- def recurseDownwards(node):
- cat, subcat = node.path[0], node.path[1]
- link = cat.upper() + escapeFiles(subcat) + ".html"
- result = {'title': node.key, 'type': node.path[0], 'children': [], 'parents': [], 'link': link}
- for child_key in ['spec', 'childconcept']:
- if not child_key in node.children:
- continue
- for path in node.children[child_key].texts:
- child = self.tree.find(path)
- if not child:
- self.error_logger.invalidReference(path, [('TODO', -1)])
- return False
- recRes = recurseDownwards(child)
- if recRes:
- result['children'].append(recRes)
- return result
-
- def recurseUpwards(node):
- cat, subcat = node.path[0], node.path[1]
- link = cat.upper() + escapeFiles(subcat) + ".html"
- result = {'title': node.key, 'type': node.path[0], 'children': [], 'parents': [], 'link': link}
- for parent_key in ['implements', 'general', 'baseconcept']:
- if not parent_key in node.children:
- continue
- for path in node.children[parent_key].texts:
- if '\u0001' in path:
- continue # Skip automatically generated upwards links.
- parent = self.tree.find(path)
- if not parent:
- self.error_logger.invalidReference(path, [('TODO', -1)])
- return False
- recRes = recurseUpwards(parent)
- if recRes:
- result['parents'].append(recRes)
- return result
-
- res = recurseDownwards(node)
- resUp = recurseUpwards(node)
- if resUp:
- res['parents'] = resUp['parents']
- return json.dumps(res)
-
- def translateId(self, txt):
- i = txt.find('#');
- if (i >= 0):
- txt = txt[i + 1:]
- i = txt.find('|');
- if (i >= 0):
- txt = txt[i + 1:]
- res = self.markup_parser.toHtml(self.markup_parser.parse(txt))
- res = translate(res)
- return res
-
- def imageFilename(self, text):
- if '|' in text:
- return pyratemp.escape(text[len('type=image:'):].split('|', 1)[0])
- else:
- return pyratemp.escape(text[len('type=image:'):])
-
- def imageTitle(self, text):
- if '|' in text:
- return self.translateMarkup(text[len('type=image:'):].split('|', 1)[1])
- return ''
-
- def toGlossaryAnchor(self, text):
- return re.sub('[^a-zA-Z0-9\-_]', '', text)
-
- def _glossaryLink(self, txt):
- term = txt[len('glos:'):]
- ## print 'SEARCHING FOR TERM', term
- ## print self.tree.glossary_nodes
- for node in self.tree.glossary_nodes:
- ## print node.path
- if not term in node.children:
- continue # Skip
- term_node = node.children[term]
- if 'description' in term_node.children:
- title = term_node.children['description'].text()
- elif 'text' in term_node.children:
- title = term_node.children['text'].text()
- else:
- title = term
- anchor = self.toGlossaryAnchor(term)
- return '<a href="#%s" class="glossary" title="%s">%s</a>' % (anchor, title, term)
- self.error_logger.invalidReference(txt, [('TODO', -1)])
- return '<a href="#" class="dead">%s</a>' % term
-
- def pageLink(self, txt=None, arr=None, node=None):
- """The link can be given as text or as a path.
-
- If it is given as text then also HTTP/FTP links are allowed, otherwise,
- it can only be a link to an entity in the tree.
- """
- # Compute source file name and line.
- location_candidates = []
- if node and node.entry:
- for entry in node.tree.entries[node.entry[0]:node.entry[1]]:
- if entry.line_no_begin + 1 == entry.line_no_end:
- line = entry.line_no_begin + 1
- else:
- line = '%s-%s' % (entry.line_no_begin + 1, entry.line_no_end)
- location_candidates.append((entry.filename, line))
- # Now, switch between txt and arr.
- is_dead = False
- if txt:
- # Split out titles from "$reference|$title".
- title = None
- if '|' in txt:
- txt, title = txt.split('|', 1)
- # Handle the different link types.
- if txt.startswith('glos:'):
- return self._glossaryLink(txt)
- elif txt.split(':')[0] in ['http', 'https', 'ftp']:
- if not title: title = txt
- return '<a href="%s" target="_top">%s</a>' % (pyratemp.escape(txt), pyratemp.escape(title))
- elif txt.startswith('nolink:'):
- if not title: title = txt[len('nolink:'):]
- return self.translateMarkup(title, node=node)
- else:
- # Is not a special link, compute two-element path and title. We
- # will use the link generation code shared with paths as arrays.
- lst = core.splitKeys(txt[txt.startswith('.'):], '.') # The startswith removes one leading dot if any.
- lst = core.cleanPath(lst)
- if len(lst) == 1: # Is link to index.
- cat, subcat = 'indexpage', lst[0]
- if not title:
- if self.tree.find(['globals', 'indexes', subcat]):
- title = self.tree.find(['globals', 'indexes', subcat]).text()
- else:
- title = subcat
- if not self.tree.find(subcat):
- is_dead = True
- self.error_logger.invalidReference(txt, location_candidates)
- else:
- cat, subcat = lst[0], lst[1]
- if not title: title = lst[-1]
- if not self.tree.find([cat, subcat]):
- is_dead = True
- self.error_logger.invalidReference(txt, location_candidates)
- else:
- # Code for array paths.
- cat, subcat, title = arr[0], arr[1], arr[1]
- # Shared link generation code.
- title = self.translateId(title)
- filename = cat.upper() + escapeFiles(subcat) + ".html"
- dead_attr = {True: ' class="dead"', False: ''}[is_dead]
- return '<a href="%s"%s>%s</a>' % (pyratemp.escape(filename), dead_attr, title)
-
- def translateMarkup(self, text, section=None, subsection=None, node=None):
- ## print text, section, subsection
- if not section is None:
- text = text.replace('#', str(section))
- elif not section is None and not subsection is None:
- if text.count('#') == 1:
- text = text.replace('#', str(subsection))
- else:
- p1 = text.find('#')
- p2 = text.find('#', p1 + 1)
- ## print text
- text = ''.join([text[:p1], str(section), text[(p1 + 1):p2], str(subsection), text[(p2 + 1):]])
- ## print ' >', text
- res = self.markup_parser.toHtml(self.markup_parser.parse(text), node=node)
- res = translate(res) # Translate stuff like \at.
- return res
-
- def translateTableHeader(self, text):
- return self.translateTableRow(text, cell_tag='th')
-
- def translateTableRow(self, text, cell_tag='td'):
- parse_tree = self.markup_parser.parse(text)
- cells = [[]]
- for type_, txt in parse_tree:
- if type_ == 'CELL_SPLITTER':
- cells.append([])
- else:
- cells[-1].append((type_, txt))
- res = ['<tr>']
- for c in cells:
- res += ['<', cell_tag, '>', self.markup_parser.toHtml(c), '</', cell_tag, '>']
- res.append('</tr>')
- return ''.join(res)
-
- def _splitIncludeFile(self, txt):
- """Splits text from included file.
-
- Returns a list of pairs. Each pair contains the type of the entry in
- the first and the text of the entry in the second component. The type
- is either 'TEXT' or 'COD'E.
- """
- result = []
- curr_type = None
- curr_chunk = []
- for line in txt.splitlines():
- if line.startswith('///'):
- if curr_type != 'TEXT':
- if curr_chunk:
- result.append((curr_type, curr_chunk))
- curr_type = 'TEXT'
- curr_chunk = [line[3:]]
- else:
- curr_chunk.append(line[3:])
- else:
- if curr_type != 'CODE':
- if curr_chunk:
- result.append((curr_type, curr_chunk))
- curr_type = 'CODE'
- curr_chunk = [line]
- else:
- curr_chunk.append(line)
- if curr_chunk: # Last open chunk.
- result.append((curr_type, curr_chunk))
- return result
-
- # TODO(holtgrew): Rename into formatCode()?
- def _formatCode(self, txt, linenostart=1):
- try:
- import pygments, pygments.lexers, pygments.formatters
- return pygments.highlight(txt, pygments.lexers.CppLexer(), pygments.formatters.HtmlFormatter(linenos='table', style='friendly', linenostart=linenostart))
- except ImportError:
- return '<pre>' + pyratemp.escape(txt) + '</pre>'
-
- def highlightCss(self):
- try:
- import pygments.formatters
- return pygments.formatters.HtmlFormatter(linenos='table', style='friendly').get_style_defs('.highlight')
- except ImportError:
- return ''
-
- def includeFile(self, filename, class_=None, node=None):
- # Get path candidate.
- if not os.path.exists(filename):
- for inc_dir in self.include_dirs:
- if os.path.exists(os.path.join(inc_dir, filename)):
- filename = os.path.join(inc_dir, filename)
- break
- # Read in file.
- with open(filename, 'rb') as f:
- fcontents = f.read()
- # Write out file to same directory as filename.
- with open(os.path.join(self.out_path, os.path.basename(filename)), 'wb') as f:
- f.write(fcontents)
- # Create HTML to output.
- chunks = self._splitIncludeFile(fcontents)
- txts = []
- next_lineno = 1
- for type, lines in chunks:
- if type == 'CODE':
- txts.append(self._formatCode('\n'.join(lines), next_lineno))
- next_lineno += len(lines)
- else:
- txts.append('<p class="' + class_ + '">' + self.translateMarkup('\n'.join(lines), node=node) + '</p>')
-
- return '\n'.join(txts)
-
- def _loadSnippet(self, path, snippet_key):
- result = []
- current_key = None
- current_lines = []
- with open(path, 'rb') as f:
- fcontents = f.read()
- for line in fcontents.splitlines():
- line = line.rstrip() # Strip line ending and trailing whitespace.
- if line.strip().startswith('//![') and line.strip().endswith(']'):
- key = line.strip()[4:-1].strip()
- if key == current_key:
- if key == snippet_key:
- result = current_lines
- current_lines = []
- current_key = None
- else:
- current_key = key
- elif current_key:
- current_lines.append(line)
- return result
-
- def includeSnippet(self, line, class_=None, node=None):
- filename, snippet_id = line, '<none>'
- if '|' in line:
- filename, snippet_id = line.split('|', 1)
- # Get path candidate.
- if not os.path.exists(filename):
- for inc_dir in self.include_dirs:
- if os.path.exists(os.path.join(inc_dir, filename)):
- filename = os.path.join(inc_dir, filename)
- break
- snippet_lines = self._loadSnippet(filename, snippet_id)
- # Read in file.
- with open(filename, 'rb') as f:
- fcontents = f.read()
- # Write out file to same directory as filename.
- with open(os.path.join(self.out_path, os.path.basename(filename)), 'wb') as f:
- f.write(fcontents)
- # Create HTML to output.
- chunks = self._splitIncludeFile(fcontents)
- next_lineno = 1
- txt = self._formatCode('\n'.join(snippet_lines), next_lineno)
- if not class_:
- class_ = ''
- return '<p class="' + class_ + '">' + txt + '</p>'
-
-
-class DocsCreator(object):
- def __init__(self, error_logger, tree, tpl_path, out_path, include_dirs):
- print >>sys.stderr, 'Setting up Docs Creator'
- self.tree = tree
- self.error_logger = error_logger
- self.tpl_path = tpl_path
- page_tpl_filename = os.path.join(self.tpl_path, 'files', 'page.html')
- ##print page_tpl_filename
- self.page_template = pyratemp.Template(filename=page_tpl_filename)
- index_page_tpl_filename = os.path.join(self.tpl_path, 'files', 'index_page.html')
- self.index_page_template = pyratemp.Template(filename=index_page_tpl_filename)
-
- self.out_path = os.path.join(out_path, 'files')
- if not os.path.exists(self.out_path):
- os.makedirs(self.out_path)
- self.include_dirs = include_dirs
-
- def good(self):
- return True # TODO(holtgrew): Actually look for errors!
-
- def createIndexPages(self):
- index = core.buildByTypeAndCatIndex(self.tree)
- cat_nodes = self.tree.find('globals.indexes').children
- for cat, node in cat_nodes.iteritems():
- if node.children.has_key('hidefromindex'):
- continue
- print >>sys.stderr, 'Indexes for ' + node.text()
- filename = getIndexPagePath(self.tree, cat, self.out_path)
- with open(filename, 'wb') as f:
- title_node = self.tree.find(['Indexpage', cat, 'title'])
- if title_node:
- title = title_node.text()
- else:
- title = self.tree.find(['globals', 'indexes', cat]).text()
- res = self.index_page_template(title=title,
- cat=cat,
- tree=self.tree,
- now=datetime.datetime.utcnow(),
- by_subcat=index.get(cat, {}),
- time=time, # for now.strftime()
- iterable=lambda x: type(x) is list,
- core=core,
- html=HtmlHelper(self.error_logger, self.tree, os.path.dirname(filename), self.include_dirs),
- json=json)
- f.write(res.encode('utf-8'))
-
- def copyFiles(self):
- """Copy files in FILE_DIRS."""
- print >>sys.stderr, 'Copying Documentation Files'
- for path in FILE_DIRS:
- entries = os.listdir(path)
- if not os.path.exists(os.path.join(self.out_path, path)): # Make sure output path exists.
- os.makedirs(os.path.join(self.out_path, path))
- for entry in entries:
- if entry.startswith('.'):
- continue # Skip hidden entries.
- source_path = os.path.join(path, entry)
- target_path = os.path.join(self.out_path, path, entry)
- # Copy file.
- print >>sys.stderr, ' %s => %s' % (source_path, target_path)
- shutil.copyfile(source_path, target_path)
-
- def createPages(self):
- """Create the documentation pages."""
- cat_dict = self.tree.find('globals.categories').children
- for cat, cat_node in cat_dict.iteritems(): # cat=Function,...
- print >>sys.stderr, 'Pages for ' + cat
- if self.tree.find(cat) is None: # Skip empty categories.
- print >>sys.stderr
- continue
- for subcat, node in self.tree.find(cat).children.iteritems(): # subcat=length,...
- filename = getPagePath(cat, subcat, self.out_path)
- ## print filename
- with open(filename, 'wb') as f:
- if 'title' in node.children:
- title = node.children['title'].text()
- else:
- title = node.key
- res = self.page_template(title=title,
- cat=cat,
- subcat=subcat,
- tree=self.tree,
- now=datetime.datetime.utcnow(),
- time=time, # for now.strftime()
- core=core,
- html=HtmlHelper(self.error_logger, self.tree, os.path.dirname(filename), self.include_dirs),
- json=json)
- f.write(res.encode('utf-8'))
- print >>sys.stderr, '.',
- print >>sys.stderr
-
-
-def createDocs(error_logger, tree, tpl_path, out_path, include_dirs):
- """Fire off the documentation creation."""
- # Things that are created from templates, data JavaScript creation for the
- # client-side JS-driven search.
- creator1 = TplDocsCreator(error_logger, tree, tpl_path, out_path, include_dirs)
- creator1.copyTemplates()
- creator1.createRootIndexPage()
- creator1.createPanelSearchIndex()
- creator1.createPanelTree()
- #return 0
- # Actually create the documentation content; things that will be displayed
- # on the right hand frame.
- creator2 = DocsCreator(error_logger, tree, tpl_path, out_path, include_dirs)
- creator2.copyFiles()
- creator2.createIndexPages()
- creator2.createPages()
-
- if creator1.good() and creator2.good():
- return 0
- else:
- return 1
diff --git a/util/py_lib/seqan/dddoc/main.py b/util/py_lib/seqan/dddoc/main.py
deleted file mode 100755
index aa3a9ea..0000000
--- a/util/py_lib/seqan/dddoc/main.py
+++ /dev/null
@@ -1,131 +0,0 @@
-#!/usr/bin/env python2
-
-import datetime
-import optparse
-import os
-import sys
-
-import core
-import html
-
-
-HEADER = """
-----------------------------------------------------------------------
- Dot.Dot.Doc documentation generator.
-----------------------------------------------------------------------
-""".strip()
-
-CMD_HELP = """
-Usage: %s <base path> [ <module> ]*
-""".strip()
-
-
-# Names of dirs with .dddoc files.
-# TODO(holtgrew): Actually, this should be given on the cmd line.
-DOC_DIRS=['pages', 'concepts']
-
-class DDDocRunner(object):
- """Runner object for dddoc.
-
- Attrs:
- index_only Boolean, true iff only index pages are built.
- doc_dirs List of strings. Names of directories with dddoc files.
- """
-
- def __init__(self, index_only=False, doc_dirs=[], out_dir='html',
- demos_dir='.', cache_only=False, include_dirs=[]):
- """Initialize, arguments correspond to attributes."""
- self.index_only = index_only
- self.doc_dirs = doc_dirs
- self.out_dir = out_dir
- self.demos_dir = demos_dir
- self.cache_only = cache_only
- self.include_dirs = include_dirs
-
- def run(self, base_paths):
- """Run dddoc on the modules below the given path.
-
- Args:
- base_paths Paths to build the documentation for.
-
- Returns:
- Return code of the application. Is 0 for no problem, and 1 on
- errors and warnings.
- """
- print 'Scanning modules...'
- app = core.App()
- if self.cache_only:
- for fn in app.cache.content.iterkeys():
- core.parseFile(fn, app.cache)
- else:
- # Scan some/all modules.
- for path in base_paths:
- os.path.normpath(path)
- app.loadFiles(path)
-
- # Scan doc directories.
- for doc_dir in self.doc_dirs:
- print 'Scanning %s...' % doc_dir
- app.loadFiles(doc_dir)
-
- app.loadingComplete()
-
- # Actually build the HTML files.
- print 'Creating HTML Documentation...'
- tpl_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'tpl'))
- res = html.createDocs(app.error_logger, app.dddoc_tree, tpl_path, self.out_dir,
- self.include_dirs)
-
- # Done, print end message.
- print 'Documentation created/updated.'
- return res
-
-
-def main(argv):
- """Program entry point."""
- print '%s\n' % HEADER
-
- start_time = datetime.datetime.now()
-
- # Parse arguments.
- parser = optparse.OptionParser()
- parser.add_option('-d', '--doc-dir', dest='doc_dirs', action='append',
- default=[],
- help=('Read .dddoc files from this directory. '
- 'Can be given multiple times.'))
- parser.add_option('-o', '--out-dir', dest='out_dir', default='html',
- help='Name of output directory. Default: "html".')
- parser.add_option('-e', '--demos-dir', dest='demos_dir',
- default='../projects/library/demos',
- help=('Directory to demos. Default: '
- '"../projects/library/demos".'))
- parser.add_option('-I', '--include-dir', dest='include_dirs',
- action='append', default=[],
- help='Paths to the directories for files and snippets.')
- parser.add_option('-c', '--cache-only', dest='cache_only', default=False,
- action='store_true',
- help='Ignore files if cache file exists.')
- options, args = parser.parse_args(argv)
- print 'doc dirs: %s' % ', '.join(options.doc_dirs)
- print
-
- # Show help if no arguments are given.
- if len(args) < 2:
- print CMD_HELP % args[0]
- return 1
- # Create application object and run documentation generation.
- app = DDDocRunner(index_only=False, doc_dirs=options.doc_dirs,
- out_dir=options.out_dir,
- include_dirs=options.include_dirs,
- demos_dir=options.demos_dir,
- cache_only=options.cache_only)
- res = app.run(args)
-
- elapsed = datetime.datetime.now() - start_time
- print >>sys.stderr, 'Took %d s' % elapsed.seconds
-
- return res
-
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv))
diff --git a/util/py_lib/seqan/dox/dot_diagrams.py b/util/py_lib/seqan/dox/dot_diagrams.py
deleted file mode 100644
index 0659a85..0000000
--- a/util/py_lib/seqan/dox/dot_diagrams.py
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env python2
-"""Representation of inheritance diagrams for using with dot/graphviz."""
-
-
-class IDNode(object):
- """Node in an inheritance diagram.
-
- @ivar name: Name of the node.
- @ivar entity: Represented proc_doc.ProcEntry.
- """
-
- def __init__(self, name='', entity=None):
- self.name = name
- self.entity = entity
-
-
-class InheritanceDiagram(object):
- """Represents an inheritance diagram.
-
- @ivar nodes: Dict of IDNode objects, indexed by name.
- @ivar edges: Set of (IDNode, IDNode) pairs.
- """
-
- def __init__(self):
- self.nodes = {}
- self.edges = set()
-
- def addNode(self, node):
- """Add the given class diagram node."""
- self.nodes[node.name] = node
-
- def addEdge(self, a, b):
- """Add an edge a -> b."""
- self.edges.add((a.name, b.name))
-
-
-class InheritanceDiagramRenderer(object):
- def render(self, diagram):
- return None
-
-
-class DiagramRenderResult(object):
- """Result for rendering a dot diagram.
-
- @ivar image_path: String with the path to the image.
- @ivar map_path: String with the path to the <map> file.
- """
-
- def __init__(self):
- self.image_path = None
- self.map_path = None
diff --git a/util/py_lib/seqan/dox/dox_parser.py b/util/py_lib/seqan/dox/dox_parser.py
deleted file mode 100644
index 55999dd..0000000
--- a/util/py_lib/seqan/dox/dox_parser.py
+++ /dev/null
@@ -1,977 +0,0 @@
-#!/usr/bin/env python2
-"""Parser for SeqAn Doxygen dialect.
-
-The Doxygen documentation has a regular grammar and thus can be parsed quite
-easily. We do not use a parser generator such as PLY since it is a bit
-overkill (it can generate parser for some context-free grammars) and not
-as straightforward to use as writing a simple parser by hand.
-"""
-
-import itertools
-import operator
-import os.path
-import re
-import sys
-
-import termcolor
-
-import raw_doc
-import lexer
-import dox_tokens
-
-
-class MessagePrinter(object):
- """Allows to pretty print warning and error messages.
-
- @ivar ignore_dirs: The directories to ignore warnings for.
- @ivar counts: Dict mapping 'error' and 'warning' to counts.
- """
-
- def __init__(self, ignore_dirs=[]):
- self.ignore_dirs = [os.path.realpath(x) for x in ignore_dirs]
- self.counts = {'error': 0, 'warning': 0}
-
- def isIgnored(self, path):
- """Return whether path is below one of the ignored directories."""
- real_path = os.path.realpath(path)
- return any([os.path.commonprefix([real_path, x]) == x for x in self.ignore_dirs])
-
- def printTokenError(self, token, msg, level='error'):
- """Print user-friendly error at location token."""
- if self.isIgnored(token.file_name):
- return # Is ignored.
- # Print location and error message.
- location = (token.file_name, token.lineno + 1, token.column)
- if sys.stderr.isatty():
- location_str = termcolor.colored('%s:%d:%d:' % location, 'white', attrs=['bold'])
- error_str = termcolor.colored('%s:' % level, 'red', attrs=['bold'])
- msg = termcolor.colored(msg, 'white', attrs=['bold'])
- else:
- location_str = '%s:%d:%d:' % location
- error_str = '%s:' % level
- print >>sys.stderr, '%s %s %s' % (location_str, error_str, msg)
- # Increase error counter.
- self.counts[level] += 1
- if token.file_name == '<mem>':
- return # do not attempt to access line below
- # Load line with error and print it with an indicator of the error.
- fcontents = open(token.file_name).read()
- lines = fcontents.splitlines()
- if token.lineno >= len(lines):
- return # Invalid line number.
- print >>sys.stderr, '%s' % lines[token.lineno].rstrip()
- if sys.stderr.isatty():
- print >>sys.stderr, token.column * ' ' + termcolor.colored('^', 'green', attrs=['bold'])
- else:
- print >>sys.stderr, token.column * ' ' + '^'
-
- def printParserError(self, e):
- """Print user-friendly error message for ParserError e."""
- msg = e.msg
- if not e.msg:
- msg = 'Parse error'
- if e.token:
- self.printTokenError(e.token, e.msg)
- else:
- self.counts['error'] += 1
- print >>sys.stderr, 'ERROR: %s' % msg
-
- def printStats(self):
- print >>sys.stderr, 'Issued %d warnings and %d errors.' % (self.counts['error'], self.counts['warning'])
-
- def numWarnings(self):
- return self.counts['warning']
-
- def numErrors(self):
- return self.counts['error']
-
-
-class ParserError(Exception):
- """Raised when there is a parser error."""
-
- def __init__(self, token=None, msg=''):
- if msg and token:
- args = (token.file_name, token.lineno, token.column, repr(token.val), msg)
- message = ('Parse error at %s:%d (column %d) '
- 'at token "%s": %s)' % args)
- elif not msg and token:
- args = (token.lineno, token.column, repr(token.val))
- message = 'Parser error at %d:%d ("%s").' % args
- else:
- message = 'Parse error: %s' % (msg,)
- Exception.__init__(self, message)
- self.msg = msg
- self.token = token
-
-
-def stripWhitespaceTokens(token_list, strip_lt_breaks=False):
- """Strip leading and trailing whitespace tokens from token_list."""
- types = ['SPACE']
- if strip_lt_breaks:
- types.append('BREAK')
- while token_list and token_list[0].type in types:
- token_list.pop(0)
- while token_list and token_list[-1].type in types:
- token_list.pop()
-
-
-def normalizeWhitespaceTokens(token_list, strip_lt_breaks=False):
- """Normalize whitespace by replacing multiple consecutive spaces by one.
- """
- positions = [i for i, t in enumerate(token_list) if t.type == 'SPACE']
- for i in reversed(positions):
- token_list[i].val = ' '
- stripWhitespaceTokens(token_list, strip_lt_breaks)
-
-
-class GenericSimpleClauseState(object):
- """Handler used in *DocState for handling simple text clauses clauses.
- """
-
- def __init__(self, parser, parent):
- self.parser = parser
- self.parent = parent
- self.tokens = []
- # The first token, usually starting the clause at all, set outside.
- self.first_token = None
- self.entry_class = None
- # Whether or not to strip leading and trailing breaks.
- self.strip_lt_breaks = False
- # Whether to normalize whitespace tokens in getEntry().
- self.normalize_tokens = True
-
- def entered(self, token):
- self.first_token = token
-
- def left(self):
- pass
-
- def getEntry(self):
- """Returns the Entry for the brief clause."""
- if self.normalize_tokens:
- normalizeWhitespaceTokens(self.tokens, self.strip_lt_breaks)
- return self.entry_class(self.first_token, raw_doc.RawText(self.tokens))
-
- def handle(self, token):
- # One or more empty lines end such a clause as well as another
- # clause-starting command.
- if token.type in ['EMPTYLINE', 'EOF']:
- self.parent.endClause()
- elif token.type in dox_tokens.CLAUSE_STARTING or \
- token.type in dox_tokens.ITEM_STARTING:
- self.parent.endClause(token)
- elif token.type == 'SPACE' and (not self.tokens or self.tokens[-1].type == 'BREAK'):
- return # Skip space at beginning or after break
- elif token.type == 'BREAK' and (self.tokens and self.tokens[-1].type == 'SPACE'):
- self.tokens[-1] = token # Replace space before break
- else:
- #print 'APPEND %s' % repr(token.val)
- self.tokens.append(token)
-
-
-class ParagraphState(GenericSimpleClauseState):
- """Handler used in *DocState for handling tokens of a paragraph."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawParagraph
-
-
-class SignatureState(GenericSimpleClauseState):
- """Handler used in *DocState for handling tokens of a paragraph."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawSignature
-
-
-class CodeState(GenericSimpleClauseState):
- """Handler used in *DocState for handling tokens of a paragraph."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawCode
- self.normalize_tokens = False
-
- def handle(self, token):
- # Code is only ended by @endcode.
- if token.type == 'COMMAND_ENDCODE':
- self.parent.endClause()
- else:
- self.tokens.append(token)
-
-
-class HtmlOnlyState(GenericSimpleClauseState):
- """Handler used in *DocState for handling tokens of a paragraph."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawHtmlOnly
- self.normalize_tokens = False
-
- def handle(self, token):
- # HTML-only section is only ended by @endhtmlonly.
- if token.type == 'COMMAND_ENDHTMLONLY':
- self.parent.endClause()
- else:
- self.tokens.append(token)
-
-
-class DeprecatedState(GenericSimpleClauseState):
- """Handler for the @deprecated clause."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawDeprecated
-
-
-class NoteState(GenericSimpleClauseState):
- """Handler for the @note clause."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawNote
-
-
-class WarningState(GenericSimpleClauseState):
- """Handler for the @warning clause."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawWarning
-
-
-class AkaState(GenericSimpleClauseState):
- """Handler for the @aka clause."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawAka
-
-
-class InternalState(GenericSimpleClauseState):
- """Handler for the @internal clause."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawInternal
-
-
-class HeaderfileState(GenericSimpleClauseState):
- """Handler for the @headerfile clause."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawHeaderfile
-
-
-class ImplementsState(GenericSimpleClauseState):
- """Handler for the @implements clause."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawImplements
-
-
-class ExtendsState(GenericSimpleClauseState):
- """Handler for the @extends clause."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawExtends
- self.strip_lt_breaks = True
-
-
-class BriefState(GenericSimpleClauseState):
- """Handler for the @brief clause."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawBrief
-
-
-class SeeState(GenericSimpleClauseState):
- """Handler for the @see clause."""
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawSee
-
-
-class ParamState(GenericSimpleClauseState):
- """Handler used in *DocState for handling @param clauses.
- """
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawParam
- # Parameters need more than one token list.
- self.in_out = None
- self.name = []
-
- def handle(self, token):
- # Special handling of the in/out token and the name, if any.
- #print '.... TOKEN', token, token.type == 'PARAM_IN_OUT'
- if token.type == 'PARAM_IN_OUT':
- self.in_out = token
- elif not self.name:
- if token.type != 'SPACE':
- self.name.append(token)
- # Skipping whitespace.
- else:
- GenericSimpleClauseState.handle(self, token)
-
- def getEntry(self):
- """Returns the Entry for the parameter."""
- normalizeWhitespaceTokens(self.tokens)
- return self.entry_class(self.first_token, raw_doc.RawText(self.name),
- raw_doc.RawText(self.tokens), self.in_out)
-
-
-class TParamState(ParamState):
- """Handler used in *DocState for handling @tparam clauses.
- """
-
- def __init__(self, parser, parent):
- ParamState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawTParam
-
-
-class ReturnState(ParamState):
- """Handler used in *DocState for handling @return clauses.
-
- Stores return type in self.name (member variable inherited from
- ParamState). Sorry for any confusion. The flag self.type_read
- is used for storing whether the type has been read.
- """
-
- def __init__(self, parser, parent):
- ParamState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawReturn
- self.type_read = False
-
- def handle(self, token):
- if self.type_read:
- GenericSimpleClauseState.handle(self, token)
- else:
- if self.name and token.type in dox_tokens.WHITESPACE:
- self.type_read = True
- elif self.name or token.type not in dox_tokens.WHITESPACE:
- self.name.append(token)
-
-
-class ThrowState(ParamState):
- """Handler used in *DocState for handling @throw clauses.
-
- Stores throw type in self.name (member variable inherited from
- ParamState). Sorry for any confusion. The flag self.type_read
- is used for storing whether the type has been read.
- """
-
- def __init__(self, parser, parent):
- ParamState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawThrow
- self.type_read = False
-
- def handle(self, token):
- if self.type_read:
- GenericSimpleClauseState.handle(self, token)
- else:
- if self.name and token.type in dox_tokens.WHITESPACE:
- self.type_read = True
- elif self.name or token.type not in dox_tokens.WHITESPACE:
- self.name.append(token)
-
-class DataRaceState(GenericSimpleClauseState):
- """Handler used in *DocState for handling @datarace clauses.
-
- Inherits from GenericSimpleClauseState.
- """
-
- def __init__(self, parser, parent):
- GenericSimpleClauseState.__init__(self, parser, parent)
- self.entry_class = raw_doc.RawDataRace
- self.type_read = False
-
-
-class SectionState(object):
- """Handler used in *DocState for handling @section clauses.
- """
-
- def __init__(self, parser, parent):
- self.first_token = None
- self.parser = parser
- self.parent = parent
- self.tokens = []
- self.level = 0
-
- def getEntry(self):
- """Returns the Entry for the template parameter."""
- return raw_doc.RawSection(self.first_token, raw_doc.RawText(self.tokens), self.level)
-
- def entered(self, token):
- self.first_token = token
-
- def left(self):
- pass
-
- def handle(self, token):
- # One or more empty lines end a @section raw_doc.Raw
- if token.type in ['EMPTYLINE', 'EOF']:
- self.parent.endClause()
- elif token.type in dox_tokens.CLAUSE_STARTING:
- self.parent.endClause(token)
- else:
- self.tokens.append(token)
-
-
-class SubsectionState(SectionState):
- """Handler used in *DocState for handling @subsection clauses.
- """
-
- def __init__(self, parser, parent):
- SectionState.__init__(self, parser, parent)
- self.level = 1
-
-
-class IncludeState(object):
- """Handler used in *DocState for handling @include clauses.
- """
-
- def __init__(self, parser, parent):
- self.first_token = None
- self.parser = parser
- self.parent = parent
- self.tokens = []
-
- def getEntry(self):
- return raw_doc.RawInclude(self.first_token, self.tokens)
-
- def entered(self, token):
- self.first_token = token
-
- def left(self):
- pass
-
- def handle(self, token):
- if token.type in dox_tokens.LINE_BREAKS or token.type == 'EOF':
- self.parent.endClause()
- elif token.type in dox_tokens.CLAUSE_STARTING:
- self.parent.endClause(token)
- else:
- if token.type != 'SPACE' or self.tokens:
- self.tokens.append(token)
-
-
-class SnippetState(object):
- """Handler used in *DocState for handling @snippet clauses.
- """
-
- def __init__(self, parser, parent):
- self.first_token = None
- self.parser = parser
- self.parent = parent
- self.path_done = False # True after first space after path
- self.path_tokens = []
- self.name_tokens = []
-
- def getEntry(self):
- return raw_doc.RawSnippet(self.first_token, self.path_tokens, self.name_tokens)
-
- def entered(self, token):
- self.first_token = token
-
- def left(self):
- pass
-
- def handle(self, token):
- if token.type in dox_tokens.LINE_BREAKS or token.type == 'EOF':
- self.parent.endClause()
- elif token.type in dox_tokens.CLAUSE_STARTING:
- self.parent.endClause(token)
- else:
- if token.type == 'SPACE':
- if not self.path_tokens:
- return # Ignore beginning space.
- elif self.path_tokens and not self.name_tokens:
- self.path_done = True
- else: # append to name
- self.name_tokens.append(token)
- else:
- if self.path_done:
- self.name_tokens.append(token)
- else:
- self.path_tokens.append(token)
-
-
-class TopLevelState(object):
- """Top level state, expecting a command starting a documentation item.
-
- Whitespace is skipped.
- """
-
- def __init__(self, parser):
- self.parser = parser
-
- def handle(self, token):
- # We ignore whitespace.
- if token.type in dox_tokens.WHITESPACE:
- return
- # We expect an item-starting token.
- if token.type in dox_tokens.ITEM_STARTING:
- state_map = {'COMMAND_CLASS' : 'class',
- 'COMMAND_CONCEPT' : 'concept',
- 'COMMAND_FUNCTION' : 'function',
- 'COMMAND_MACRO': 'macro',
- 'COMMAND_METAFUNCTION': 'metafunction',
- 'COMMAND_PAGE': 'page',
- 'COMMAND_MAINPAGE': 'mainpage',
- 'COMMAND_DEFGROUP': 'group',
- 'COMMAND_VARIABLE': 'var',
- 'COMMAND_VALUE': 'val',
- 'COMMAND_TAG': 'tag',
- 'COMMAND_TYPEDEF': 'typedef',
- 'COMMAND_ADAPTION': 'adaption',
- 'COMMAND_ENUM': 'enum',}
- self.parser.enterState(state_map[token.type], token)
- return
- msg = 'Expecting one of {%s.} but is %s' % (", ".join(dox_tokens.ITEM_STARTING), token.type)
- raise ParserError(token, msg)
-
-
-class GenericDocState(object):
- """Generic token handler for top-level entries.
- """
-
- def __init__(self, parser, entry_class, state_name):
- self.parser = parser
- # Substate is one of "first_line" or "body".
- self.substate = 'first_line'
- self.state_name = state_name
- self.first_line_tokens = None
- self.entry_class = entry_class
- self.clause_state = None
- self.allowed_commands = dox_tokens.CLAUSE_STARTING
-
- def getEntry(self):
- return self.entry
-
- def entered(self, first_token):
- """Called when the state is entered successfully with @class etc.
- """
- #print >>sys.stderr, ">>>>ENTERING CLASS STATE"
- self.first_token = first_token
- self.first_line_tokens = []
- self.substate = 'first_line'
- self.entry = self.entry_class(first_token)
- # Variables for name/title separation.
- self.name_read = False
- self.name_tokens = []
- self.title_tokens = []
-
- def left(self):
- pass
-
- def handle(self, token):
- #print 'state = class, substate = %s, clause_state %s' % (self.substate, self.clause_state)
- if self.substate == 'first_line':
- # If we have a line break in the first line then we go to the body
- # of the class documentation.
- if token.type in dox_tokens.LINE_BREAKS or token.type == 'EOF':
- #print >>sys.stderr, [v.val for v in self.name_tokens], [v.val for v in self.type_tokens]
- normalizeWhitespaceTokens(self.name_tokens)
- normalizeWhitespaceTokens(self.title_tokens)
- self.entry.name = raw_doc.RawText(self.name_tokens)
- self.entry.title = raw_doc.RawText(self.title_tokens)
- self.substate = 'body'
- return
- # Skip space at the beginning of the type.
- if not self.name_tokens and token.type == 'SPACE':
- return
- # Otherwise, we collect the token's value.
- if self.name_read:
- #print >>sys.stderr, 'NAME', token.type, repr(token.val)
- self.title_tokens.append(token)
- else:
- if token.type == 'SPACE':
- self.name_read = True
- else:
- #print >>sys.stderr, 'TYPE', token.type, repr(token.val)
- self.name_tokens.append(token)
- elif self.substate == 'body':
- # If we are already in a clause then continue to use the state.
- if not self.clause_state is None:
- self.clause_state.handle(token)
- return
- # In the body, we look for a item-generating token and will enter
- # the corresponding state if we hit it.
- if token.type in dox_tokens.ITEM_STARTING:
- # Leave the top-level class state and handle the token with the
- # top-level handler. This will create the appropriate state.
- self.parser.leaveState(self.state_name)
- assert self.parser.states[0] == 'top'
- self.parser.handleToken(token)
- return
- # In a class documentation body, a clause-starting command triggers
- # parsing of that clause.
- if token.type in dox_tokens.CLAUSE_STARTING:
- state_map = {'COMMAND_SIGNATURE' : SignatureState(self.parser, self),
- 'COMMAND_CODE' : CodeState(self.parser, self),
- 'COMMAND_HTMLONLY' : HtmlOnlyState(self.parser, self),
- 'COMMAND_BRIEF' : BriefState(self.parser, self),
- 'COMMAND_EXTENDS' : ExtendsState(self.parser, self),
- 'COMMAND_HEADERFILE' : HeaderfileState(self.parser, self),
- 'COMMAND_DEPRECATED' : DeprecatedState(self.parser, self),
- 'COMMAND_NOTE' : NoteState(self.parser, self),
- 'COMMAND_WARNING' : WarningState(self.parser, self),
- 'COMMAND_AKA' : AkaState(self.parser, self),
- 'COMMAND_INTERNAL' : InternalState(self.parser, self),
- 'COMMAND_IMPLEMENTS' : ImplementsState(self.parser, self),
- 'COMMAND_SEE' : SeeState(self.parser, self),
- 'COMMAND_RETURN' : ReturnState(self.parser, self),
- 'COMMAND_THROW' : ThrowState(self.parser, self),
- 'COMMAND_DATARACE' : DataRaceState(self.parser, self),
- 'COMMAND_PARAM' : ParamState(self.parser, self),
- 'COMMAND_TPARAM' : TParamState(self.parser, self),
- 'COMMAND_SECTION' : SectionState(self.parser, self),
- 'COMMAND_SNIPPET' : SnippetState(self.parser, self),
- 'COMMAND_SUBSECTION' : SubsectionState(self.parser, self),
- 'COMMAND_INCLUDE' : IncludeState(self.parser, self),}
- if not token.type in self.allowed_commands:
- msg = 'Invalid command %s, expecting one of %s.'
- args = (repr(token.val), map(dox_tokens.transToken, self.allowed_commands))
- raise ParserError(token, msg % args)
- if self.clause_state:
- self.clause_state.left()
- self.clause_state = state_map[token.type]
- self.clause_state.entered(token)
- #print '>>> SWITCHING TO CLAUSE STATE %s' % self.clause_state
- return
- # Some commands are explicitely marked as non-paragraph, such as
- # the @endcode and @endhtmlonly token. These are invalid tokens.
- if token.type in dox_tokens.NON_PARAGRAPH:
- raise ParserError(token, 'Invalid command!')
- # Any other token is an inline-token and part of a paragraph that
- # we will start. The same is true for any word.
- self.clause_state = ParagraphState(self.parser, self)
- self.clause_state.handle(token)
- else:
- raise ParserError(msg='Invalid substate in @class!')
-
- def endClause(self, token=None):
- """Ends the current clause and appends its result to the documentation."""
- #print '>>> END CLAUSE(%s)' % token
- if self.clause_state.getEntry():
- entry = self.clause_state.getEntry()
- if entry.getType() in ['paragraph', 'section', 'include', 'code', 'htmlonly', 'snippet']:
- self.entry.addParagraph(entry)
- elif entry.getType() == 'signature':
- self.entry.addSignature(entry)
- elif entry.getType() == 'tparam':
- self.entry.addTParam(entry)
- elif entry.getType() == 'brief':
- self.entry.addBrief(entry)
- elif entry.getType() == 'param':
- self.entry.addParam(entry)
- elif entry.getType() == 'see':
- self.entry.addSee(entry)
- elif entry.getType() == 'return':
- self.entry.addReturn(entry)
- elif entry.getType() == 'throw':
- self.entry.addThrow(entry)
- elif entry.getType() == 'datarace':
- self.entry.addDataRace(entry)
- elif entry.getType() == 'extends':
- self.entry.addExtends(entry)
- elif entry.getType() == 'implements':
- self.entry.addImplements(entry)
- elif entry.getType() == 'headerfile':
- self.entry.addHeaderfile(entry)
- elif entry.getType() == 'deprecated':
- self.entry.addDeprecationMsg(entry)
- elif entry.getType() == 'note':
- self.entry.addNote(entry)
- elif entry.getType() == 'warning':
- self.entry.addWarning(entry)
- elif entry.getType() == 'aka':
- self.entry.addAka(entry)
- elif entry.getType() == 'internal':
- self.entry.addInternal(entry)
- else:
- assert False, '%s' % entry
- self.clause_state = None
- if token:
- self.handle(token)
-
-
-class ClassDocState(GenericDocState):
- """State for documentation of a class."""
-
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawClass, 'class')
- self.allowed_commands = set(['COMMAND_SIGNATURE', 'COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF', 'COMMAND_TPARAM',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET', 'COMMAND_EXTENDS',
- 'COMMAND_IMPLEMENTS', 'COMMAND_HEADERFILE',
- 'COMMAND_DEPRECATED', 'COMMAND_NOTE', 'COMMAND_WARNING',
- 'COMMAND_AKA', 'COMMAND_INTERNAL'])
-
-class FunctionDocState(GenericDocState):
- """State for documentation of a function."""
-
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawFunction, 'function')
- self.allowed_commands = set(['COMMAND_SIGNATURE', 'COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF', 'COMMAND_TPARAM',
- 'COMMAND_PARAM',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET', 'COMMAND_RETURN',
- 'COMMAND_THROW', 'COMMAND_HEADERFILE', 'COMMAND_DEPRECATED',
- 'COMMAND_NOTE', 'COMMAND_WARNING', 'COMMAND_AKA',
- 'COMMAND_INTERNAL', 'COMMAND_DATARACE'])
-
-
-class MacroDocState(GenericDocState):
- """State for documentation of a macro."""
-
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawMacro, 'macro')
- self.allowed_commands = set(['COMMAND_SIGNATURE', 'COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF', 'COMMAND_PARAM',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET', 'COMMAND_RETURN',
- 'COMMAND_THROW', 'COMMAND_HEADERFILE', 'COMMAND_DEPRECATED',
- 'COMMAND_NOTE', 'COMMAND_WARNING', 'COMMAND_AKA',
- 'COMMAND_INTERNAL', 'COMMAND_DATARACE'])
-
-
-class MetafunctionDocState(GenericDocState):
- """State for documentation of a metafunction."""
-
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawMetafunction, 'metafunction')
- self.allowed_commands = set(['COMMAND_SIGNATURE', 'COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF', 'COMMAND_TPARAM',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET', 'COMMAND_RETURN',
- 'COMMAND_HEADERFILE', 'COMMAND_DEPRECATED', 'COMMAND_NOTE', 'COMMAND_WARNING',
- 'COMMAND_AKA', 'COMMAND_INTERNAL'])
-
-
-class ConceptDocState(GenericDocState):
- """State for documentation of a concept."""
-
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawConcept, 'concept')
- self.allowed_commands = set(['COMMAND_SIGNATURE', 'COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET', 'COMMAND_EXTENDS',
- 'COMMAND_HEADERFILE', 'COMMAND_DEPRECATED', 'COMMAND_NOTE', 'COMMAND_WARNING',
- 'COMMAND_AKA', 'COMMAND_INTERNAL'])
-
-
-class PageState(GenericDocState):
- """State for a documentation page."""
-
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawPage, 'page')
- self.allowed_commands = set(['COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET'])
-
-
-class MainPageState(GenericDocState):
- """State for a documentation main page."""
-
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawMainPage, 'mainpage')
- self.allowed_commands = set(['COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET'])
-
- def entered(self, first_token):
- GenericDocState.entered(self, first_token)
- self.name_read = True
- self.name_tokens = [lexer.Token('IDENTIFIER', 'mainpage', 0, 0, 0)]
-
-
-class GroupState(GenericDocState):
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawGroup, 'group')
- self.allowed_commands = set(['COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET', 'COMMAND_AKA'])
-
-
-class VariableState(GenericDocState):
- """State for a variable."""
-
- def __init__(self, parser, entry_class=raw_doc.RawVariable, state_name='var'):
- GenericDocState.__init__(self, parser, entry_class, state_name)
- self.allowed_commands = set(['COMMAND_SIGNATURE', 'COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET',
- 'COMMAND_HEADERFILE', 'COMMAND_DEPRECATED', 'COMMAND_NOTE', 'COMMAND_WARNING',
- 'COMMAND_AKA', 'COMMAND_INTERNAL'])
-
- def entered(self, first_token):
- GenericDocState.entered(self, first_token)
- self.type_read = False
- self.type_tokens = []
- self.name_tokens = []
-
- def left(self):
- if not self.type_tokens or not self.name_tokens:
- msg = ('Missing variable type or name! Must be given as "@var '
- '<type> <name>".')
- raise ParserError(self.first_token, msg)
-
- def handle(self, token):
- # Handle first state here and the remaining in the parent class.
- #print >>sys.stderr, token.type, repr(token.val), self.type_read
- if self.substate == 'first_line':
- # If we have a line break in the first line then we go to the body
- # of the class documentation.
- if token.type in dox_tokens.LINE_BREAKS or token.type == 'EOF':
- #print >>sys.stderr, [v.val for v in self.name_tokens], [v.val for v in self.type_tokens]
- normalizeWhitespaceTokens(self.name_tokens)
- normalizeWhitespaceTokens(self.type_tokens)
- self.entry.name = raw_doc.RawText(self.name_tokens)
- if self.entry.name.tokens[-1].val.endswith(';'): # remove semicolon
- self.entry.name.tokens[-1].val = self.entry.name.tokens[-1].val[:-1]
- self.entry.type = raw_doc.RawText(self.type_tokens)
- self.substate = 'body'
- return
- # Skip space at the beginning of the type.
- if not self.type_tokens and token.type == 'SPACE':
- return
- # Otherwise, we collect the token's value.
- if self.type_read:
- #print >>sys.stderr, 'NAME', token.type, repr(token.val)
- self.name_tokens.append(token)
- else:
- if token.type == 'SPACE':
- self.type_read = True
- else:
- #print >>sys.stderr, 'TYPE', token.type, repr(token.val)
- self.type_tokens.append(token)
- else:
- GenericDocState.handle(self, token)
-
-
-
-class EnumValueState(VariableState):
- """State for an enum value."""
-
- def __init__(self, parser):
- VariableState.__init__(self, parser, raw_doc.RawEnumValue, 'val')
-
-
-
-class TagState(GenericDocState):
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawTag, 'tag')
- self.allowed_commands = set(['COMMAND_SIGNATURE', 'COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF', 'COMMAND_TPARAM',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET',
- 'COMMAND_HEADERFILE', 'COMMAND_DEPRECATED', 'COMMAND_NOTE', 'COMMAND_WARNING',
- 'COMMAND_AKA', 'COMMAND_INTERNAL'])
-
-
-class EnumState(GenericDocState):
- """State for an enum."""
-
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawEnum, 'enum')
- self.allowed_commands = set(['COMMAND_SIGNATURE', 'COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET',
- 'COMMAND_HEADERFILE', 'COMMAND_DEPRECATED', 'COMMAND_NOTE', 'COMMAND_WARNING',
- 'COMMAND_AKA', 'COMMAND_INTERNAL'])
-
-
-class AdaptionState(GenericDocState):
- """State for an adaption."""
-
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawAdaption, 'adaption')
- self.allowed_commands = set(['COMMAND_SIGNATURE', 'COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET',
- 'COMMAND_HEADERFILE', 'COMMAND_DEPRECATED', 'COMMAND_NOTE', 'COMMAND_WARNING',
- 'COMMAND_AKA', 'COMMAND_INTERNAL'])
-
-
-class TypedefState(GenericDocState):
- """State for an typedef."""
-
- def __init__(self, parser):
- GenericDocState.__init__(self, parser, raw_doc.RawTypedef, 'typedef')
- self.allowed_commands = set(['COMMAND_SIGNATURE', 'COMMAND_CODE', 'COMMAND_HTMLONLY',
- 'COMMAND_SEE', 'COMMAND_BRIEF',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION',
- 'COMMAND_INCLUDE', 'COMMAND_SNIPPET',
- 'COMMAND_HEADERFILE', 'COMMAND_DEPRECATED', 'COMMAND_NOTE', 'COMMAND_WARNING',
- 'COMMAND_AKA', 'COMMAND_INTERNAL'])
-
-
-class Parser(object):
- """The parser class takes tokens from a lexer.Lexer class.
-
- It generates a raw_doc.RawDoc object from this with
- raw_doc.RawEntry objects.
- """
-
- def __init__(self):
- self.states = ['top']
- self.handlers = {
- 'top': TopLevelState(self),
- 'class': ClassDocState(self),
- 'function': FunctionDocState(self),
- 'macro': MacroDocState(self),
- 'metafunction': MetafunctionDocState(self),
- 'concept': ConceptDocState(self),
- 'page': PageState(self),
- 'mainpage': MainPageState(self),
- 'group': GroupState(self),
- 'var': VariableState(self),
- 'val': EnumValueState(self),
- 'tag': TagState(self),
- 'enum': EnumState(self),
- 'adaption': AdaptionState(self),
- 'typedef': TypedefState(self),
- }
- self.documentation = raw_doc.RawDoc()
-
- def parse(self, lexer):
- for token in lexer.tokens():
- self.handleToken(token)
- while len(self.states) > 1:
- self.leaveState(self.states[-1])
-
- def handleToken(self, token):
- #print 'Handling %s in states %s' % (token, self.states)
- self.handlers[self.states[-1]].handle(token)
-
- def enterState(self, state, first_token):
- #print 'entering state %s' % state
- self.states.append(state)
- self.handlers[state].entered(first_token)
-
- def leaveState(self, state):
- #print 'leaving state %s' % state
- if self.states[-1] == state:
- self.handlers[state].left()
- if self.handlers[state].getEntry():
- self.documentation.addEntry(self.handlers[state].getEntry())
- return self.states.pop()
- raise ParserError(msg='Invalid state "%s", expecting "%s"!' % (state, self.states[-1]))
diff --git a/util/py_lib/seqan/dox/dox_tokens.py b/util/py_lib/seqan/dox/dox_tokens.py
deleted file mode 100644
index 5d0e04e..0000000
--- a/util/py_lib/seqan/dox/dox_tokens.py
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/env python2
-"""Tokens for Doxygen-like tokens.
-"""
-
-import re
-
-# Regular expressions used in LEXER_TOKENS.
-IDENTIFIER = r'[\-_a-zA-Z][\-_a-zA-Z0-9]*'
-HTML_ATTRIBUTE = IDENTIFIER + r'="[^"]*"'
-HTML_TAG = r'<(?:/)?\s*' + IDENTIFIER + '(?:\s+' + HTML_ATTRIBUTE + ')*\s*(?:/)?>'
-
-LITERALS = r'.,;<>+-/*="!:'
-
-def escapeLiterals(s):
- """Escape string of literals s."""
- return r'\|'.join([re.escape(x) for x in s])
-
-# Shortcuts to token sets.
-WHITESPACE = set(['SPACE', 'EMPTYLINE', 'BREAK'])
-ITEM_STARTING = set(['COMMAND_CLASS', 'COMMAND_CONCEPT', 'COMMAND_FUNCTION', 'COMMAND_MACRO',
- 'COMMAND_METAFUNCTION', 'COMMAND_PAGE', 'COMMAND_MAINPAGE', 'COMMAND_DEFGROUP',
- 'COMMAND_VARIABLE', 'COMMAND_VALUE', 'COMMAND_TAG', 'COMMAND_ENUM',
- 'COMMAND_TYPEDEF', 'COMMAND_ADAPTION'])
-CLAUSE_STARTING = set(['COMMAND_SIGNATURE', 'COMMAND_CODE', 'COMMAND_SEE', 'COMMAND_BRIEF',
- 'COMMAND_RETURN', 'COMMAND_THROW', 'COMMAND_PARAM', 'COMMAND_TPARAM',
- 'COMMAND_SECTION', 'COMMAND_SUBSECTION', 'COMMAND_INCLUDE',
- 'COMMAND_EXTENDS', 'COMMAND_IMPLEMENTS', 'COMMAND_SNIPPET',
- 'COMMAND_HEADERFILE', 'COMMAND_DEPRECATED', 'COMMAND_NOTE', 'COMMAND_WARNING',
- 'COMMAND_INTERNAL', 'COMMAND_AKA', 'COMMAND_HTMLONLY', 'COMMAND_DATARACE'])
-NON_PARAGRAPH = set(['COMMAND_ENDCODE', 'COMMAND_ENDHTMONLY'])
-LINE_BREAKS = set(['BREAK', 'EMPTYLINE'])
-
-# The lexer tokens.
-LEXER_TOKENS = (
- # Lexer tokens for commands starting new documentation items.
- ('COMMAND_CLASS', r'@class'),
- ('COMMAND_CONCEPT', r'@concept'),
- ('COMMAND_FUNCTION', r'@fn'),
- ('COMMAND_MACRO', r'@macro'),
- ('COMMAND_METAFUNCTION', r'@mfn'),
- ('COMMAND_VARIABLE', r'@var'),
- ('COMMAND_VALUE', r'@val'),
- ('COMMAND_TAG', r'@tag'),
- ('COMMAND_ENUM', r'@enum'),
- ('COMMAND_PAGE', r'@page'),
- ('COMMAND_MAINPAGE', r'@mainpage'),
- ('COMMAND_DEFGROUP', r'@defgroup'),
- ('COMMAND_TYPEDEF', r'@typedef'),
- ('COMMAND_ADAPTION', r'@adaption'),
-
- # Lexer tokens for commands starting different modes.
- ('COMMAND_SIGNATURE', r'@signature'),
- ('COMMAND_CODE', r'@code'),
- ('COMMAND_ENDCODE', r'@endcode'),
-
- # Lexer tokens for commands starting clauses.
- ('COMMAND_HEADERFILE', r'@headerfile'),
- ('COMMAND_EXTENDS', r'@extends'),
- ('COMMAND_IMPLEMENTS', r'@implements'),
- ('COMMAND_BRIEF', r'@brief'),
- ('COMMAND_SEE', r'@see'),
- ('COMMAND_RETURN', r'@return'),
- ('COMMAND_THROW', r'@throw'),
- ('COMMAND_DATARACE', r'@datarace'),
- ('COMMAND_PARAM', r'@param'),
- ('COMMAND_TPARAM', r'@tparam'),
- ('COMMAND_SECTION', r'@section'),
- ('COMMAND_SUBSECTION', r'@subsection'),
- ('COMMAND_INCLUDE', r'@include'),
- ('COMMAND_SNIPPET', r'@snippet'),
- ('COMMAND_DEPRECATED', r'@deprecated'),
- ('COMMAND_NOTE', r'@note'),
- ('COMMAND_WARNING', r'@warning'),
- ('COMMAND_INTERNAL', r'@internal'),
- ('COMMAND_AKA', r'@aka'),
-
- # Lexer tokens for commands for inline use.
- ('COMMAND_LINK', r'@link'),
- ('COMMAND_ENDLINK', r'@endlink'),
-
- # Lexer tokens for HTML-only blocks.
- ('COMMAND_HTMLONLY', r'@htmlonly'),
- ('COMMAND_ENDHTMLONLY', r'@endhtmlonly'),
-
- # Space.
- ('SPACE', r'[ \t]+'),
- ('EMPTYLINE', r'\n\s*\n\s*'),
- ('BREAK', r'\n'),
-
- # In/out tokens for the @param clause.
- ('PARAM_IN_OUT', r'\[in\]|\[out\]|\[in,out\]'),
-
- # Lexing words, identifiers etc.
- ('IDENTIFIER', IDENTIFIER),
- ('NUMBER', r'[0-9]+'),
- ('WORD', r'\w+'),
- ('HTML_TAG', HTML_TAG),
- ('PUNCTUATION', r'\S'),
-
- # Lexing punctuation.
- ('HASH', r'\#'),
- ('NS_SEP', r'::'),
-
- # Literals.
- ('LITERAL', escapeLiterals(LITERALS)),
- )
-
-# Translation of token name to tag name.
-LEXER_TOKENS_DICT = dict(LEXER_TOKENS)
-
-def transToken(name):
- """Translate the token name to the token pattern."""
- return LEXER_TOKENS_DICT[name]
diff --git a/util/py_lib/seqan/dox/file_mgr.py b/util/py_lib/seqan/dox/file_mgr.py
deleted file mode 100644
index f62c46a..0000000
--- a/util/py_lib/seqan/dox/file_mgr.py
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/usr/bin/env python2
-"""
-Code for parsing comments from C++ files.
-"""
-
-import string
-import re
-
-
-class Comment(object):
- """Represents a comment in a file.
-
- @ivar file Back link to the File object.
- @ivar col, line, pos 0-based column, line, position.
- @ivar end_col, end_line, end_pos
- 0-based end column, line, position. Note that the end_line is the
- last line not the one after.
- @ivar offset_col 0-based column offset.
- @ivar text str with the comment's content.
- @ivar raw_text star with comment's raw content.
- """
-
- def __init__(self, line, col, pos, end_line, end_col, end_pos, offset_line,
- offset_col, text, raw_text):
- self.col = col
- self.line = line
- self.pos = pos
- self.end_col = end_col
- self.end_line = end_line
- self.end_pos = end_pos
- self.offset_line = offset_line
- self.offset_col = offset_col
- self.text = text
- self.raw_text = raw_text
-
- def __eq__(self, other):
- return (self.col == other.col and self.line == other.line and
- self.pos == other.pos and self.end_col == other.end_col and
- self.end_line == other.end_line and
- self.offset_col == other.offset_col and
- self.offset_line == other.offset_line and
- self.text == other.text and
- self.raw_text == other.raw_text)
-
- def __str__(self):
- return 'Comment(%d, %d, %d, %d, %d, %d, %d, %d, %s, %s)' % (
- self.line, self.col, self.pos, self.end_line, self.end_col,
- self.end_pos, self.offset_line, self.offset_col, repr(self.text),
- repr(self.raw_text))
-
- def __repr__(self):
- return str(self)
-
-
-class File(object):
- """Represents one C++ files with simplified access to comments.
- """
-
- def __init__(self, path):
- """
- @ivar start_markers List of str with the start marker, e.g.
- '**' for /** comments or '*!' for '/*$'.
- @ivar path str with the path to the file.
- @ivar comments List of Comment objects.
- """
- self.start_markers = ['*!']
- self.path = path
- self.comments = []
-
- def parse(self):
- with open(self.path, 'rb') as f:
- fcontents = f.read()
- self.comments = self._findComments(fcontents)
-
- def _findComments(self, text):
- """Parse C++ header as comments.
-
- @param text The text to parse.
- @returns List of Comment objects.
- """
- comments = []
- # Search for comments using regular expressions.
- def callback(match):
- if not any([match.group(0).startswith('/%s' % s) for s in self.start_markers]):
- return match.group(0)
- start, end = match.start(), match.end()
- start_line = string.count(text, '\n', 0, start)
- start_col = start - string.rfind(text, '\n', 0, start) - 1
- if start_col < 0:
- start_col = 0
- end_line = string.count(text, '\n', 0, end)
- end_col = end - string.rfind(text, '\n', 0, end) - 1
- offset_line = start_line + 1
- raw_text = match.group(0)
- # Compute offset column.
- idx = raw_text.find('\n') + 1
- for offset_col in xrange(idx, len(raw_text)):
- if raw_text[offset_col] not in [' ', '\t']:
- break
- if raw_text[offset_col] == '*':
- offset_col += 1
- if raw_text[offset_col] in [' ', '\t']:
- offset_col += 1
- offset_col -= idx
-
- proc_text = self._stripText(raw_text, offset_col)
- comments.append(Comment(start_line, start_col, start, end_line, end_col, end,
- offset_line, offset_col, proc_text, raw_text))
- return match.group(0)
- pattern = re.compile(
- r'//.*?$|/\*.*?\*/|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"',
- re.DOTALL | re.MULTILINE)
- re.sub(pattern, callback, text)
- return comments
-
- def _stripText(self, text, offset_col):
- """Strip leading stars etc."""
- res = []
- for line in text.splitlines()[1:-1]:
- res.append(line[offset_col:])
- return '\n'.join(res) + '\n'
-
-
-class FileManager(object):
- """Handles loading of comments from files
- """
-
- def __init__(self, enable_cache=False, start_markers=['*!']):
- self.enable_cache = enable_cache
- self.start_markers = start_markers
-
- def loadFile(self, path):
- """Load a file from a path
-
- @returns File object with the parsed file.
-
- @raises IOError in case the file could not be opened for reading.
- """
- res = File(path)
- res.start_markers = self.start_markers
- res.parse()
- return res
diff --git a/util/py_lib/seqan/dox/inc_mgr.py b/util/py_lib/seqan/dox/inc_mgr.py
deleted file mode 100644
index 4baec6b..0000000
--- a/util/py_lib/seqan/dox/inc_mgr.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env python2
-"""Management for including file and snippets.
-"""
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-import os
-import os.path
-import sys
-
-
-class IncludeException(Exception):
- """Raised when a file or snippet could not be loaded."""
-
-
-class IncludeManager(object):
- """Manages inclusion of files.
-
- @ivar base_paths: List of strings, paths to the include paths.
- @ivar snippet_cache: Cache from (path, snippet name) to snippet text.
- @ivar file_cache: Cache form path to file content.
- """
-
- def __init__(self, base_paths):
- self.base_paths = base_paths
- self.file_cache = {}
- self.snippet_cache = {}
-
- def loadSnippet(self, path, name):
- """
- @raises IncludeException When there is an error loading the file or snippet.
- """
- if not self.snippet_cache.get((path, name)):
- self._loadSnippets(path)
- if not self.snippet_cache.get((path, name)):
- raise IncludeException("Could not include snippet %s from file %s." % (path, name))
- return self.snippet_cache[(path, name)]
-
- def loadFile(self, path):
- """
- @raises IncludeException When there is an error loading the file.
- """
- self._loadFile(path)
- return self.file_cache[path]
-
- def resolvePath(self, path):
- """Translate a path passed to @include to an absolute path.
-
- The path is determined by looking at self.base_paths.
- """
- for base_path in self.base_paths:
- if os.path.exists(os.path.join(base_path, path)):
- return os.path.join(base_path, path)
- raise IncludeException('Could not find file %s for inclusion.' % path)
-
- def _loadFile(self, path):
- """
- @raises IncludeException When there is an error loading the file.
- """
- if self.file_cache.get(path):
- return
- full_path = self.resolvePath(path)
- try:
- with open(full_path) as f:
- self.file_cache[path] = f.read()
- except IOError, e:
- raise IncludeException('Could not load file %s: %s' % (path, e))
-
- def _loadSnippets(self, path):
- """Load snippet
-
- @raises IncludeException When there is an error loading the file or snippet.
- """
- if not self.file_cache.get(path):
- self._loadFile(path)
- current_key = None
- current_lines = []
- fcontents = self.file_cache[path]
- for line in fcontents.splitlines():
- line = line.rstrip() # Strip line ending and trailing whitespace.
- if line.strip().startswith('//![') and line.strip().endswith(']'):
- key = line.strip()[4:-1].strip()
- if key == current_key:
- self.snippet_cache[(path, key)] = '\n'.join(current_lines)
- current_lines = []
- current_key = None
- else:
- current_key = key
- elif current_key:
- current_lines.append(line)
- if current_lines and current_key:
- self.snippet_cache[(path, current_key)] = '\n'.join(current_lines)
-
diff --git a/util/py_lib/seqan/dox/lexer.py b/util/py_lib/seqan/dox/lexer.py
deleted file mode 100644
index 84d535b..0000000
--- a/util/py_lib/seqan/dox/lexer.py
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/usr/bin/env python2
-"""Simple regex-based lexer.
-
-Taken from Eli Bendersky [1].
-
-[1] http://stackoverflow.com/questions/133886
-"""
-
-import re
-
-class Token(object):
- """ A simple Token structure.
- Contains the token type, value and position.
-
- TODO(holtgrew): Put file_name before lineno/column.
- """
- def __init__(self, type, val, pos, lineno, column, file_name='<file>'):
- self.type = type
- self.val = val
- self.pos = pos
- self.lineno = lineno
- self.column = column
- self.file_name = file_name
-
- def __str__(self):
- return '%s(%s) at %d:%d (%d)' % (self.type, repr(self.val), self.lineno, self.column, self.pos)
-
-
-EOF = Token('EOF', '<eof>', 0, 0, 0)
-
-
-class LexerError(Exception):
- """ Lexer error exception.
-
- pos:
- Position in the input line where the error occurred.
- """
- def __init__(self, pos):
- self.pos = pos
-
-
-class Lexer(object):
- """ A simple regex-based lexer/tokenizer.
-
- See below for an example of usage.
- """
- def __init__(self, rules, skip_whitespace=True, line_offset=0, col_offset=0):
- """ Create a lexer.
-
- rules:
- A list of rules. Each rule is a `regex, type`
- pair, where `regex` is the regular expression used
- to recognize the token and `type` is the type
- of the token to return when it's recognized.
-
- skip_whitespace:
- If True, whitespace (\s+) will be skipped and not
- reported by the lexer. Otherwise, you have to
- specify your rules for whitespace, or it will be
- flagged as an error.
-
- line_offset, col_offset:
- Offset for computation. Used when extracting documentation
- from C/C++ commments and stripping the slashes or the stars.
- """
- self.rules = []
-
- for name, regex in rules:
- self.rules.append((re.compile(regex), name))
-
- self.skip_whitespace = skip_whitespace
- self.line_offset = line_offset
- self.col_offset = col_offset
-
- self.re_ws_skip = re.compile('\S')
-
- def input(self, buf, file_name='<mem>', line=0, col=0, offset_col=None):
- """ Initialize the lexer with a buffer as input.
- """
- self.buf = buf
- self.column = col
- self.pos = 0
- self.lineno = line
- self.file_name = file_name
- if offset_col is not None:
- self.col_offset = offset_col
-
- def token(self):
- """ Return the next token (a Token object) found in the
- input buffer. None is returned if the end of the
- buffer was reached.
- In case of a lexing error (the current chunk of the
- buffer matches no rule), a LexerError is raised with
- the position of the error.
- """
- #import pdb
- #pdb.set_trace()
- if self.pos >= len(self.buf):
- return None
- else:
- if self.skip_whitespace:
- m = self.re_ws_skip.search(self.buf[self.pos:])
-
- if m:
- self.lineno += self.buf[self.pos:self.pos + m.start()].count('\n')
- ln_pos = self.buf.rfind('\n', 0, self.pos + m.start())
- if ln_pos < 0:
- ln_pos = -1
- self.column = self.pos - ln_pos - 1
- self.pos += m.start()
- else:
- return None
-
- for token_regex, token_type in self.rules:
- m = token_regex.match(self.buf[self.pos:])
-
- if m:
- value = self.buf[self.pos + m.start():self.pos + m.end()]
- self.lineno += value.count('\n')
- ln_pos = self.buf.rfind('\n', 0, self.pos + m.end())
- if ln_pos < 0:
- ln_pos = -1
- self.column = self.pos - ln_pos - 1
- tok = Token(token_type, value, self.pos, self.lineno + self.line_offset,
- self.column + self.col_offset, file_name=self.file_name)
- self.pos += m.end()
- return tok
-
- # if we're here, no rule matched
- raise LexerError(self.pos)
-
- def tokens(self):
- """ Returns an iterator to the tokens found in the buffer.
- """
- while 1:
- tok = self.token()
- if tok is None:
- yield EOF
- break
- yield tok
diff --git a/util/py_lib/seqan/dox/migration.py b/util/py_lib/seqan/dox/migration.py
deleted file mode 100644
index d1e1cb0..0000000
--- a/util/py_lib/seqan/dox/migration.py
+++ /dev/null
@@ -1,802 +0,0 @@
-#!/usr/bin/env python2
-"""Code for translating a DDDoc tree and its node into raw_doc objects.
-"""
-
-import copy
-import lexer
-import raw_doc
-import re
-import sys
-
-
-formatter = raw_doc.DoxFormatter(120)
-
-class TokenTranslator(object):
- def translate(self, token_list):
- result = self.translateLinks(token_list)
- result = self.translateTT(result)
- return result
-
- def translateLinks(self, token_list):
- result = []
- for token in token_list:
- if '@' in token.val:
- vals = re.split('(@[^@]*@)', token.val)
- for val in vals:
- if val.startswith('@') and val.endswith('@'):
- t1 = copy.deepcopy(token)
- t1.type = 'COMMAND_LINK'
- t1.val = '@link'
- t2 = copy.deepcopy(token)
- if '|' in val:
- type_name, title = val[1:-1].split('|')
- type_name = translateTypename(type_name)
- t2.val = '%s %s' % (type_name, title)
- else:
- t2.val = translateTypename(val[1:-1])
- t2.val = ' %s ' % t2.val
- t3 = copy.deepcopy(token)
- t3.type = 'COMMAND_ENDLINK'
- t3.val = '@endlink'
- result += [t1, t2, t3]
- else:
- t = copy.deepcopy(token)
- t.val = val
- result.append(t)
- else:
- result.append(token)
- return result
-
- def translateTT(self, token_list):
- result = []
- for token in token_list:
- if '$' in token.val:
- vals = re.split('(\$[^\$]*\$)', token.val)
- for val in vals:
- if val.startswith('$') and val.endswith('$'):
- t1 = copy.deepcopy(token)
- t1.type = 'HTML_TAG'
- t1.val = '<tt>'
- t2 = copy.deepcopy(token)
- t2.val = val[1:-1]
- t3 = copy.deepcopy(token)
- t3.type = 'HTML_TAG'
- t3.val = '</tt>'
- result += [t1, t2, t3]
- else:
- t = copy.deepcopy(token)
- t.val = val
- result.append(t)
- else:
- result.append(token)
- return result
-
-
-def translateTokens(tokens):
- return TokenTranslator().translate(tokens)
-
-
-def translateTypename(name):
- if '.' in name:
- return name.split('.', 1)[1]
- else:
- return name
-
-
-def translate(text):
- return text.replace('\colon', ':').replace('"', '')
-
-# TODO(holtgrew): Translate spaces to underscores.
-
-
-def migratePages(node):
- #print >>sys.stderr, 'Migrating pages...'
- pages = []
- #print node
- for name, child in node.children.iteritems():
- if name == 'Glossary':
- continue
- page = raw_doc.RawPage()
- page.title.tokens.append(lexer.Token('WORD', name, 0, 0, 0))
- s = 'Page'
- page.name.tokens.append(lexer.Token('WORD', s + page.title.text, 0, 0, 0))
- if child.children.get('summary'):
- for text in child.children['summary'].texts:
- if text.startswith('type=text:'):
- t = lexer.Token('WORD', text[len('type=text:'):], 0, 0, 0)
- else:
- t = lexer.Token('WORD', text, 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- raw_brief = raw_doc.RawBrief(raw_text)
- page.briefs.append(raw_brief)
- if child.children.get('description'):
- for text in child.children['description'].texts:
- if text.startswith('type=text:'):
- t = lexer.Token('WORD', text[len('type=text:'):], 0, 0, 0)
- raw_par = raw_doc.RawParagraph(raw_doc.RawText(translateTokens([t])))
- elif text.startswith('type=section:#'):
- t = lexer.Token('WORD', text[len('type=section:#'):], 0, 0, 0)
- raw_par = raw_doc.RawSection(raw_doc.RawText(translateTokens([t])))
- elif text.startswith('type=subsection:#.#'):
- t = lexer.Token('WORD', text[len('type=subsection:#.#'):], 0, 0, 0)
- raw_par = raw_doc.RawSection(raw_doc.RawText(translateTokens([t])), 1)
- else:
- t = lexer.Token('WORD', text, 0, 0, 0)
- raw_par = raw_doc.RawParagraph(raw_doc.RawText(translateTokens([t])))
- page.body.addParagraph(raw_par)
- pages.append(page)
- print 'RESULTING PAGES %s' % [p.title.text for p in pages]
- return pages
-
-
-class GenericMigration(object):
- def __init__(self, node):
- self.node = node
- self.entry_class = None
- self.sep = '#'
- self.is_type = False
-
- def work(self):
- raw_entries = []
- #print self.node.key
- #if self.node.key == 'Memfunc':
- # print 'GOT', self.node.key
- for name, child in self.node.children.iteritems():
- #if 'StringSet' in name or self.node.key == 'Memfunc':
- # print 'GOT', self.node.key, name
- #print name
- #if name == 'Pattern':
- # import pdb; pdb.set_trace()
- if self.node.key == 'Memfunc' or self.node.key == 'Typedef':
- name = name.replace('#', '::')
- name = translate(name)
- if self.entry_class is raw_doc.RawGroup and not child.children.get('tag') and not child.children.get('value'):
- entry = raw_doc.RawTag()
- else:
- entry = self.entry_class()
- if self.sep != '#' and '#' in name and not self.is_type:
- name = name.replace('#', self.sep)
- entry.name = raw_doc.RawText([lexer.Token('WORD', name, 0, 0, 0)])
- if self.entry_class is raw_doc.RawVariable:
- t = lexer.Token('WORD', 'VariableType', 0, 0, 0)
- entry.type = raw_doc.RawText([t])
- #if hasattr(entry, 'deprecation_msgs'):
- # msg = raw_doc.RawDeprecated(raw_doc.RawText([lexer.Token('WORD', 'Fake deprecation message!', 0, 0, 0)]))
- # entry.deprecation_msgs.append(msg)
- #print child
- #print name, child.children.keys()
- processed = set()
- if child.children.get('summary'):
- self.processSummary(entry, child.children['summary'])
- processed.add('summary')
- if child.children.get('general'):
- self.processExtends(entry, child.children['general'])
- processed.add('general')
- if child.children.get('implements'):
- self.processExtends(entry, child.children['implements'])
- processed.add('implements')
- if child.children.get('conceptimplements'):
-# self.processExtends(entry, child.children['conceptimplements'])
- processed.add('conceptimplements')
- if child.children.get('baseconcept'):
- self.processExtends(entry, child.children['baseconcept'])
- processed.add('baseconcept')
- if child.children.get('derived'):
-# self.processExtends(entry, child.children['derived'])
- processed.add('derived')
- if child.children.get('base'):
- self.processExtends(entry, child.children['base'])
- processed.add('base')
- if child.children.get('description'):
- self.processDescription(entry, child.children['description'])
- processed.add('description')
- if child.children.get('text'):
- self.processDescription(entry, child.children['text'])
- processed.add('text')
- if child.children.get('remarks'):
- self.processRemarks(entry, child.children['remarks'])
- processed.add('remarks')
- if child.children.get('remark'):
- self.processRemarks(entry, child.children['remark'], False)
- processed.add('remark')
- if child.children.get('note'):
- self.processRemarks(entry, child.children['note'])
- processed.add('note')
- if child.children.get('notes'):
- self.processRemarks(entry, child.children['notes'])
- processed.add('notes')
- first_example = True
- if child.children.get('example'):
- self.processExample(entry, child.children['example'])
- first_example = False
- processed.add('example')
- if child.children.get('file'):
- self.processFiles(entry, child.children['file'])
- processed.add('file')
- processed.add('cat') # TODO(holtgrew): Handle category.
- processed.add('category') # TODO(holtgrew): Handle category.
- if child.children.get('signature'):
- #print child
- self.processSignatures(entry, child.children['signature'])
- processed.add('signature')
- if child.children.get('demo'):
- self.processDemo(entry, child.children['demo'])
- processed.add('demo')
- if child.children.get('see'):
- self.processSee(entry, child.children['see'])
- processed.add('see')
- if child.children.get('returns'):
- self.processReturns(entry, child.children['returns'])
- processed.add('returns')
- if child.children.get('return'):
- self.processReturns(entry, child.children['return'])
- processed.add('return')
- if child.children.get('param'):
- self.processParams(entry, child.children['param'])
- processed.add('param')
- if child.children.get('params'):
- self.processParams(entry, child.children['params'])
- processed.add('params')
- if child.children.get('wiki'):
- self.processWiki(entry, child.children['wiki'])
- processed.add('wiki')
- if child.children.get('cite'):
- self.processCite(entry, child.children['cite'])
- processed.add('cite')
- if child.children.get('status'):
- self.processStatus(entry, child.children['status'])
- processed.add('status')
- if self.entry_class is raw_doc.RawEnum:
- if child.children.get('value'):
- values = self.processValues(entry, child, child.children['value'])
- #for v in values:
- # print v.getFormatted(formatter)
- raw_entries += values
- processed.add('value')
- if self.entry_class is raw_doc.RawGroup: # tag
- if child.children.get('tag'):
- values = self.processTags(entry, child, child.children['tag'])
- #for v in values:
- # print v.getFormatted(formatter)
- raw_entries += values
- processed.add('tag')
- if child.children.get('value'):
- values = self.processTags(entry, child, child.children['value'])
- #for v in values:
- # print v.getFormatted(formatter)
- raw_entries += values
- processed.add('value')
- if child.children.get('include'):
- if hasattr(entry, 'addHeaderfile'):
- self.processInclude(entry, child.children['include'])
- processed.add('include')
- if child.children.get('header'):
- if hasattr(entry, 'addHeaderfile'):
- self.processInclude(entry, child.children['header'])
- processed.add('header')
- processed.add('classSpec') # TODO(holtgrew): What's this?
- processed.add('default') # TODO(holtgrew): What's this?
- processed.add('nowarn') # TODO(holtgrew): What's this?
- processed.add('DISABLED')
- processed.add('hidefromindex')
- # We don't have double linking anymore.
- processed.add('function')
- processed.add('interfacefunc')
- processed.add('conceptfunc')
- processed.add('shortcutfor')
- processed.add('metafunction')
- processed.add('type')
- processed.add('spec')
- processed.add('memvar')
- processed.add('memfunc')
- processed.add('typedef')
- processed.add('shortcut')
- processed.add('metaraw_entries')
- processed.add('conceptmetafunc')
- processed.add('childconcept')
- processed.add('conceptusedbyfunc')
- if (child.children.get('class') or child.children.get('concept')) and not '#' in name and not '::' in name and not self.is_type and \
- self.entry_class in [raw_doc.RawFunction, raw_doc.RawMetafunction, raw_doc.RawVariable]:
- # Register raw_entries once for each class.
- texts = []
- if child.children.get('class'):
- texts += child.children.get('class').texts
- if child.children.get('concept'):
- texts += child.children.get('concept').texts
- texts = set(texts)
- for c in texts:
- if '.' in c:
- cname = translate(c.split('.', 1)[1])
- else:
- cname = translate(c)
- entry2 = copy.deepcopy(entry)
- entry2.name = raw_doc.RawText([lexer.Token('WORD', cname + self.sep + name, 0, 0, 0)])
- raw_entries.append(entry2)
- #print entry2.getFormatted(formatter)
- else:
- # Register raw_entries only once.
- raw_entries.append(entry)
- #print 'APPENDING', entry.getFormatted(formatter)
- processed.add('class')
- processed.add('concept') # TODO(holtgrew): Ignoring for now...
- # Check that we processed all attributes.
- unhandled = set(child.children.keys()) - processed
- if unhandled:
- print 'Missed %s in %s (processed: %s)' % (unhandled, child, processed)
- sys.exit(1)
- return raw_entries
-
- def processSummary(self, entry, node):
- for text in node.texts:
- if text.startswith('type=text:'):
- t = lexer.Token('WORD', text[len('type=text:'):], 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- else:
- t = lexer.Token('WORD', text, 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- entry.addBrief(raw_doc.RawBrief(raw_text))
-
- def processExtends(self, entry, node):
- for text in node.texts:
- if '\u0001' in text:
- continue # do not add inherited
- if text.startswith('Class.'):
- t = lexer.Token('WORD', text[len('Class.'):], 0, 0, 0)
- raw_text = raw_doc.RawText([t])
- entry.addExtends(raw_doc.RawExtends(raw_text))
- elif text.startswith('Spec.'):
- t = lexer.Token('WORD', text[len('Spec.'):], 0, 0, 0)
- raw_text = raw_doc.RawText([t])
- entry.addExtends(raw_doc.RawExtends(raw_text))
- elif text.startswith('Concept.'):
- t = lexer.Token('WORD', text[len('Concept.'):], 0, 0, 0)
- raw_text = raw_doc.RawText([t])
- if hasattr(entry, 'addImplements'):
- entry.addImplements(raw_doc.RawImplements(raw_text))
- else:
- entry.addExtends(raw_doc.RawExtends(raw_text))
- else:
- assert False, str(node)
-
- def processExample(self, entry, node):
- # Add example header.
- raw_text = raw_doc.RawText([lexer.Token('WORD', 'Examples', 0, 0, 0)])
- raw_section = raw_doc.RawSection(raw_text)
- entry.addParagraph(raw_section)
- for text in node.texts:
- if text.startswith('type=text:'):
- t = lexer.Token('WORD', text[len('type=text:'):], 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- raw_par = raw_doc.RawParagraph(raw_text)
- elif text.startswith('type=code:'):
- t = lexer.Token('WORD', '{.cpp}\n' + text[len('type=code:'):] + '\n', 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- raw_par = raw_doc.RawCode(raw_text)
- else:
- t = lexer.Token('WORD', text, 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- raw_par = raw_doc.RawParagraph(raw_text)
- entry.addParagraph(raw_par)
-
- def processFiles(self, entry, node):
- for text in node.texts:
- if text.startswith('../'):
- text = text[len('../'):]
- t = lexer.Token('WORD', text, 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- entry.addParagraph(raw_doc.RawInclude(raw_text))
-
- def processSee(self, entry, node):
- for text in node.texts:
- t = lexer.Token('WORD', translateTypename(text), 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- entry.addSee(raw_doc.RawSee(raw_text))
-
- def processValues(self, entry, node, value_nodes):
- result = []
- enum_name = translate(node.key)
- #print value_nodes
- for key, value in value_nodes.children.iteritems():
- raw_var = raw_doc.RawVariable()
- #print value
- var_name = value.key
- if '::' in enum_name:
- var_name = enum_name.split('::')[0] + '::' + var_name
- t = lexer.Token('WORD', enum_name, 0, 0, 0)
- raw_var.type = raw_doc.RawText([t])
- t = lexer.Token('WORD', enum_name + '#' + var_name, 0, 0, 0)
- raw_var.name = raw_doc.RawText([t])
-
- processed = set()
- if value.children.get('summary'):
- self.processSummary(raw_var, value.children['summary'])
- processed.add('summary')
-
- unhandled = set(value.children.keys()) - processed
- if unhandled:
- print 'Missed %s in %s' % (unhandled, child)
- sys.exit(1)
-
- #print raw_var.getFormatted(formatter)
- result.append(raw_var)
- return result
-
- def processTags(self, entry, node, tag_nodes):
- result = []
- group_name = translate(node.key)
- for key, value in tag_nodes.children.iteritems():
- raw_tag = raw_doc.RawTag()
- tag_name = value.key
- t = lexer.Token('WORD', group_name + '#' + tag_name, 0, 0, 0)
- raw_tag.name = raw_doc.RawText([t])
-
- processed = set()
- if value.children.get('summary'):
- self.processSummary(raw_tag, value.children['summary'])
- processed.add('summary')
- if value.children.get('remarks'):
- self.processRemarks(raw_tag, value.children['remarks'])
- processed.add('remarks')
- if value.children.get('remark'):
- self.processRemarks(raw_tag, value.children['remark'])
- processed.add('remark')
- if value.children.get('text'):
- self.processRemarks(raw_tag, value.children['text'])
- processed.add('text')
- if value.children.get('type'):
- ts = []
- if value.children['type'].texts:
- ts.append(lexer.Token('WORD', ' Types: ', 0, 0, 0))
- ts.append(lexer.Token('WORD', value.children['type'].texts[0], 0, 0, 0))
- for txt in value.children['type'].texts[1:]:
- ts.append(lexer.Token('WORD', ', ' + txt, 0, 0, 0))
- raw_text = raw_doc.RawText(ts)
- entry.addParagraph(raw_doc.RawParagraph(raw_text))
- processed.add('type')
-
- processed.add('signature') # Ignore.
- processed.add('include') # TODO(holtgrew): Required here?
- processed.add('see') # TODO(holtgrew): Required here?
- # We do not have double-linking any more.
- processed.add('function')
-
- unhandled = set(value.children.keys()) - processed
- if unhandled:
- print 'Missed %s in %s processed: %s' % (unhandled, node, processed)
- sys.exit(1)
-
- #print raw_tag.getFormatted(formatter)
- result.append(raw_tag)
- return result
-
- def processDemo(self, entry, node):
- for text in node.texts:
- t1 = lexer.Token('WORD', 'Demo: ', 0, 0, 0)
- t2 = lexer.Token('WORD', text, 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t1, t2]))
- entry.addParagraph(raw_doc.RawParagraph(raw_text))
-
- def processInclude(self, entry, node):
- for text in node.texts:
- t = lexer.Token('WORD', text, 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- raw_headerfile = raw_doc.RawHeaderfile(raw_text)
- entry.addHeaderfile(raw_headerfile)
-
- def processRemarks(self, entry, node, is_first=True):
- if is_first:
- raw_text = raw_doc.RawText([lexer.Token('WORD', 'Remarks', 0, 0, 0)])
- raw_section = raw_doc.RawSection(raw_text)
- entry.addParagraph(raw_section)
- for text in node.texts:
- if text.startswith('type=text:'):
- t = lexer.Token('WORD', text[len('type=text:'):], 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- else:
- t = lexer.Token('WORD', text, 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- entry.addParagraph(raw_doc.RawParagraph(raw_text))
-
- def processDescription(self, entry, node):
- for text in node.texts:
- if text.startswith('type=text:'):
- t = lexer.Token('WORD', text[len('type=text:'):], 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- else:
- t = lexer.Token('WORD', text, 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- entry.addParagraph(raw_doc.RawParagraph(raw_text))
-
- def processWiki(self, entry, node):
- for text in node.texts:
- t = lexer.Token('WORD', 'http://trac.seqan.de/wiki/' + text, 0, 0, 0)
- raw_text = raw_doc.RawText([t])
- entry.addParagraph(raw_doc.RawParagraph(raw_text))
-
- def processCite(self, entry, node):
- for text in node.texts:
- t = lexer.Token('WORD', text, 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- entry.addParagraph(raw_doc.RawParagraph(raw_text))
-
- def processStatus(self, entry, node):
- # TODO(holtgrew): Add support for @deprecated.
- for text in node.texts:
- t = lexer.Token('WORD', 'Status: ' + text, 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- entry.addParagraph(raw_doc.RawParagraph(raw_text))
-
- def processSignatures(self, entry, node):
- for text in node.texts:
- t = lexer.Token('WORD', text, 0, 0, 0)
- raw_text = raw_doc.RawText(translateTokens([t]))
- raw_sig = raw_doc.RawSignature(raw_text)
- entry.addSignature(raw_sig)
-
- def processParams(self, entry, node):
- for name, child in node.children.iteritems():
- ts = []
- if child.children.get('summary'):
- for summary in child.children['summary'].texts:
- ts.append(lexer.Token('WORD', translate(summary), 0, 0, 0))
- if child.children.get('text'):
- for remark in child.children['text'].texts:
- ts.append(lexer.Token('WORD', remark, 0, 0, 0))
- if child.children.get('tableheader'):
- for line in child.children['tableheader'].texts:
- ts.append(lexer.Token('WORD', line, 0, 0, 0))
- if child.children.get('table'):
- for line in child.children['table'].texts:
- ts.append(lexer.Token('WORD', line, 0, 0, 0))
- if child.children.get('remarks'):
- for remark in child.children['remarks'].texts:
- ts.append(lexer.Token('WORD', remark, 0, 0, 0))
- if child.children.get('remark'):
- for remark in child.children['remark'].texts:
- ts.append(lexer.Token('WORD', remark, 0, 0, 0))
- if child.children.get('node'):
- for node in child.children['node'].texts:
- ts.append(lexer.Token('WORD', node, 0, 0, 0))
- if child.children.get('type'):
- if child.children['type'].texts:
- ts.append(lexer.Token('WORD', ' Types: ', 0, 0, 0))
- # TODO(holtgrew): Add @link?
- ts.append(lexer.Token('WORD', translateTypename(child.children['type'].texts[0]), 0, 0, 0))
- for txt in child.children['type'].texts[1:]:
- # TODO(holtgrew): Add @link?
- ts.append(lexer.Token('WORD', ', ' + translateTypename(txt), 0, 0, 0))
- if child.children.get('concept'):
- if child.children['concept'].texts:
- ts.append(lexer.Token('WORD', ' Concepts: ', 0, 0, 0))
- ts.append(lexer.Token('WORD', child.children['concept'].texts[0], 0, 0, 0))
- for txt in child.children['concept'].texts[1:]:
- ts.append(lexer.Token('WORD', ', ' + txt, 0, 0, 0))
- if child.children.get('class'):
- if child.children['class'].texts:
- ts.append(lexer.Token('WORD', ' Classes: ', 0, 0, 0))
- ts.append(lexer.Token('WORD', child.children['class'].texts[0], 0, 0, 0))
- for txt in child.children['class'].texts[1:]:
- ts.append(lexer.Token('WORD', ', ' + txt, 0, 0, 0))
- if child.children.get('default'):
- if child.children['default'].texts:
- ts.append(lexer.Token('WORD', ' Default: ', 0, 0, 0))
- ts.append(lexer.Token('WORD', child.children['default'].texts[0], 0, 0, 0))
- for txt in child.children['default'].texts[1:]:
- ts.append(lexer.Token('WORD', ', ' + txt, 0, 0, 0))
- if child.children.get('value'):
- if child.children['value'].texts:
- ts.append(lexer.Token('WORD', ' Values: ', 0, 0, 0))
- ts.append(lexer.Token('WORD', child.children['value'].texts[0], 0, 0, 0))
- for txt in child.children['value'].texts[1:]:
- ts.append(lexer.Token('WORD', ', ' + txt, 0, 0, 0))
- if node.children.get('metafunction'):
- if node.children['metafunction'].texts:
- ts.append(lexer.Token('WORD', ' Metafunctions: ', 0, 0, 0))
- ts.append(lexer.Token('WORD', node.children['metafunction'].texts[0], 0, 0, 0))
- for txt in node.children['metafunction'].texts[1:]:
- ts.append(lexer.Token('WORD', ', ' + txt, 0, 0, 0))
- if child.children.get('see'):
- if child.children['see'].texts:
- ts.append(lexer.Token('WORD', ' Sees: ', 0, 0, 0))
- ts.append(lexer.Token('WORD', child.children['see'].texts[0], 0, 0, 0))
- for txt in child.children['see'].texts[1:]:
- ts.append(lexer.Token('WORD', ', ' + txt, 0, 0, 0))
- ts = translateTokens(ts)
- raw_text = raw_doc.RawText(ts)
- name_text = raw_doc.RawText([lexer.Token('WORD', name, 0, 0, 0)])
- if hasattr(entry, 'addParam'):
- raw_param = raw_doc.RawParam(name_text, raw_text)
- entry.addParam(raw_param)
- else:
- raw_param = raw_doc.RawTParam(name_text, raw_text)
- entry.addTParam(raw_param)
-
- # Check that we processed all attributes.
- unhandled = set(child.children.keys()) - set(['summary', 'remarks', 'type', 'default', 'text', 'concept', 'metafunction', 'remark', 'note', 'see', 'class', 'value', 'nowarn', 'tableheader', 'table'])
- if unhandled:
- print 'Missed %s in %s' % (unhandled, node)
- sys.exit(1)
-
- def processReturns(self, entry, node):
- ts = []
- if node.children.get('summary'):
- for text in node.children['summary'].texts:
- t = lexer.Token('WORD', text, 0, 0, 0)
- ts.append(t)
- if node.children.get('text'):
- for text in node.children['text'].texts:
- t = lexer.Token('WORD', text, 0, 0, 0)
- ts.append(t)
- if node.children.get('remarks'):
- for text in node.children['remarks'].texts:
- t = lexer.Token('WORD', text, 0, 0, 0)
- ts.append(t)
- if node.children.get('note'):
- for text in node.children['note'].texts:
- t = lexer.Token('WORD', text, 0, 0, 0)
- ts.append(t)
- if node.children.get('type'):
- if node.children['type'].texts:
- ts.append(lexer.Token('WORD', ' Types: ', 0, 0, 0))
- ts.append(lexer.Token('WORD', translateTypename(node.children['type'].texts[0]), 0, 0, 0))
- for txt in node.children['type'].texts[1:]:
- ts.append(lexer.Token('WORD', ', ' + translateTypename(txt), 0, 0, 0))
- if node.children.get('metafunction'):
- if node.children['metafunction'].texts:
- ts.append(lexer.Token('WORD', ' Metafunctions: ', 0, 0, 0))
- ts.append(lexer.Token('WORD', node.children['metafunction'].texts[0], 0, 0, 0))
- for txt in node.children['metafunction'].texts[1:]:
- ts.append(lexer.Token('WORD', ', ' + txt, 0, 0, 0))
- if node.children.get('default'):
- if node.children['default'].texts:
- ts.append(lexer.Token('WORD', ' Default: ', 0, 0, 0))
- ts.append(lexer.Token('WORD', node.children['default'].texts[0], 0, 0, 0))
- for txt in node.children['default'].texts[1:]:
- ts.append(lexer.Token('WORD', ', ' + txt, 0, 0, 0))
- ts = translateTokens(ts)
- name = raw_doc.RawText([lexer.Token('WORD', 'TReturn', 0, 0, 0)])
- raw_text = raw_doc.RawText(ts)
- raw_return = raw_doc.RawReturn(name, raw_text)
- entry.addReturn(raw_return)
- # Check that we processed all attributes.
- unhandled = set(node.children.keys()) - set(['summary', 'remarks', 'type', 'metafunction', 'text', 'param', 'note', 'default'])
- if unhandled:
- print 'Missed %s in %s' % (unhandled, node)
- sys.exit(1)
-
- def _processTextNode(self, node):
- texts = []
- for text in node.texts:
- if text.startswith('type=text:'):
- t = lexer.Token('WORD', text[len('type=text:'):], 0, 0, 0)
- raw_text = raw_doc.RawParagraph(raw_doc.RawText([t]))
- elif text.startswith('type=section:#'):
- t = lexer.Token('WORD', text[len('type=section:#'):], 0, 0, 0)
- raw_text = raw_doc.RawSection(raw_doc.RawText([t]))
- elif text.startswith('type=subsection:#.#'):
- t = lexer.Token('WORD', text[len('type=subsection:#.#'):], 0, 0, 0)
- raw_text = raw_doc.RawSection(raw_doc.RawText([t]), 1)
- else:
- t = lexer.Token('WORD', text, 0, 0, 0)
- raw_par = raw_doc.RawParagraph(raw_doc.RawText([t]))
- pars.append(raw_par)
- return pars
-
-
-class FunctionMigration(GenericMigration):
- def __init__(self, node):
- GenericMigration.__init__(self, node)
- self.entry_class = raw_doc.RawFunction
-
-
-class ClassMigration(GenericMigration):
- def __init__(self, node):
- GenericMigration.__init__(self, node)
- self.entry_class = raw_doc.RawClass
- self.is_type = True
-
-
-class EnumMigration(GenericMigration):
- def __init__(self, node):
- GenericMigration.__init__(self, node)
- self.entry_class = raw_doc.RawEnum
- self.is_type = True
-
-
-class ConceptMigration(GenericMigration):
- def __init__(self, node):
- GenericMigration.__init__(self, node)
- self.entry_class = raw_doc.RawConcept
- self.is_type = True
-
-
-class MacroMigration(GenericMigration):
- def __init__(self, node):
- GenericMigration.__init__(self, node)
- self.entry_class = raw_doc.RawMacro
-
-
-class MetafunctionMigration(GenericMigration):
- def __init__(self, node):
- GenericMigration.__init__(self, node)
- self.entry_class = raw_doc.RawMetafunction
-
-
-class TagMigration(GenericMigration):
- def __init__(self, node):
- GenericMigration.__init__(self, node)
- self.entry_class = raw_doc.RawGroup
- self.is_type = True
-
-
-class MemvarMigration(GenericMigration):
- def __init__(self, node):
- GenericMigration.__init__(self, node)
- self.entry_class = raw_doc.RawVariable
- self.sep = '::'
-
-
-class TypedefMigration(GenericMigration):
- def __init__(self, node):
- GenericMigration.__init__(self, node)
- self.entry_class = raw_doc.RawTypedef
- self.sep = '::'
- self.is_type = True
-
-
-class AdaptionMigration(GenericMigration):
- def __init__(self, node):
- GenericMigration.__init__(self, node)
- self.entry_class = raw_doc.RawAdaption
- self.sep = '::'
- self.is_type = True
-
-
-def addGroups(raw_entries):
- """Add implicitely given groups to raw_entries."""
- # Collect known names.
- names = set()
- for e in raw_entries:
- name = e.name.text
- if '#' not in name and '::' not in name:
- names.add(name)
- # Collect unknown names.
- unknown = set()
- for e in raw_entries:
- name = e.name.text
- if '#' in name and not '::' in name:
- prefix = name.split('#', 1)[0]
- if prefix not in names:
- unknown.add(prefix)
- # Add groups.
- for name in unknown:
- group = raw_doc.RawGroup()
- t = lexer.Token('WORD', name, 0, 0, 0)
- group.name = raw_doc.RawText(translateTokens([t]))
- raw_entries.append(group)
-
-
-def migrate(tree):
- print 'Class.keys', tree.root.children['Class'].children.keys()
- res = []
- res += migratePages(tree.root.children['Page'])
- res += migratePages(tree.root.children['Indexpage'])
- res += FunctionMigration(tree.root.children['Function']).work()
- res += FunctionMigration(tree.root.children['Memfunc']).work()
- res += ClassMigration(tree.root.children['Class']).work()
- res += ClassMigration(tree.root.children['Spec']).work()
- res += ConceptMigration(tree.root.children['Concept']).work()
- res += EnumMigration(tree.root.children['Enum']).work()
- res += MacroMigration(tree.root.children['Macro']).work()
- res += MetafunctionMigration(tree.root.children['Metafunction']).work()
- res += TagMigration(tree.root.children['Tag']).work()
- res += MemvarMigration(tree.root.children['Memvar']).work()
- res += TypedefMigration(tree.root.children['Typedef']).work()
- res += AdaptionMigration(tree.root.children['Adaption']).work()
- res += TypedefMigration(tree.root.children['Shortcut']).work()
- addGroups(res)
- #res += migratePages(tree.root.children['Demo'])
- #for x in res:
- # print x.getFormatted(formatter)
- return res
-
diff --git a/util/py_lib/seqan/dox/proc_doc.py b/util/py_lib/seqan/dox/proc_doc.py
deleted file mode 100644
index bd73a59..0000000
--- a/util/py_lib/seqan/dox/proc_doc.py
+++ /dev/null
@@ -1,1794 +0,0 @@
-#!/usr/bin/env python2
-"""Processed version of the documentation.
-
-The documentation from the objects of raw_doc is further processed into
-objects from the module proc_doc. These objects can then be processed
-into structured documents such as HTML more easily.
-"""
-
-# TODO(holtgrew): Location traceability for entries and text.
-
-import os.path
-import HTMLParser
-import logging
-import re
-import sys
-import xml.etree.ElementTree
-import xml.sax.saxutils
-
-import inc_mgr
-import sig_parser
-import dox_parser
-import dox_tokens
-import raw_doc
-import validation
-
-
-def escapeForXml(s):
- """Return escaped XML of s."""
- return xml.sax.saxutils.escape(s)
-
-
-class DocumentationBuildException(dox_parser.ParserError):
- """Thrown when there is a logical error on building the documentation."""
-
-
-class LinkResolver(object):
- """Member of ProcDoc for resolving links."""
-
- def __init__(self, proc_doc):
- self.proc_doc = proc_doc
-
-
-def splitSecondLevelEntry(name):
- """Split second-level entry and return (first, second) pair.
-
- If name is not a second level entry then (None, name) is returned.
- """
- xs = None
- if name.count('::') > 1 and ' ' in name:
- xs = name.split(' ', 1)
- elif '#' in name:
- xs = name.split('#', 1)
- elif '::' in name:
- xs = name.rsplit('::', 1)
- if xs:
- return xs
- return (None, name)
-
-
-class ProcDoc(object):
- """Collection of the top-level documentation entries.
-
- @ivar doc_processor The DocProcessor that created this ProcDoc.
- @ivar local_name_counter Number of occurences for local names, used for
- shortening @link display to second level entries.
- """
-
- def __init__(self, doc_processor):
- self.doc_processor = doc_processor
- self.top_level_entries = {}
- self.second_level_entries = {}
- self.entries = {}
- self.local_name_counter = {}
- self.top_level_entries_filename = {}
- self.second_level_entries_filename = {}
-
- def addTopLevelEntry(self, x):
- """Add a top-level-entry."""
- self.registerEntry(x)
- self.top_level_entries[x.name] = x
-
- def addSecondLevelEntry(self, x):
- """Add a second-level entry."""
- self.registerEntry(x)
- self.second_level_entries[x.name] = x
- first, second = splitSecondLevelEntry(x.name)
- if not first in self.top_level_entries:
- msg = 'Unknown type %s' % first
- token = x.raw_entry.name.tokens[0]
- raise dox_parser.ParserError(msg=msg, token=token)
- if first:
-# print '%s => %s as %s' % (x.name, second, x.kind)
- self.top_level_entries[first].registerSubentry(x)
- # update local name counter
- self.local_name_counter.setdefault(second, 0)
- self.local_name_counter[second] += 1
-
- def addVariable(self, x):
- """Add a variable entry."""
- self.registerEntry(x)
- if '::' in x.name:
- self.second_level_entries[x.name] = x
- first, second = splitSecondLevelEntry(x.name)
- if not first in self.top_level_entries:
- token = x.raw_entry.name.tokens[0]
- self.doc_processor.msg_printer.printTokenError(
- token, 'Unknown top level entry %s' % first, 'error')
- else:
- self.top_level_entries[first].registerSubentry(x)
- else:
- self.top_level_entries[x.name] = x
-
- def addEnumValue(self, x):
- """Add an enum value entry."""
- self.registerEntry(x)
- if not x.type in self.top_level_entries:
- token = x.raw_entry.name.tokens[0]
- self.doc_processor.msg_printer.printTokenError(
- token, 'Unknown top level entry %s' % x.type, 'error')
- else:
- self.top_level_entries[x.type].registerSubentry(x)
-
- def registerEntry(self, x):
- """Register an entry."""
-
- name = x.name
- if name == '':
- msg = 'Entry must not have an empty name.'
- raise DocumentationBuildException(token=x.raw_entry.first_token,
- msg=msg)
- if x.kind == 'variable' and self.top_level_entries.get(x.type) and self.top_level_entries[x.type].kind == 'enum':
- name = x.type + '::' + name
- if name.endswith(';'):
- name = name[:-1]
- if name in self.entries:
- old = self.entries[name]
- tpl = ('Trying to define %(new_kind)s %(new_name)s in %(new_file)s:'
- '%(new_line)s but is previously defined as %(old_kind)s '
- '%(old_name)s in %(old_file)s:%(old_line)d.')
- vals = {
- 'new_kind': x.kind,
- 'new_name': name,
- 'new_file': old.location[0],
- 'new_line': old.location[1],
- 'old_kind': old.kind,
- 'old_name': old.name,
- 'old_file' : x.location[0],
- 'old_line' : x.location[1]}
- self.doc_processor.msg_printer.printTokenError(x.raw_entry.name.tokens[0],
- tpl % vals, 'error')
- else:
- self.entries[name] = x
- x.doc = self
-
- def runTextVisitor(self, v):
- """Run visitor v on all Text members of all entries and sub entries.
- """
- for e in self.entries.itervalues():
- e.runTextVisitor(v)
-
-
-class TextNode(object):
- """A node represents a part of a processed text.
-
- Processed text is text generated from tokens lexed from the input file.
- For example, text in the paragraph of a entry's body can be representd by
- TextNode objects.
-
- TextNode objects are similar to DOM nodes, i.e. they can contain children
- and have attributes. This means that we can have a link node that has a
- href/target attribute with a target URL and one or more child nodes that
- contain the link's label.
-
- Additionally, we store the source location (begin and end line/column) of
- the node in its source file.
-
- We represent plain links, i.e. where the label is the same as the target
- using the representation for "<a href="seqan:$target">$target</a>".
-
- We represent included code snippets as "<dox:code type='.cpp'>$code</dox:code>."
-
- @ivar type: The type of the node, as a string. Reserved values are
- '<text>' for plain text nodes.
- @ivar attrs: A dict object mapping attribute names to string values.
- @ivar children: A list of TextNode objects.
- @ivar text: The text value of a node, a string.
- @ivar tokens: For links, this is the list of tokens in the @link command.
- @ivar raw_html: Comes from HTML in dox, disables h2 to h4 translation, for
- example.
- """
-
- def __init__(self, type='<text>', raw_html=False, verbatim=False, text='', attrs={}):
- self.type = type
- self.attrs = dict(attrs)
- self.children = []
- self.raw_html = raw_html
- if verbatim:
- self.text = text
- else:
- self.text = text.replace('<', '<').replace('>', '>')
-
- def __str__(self):
- attrs = (repr(self.type), repr(self.text), repr(self.attrs), len(self.children))
- return 'TextNode(type=%s, text=%s, attrs=%s, len(children)=%d)' % attrs
-
- def __repr__(self):
- return str(self)
-
- @property
- def empty(self):
- if self.type == '<text>':
- return not not self.text
- else:
- return not (self.children or self.attrs)
-
- def setAttr(self, key, value):
- self.attrs[escapeForXml(key)] = escapeForXml(value)
-
- def addChild(self, n):
- self.children.append(n)
- return self.children[-1]
-
- @property
- def X(self):
- """Returns first child, used to retrieve member of top-level <div>."""
- if self.type == '<text>':
- return self
- else:
- return self.children[0]
-
- @property
- def plainText(self):
- """Converts to HTML and strips tags."""
- def remove_html_markup(s):
- tag = False
- quote = False
- out = []
-
- for c in s:
- if c == '<' and not quote:
- tag = True
- elif c == '>' and not quote:
- tag = False
- elif (c == '"' or c == "'") and tag:
- quote = not quote
- elif not tag:
- out.append(c)
- return ''.join(out)
- return remove_html_markup(self.toHtmlLike())
-
- def toHtmlLike(self, skip_top_tag=False, **kwargs):
- """Returns a string with a HTML-like representation for debuggin.
-
- @param skip_top_tag: Do ont output top-level tag.
- @param kwargs: Additional attributes to add.
- """
- if self.type == '<text>':
- if self.attrs:
- print >>sys.stderr, 'WARNING: Attributes on text node!'
- return self.text
- else:
- dash = {True: '', False: ' /'}.get(bool(self.children)) # Whether empty
- res = []
- if not skip_top_tag:
- res += ['<', self.type]
- for key, value in self.attrs.iteritems():
- res += [' ', key, '=', '"', repr(value)[1:-1], '"']
- for key, value in kwargs.iteritems():
- res += [' ', key, '=', '"', value, '"']
- res.append(dash + '>')
- if self.children:
- res += [x.toHtmlLike() for x in self.children]
- if not skip_top_tag:
- res += ['</', self.type, '>']
- return ''.join(res)
-
-
-class ProcEntry(object):
- """A processed representation of a documentation entry.
-
- A documentation entry has a kind (string), a name (string), a brief
- description (TextNode(type='<text>')), and a list of references/sees to
- other elements (list of TextNode(type='<link>')). Also, it has a body
- which is a TextNode with children.
-
- @ivar raw: The raw_doc.Raw* object.
- @ivar kind: The kind of the entry, string.
- @ivar name: The name of the entry, string.
- @ivar title_str: A string with the title.
- @ivar brief: A brief description, a text-typed TextNode or None.
- @ivar body: A TextNode object with children for the documentation body.
- @ivar sees: A list of link-typed TextNode objects, can be empty.
- @ivar doc: The owning, ProcDoc, set on ProcDoc.registerEntry
- @ivar subentries: Sub entries, dir, grouped by type.
- @ivar raw_entry: The RawEntry object that this ProcEntry was generated from.
- """
-
- def __init__(self, raw, name, title=None, brief=None, body=None, sees=[]):
- self.raw = raw
- self.name = name
- self.title_str = title
- self.brief = brief
- self.body = body
- self.sees = list(sees)
- self.doc = None
- self.subentries = {}
- self.raw_entry = None
- self._location = None
-
- def sortedSees(self):
- return sorted(self.sees, key=lambda x: x.plainText)
-
- def registerSubentry(self, proc_entry):
- self.subentries.setdefault(proc_entry.kind, []).append(proc_entry)
-
- def hasSubEntry(self, kind, proc_doc):
- """Returns has a subentry of the given kind."""
- if self.subentries.get(kind):
- return True
- if hasattr(self, 'all_extended'):
- for cl in self.all_extended:
- extended = proc_doc.top_level_entries[cl]
- if extended.subentries.get(kind):
- return True
- if hasattr(self, 'all_implemented'):
- for co in self.all_implemented:
- extended = proc_doc.top_level_entries[co]
- if extended.subentries.get(kind):
- return True
- return False
-
- def visitTextNodes(self, visitor):
- """Visit all text nodes using the given visitor."""
- visitor.visit(self.brief)
- visitor.visit(self.body)
- for see in self.sees:
- visitor.visit(see)
-
- @property
- def title(self):
- return self.title_str or self.name
-
- @property
- def location(self):
- """Returns pair (path, line)."""
- if not self._location:
- path = '<none>'
- line = -1
- if self.raw_entry.name and self.raw_entry.name.tokens:
- line = self.raw_entry.name.tokens[0].lineno
- path = self.raw_entry.name.tokens[0].file_name
- self._location = (path, line)
- return self._location
-
- @property
- def kind(self):
- return self.__class__.__name__.replace('Proc', '').lower()
-
-
-class ProcCodeEntry(ProcEntry):
- """A processed code entry.
-
- @ivar signatures: A TextNode with the signatures of the entry. They are
- properly formatted to be displayed as verbatim text.
- @ivar signature_entries: A list of sig_parser.SigEntry objects.
- @ivar headerfiles: A list of str objects with the arguments to #include.
- @ivar deprecation_msgs: List of TextNode objects with deprecation messages.
- @ivar notes: List of TextNode objects with notes.
- @ivar warnings: List of TextNode objects with warnings.
- @ivar akas: List of strings.
- @ivar internals: List of TextNode objects (possibly empty) with marks as
- internal.
- """
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcEntry.__init__(self, raw, name, brief, body, sees)
- self.signatures = []
- self.signature_entries = []
- self.headerfiles = []
- self.deprecation_msgs = []
- self.notes = []
- self.warnings = []
- self.akas = []
- self.internals = []
-
- def addSignature(self, s):
- self.signatures.append(s)
-
- def addSignatureEntry(self, e):
- self.signature_entries.append(e)
-
- def addHeaderfile(self, h):
- self.headerfiles.append(h)
-
- def addDeprecationMsg(self, m):
- self.deprecation_msgs.append(m)
-
- def addNote(self, n):
- self.notes.append(n)
-
- def addWarning(self, w):
- self.warnings.append(w)
-
- def addAkas(self, a):
- self.akas.append(a)
-
- def addInternal(self, i):
- self.internals.append(i)
-
- def subEntries(self, kind):
- return []
-
- def visitTextNodes(self, visitor):
- """Visit all text nodes using the given visitor."""
- ProcEntry.visitTextNodes(self, visitor)
- for msg in self.deprecation_msgs:
- visitor.visit(msg)
- for msg in self.notes:
- visitor.visit(msg)
- for msg in self.warnings:
- visitor.visit(msg)
-
-
-class ProcEnum(ProcCodeEntry):
- """A processed enum documentation.
-
- @ivar values: A list of ProcVariable entries that represent values
- of this enum.
- """
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcCodeEntry.__init__(self, raw, name, brief, body, sees)
- self.values = []
-
-
-class ProcAdaption(ProcCodeEntry):
- """A processed adaption documentation.
-
- @ivar values: A list of ProcVariable entries that represent values
- of this adaption.
- """
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcCodeEntry.__init__(self, raw, name, brief, body, sees)
- self.values = []
-
-
-class ProcTypedef(ProcCodeEntry):
- """A processed typedef documentation.
-
- @ivar values: A list of ProcVariable entries that represent values
- of this typedef.
- """
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcCodeEntry.__init__(self, raw, name, brief, body, sees)
- self.values = []
-
- @property
- def kind(self):
- if '#' in self.name:
- return 'grouped_typedef'
- elif '::' in self.name:
- return 'member_typedef'
- else:
- return 'global_typedef'
-
-
-class ProcConcept(ProcCodeEntry):
- """A processed concept documentation.
-
- @ivar extends: A list of str values with the names of the extended
- concepts.
- @ivar all_extended: A set of str values with the names of all extended
- concepts, also transitively.
- @ivar all_extending: A set of str values with the names of all extending
- concepts.
- @ivar all_implementing: A set of str values with the names of all
- implementing classes.
- """
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcCodeEntry.__init__(self, raw, name, brief, body, sees)
- self.extends = []
- self.all_extended = set()
- self.all_extending = set()
- self.all_implementing = set()
-
- def addExtends(self, s):
- self.extends.append(s)
-
- def __str__(self):
- return 'ProcConcept(%s, brief=%s, body=%s, sees=%s)' % (
- repr(self.name), repr(self.brief), repr(self.body), repr(self.sees))
-
- def __repr__(self):
- return 'ProcConcept(%s)' % repr(self.name)
-
-
-class ProcClass(ProcCodeEntry):
- """A processed class documentation.
-
- @ivar extends: A list of str values with the names of the extended
- classes.
- @ivar implements: A list of str values with the names of the implemented
- concepts.
- @ivar all_implemented: Set of str values with the names of all implemented
- concepts.
- @ivar all_extending: Set of str values with the names of all extending
- classes.
- @ivar all_extended: Set of str values with the names of all extended classes.
- """
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcCodeEntry.__init__(self, raw, name, brief, body, sees)
- self.extends = []
- self.implements = []
- self.all_implemented = set()
- self.all_extending = set()
- self.all_extended = set()
- self.tparams = []
- self.typedefs = []
-
- def visitTextNodes(self, visitor):
- """Visit all text nodes using the given visitor."""
- ProcCodeEntry.visitTextNodes(self, visitor)
- for p in self.tparams:
- p.visitTextNodes(visitor)
- for p in self.typedefs:
- p.visitTextNodes(visitor)
-
- def addExtends(self, s):
- self.extends.append(s)
-
- def addImplements(self, s):
- self.implements.append(s)
-
- def addTParam(self, t):
- self.tparams.append(t)
-
- def addTypedef(self, t):
- self.typedefs.append(t)
-
- @property
- def isSpecialization(self):
- return not not self.extends
-
- @property
- def kind(self):
- if self.isSpecialization:
- return 'specialization'
- else:
- return 'class'
-
-
-class ProcTag(ProcCodeEntry):
- """A processed tag documentation.
- """
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcCodeEntry.__init__(self, raw, name, brief, body, sees)
- self.tparams = []
-
- def addTParam(self, t):
- self.tparams.append(t)
-
- @property
- def local_name(self):
- """Returns name without group prefix."""
- if '#' in self.name:
- return self.name.split('#', 1)[-1]
- else:
- return self.name
-
- @property
- def kind(self):
- if '#' in self.name:
- return 'grouped_tag'
- else:
- return 'tag'
-
-
-class ProcParam(object):
- """Representation of a parameter.
-
- @ivar raw: Raw representation.
- @ivar name: The name of the parameter. str.
- @ivar in_out: One of IN, OUT, IN_OUT, None.
- @ivar desc: Documentation of the parameter. TextNode.
- """
-
- def __init__(self, raw):
- self.raw = raw
- self.name = None
- self.in_out = None
- self.desc = TextNode()
-
- def visitTextNodes(self, visitor):
- """Visit all text nodes using the given visitor."""
- visitor.visit(self.desc)
-
-
-ProcParam.IN = 'IN'
-ProcParam.OUT = 'OUT'
-ProcParam.IN_OUT = 'IN_OUT'
-
-
-class ProcTParam(object):
- """Documentation of a processed template parameter.
-
- @ivar var: The raw representation.
- @ivar type: The type of the parameter. str
- @ivar desc: Documentation of the parameter. TextNode.
- """
-
- def __init__(self, raw):
- self.raw = raw
- self.type = None
- self.desc = TextNode()
-
- def visitTextNodes(self, visitor):
- """Visit all text nodes using the given visitor."""
- visitor.visit(self.desc)
-
-
-class ProcReturn(object):
- """Documentation of a @return entry.
-
- @ivar raw: The raw version of this ProcReturn (required for location lookup).
- @ivar type: The return type. str.
- @ivar desc: The documentation of the return value. TextNode.
- """
-
- def __init__(self, raw):
- self.raw = raw
- self.type = None
- self.desc = TextNode()
-
- def visitTextNodes(self, visitor):
- """Visit all text nodes using the given visitor."""
- visitor.visit(self.desc)
-
-
-class ProcThrow(object):
- """Documentation of a @throw entry.
-
- @ivar raw: The raw version of this ProcThrow (required for location lookup).
- @ivar type: The exception type. str.
- @ivar desc: The documentation of the exception. TextNode.
- """
-
- def __init__(self, raw):
- self.raw = raw
- self.type = None
- self.desc = TextNode()
-
- def visitTextNodes(self, visitor):
- """Visit all text nodes using the given visitor."""
- visitor.visit(self.desc)
-
-
-class ProcDataRace(object):
- """Documentation of a @datarace entry.
-
- @ivar raw: The raw version of this ProcDataRace (required for location lookup).
- @ivar desc: The documentation of the @datarace clause. TextNode.
- """
-
- def __init__(self, raw):
- self.raw = raw
- self.desc = TextNode()
-
- def visitTextNodes(self, visitor):
- """Visit all text nodes using the given visitor."""
- visitor.visit(self.desc)
-
-
-class ProcFunction(ProcCodeEntry):
- """A processed function documentation.
-
- @ivar params: A list of str values with the names of the extended
- concepts.
- @ivar tparams:
- @ivar returns:
- @ivar throws: List of ProcThrow objects.
- @ivar dataraces: List of ProcDataRace objects.
- """
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcCodeEntry.__init__(self, raw, name, brief, body, sees)
- self.params = []
- self.tparams = []
- self.returns = []
- self.throws = []
- self.dataraces = []
-
- @property
- def kind(self):
- if '#' in self.name:
- return 'interface_function'
- elif '::' in self.name:
- return 'member_function'
- else:
- return 'global_function'
-
- @property
- def local_name(self):
- """Returns name without class/concept prefix."""
- if '#' in self.name:
- return self.name.split('#', 1)[-1]
- elif '::' in self.name:
- return self.name.split('::', 1)[-1]
- else:
- return self.name
-
- def visitTextNodes(self, visitor):
- """Visit all text nodes using the given visitor."""
- ProcCodeEntry.visitTextNodes(self, visitor)
- for p in self.params:
- p.visitTextNodes(visitor)
- for p in self.tparams:
- p.visitTextNodes(visitor)
- for p in self.returns:
- p.visitTextNodes(visitor)
- for t in self.throws:
- t.visitTextNodes(visitor)
- for d in self.dataraces:
- d.visitTextNodes(visitor)
-
- def addParam(self, p):
- self.params.append(p)
-
- def addTParam(self, t):
- self.tparams.append(t)
-
- def addReturn(self, r):
- self.returns.append(r)
-
- def addThrow(self, t):
- self.throws.append(t)
-
- def addDataRace(self, t):
- self.dataraces.append(t)
-
-
-class ProcMacro(ProcCodeEntry):
- """A processed macro documentation.
-
- @ivar params: A list of str values with the names of the extended
- concepts.
- @ivar returns: Name displayed for return type.
- @ivar throws: List of ProcThrow objects.
- @ivar throws: List of ProcDataRace objects.
- """
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcCodeEntry.__init__(self, raw, name, brief, body, sees)
- self.params = []
- self.returns = []
- self.throws = []
- self.dataraces = []
-
- @property
- def local_name(self):
- """Returns name without group prefix."""
- if '#' in self.name:
- return self.name.split('#', 1)[-1]
- else:
- return self.name
-
- @property
- def kind(self):
- if '#' in self.name:
- return 'grouped_macro'
- else:
- return 'macro'
-
- def visitTextNodes(self, visitor):
- """Visit all text nodes using the given visitor."""
- ProcCodeEntry.visitTextNodes(self, visitor)
- for p in self.params:
- p.visitTextNodes(visitor)
- for p in self.returns:
- p.visitTextNodes(visitor)
- for t in self.throws:
- t.visitTextNodes(visitor)
- for d in self.dataraces:
- d.visitTextNodes(visitor)
-
- def addParam(self, p):
- self.params.append(p)
-
- def addReturn(self, r):
- self.returns.append(r)
-
- def addThrow(self, t):
- self.throws.append(t)
-
- def addDataRace(self, d):
- self.dataraces.append(d)
-
-
-class ProcMetafunction(ProcCodeEntry):
- """A processed function documentation.
-
- @ivar tparams: A list of str values with the names of the extended
- concepts.
- @ivar returns: A list of ProcReturn values.
- """
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcCodeEntry.__init__(self, raw, name, brief, body, sees)
- self.tparams = []
- self.returns = []
-
- @property
- def kind(self):
- if '#' in self.name:
- return 'interface_metafunction'
- else:
- return 'global_metafunction'
-
- @property
- def local_name(self):
- """Returns name without class/concept prefix."""
- if '#' in self.name:
- return self.name.split('#', 1)[-1]
- elif '::' in self.name:
- return self.name.split('::', 1)[-1]
- else:
- return self.name
-
- def visitTextNodes(self, visitor):
- """Visit all text nodes using the given visitor."""
- ProcCodeEntry.visitTextNodes(self, visitor)
- for p in self.tparams:
- p.visitTextNodes(visitor)
- for p in self.returns:
- p.visitTextNodes(visitor)
-
- def addTParam(self, t):
- self.tparams.append(t)
-
- def addReturn(self, r):
- self.returns.append(r)
-
-
-class ProcVariable(ProcCodeEntry):
- """A processed variable documentation.
-
- @ivar type: A string with the name of a type.
- """
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcCodeEntry.__init__(self, raw, name, brief, body, sees)
- self.type = None
-
- @property
- def local_name(self):
- """Returns name without class prefix."""
- if '::' in self.name:
- return self.name.split('::', 1)[-1]
- else:
- return self.name
-
- @property
- def kind(self):
- if '::' in self.name:
- return 'member_variable'
- else:
- return 'variable'
-
-
-class ProcEnumValue(ProcVariable):
- """A processed enum value documentation."""
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcVariable.__init__(self, raw, name, brief, body, sees)
-
- @property
- def local_name(self):
- """Returns name without class prefix."""
- if '::' in self.name:
- return self.name.split('::', 1)[-1]
- else:
- return self.name
-
- @property
- def kind(self):
- return 'enum_value'
-
-
-class ProcPage(ProcEntry):
- """A processed page."""
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcEntry.__init__(self, raw, name, brief, body, sees)
-
- def __str__(self):
- return 'Page(name=%s)' % repr(self.name)
-
-
-class ProcGroup(ProcEntry):
- """A processed group."""
-
- def __init__(self, raw, name, brief=None, body=None, sees=[]):
- ProcEntry.__init__(self, raw, name, brief, body, sees)
- self.tags = []
- self.typedefs = []
-
- def __str__(self):
- return 'Group(name=%s)' % repr(self.name)
-
- def addTypedef(self, t):
- self.typedefs.append(t)
-
-
-class HtmlTagParser(HTMLParser.HTMLParser):
- """Used for parsing HTML and storing the first tag and its attributes."""
-
- def __init__(self):
- self.reset()
-
- def reset(self):
- HTMLParser.HTMLParser.reset(self)
- self.tag = None
- self.attrs = None
- self.is_open = None
- self.is_close = None
-
- def handle_starttag(self, tag, attrs):
- self.tag = tag
- self.attrs = dict(attrs)
- self.is_open = True
-
- def handle_endtag(self, tag):
- self.tag = tag
- self.is_close = True
-
- def parse(self, txt):
- self.reset()
- self.feed(txt)
-
-
-class RawTextToTextNodeConverter(object):
- """Convert raw text including HTML tags to text node.
-
- @ivar doc_proc: The parent DocProcessor.
- """
-
- def __init__(self, strip_lt_line_space=False, expected_tags=set(), doc_proc=None):
- self.tag_stack = []
- self.node_stack = []
- self.current = None
- self.strip_lt_line_space = strip_lt_line_space
- self.expected_tags = expected_tags
- # Processing text between inline @begintag @endtag is done by first
- # scanning over the tokens and then processing the tokens in between
- # recursively with a new RawTextToTextNodeConverter.
- self.current_cmd = None # current command, e.g. '@link'
- self.tokens_cmd = [] # currently scanned tokens
- self.commands = ['COMMAND_LINK', 'COMMAND_ENDLINK']
- self.command_pairs = {'COMMAND_LINK': 'COMMAND_ENDLINK'}
- self.html_parser = HtmlTagParser()
- self.doc_proc = doc_proc
-
- def handleTag(self, token):
- """Handle a HTML tag.
-
- The HTML tag is translated into a TextNode and appended to self.current.
- Note that this is meant for parsing one tag only.
- """
- self.html_parser.parse(token.val)
- tag_name = self.html_parser.tag
- if tag_name not in self.expected_tags:
- msg = 'Unknown tag "%s". Expected one of %s.' % (tag_name, self.expected_tags)
- self.doc_proc.msg_printer.printTokenError(token, msg, 'warning')
-
- if self.html_parser.is_open: # Opening tag.
- self.tag_stack.append(self.html_parser.tag)
- self.node_stack.append(self.current)
- tag = TextNode(type=self.html_parser.tag, raw_html=True)
- for key, value in self.html_parser.attrs.items():
- tag.setAttr(key, value)
- self.current = self.current.addChild(tag)
-
- if self.html_parser.is_close: # No else, also handle standalone tags.
- if self.tag_stack and self.tag_stack[-1] == tag_name:
- self.tag_stack.pop() # correct closing tag
- elif self.tag_stack and self.tag_stack[-1] != tag_name:
- # incorrect closing, pop and return
- args = (tag_name, self.tag_stack[-1])
- self.doc_proc.msg_printer.printTokenError(token, 'Closing wrong tag %s instead of %s' % args, 'warning')
- self.tag_stack.pop()
- return
- else: # not self.tag_stack
- self.doc_proc.msg_printer.printTokenError(token, 'Closing tag without opening %s!' % tag_name, 'warning')
- # Pop from node stack.
- if self.node_stack:
- self.current = self.node_stack[-1]
- self.node_stack.pop()
- else:
- self.doc_proc.msg_printer.printTokenError(token, 'Having closed too many tags!', 'warning')
-
- def handleCommand(self, token):
- """Handle command for the given token."""
- if self.current_cmd: # There is a command active
- if token.type == self.command_pairs[self.current_cmd]: # closing current
- self.handleCommandClosing() # handle closing of command
- else: # not closing current
- self.tokens_cmd.append(token)
- else: # no command active, open
- if not token.type in self.command_pairs.keys():
- expected = map(dox_tokens.transToken, self.command_pairs.keys())
- raise dox_parser.ParserError(token, 'Unexpected token. Must be one of %s' % expected)
- self.current_cmd = token.type
-
- def handleCommandClosing(self):
- """Handle closing of current command."""
- assert self.current_cmd == 'COMMAND_LINK', 'Only known command.'
- if self.current_cmd == 'COMMAND_LINK':
- # Trim leading/trailing whitespace tokens
- def isWhitespace(t):
- return t.type in dox_tokens.WHITESPACE
- while self.tokens_cmd and isWhitespace(self.tokens_cmd[0]):
- self.tokens_cmd.pop(0)
- while self.tokens_cmd and isWhitespace(self.tokens_cmd[-1]):
- self.tokens_cmd.pop(-1)
- if not self.tokens_cmd:
- print >>sys.stderr, 'WARNING: Empty @link @endlink.'
- return
- # Get link target.
- target_tokens = []
- while self.tokens_cmd and self.tokens_cmd[0].type not in dox_tokens.WHITESPACE:
- target_tokens.append(self.tokens_cmd.pop(0))
- # Trim leading whitespace again.
- while self.tokens_cmd and isWhitespace(self.tokens_cmd[0]):
- self.tokens_cmd.pop(0)
- # Translate any remaining non-whitespace tokens.
- title_tokens = self.tokens_cmd or list(target_tokens)
- link_text = raw_doc.RawText(title_tokens)
- conv = RawTextToTextNodeConverter(expected_tags=self.expected_tags, doc_proc=self.doc_proc)
- link_text_node = conv.run(link_text)
- link_text_node.type = 'a'
- link_text_node.attrs = {'href': 'seqan:' + ''.join([t.val for t in target_tokens])}
- link_text_node.tokens = target_tokens
- self.current.addChild(link_text_node)
- self.tokens_cmd = []
- self.current_cmd = None
-
- def run(self, raw_text, verbatim=False):
- """Convert the tokens in raw_text into a tree of TextNode objects."""
- #print >>sys.stderr, '================== %s' % raw_text.text
- #print >>sys.stderr, [(t.type, t.val) for t in raw_text.tokens]
- self.current = TextNode(type='div')
- root = self.current
- at_line_start = True
- for i, t in enumerate(self.fixEntityTokens(raw_text.tokens, verbatim)):
- if self.current_cmd: # collect token in self.tokens_cmd
- self.handleCommand(t)
- continue
-
- if t.type in dox_tokens.WHITESPACE:
- if i == 0 or (i + 1) == len(raw_text.tokens):
- continue # Ignore leading and trailing whitespace.
- if t.type == 'SPACE' and at_line_start:
- continue # Ignore space at the beginning of a line.
- if t.type == 'BREAK':
- self.current.addChild(TextNode(text='\n'))
- else:
- self.current.addChild(TextNode(text=' '))
- elif not verbatim and t.type == 'HTML_TAG':
- at_line_start = False
- self.handleTag(t)
- elif not verbatim and t.type in self.commands:
- #print >>sys.stderr, 'command %s' % t
- at_line_start = False
- self.handleCommand(t)
- else:
- at_line_start = False
- # TODO(holtgrew): Escape values.
- self.current.addChild(TextNode(text=t.val))
- at_line_start = t.type in ['EMPTY_LINE', 'BREAK']
- if self.current_cmd:
- self.doc_proc.msg_printer.printTokenError(t, 'Open command %s!' % self.current_cmd, 'warning')
- return root
-
- def fixEntityTokens(self, tokens, verbatim):
- """Fix entities on a list of tokens.
-
- Ampersands opening entities that are not closed (i.e. EOF or space are
- hit) are replaced by '&'.
- """
- if verbatim:
- return tokens
- res = []
- buf = [] # Buffer when an ampersand was opened
- in_entity = False
- for token in tokens:
- if token.val == '&': # type is PUNCTUATION
- in_entity = True
- buf.append(token)
- elif any(c.isspace() for c in token.val):
- if in_entity:
- buf[0].val = '&'
- self.doc_proc.msg_printer.printTokenError(buf[0], 'Unclosed entity!', 'warning')
- res += buf
- res.append(token)
- in_entity = False
- buf = []
- elif token.val == ';': # type is PUNCTUATION
- in_entity = False
- res += buf
- res.append(token)
- buf = []
- elif in_entity:
- buf.append(token)
- else:
- res.append(token)
- if in_entity:
- buf[0].val = '&'
- self.doc_proc.msg_printer.printTokenError(buf[0], 'Unclosed entity!', 'warning')
- res += buf
- return res
-
- def process(self, raw_entry):
- raise Exception('Not implemented!')
-
-
-class EntryConverter(object):
- """Base class for the conversion of raw entries processed entries.
-
- @ivar doc_proc: DocProcessor object.
- @ivar entry_class: The class of the ProcEntry type to create.
- """
-
- def __init__(self, doc_proc):
- self.doc_proc = doc_proc
- self.entry_class = None
-
- def rawTextToTextNode(self, raw_text, strip_lt_line_space=False, verbatim=False):
- """Convert RawText object into a TextNode object.
-
- The text node will have the type 'div'.
-
- @param strip_lt_breaks_lines: Whether or not to remove leading
- space for lines.
- @param verbatim: Whether or not to convert HTML tags.
- """
- converter = RawTextToTextNodeConverter(
- strip_lt_line_space, expected_tags=self.doc_proc.expected_tags,
- doc_proc=self.doc_proc)
- return converter.run(raw_text, verbatim)
-
- def bodyToTextNode(self, raw_body):
- """Convert a RawBody to a TextNode."""
- res = TextNode(type='div')
- for p in raw_body.paragraphs:
- try:
- if p.getType() == 'paragraph':
- if not p.text.text.strip():
- continue # Skip whitespace
- p = self.rawTextToTextNode(p.text)
- p.type = 'p'
- res.addChild(p)
- elif p.getType() == 'section':
- h = self.rawTextToTextNode(p.heading)
- h.type = 'h%d' % (p.level + 1)
- res.addChild(h)
- elif p.getType() == 'include':
- # Including a whole file.
- ftype = os.path.splitext(p.path.text)[1]
- code_text = self.doc_proc.include_mgr.loadFile(p.path.text)
- proc_include = TextNode(type='dox:code', attrs={'type': ftype, 'source': 'include', 'path': p.path.text})
- proc_include.addChild(TextNode(text=code_text, verbatim=True))
- res.addChild(proc_include)
- elif p.getType() == 'snippet':
- # Including a snippet file.
- ftype = os.path.splitext(p.path.text)[1]
- code_text = self.doc_proc.include_mgr.loadSnippet(p.path.text, p.name.text)
- proc_snippet = TextNode(type='dox:code', attrs={'type': ftype, 'source': 'snippet', 'path': p.path.text})
- proc_snippet.addChild(TextNode(text=code_text, verbatim=True))
- res.addChild(proc_snippet)
- elif p.getType() == 'code':
- code_text = p.text.text
- type = '.txt'
- m = re.match(r'^{[^}]+}', code_text)
- if m:
- type = m.group(0)[1:-1]
- code_text = code_text[len(type) + 2:].strip()
- #print [repr(t.val) for t in p.text.tokens]
- x = TextNode(type='dox:code', attrs={'type': type})
- x.addChild(TextNode(text=code_text, verbatim=True))
- res.addChild(x)
- elif p.getType() == 'htmlonly':
- res.addChild(TextNode(text=p.text.text, verbatim=True))
- except inc_mgr.IncludeException, e:
- e2 = dox_parser.ParserError(msg=str(e), token=p.text.tokens[0])
- self.doc_proc.msg_printer.printParserError(e2)
- n = TextNode(type='div', attrs={'class': 'note warning'})
- n.children.append(TextNode(text=str(e)))
- res.addChild(n)
- return res
-
- def process(self, raw_entry):
- entry = self.entry_class(raw_entry, name=raw_entry.name.text)
- # Convert the title
- if raw_entry.title.text:
- entry.title_str = raw_entry.title.text
- # Convert first brief member. We already warned about duplicate ones
- # elsewhere.
- if raw_entry.briefs:
- entry.brief = self.rawTextToTextNode(raw_entry.briefs[0].text)
- # Convert the body
- if raw_entry.body:
- entry.body = self.bodyToTextNode(raw_entry.body)
- # Convert the sees entries.
- for see in raw_entry.sees:
- link = self.rawTextToTextNode(see.text)
- if see.text.text.startswith('http'):
- link.type = 'a'
- link.attrs['href'] = see.text.text
- link.attrs['target'] = '_top'
- else:
- link = self.rawTextToTextNode(see.text)
- link.type = 'a'
- link.attrs['href'] = 'seqan:%s' % see.text.text
- link.tokens = list(see.text.tokens)
- entry.sees.append(link)
- # Store the raw entry in the processed ones.
- entry.raw_entry = raw_entry
- return entry
-
-
-class CodeEntryConverter(EntryConverter):
- """Base for the processing RawCodeEntry objects into processed entries."""
-
- def __init__(self, doc_proc):
- EntryConverter.__init__(self, doc_proc)
- self.parse_signature = True
-
- def process(self, raw_entry):
- entry = EntryConverter.process(self, raw_entry)
- # Add headerfile paths as list of strings.
- for s in raw_entry.headerfiles:
- entry.addHeaderfile(s.text.text.strip())
- # Add deprecation messages, notes, warnings, and internal markers as list of TextNodes.
- for s in raw_entry.deprecation_msgs:
- entry.addDeprecationMsg(self.rawTextToTextNode(s.text, strip_lt_line_space=True))
- for s in raw_entry.notes:
- entry.addNote(self.rawTextToTextNode(s.text, strip_lt_line_space=True))
- for s in raw_entry.warnings:
- entry.addWarning(self.rawTextToTextNode(s.text, strip_lt_line_space=True))
- for s in raw_entry.internals:
- entry.addInternal(self.rawTextToTextNode(s.text, strip_lt_line_space=True))
- # Add aka messages as strings.
- for s in raw_entry.akas:
- entry.addAkas(s.text.text.strip())
- # Add signatures as a text node with code.
- for s in raw_entry.signatures:
- entry.addSignature(self.rawTextToTextNode(s.text, strip_lt_line_space=True,
- verbatim=True))
- # Use sig_parser to convert the signature texts to SigEntry objects.
- # They are used for the list of functions/metafunctions for a type.
- if self.parse_signature:
- for s in raw_entry.signatures:
- try:
- sig_entry = sig_parser.SigParser(s.text.text).parse()
- entry.addSignatureEntry(sig_entry)
- except sig_parser.SigParseException, e:
- pass
- #print >>sys.stderr, '\nWARNING: Could not parse signature: %s' % e
- #print >>sys.stderr, 'Signature is: %s' % s.text.text.strip()
-
- return entry
-
-
-class EnumConverter(CodeEntryConverter):
- def __init__(self, doc_proc):
- CodeEntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcEnum
-
- def process(self, raw_entry):
- return CodeEntryConverter.process(self, raw_entry)
-
-
-class AdaptionConverter(CodeEntryConverter):
- def __init__(self, doc_proc):
- CodeEntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcAdaption
- self.parse_signature = False
-
- def process(self, raw_entry):
- return CodeEntryConverter.process(self, raw_entry)
-
-
-class TypedefConverter(CodeEntryConverter):
- def __init__(self, doc_proc):
- CodeEntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcTypedef
- self.parse_signature = False
-
- def process(self, raw_entry):
- return CodeEntryConverter.process(self, raw_entry)
-
-
-class ConceptConverter(CodeEntryConverter):
- def __init__(self, doc_proc):
- CodeEntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcConcept
-
- def process(self, raw_entry):
- concept = CodeEntryConverter.process(self, raw_entry)
- for e in raw_entry.extends:
- concept.addExtends(e.text.text.strip())
- return concept
-
-
-class ClassConverter(CodeEntryConverter):
- def __init__(self, doc_proc):
- CodeEntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcClass
-
- def process(self, raw_entry):
- klass = CodeEntryConverter.process(self, raw_entry)
- for e in raw_entry.extends:
- klass.addExtends(e.text.text.strip())
- for e in raw_entry.implements:
- klass.addImplements(e.text.text.strip())
- for t in raw_entry.tparams:
- proc_tparam = ProcTParam(t)
- proc_tparam.type = t.name.text
- proc_tparam.desc = self.rawTextToTextNode(t.text)
- klass.addTParam(proc_tparam)
- return klass
-
-
-class TagConverter(CodeEntryConverter):
- def __init__(self, doc_proc):
- CodeEntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcTag
- self.parse_signature = False
-
- def process(self, raw_entry):
- tag = CodeEntryConverter.process(self, raw_entry)
- for t in raw_entry.tparams:
- proc_tparam = ProcTParam()
- proc_tparam.type = t.name.text
- proc_tparam.desc = self.rawTextToTextNode(t.text)
- tag.addTParam(proc_tparam)
- return tag
-
-
-class FunctionConverter(CodeEntryConverter):
- def __init__(self, doc_proc):
- CodeEntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcFunction
- self.in_out_map = {
- 'in': ProcParam.IN,
- 'out': ProcParam.OUT,
- 'in,out': ProcParam.IN_OUT,
- }
-
- def process(self, raw_entry):
- function = CodeEntryConverter.process(self, raw_entry)
- for p in raw_entry.params:
- proc_param = ProcParam(p)
- proc_param.name = p.name.text
- if p.inout:
- proc_param.in_out = self.in_out_map.get(p.inout.val[1:-1])
- proc_param.desc = self.rawTextToTextNode(p.text)
- function.addParam(proc_param)
- for t in raw_entry.tparams:
- proc_tparam = ProcTParam(t)
- proc_tparam.type = t.name.text
- proc_tparam.desc = self.rawTextToTextNode(t.text)
- function.addTParam(proc_tparam)
- for r in raw_entry.returns:
- proc_return = ProcReturn(r)
- proc_return.type = r.name.text
- proc_return.desc = self.rawTextToTextNode(r.text)
- function.addReturn(proc_return)
- for t in raw_entry.throws:
- proc_throw = ProcThrow(t)
- proc_throw.type = t.name.text
- proc_throw.desc = self.rawTextToTextNode(t.text)
- function.addThrow(proc_throw)
- for d in raw_entry.dataraces:
- proc_datarace = ProcDataRace(d)
- proc_datarace.desc = self.rawTextToTextNode(d.text)
- function.addDataRace(proc_datarace)
- return function
-
-
-class MacroConverter(CodeEntryConverter):
- def __init__(self, doc_proc):
- CodeEntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcMacro
- self.in_out_map = {
- 'in': ProcParam.IN,
- 'out': ProcParam.OUT,
- 'in,out': ProcParam.IN_OUT,
- }
- self.parse_signature = False
-
- def process(self, raw_entry):
- macro = CodeEntryConverter.process(self, raw_entry)
- for p in raw_entry.params:
- proc_param = ProcParam(p)
- proc_param.name = p.name.text
- if p.inout:
- proc_param.in_out = self.in_out_map.get(p.inout.val[1:-1])
- proc_param.desc = self.rawTextToTextNode(p.text)
- macro.addParam(proc_param)
- for r in raw_entry.returns:
- proc_return = ProcReturn(r)
- proc_return.type = r.name.text
- proc_return.desc = self.rawTextToTextNode(r.text)
- macro.addReturn(proc_return)
- for t in raw_entry.throws:
- proc_throw = ProcThrow(t)
- proc_throw.type = t.name.text
- proc_throw.desc = self.rawTextToTextNode(t.text)
- macro.addThrow(proc_throw)
- for d in raw_entry.dataraces:
- proc_datarace = ProcDataRace(d)
- proc_datarace.desc = self.rawTextToTextNode(d.text)
- macro.addDataRace(proc_datarace)
- return macro
-
-
-class MetafunctionConverter(CodeEntryConverter):
- def __init__(self, doc_proc):
- CodeEntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcMetafunction
-
- def process(self, raw_entry):
- metafunction = CodeEntryConverter.process(self, raw_entry)
- for t in raw_entry.tparams:
- proc_tparam = ProcTParam(t)
- proc_tparam.type = t.name.text
- proc_tparam.desc = self.rawTextToTextNode(t.text)
- metafunction.addTParam(proc_tparam)
- for r in raw_entry.returns:
- proc_return = ProcReturn(r)
- proc_return.type = r.name.text
- proc_return.desc = self.rawTextToTextNode(r.text)
- metafunction.addReturn(proc_return)
- return metafunction
-
-
-class VariableConverter(CodeEntryConverter):
- def __init__(self, doc_proc):
- CodeEntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcVariable
-
- def process(self, raw_entry):
- variable = CodeEntryConverter.process(self, raw_entry)
- if raw_entry.type:
- variable.type = raw_entry.type.text
- return variable
-
-
-class EnumValueConverter(CodeEntryConverter):
- def __init__(self, doc_proc):
- CodeEntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcEnumValue
-
- def process(self, raw_entry):
- enum_value = CodeEntryConverter.process(self, raw_entry)
- if raw_entry.type:
- enum_value.type = raw_entry.type.text
- return enum_value
-
-
-class TagStack(object):
- """Helper class for processing nested HTML tags."""
-
- def __init__(self):
- self.stack = []
-
- def push(self, token):
- pass
-
- def pop(self, token):
- pass
-
-
-class PageConverter(EntryConverter):
- """Process a RawPage into a Page object."""
-
- def __init__(self, doc_proc):
- EntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcPage
-
-
-class GroupConverter(EntryConverter):
- """Process a RawGroup into a Group object."""
-
- def __init__(self, doc_proc):
- EntryConverter.__init__(self, doc_proc)
- self.entry_class = ProcGroup
-
-
-class TextNodeVisitor(object):
- """Interface/abstract base class for visiting text nodes of entries or such."""
-
- def visit(self, text_node):
- """Visit TextNode, possibly translating its content.
-
- @param text_node: TextNode object or None.
- """
- pass
-
-
-class LinkChecker(TextNodeVisitor):
- """Check raw link targets.
-
- Raw links are links of the form <a href="seqan:$target">$label</a>.
- """
-
- def __init__(self, doc):
- self.doc = doc
-
- def visit(self, text_node):
- if not text_node or text_node.type == '<text>':
- return
- if text_node.type == 'a':
- self._checkLink(text_node)
- else:
- for i, c in enumerate(text_node.children):
- self.visit(text_node.children[i])
-
- def _checkLink(self, a_node):
- if not a_node.attrs.get('href', '').startswith('seqan:'):
- return
- target = a_node.attrs['href'][6:]
- # TODO(holtgrew): Catch target_title being None, target_path not found!
- if target not in self.doc.entries:
- # TODO(holtgrew): Cannot resolve from TextNode to Token :(
- msg = 'Cannot find documentation entry "%s".' % target
- self.doc.doc_processor.msg_printer.printTokenError(
- a_node.tokens[0], msg, 'error')
-
-
-class DocProcessor(object):
- """Convert a RawDoc object into a ProcDoc object.
-
- @ivar converters: Dict that maps RawEntry kinds to Converter objects.
- @ivar include_dirs: The bases path for including files that can be used in
- the @include and @snippet commands.
- @ivar include_mgr: inc_mgr.IncludeManager object for file/snippet
- inclusion.
- @ivar expected_tags: Iterateable of expected tag names. Will warn in
- conversion about unexpected tags if hit.
- @ivar msg_printer: The dox_parser.MessagePrinter instance to use for
- printing messages.
- """
-
- def __init__(self, logger=None, include_dirs=['.'], expected_tags=[],
- msg_printer=None):
- self.logger = logger
- self.include_dirs = list(include_dirs)
- self.include_mgr = inc_mgr.IncludeManager(self.include_dirs)
- self.expected_tags = set(expected_tags)
- self.converters = {
- 'class': ClassConverter(self),
- 'concept': ConceptConverter(self),
- 'enum': EnumConverter(self),
- 'adaption': AdaptionConverter(self),
- 'global_typedef': TypedefConverter(self),
- 'member_typedef': TypedefConverter(self),
- 'grouped_typedef': TypedefConverter(self),
- 'global_function': FunctionConverter(self),
- 'global_metafunction': MetafunctionConverter(self),
- 'defgroup': GroupConverter(self),
- 'grouped_macro' : MacroConverter(self),
- 'interface_function': FunctionConverter(self),
- 'interface_metafunction': MetafunctionConverter(self),
- 'macro' : MacroConverter(self),
- 'member_function': FunctionConverter(self),
- 'member_variable': VariableConverter(self),
- 'enum_value': EnumValueConverter(self),
- 'page': PageConverter(self),
- 'tag': TagConverter(self),
- 'grouped_tag': TagConverter(self),
- 'variable': VariableConverter(self),
- }
- self.msg_printer = msg_printer or dox_parser.MessagePrinter()
- self.validators = [x(self.msg_printer) for x in validation.VALIDATORS]
- self.entry_filenames = []
- self.topLevelEntry_filenames = {}
- self.secondLevelEntry_filenames = {}
-
- def run(self, doc):
- res = ProcDoc(self)
- self.entry_filenames = doc.filenames
- self.log('Processing Documentation...')
- self.convertTopLevelEntries(doc, res)
- self.convertSecondLevelEntries(doc, res)
- self.convertVariables(doc, res)
- self.checkLinks(doc, res)
- self.buildInheritanceLists(res)
- self.validate(res)
- return res
-
- def convertTopLevelEntries(self, doc, res):
- """Convert top level entries.
-
- Variables are not converted yet. They are converted in a separate
- step since they might encode enum values.
- """
- self.log(' 1) Converting Top-Level Entries.')
- #print 'doc.entries', [e.name.text for e in doc.entries]
- for index,raw_entry in enumerate(doc.entries):
- # Get fitting converter or warn if there is none.
- kind = raw_entry.getType()
- if not kind in ['concept', 'class', 'global_function',
- 'global_metafunction', 'page', 'tag',
- 'defgroup', 'macro', 'adaption', 'global_typedef', 'enum']:
- continue # Not a top-level entry.
- converter = self.converters.get(kind)
- if not converter:
- self.logWarning('Could not find converter for kind "%s".', kind)
- continue # Skip if no converter could be found.
- # Perform conversion.
- proc_entry = converter.process(raw_entry)
- # Store object in ProcDoc.
- #self.log(' * %s (%s)' % (proc_entry.name, proc_entry))
- res.addTopLevelEntry(proc_entry)
- self.topLevelEntry_filenames[proc_entry] = self.entry_filenames[index]
-
- def convertSecondLevelEntries(self, doc, res):
- self.log(' 2) Converting Second-Level Entries.')
- for index,raw_entry in enumerate(doc.entries):
- # Get fitting converter or warn if there is none.
- kind = raw_entry.getType()
- if not kind in ['member_function', 'interface_function',
- 'interface_metafunction',
- 'grouped_tag', 'grouped_macro', 'member_typedef',
- 'grouped_typedef']:
- continue # Not a top-level entry.
- converter = self.converters.get(kind)
- if not converter:
- self.logWarning('Could not find converter for kind "%s".', kind)
- continue # Skip if no converter could be found.
- # Perform conversion.
- proc_entry = converter.process(raw_entry)
- # Store object in ProcDoc.
- #self.log(' * %s' % proc_entry.name)
- res.addSecondLevelEntry(proc_entry)
- self.secondLevelEntry_filenames[proc_entry] = self.entry_filenames[index]
-
- def convertVariables(self, doc, res):
- self.log(' 3) Converting variable and enum value entries.')
- var_types = ['member_variable', 'grouped_variable', 'variable']
- for raw_entry in [e for e in doc.entries if e.getType() in var_types]:
- kind = raw_entry.getType()
- converter = self.converters.get(kind)
- if not converter:
- self.logWarning('Could not find converter for kind "%s".', kind)
- continue # Skip if no converter could be found.
- # Perform conversion.
- proc_entry = converter.process(raw_entry)
- # Store object in ProcDoc.
- #self.log(' * %s %s' % (proc_entry.type, proc_entry.name))
- res.addVariable(proc_entry)
- for raw_entry in [e for e in doc.entries if e.getType() == 'enum_value']:
- converter = self.converters.get(raw_entry.getType())
- if not converter:
- self.logWarning('Could not find converter for kind "%s".', kind)
- continue # Skip if no converter could be found.
- # Perform conversion.
- proc_entry = converter.process(raw_entry)
- # Store object in ProcDoc.
- #self.log(' * %s %s' % (proc_entry.type, proc_entry.name))
- res.addEnumValue(proc_entry)
-
- def checkLinks(self, doc, res):
- """Check <link> items of text nodes and references.
-
- References are given either explicitely in items like @extends and
- @implements.
- """
- self.log(' 3) Checking References.')
- link_checker = LinkChecker(res)
- for proc_entry in res.entries.values():
- proc_entry.visitTextNodes(link_checker)
-
- def buildInheritanceLists(self, doc):
- """Build lists regarding the inheritance in the classes and concepts in doc.
-
- We will build the equivalent to what Javadoc builds.
-
- For concepts, this is the list of (a) all extended concepts, (b) all
- known extending concepts, (c) all known implementing classes.
-
- For classes, this is the list of (a) all implemented concepts, (b) all
- direct known specializations, (c) all extended classes.
-
- @param doc: The ProcDoc object with the classes and concept.
-
- """
- self.log(' 4) Building Inheritance Lists.')
- # Process concepts: All extended and all extending.
- concepts = [x for x in doc.top_level_entries.values()
- if x.kind == 'concept']
- # Get all concepts that c extends into c.all_extended.
- for c in concepts:
- q = list(c.extends) # Queue for recursion
- while q:
- name = q[0]
- q.pop(0)
- if name in c.all_extended:
- continue # Skip to break loops.
- c.all_extended.add(name)
- q += doc.top_level_entries[name].extends
- # Now, build list of all extending concepts into c.all_extending.
- for c in concepts:
- for name in c.all_extended:
- doc.top_level_entries[name].all_extending.add(c.name)
- # Process classes: All extended and all extending classes.
- classes = [x for x in doc.top_level_entries.values()
- if x.kind in ['class', 'specialization']]
- # Get all classes that c extends into c.all_extended.
- for c in classes:
- q = list(c.extends) # Queue for recursion
- while q:
- name = q[0]
- q.pop(0)
- if name in c.all_extended:
- continue # Skip to break loops.
- c.all_extended.add(name)
- if name not in doc.top_level_entries:
- self.logWarning('Could not find entry for extending: %s', name)
- continue
- q += doc.top_level_entries[name].extends
- # Now, build list of all extending clsses into c.all_extending.
- for c in classes:
- for name in c.all_extended:
- if name not in doc.top_level_entries:
- self.logWarning('Could not find entry for extending: %s', name)
- continue
- doc.top_level_entries[name].all_extending.add(c.name)
- # Build list of all direct implementing classes for all concepts.
- for cl in classes:
- for name in cl.implements:
- if '\u0001' in name:
- continue # Skip transitive inheritance.
- if not doc.top_level_entries.get(name):
- self.logWarning('Could not find entry for implementing: %s', name)
- continue
- co = doc.top_level_entries[name]
- if co.kind != 'concept':
- self.logWarning('Only concepts can be implemented.')
- continue
- co.all_implementing.add(cl.name)
- co.all_implementing.update(cl.all_extending)
- # Build list of all implemented concepts for all classes.
- for co in concepts:
- for name in co.all_implementing:
- cl = doc.top_level_entries[name]
- cl.all_implemented.add(co.name)
- cl.all_implemented.update(co.all_extended) # inheritance
- # Update list of all implementing classes for all concepts (transitive)
- for cl in classes:
- for name in cl.all_implemented:
- co = doc.top_level_entries[name]
- co.all_implementing.add(cl.name)
-
- def validate(self, doc):
- """Execute validation using the validators from self.validators.
-
- @param doc: The ProcDoc object to validate.
- """
- self.log(' 5) Running validation.')
- for name, entry in doc.entries.iteritems():
- for v in self.validators:
- #print v, entry
- v.validate(entry)
-
- def log(self, msg, *args, **kwargs):
- """Print the given message to the configured logger if any.
- """
- if not self.logger:
- return
- self.logger.info(msg, *args, **kwargs)
-
- def logWarning(self, msg, *args, **kwargs):
- """Print the given message to the configured logger if any.
- """
- if not self.logger:
- return
- self.logger.warning('WARNING: ' + msg, *args, **kwargs)
diff --git a/util/py_lib/seqan/dox/pure.py b/util/py_lib/seqan/dox/pure.py
deleted file mode 100755
index 9ae6b76..0000000
--- a/util/py_lib/seqan/dox/pure.py
+++ /dev/null
@@ -1,210 +0,0 @@
-#!/usr/bin/env python2
-"""Implementation of the SeqAn Doxygen dialect.
-"""
-
-import argparse
-import ConfigParser
-import logging
-import os
-import re
-import sys
-
-import file_mgr
-import lexer
-import dox_tokens
-import dox_parser
-import proc_doc
-import raw_doc
-import write_html
-import migration
-
-
-# The expected HTML tags, useful for differentiating between F<T>::Type and real tags.
-EXPECTED_TAGS = ['a', 'ul', 'ol', 'li', 'dl', 'dt', 'dd', 'em', 'i', 'b',
- 'strong', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7', 'tt',
- 'table', 'tbody', 'tr', 'th', 'td', 'caption', 'sup', 'img',
- 'p', 'br', 'div', 'span', 'code', 'small', 'acronym', 'u']
-
-# Default colors to use.
-DEFAULT_COLORS = {
- 'red': '#de5b5b',
- 'orange': '#debd5b',
- 'lgreen': '#9dde5b',
- 'rgreen': '#5bde7c',
- 'lblue': '#5bdede',
- 'rblue': '#5b7cde',
- 'purple': '#9d5bde',
- 'pink': '#de5bbd'}
-
-# The known language entities.
-KNOWN_LANGUAGE_ENTITIES = [
- 'typedef', 'grouped_typedef', 'global_typedef', 'member_typedef',
- 'concept', 'class', 'specialization', 'enum', 'metafunction', 'global_metafunction', 'interface_metafunction',
- 'function', 'global_function', 'interface_function', 'member_function',
- 'tag', 'grouped_tag', 'variable', 'global_variable', 'member_variable',
- 'adaption', 'macro', 'group', 'page', 'template_parameter', 'tutorial', 'unknown']
-
-# Properties of language entities.
-LANGUAGE_ENTITIES_PROPERTIES = ['name', 'ideogram', 'color', 'description', 'belongsTo']
-
-
-class Config(object):
- """Stores configuration that can be loaded from an INI file.
-
- At the moment, the language entity related configuration such as
- colors and description of language entities can be read from the
- INI file. The HTML writer will then write the result to the
- lang_entities.js file and also use it in the generated HTML.
- """
-
- def __init__(self):
- self.colors = dict(DEFAULT_COLORS) # copy
- default = dict([(key, None) for key in LANGUAGE_ENTITIES_PROPERTIES])
- self.lang_entities = dict([(key, dict(default)) for key in KNOWN_LANGUAGE_ENTITIES])
-
- def load(self, file_name):
- """Load configuration from INI file."""
- config = ConfigParser.SafeConfigParser()
- config.read(file_name)
- # Get colors.
- for key in DEFAULT_COLORS.keys():
- try:
- self.colors[key] = config.get('colors', key)
- except ConfigParser.Error:
- pass # swallow
- # Load information about language entities.
- for name in KNOWN_LANGUAGE_ENTITIES:
- path = 'entity/%s' % name
- try:
- for prop in LANGUAGE_ENTITIES_PROPERTIES:
- self.lang_entities[name][prop] = config.get(path, prop)
- except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
- pass # swallow
-
-
-class FileNameSource(object):
- """Recursive traversal of directory hierarchy, generating doxumentable files.
-
- Create with list to paths to crawl. Then generate() creates a generator that
- yields all of these files.
-
- Attributes:
-
- paths -- list of strings of paths to crawl
- extensions -- list of strings with file extensions to yield in generate
- ignore -- list of strings with entry names to ignore
- """
-
- def __init__(self, paths):
- self.paths = paths
- self.extensions = ['.h', '.cpp', '.dox']
- self.ignore = ['.svn']
-
- def generate(self):
- for p in self.paths:
- if os.path.isfile(p):
- yield os.path.abspath(p)
- for root, subFolders, files in os.walk(p):
- for f in files:
- if f.startswith('.'):
- continue
- if not any([f.endswith(s) for s in self.extensions]):
- continue
- if any([f.startswith(s) for s in self.ignore]):
- continue
- yield os.path.join(root, f)
-
-
-def doMain(args):
- msg_printer = dox_parser.MessagePrinter(args.ignore_warnings_dirs)
-
- # Load configuration.
- config = Config()
- config.load('config.ini')
-
- # Parse all legacy files.
- import seqan.dddoc.core as core
- app = core.App()
- for path in args.legacy_doc_dirs:
- print 'Scanning %s...' % path
- app.loadFiles(path)
- migrated_doc = raw_doc.RawDoc()
- if args.legacy_doc_dirs:
- app.loadingComplete()
- migrated_doc.entries = migration.migrate(app.dddoc_tree)
- print 'migrated_doc.entries', [e.name.text for e in migrated_doc.entries]
- # Parse all normal input files.
- fmgr = file_mgr.FileManager()
- master_doc = raw_doc.RawDoc()
- master_doc.merge(migrated_doc)
- fns = FileNameSource(args.inputs)
- for filename in fns.generate():
- if args.debug:
- print 'Processing %s' % filename
- the_file = fmgr.loadFile(filename)
- lex = lexer.Lexer(dox_tokens.LEXER_TOKENS, skip_whitespace=False)
- for comment in the_file.comments:
- # TODO(holtgrew): Also give offset.
- lex.input(comment.text, filename, comment.line + 1, comment.col, comment.offset_col)
- parser = dox_parser.Parser()
- try:
- parser.parse(lex)
- except dox_parser.ParserError, e:
- msg_printer.printParserError(e)
- master_doc.merge(parser.documentation, filename)
- # Generate documentation.
- logging.basicConfig(format='%(message)s', level=logging.DEBUG)
- logger = logging.getLogger()
- processor = proc_doc.DocProcessor(logger=logger, include_dirs=args.base_dirs,
- expected_tags=args.expected_tags,
- msg_printer=msg_printer)
- try:
- doc_proc = processor.run(master_doc)
- except dox_parser.ParserError, e:
- msg_printer.printParserError(e)
- return 1
-
- # Validate documentation.
-
- # Generate resulting HTML
- html_writer = write_html.HtmlWriter(doc_proc, args, config)
- html_writer.generateFor()
-
- msg_printer.printStats()
- return (msg_printer.numWarnings() + msg_printer.numErrors() > 0)
-
-
-def main():
- # build command line parser and parse arguments
- parser = argparse.ArgumentParser()
- parser.add_argument('--lex-only', dest='lex_only', help='Lex only.',
- default=False, action='store_true')
- parser.add_argument('--debug', dest='debug', help='Debug.',
- default=False, action='store_true')
- parser.add_argument('-i', dest='inputs', help='Path to input.',
- action='append', default=[])
- parser.add_argument('-lx', dest='legacy_demo_dirs', help='Path to legacy demos.',
- action='append', default=[])
- parser.add_argument('-ldd', dest='legacy_doc_dirs', help='Path to legacy doc dirs.',
- action='append', default=[])
- parser.add_argument('--image-dir', dest='image_dirs', default=[],
- action='append', help='Path to image directory.')
- parser.add_argument('-b', '--base-dir', help='Base directory for @include.',
- default=['.'], dest='base_dirs', action='append')
- parser.add_argument('--expected-tags', help='Expected tags, warn about other tags.',
- action='append', default=EXPECTED_TAGS)
- parser.add_argument('--ignore-warnings', help='Ignore warnings from directory.',
- default=[], dest='ignore_warnings_dirs', action='append')
- parser.add_argument('--development', help='Use if you are changing/extending the '
- 'dox system itself or its templates.', default=False,
- action='store_true', dest='development')
- parser.add_argument('--out-dir', dest='out_dir', help='output directory', default=os.path.abspath('html'), nargs='?')
- args = parser.parse_args()
-
- # defer actual work to doMain()
- return doMain(args)
-
-
-if __name__ == '__main__':
- sys.exit(main())
-
diff --git a/util/py_lib/seqan/dox/raw_doc.py b/util/py_lib/seqan/dox/raw_doc.py
deleted file mode 100644
index 68324c6..0000000
--- a/util/py_lib/seqan/dox/raw_doc.py
+++ /dev/null
@@ -1,1429 +0,0 @@
-#!/usr/bin/env python2
-"""SeqAn documentation raw object representation.
-
-This is the direct representation as it can be determined from the embedded
-Doxygen-style comments without the interpretation of commands within clauses
-and cross-linking.
-"""
-
-import textwrap
-import dox_tokens
-import raw_doc
-
-class DoxFormatter(object):
- """Formatter for printing correctly indented and wrapped in Doxygen style.
- """
-
- def __init__(self, width=77):
- self.width = width
-
- def formatCommand(self, name, text, leading=None):
- """RawReturn string with a formatted command.
-
- The general format is "@$name $leading $text" where the text is wrapped
- to the end of leading.
- """
- if leading:
- res = ['@', name, ' ', leading, ' ']
- else:
- res = ['@', name, ' ']
- l = len(''.join(res))
- indent = ' ' * l
- wrapped_text = textwrap.wrap(text, self.width - l)
- if wrapped_text:
- res.append(wrapped_text[0])
- for x in wrapped_text[1:]:
- res += ['\n', indent, x]
- return ''.join(res) + '\n'
-
- def formatParagraph(self, text):
- """Format paragraph."""
- return '\n'.join(textwrap.wrap(text, self.width)) + '\n'
-
-
-class RawText(object):
- """List of token with easy concatenation into a string.
-
- This type is used for collecting lists of tokens.
-
- @ivar tokens: The list of token objects.
- """
-
- def __init__(self, tokens=[]):
- self.tokens = list(tokens)
-
- def append(self, token):
- """Append the token to the list of tokens.
-
- @param token: The lexer.Token object to add.
- @return: Nothing
- """
- self.tokens.append(token)
-
- @property
- def empty(self):
- """RawReturns whether the token set is empty.
-
- @return: Whether or not the token list is empty.
- """
- return not bool(self.tokens)
-
- @property
- def text(self):
- """RawReturns the concatenated tokens' text.
-
- @return: The concatenated tokens' text.
- """
- return ''.join([x.val for x in self.tokens])
-
- def __eq__(self, other):
- if not hasattr(other, 'tokens'):
- return False
- return self.tokens == other.tokens
-
-
-class RawDoc(object):
- """The documentation consists of a number of documentation objects.
-
- @ivar entries List of RawEntry objects.
- """
-
- def __init__(self):
- self.entries = []
- self.filenames = []
-
- def merge(self, other_doc, filename=''):
- for e in other_doc.entries:
- self.addEntry(e)
- self.filenames.append(filename)
-
- def addEntry(self, entry):
- self.entries.append(entry)
-
- def getFormatted(self, width=77):
- """Get formatted and normalized in dox format."""
- formatter = DoxFormatter(width)
- res = []
- first = True
- for entry in self.entries:
- res.append(entry.getFormatted(formatter))
- first = False
- return '\n\n'.join(res)
-
-
-class RawEntry(object):
- """One top-level entry of the documentation.
-
- @ivar first_token The first token for this entry.
- @ivar name The identifier of the entry.
- @ivar title The title of the entry.
- @ivar brief A string object with a brief summary of the entry.
- @ivar body A RawBody object with the entry's documentation.
- @ivar sees A list of RawSee objects.
- @ivar command The name of the command starting the entry type.
- """
-
- def __init__(self, first_token, briefs=[], command='<entry>'):
- self.first_token = first_token
- self.name = RawText()
- self.title = RawText()
- self.briefs = list(briefs)
- self.body = RawBody()
- self.sees = []
- self.command = command
-
- def addBrief(self, b):
- self.briefs.append(b)
-
- def addSee(self, see):
- while see.text.tokens and see.text.tokens[-1].type in dox_tokens.WHITESPACE:
- see.text.tokens.pop()
- self.sees.append(see)
-
- @classmethod
- def entryTypes(cls):
- """RawReturns iterable with all entry types."""
- res = ('concept', 'class', 'function', 'metafunction', 'page', 'enum', 'var',
- 'tag', 'defgroup', 'macro', 'enum_value')
- return res
-
- def addParagraph(self, p):
- self.body.addParagraph(p)
-
- def getFormatted(self, formatter):
- """Get formatted and normalized in dox format."""
- res = []
- if self.title.text:
- res.append(formatter.formatCommand(self.command, self.title.text,
- self.name.text))
- else:
- res.append(formatter.formatCommand(self.command, self.name.text))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res += ['\n', self.body.getFormatted(formatter)]
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
-
-class RawCodeEntry(RawEntry):
- """RawDoc for one code entry concept having a signature.
-
- @ivar signatures A list of RawSignature objects.
- """
-
- def __init__(self, first_token, briefs=[], command='<code entry>'):
- RawEntry.__init__(self, first_token, briefs=briefs, command=command)
- self.signatures = []
- self.headerfiles = []
- self.deprecation_msgs = []
- self.notes = []
- self.warnings = []
- self.akas = []
- self.internals = []
-
- def addSignature(self, s):
- self.signatures.append(s)
-
- def addHeaderfile(self, h):
- self.headerfiles.append(h)
-
- def addDeprecationMsg(self, d):
- self.deprecation_msgs.append(d)
-
- def addNote(self, n):
- self.notes.append(n)
-
- def addWarning(self, w):
- self.warnings.append(w)
-
- def addAka(self, a):
- self.akas.append(a)
-
- def addInternal(self, i):
- self.internals.append(i)
-
- def getType(self):
- return 'code'
-
- def __str__(self):
- res = RawEntry.__str__(self)
- return res + '\n' + '\n'.join([' @signature %s' % x for x in self.signatures])
-
- def getFormatted(self, formatter):
- res = []
- if self.title.text:
- res.append(formatter.formatCommand(self.command, self.title.text,
- self.name.text))
- else:
- res.append(formatter.formatCommand(self.command, self.name.text))
- if self.headerfiles:
- res.append('\n')
- if self.headerfiles:
- for x in self.headerfiles:
- res.append(x.getFormatted(formatter))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if self.deprecation_msgs or self.warnings or self.notes:
- res.append('\n')
- for x in self.deprecation_msgs:
- res.append(x.getFormatted(formatter))
- for x in self.warnings:
- res.append(x.getFormatted(formatter))
- for x in self.notes:
- res.append(x.getFormatted(formatter))
- if self.signatures:
- res.append('\n')
- for x in self.signatures:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res.append('\n')
- res += self.body.getFormatted(formatter)
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
-
-class RawVariable(RawCodeEntry):
- """RawDoc for one variable constant.
-
- @ivar type: The type of the variable as a RawText or None.
- """
-
- def __init__(self, first_token, briefs=[]):
- RawCodeEntry.__init__(self, first_token, briefs=briefs, command='var')
- self.type = None
-
- def getType(self):
- if '::' in self.name.text:
- return 'member_variable'
- else:
- return 'variable'
-
- def getFormatted(self, formatter):
- res = []
- if self.type:
- res.append(formatter.formatCommand(self.command, self.name.text + ';', self.type.text))
- else:
- res.append(formatter.formatCommand(self.command, self.name.text))
- if self.headerfiles:
- res.append('\n')
- if self.headerfiles:
- for x in self.headerfiles:
- res.append(x.getFormatted(formatter))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if self.deprecation_msgs or self.warnings or self.notes:
- res.append('\n')
- for x in self.deprecation_msgs:
- res.append(x.getFormatted(formatter))
- for x in self.warnings:
- res.append(x.getFormatted(formatter))
- for x in self.notes:
- res.append(x.getFormatted(formatter))
- if self.signatures:
- res.append('\n')
- for x in self.signatures:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res.append('\n')
- res += self.body.getFormatted(formatter)
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
-
-class RawEnumValue(RawVariable):
- """RawDoc for one enum value.
-
- @ivar type: The type of the variable as a RawText or None.
- """
-
- def __init__(self, first_token, briefs=[]):
- RawCodeEntry.__init__(self, first_token, briefs=briefs, command='val')
- self.type = None
-
- def getType(self):
- return 'enum_value'
-
-
-class RawTag(RawCodeEntry):
- """RawDoc for one tag."""
-
- def __init__(self, first_token, briefs=[]):
- RawCodeEntry.__init__(self, first_token, briefs=briefs, command='tag')
- self.tparams = []
-
- def addTParam(self, p):
- self.tparams.append(p)
-
- def getType(self):
- if '#' in self.name.text:
- return 'grouped_tag'
- else:
- return 'tag'
-
- def getFormatted(self, formatter):
- res = []
- if self.title.text:
- res.append(formatter.formatCommand(self.command, self.title.text,
- self.name.text))
- else:
- res.append(formatter.formatCommand(self.command, self.name.text))
- if self.headerfiles:
- res.append('\n')
- if self.headerfiles:
- for x in self.headerfiles:
- res.append(x.getFormatted(formatter))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if self.deprecation_msgs or self.warnings or self.notes:
- res.append('\n')
- for x in self.deprecation_msgs:
- res.append(x.getFormatted(formatter))
- for x in self.warnings:
- res.append(x.getFormatted(formatter))
- for x in self.notes:
- res.append(x.getFormatted(formatter))
- if self.signatures:
- res.append('\n')
- for x in self.signatures:
- res.append(x.getFormatted(formatter))
- for x in self.tparams:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res.append('\n')
- res += self.body.getFormatted(formatter)
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
-
-class RawConcept(RawCodeEntry):
- """RawDoc for one concept.
- """
-
- def __init__(self, first_token, briefs=[]):
- RawCodeEntry.__init__(self, first_token, briefs=briefs, command='concept')
- self.extends = []
-
- def addExtends(self, c):
- self.extends.append(c)
-
- def getType(self):
- return 'concept'
-
- def getFormatted(self, formatter):
- res = []
- if self.title.text:
- res.append(formatter.formatCommand(self.command, self.title.text,
- self.name.text))
- else:
- res.append(formatter.formatCommand(self.command, self.name.text))
- if self.headerfiles:
- res.append('\n')
- if self.headerfiles:
- for x in self.headerfiles:
- res.append(x.getFormatted(formatter))
- if self.extends:
- res.append('\n')
- for x in self.extends:
- res.append(x.getFormatted(formatter))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if self.deprecation_msgs or self.warnings or self.notes:
- res.append('\n')
- for x in self.deprecation_msgs:
- res.append(x.getFormatted(formatter))
- for x in self.warnings:
- res.append(x.getFormatted(formatter))
- for x in self.notes:
- res.append(x.getFormatted(formatter))
- if self.signatures:
- res.append('\n')
- for x in self.signatures:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res.append('\n')
- res += self.body.getFormatted(formatter)
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
-
-class RawEnum(RawCodeEntry):
- """RawDoc for one enum."""
-
- def __init__(self, first_token, briefs=[]):
- RawCodeEntry.__init__(self, first_token, briefs=briefs, command='enum')
-
- def getType(self):
- return 'enum'
-
-
-class RawTypedef(RawCodeEntry):
- """RawDoc for one typedef."""
-
- def __init__(self, first_token, briefs=[]):
- RawCodeEntry.__init__(self, first_token, briefs=briefs, command='typedef')
-
- def getType(self):
- if '#' in self.name.text:
- return 'grouped_typedef'
- elif '::' in self.name.text:
- return 'member_typedef'
- else:
- return 'global_typedef'
-
-
-class RawAdaption(RawCodeEntry):
- """RawDoc for one adaption."""
-
- def __init__(self, first_token, briefs=[]):
- RawCodeEntry.__init__(self, first_token, briefs=briefs, command='adaption')
-
- def getType(self):
- return 'adaption'
-
-
-class RawClass(RawCodeEntry):
- """RawDoc for one class.
-
- @ivar tparams List of RawParameter objects.
- """
-
- def __init__(self, first_token, briefs=[]):
- RawCodeEntry.__init__(self, first_token, briefs=briefs, command='class')
- self.extends = []
- self.implements = []
- self.tparams = []
-
- def addTParam(self, p):
- self.tparams.append(p)
-
- def addExtends(self, p):
- self.extends.append(p)
-
- def addImplements(self, p):
- self.implements.append(p)
-
- def getType(self):
- return 'class'
-
- def getFormatted(self, formatter):
- res = []
- if self.title.text:
- res.append(formatter.formatCommand(self.command, self.title.text,
- self.name.text))
- else:
- res.append(formatter.formatCommand(self.command, self.name.text))
- if self.implements:
- res.append('\n')
- for x in self.implements:
- res.append(x.getFormatted(formatter))
- if self.extends:
- res.append('\n')
- for x in self.extends:
- res.append(x.getFormatted(formatter))
- if self.headerfiles:
- res.append('\n')
- if self.headerfiles:
- for x in self.headerfiles:
- res.append(x.getFormatted(formatter))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if self.deprecation_msgs or self.warnings or self.notes:
- res.append('\n')
- for x in self.deprecation_msgs:
- res.append(x.getFormatted(formatter))
- for x in self.warnings:
- res.append(x.getFormatted(formatter))
- for x in self.notes:
- res.append(x.getFormatted(formatter))
- if self.signatures:
- res.append('\n')
- for x in self.signatures:
- res.append(x.getFormatted(formatter))
- if self.tparams:
- res.append('\n')
- for x in self.tparams:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res.append('\n')
- res += self.body.getFormatted(formatter)
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
- def __str__(self):
- res = RawCodeEntry.__str__(self)
- s = res + '\n'
- if self.tparams:
- s += '\n'.join([' @tparam %s' % s for s in self.tparams]) + '\n'
- return s
-
-
-class RawFunction(RawCodeEntry):
- """RawDoc for one function.
-
- @ivar tparams List of RawParameter objects.
- @ivar params List of RawParameter objects.
- @ivar returns List of RawReturn objects.
- @ivar throw List of RawThrow objects.
- @ivar datarace List of RawDataRace objects.
- """
-
- def __init__(self, first_token, briefs=[]):
- RawCodeEntry.__init__(self, first_token, briefs=briefs, command='fn')
- self.tparams = []
- self.params = []
- self.returns = []
- self.throws = []
- self.dataraces = []
-
- def addTParam(self, p):
- self.tparams.append(p)
-
- def addParam(self, p):
- self.params.append(p)
-
- def addReturn(self, p):
- self.returns.append(p)
-
- def addThrow(self, t):
- self.throws.append(t)
-
- def addDataRace(self, d):
- self.dataraces.append(d)
-
- def getType(self):
- if '#' in self.name.text:
- return 'interface_function'
- elif '::' in self.name.text:
- return 'member_function'
- else:
- return 'global_function'
-
- def getFormatted(self, formatter):
- res = []
- res.append(formatter.formatCommand(self.command, self.name.text))
- if self.headerfiles:
- res.append('\n')
- if self.headerfiles:
- for x in self.headerfiles:
- res.append(x.getFormatted(formatter))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if self.deprecation_msgs or self.warnings or self.notes:
- res.append('\n')
- for x in self.deprecation_msgs:
- res.append(x.getFormatted(formatter))
- for x in self.warnings:
- res.append(x.getFormatted(formatter))
- for x in self.notes:
- res.append(x.getFormatted(formatter))
- if self.signatures:
- res.append('\n')
- for x in self.signatures:
- res.append(x.getFormatted(formatter))
- if self.tparams:
- res.append('\n')
- for x in self.tparams:
- res.append(x.getFormatted(formatter))
- if self.params:
- res.append('\n')
- for x in self.params:
- res.append(x.getFormatted(formatter))
- if self.returns:
- res.append('\n')
- for x in self.returns:
- res.append(x.getFormatted(formatter))
- if self.throws:
- res.append('\n')
- for x in self.throws:
- res.append(x.getFormatted(formatter))
- if self.dataraces:
- res.append('\n')
- for x in self.dataraces:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res.append('\n')
- res += self.body.getFormatted(formatter)
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
- def __str__(self):
- res = RawCodeEntry.__str__(self)
- res += '\n' + '\n'.join([' @return %s ' % x for x in self.returns])
- res += '\n' + '\n'.join([' @tparam %s ' % x for x in self.tparams])
- res += '\n' + '\n'.join([' @param %s ' % x for x in self.params])
- res += '\n'
- return res
-
-
-class RawMacro(RawCodeEntry):
- """RawDoc for one function.
-
- @ivar params List of RawParameter objects.
- @ivar returns List of RawReturn objects.
- @ivar throws List of RawThrow objects.
- @ivar dataraces List of RawDataRace objects.
- """
-
- def __init__(self, first_token, briefs=[]):
- RawCodeEntry.__init__(self, first_token, briefs=briefs, command='macro')
- self.params = []
- self.returns = []
- self.throws = []
- self.dataraces = []
-
- def addParam(self, p):
- self.params.append(p)
-
- def addReturn(self, p):
- self.returns.append(p)
-
- def addThrow(self, t):
- self.throws.append(t)
-
- def addDataRace(self, d):
- self.dataraces.append(d)
-
- def getType(self):
- if '#' in self.name.text:
- return 'grouped_macro'
- else:
- return 'macro'
-
- def getFormatted(self, formatter):
- res = []
- res.append(formatter.formatCommand(self.command, self.name.text))
- if self.headerfiles:
- res.append('\n')
- if self.headerfiles:
- for x in self.headerfiles:
- res.append(x.getFormatted(formatter))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if self.deprecation_msgs or self.warnings or self.notes:
- res.append('\n')
- for x in self.deprecation_msgs:
- res.append(x.getFormatted(formatter))
- for x in self.warnings:
- res.append(x.getFormatted(formatter))
- for x in self.notes:
- res.append(x.getFormatted(formatter))
- if self.signatures:
- res.append('\n')
- for x in self.signatures:
- res.append(x.getFormatted(formatter))
- if self.params:
- res.append('\n')
- for x in self.params:
- res.append(x.getFormatted(formatter))
- if self.returns:
- res.append('\n')
- for x in self.returns:
- res.append(x.getFormatted(formatter))
- if self.throws:
- res.append('\n')
- for x in self.throws:
- res.append(x.getFormatted(formatter))
- if self.dataraces:
- res.append('\n')
- for x in self.dataraces:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res.append('\n')
- res += self.body.getFormatted(formatter)
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
- def __str__(self):
- res = RawCodeEntry.__str__(self)
- res += '\n' + '\n'.join([' @return %s ' % x for x in self.returns])
- res += '\n' + '\n'.join([' @tparam %s ' % x for x in self.tparams])
- res += '\n' + '\n'.join([' @param %s ' % x for x in self.params])
- res += '\n'
- return res
-
-
-class RawMetafunction(RawCodeEntry):
- """RawDoc for one metafunction.
-
- @ivar tparams List of RawParameter objects.
- @ivar returns List of RawReturn objects.
- """
-
- def __init__(self, first_token, briefs=[]):
- RawCodeEntry.__init__(self, first_token, briefs=briefs)
- self.tparams = []
- self.returns = []
- self.command = 'mfn'
-
- def addTParam(self, p):
- self.tparams.append(p)
-
- def addReturn(self, p):
- self.returns.append(p)
-
- def getType(self):
- if '#' in self.name.text:
- return 'interface_metafunction'
- else:
- return 'global_metafunction'
-
- def getFormatted(self, formatter):
- res = []
- res.append(formatter.formatCommand(self.command, self.name.text))
- if self.headerfiles:
- res.append('\n')
- if self.headerfiles:
- for x in self.headerfiles:
- res.append(x.getFormatted(formatter))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if self.deprecation_msgs or self.warnings or self.notes:
- res.append('\n')
- for x in self.deprecation_msgs:
- res.append(x.getFormatted(formatter))
- for x in self.warnings:
- res.append(x.getFormatted(formatter))
- for x in self.notes:
- res.append(x.getFormatted(formatter))
- if self.signatures:
- res.append('\n')
- for x in self.signatures:
- res.append(x.getFormatted(formatter))
- if self.tparams:
- res.append('\n')
- for x in self.tparams:
- res.append(x.getFormatted(formatter))
- if self.returns:
- res.append('\n')
- for x in self.returns:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res.append('\n')
- res += self.body.getFormatted(formatter)
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
-
-class RawPage(RawEntry):
- """A page in the documentation."""
-
- def __init__(self, first_token, briefs=[]):
- RawEntry.__init__(self, first_token, briefs=briefs)
- self.command = 'page'
-
- def getType(self):
- return 'page'
-
- def getFormatted(self, formatter):
- res = []
- if self.title.text:
- res.append(formatter.formatCommand(self.command, self.title.text,
- self.name.text))
- else:
- res.append(formatter.formatCommand(self.command, self.name.text))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res.append('\n')
- res += self.body.getFormatted(formatter)
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
-
-class RawMainPage(RawPage):
- """The main page in the documentation."""
-
- def __init__(self, first_token, briefs=[]):
- RawPage.__init__(self, first_token, briefs=briefs)
- self.command = 'mainpage'
-
- def getType(self):
- return 'page'
-
- def getFormatted(self, formatter):
- res = []
- if self.title.text:
- res.append(formatter.formatCommand(self.command, self.title.text))
- else:
- res.append(formatter.formatCommand(self.command, 'NO TITLE'))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res.append('\n')
- res += self.body.getFormatted(formatter)
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
-
-class RawGroup(RawEntry):
- """A group in the documentation."""
-
- def __init__(self, first_token, briefs=[]):
- RawEntry.__init__(self, first_token, briefs=briefs)
- self.command = 'defgroup'
-
- def getType(self):
- return 'defgroup'
-
- def getFormatted(self, formatter):
- res = []
- if self.title.text:
- res.append(formatter.formatCommand(self.command, self.title.text,
- self.name.text))
- else:
- res.append(formatter.formatCommand(self.command, self.name.text))
- if self.briefs:
- res.append('\n')
- for x in self.briefs:
- res.append(x.getFormatted(formatter))
- if not self.body.empty:
- res.append('\n')
- res += self.body.getFormatted(formatter)
- if self.sees:
- res.append('\n')
- for x in self.sees:
- res.append(x.getFormatted(formatter))
- res.append('\n')
- return ''.join(res)
-
-
-class RawBody(object):
- """A documentation body consists of multiple RawParagraph, RawSection, RawInclude objects.
-
- @ivar entries A list of RawParagraph and RawSection objects.
- """
-
- def __init__(self):
- self.first_token = None
- self.paragraphs = []
-
- def addParagraph(self, p):
- self.paragraphs.append(p)
-
- def getFormatted(self, formatter):
- res = []
- for p in self.paragraphs:
- res.append(p.getFormatted(formatter))
- return '\n'.join(res)
-
- @property
- def empty(self):
- return not bool(self.paragraphs)
-
- def __eq__(self, other):
- return self.paragraphs == other.paragraphs
-
-
-class RawSection(object):
- """Represents one section or subsection.
-
- @ivar level An int with the indentation level, starts at 0.
- @ivar heading The text of the heading.
- """
-
- def getType(self):
- return 'section'
-
- def __init__(self, first_token, heading=RawText(), level=0):
- self.first_token = first_token
- self.heading = heading
- self.level = level
-
- def __str__(self):
- if self.level == 0:
- return 'Section(%s)' % (repr(self.heading.text))
- else:
- return 'Sub%ssection(%s)' % (''.join(['sub'] * (self.level - 1)), repr(self.heading.text))
-
- def getCommand(self):
- if self.level == 0:
- return 'section'
- else:
- return 'sub%ssection' % ''.join(['sub'] * (self.level - 1))
-
- def getFormatted(self, formatter):
- res = [formatter.formatCommand(self.getCommand(), self.heading.text.strip())]
- return ''.join(res)
-
-
-class RawInclude(object):
- """An @include statement.
-
- @ivar path A RawText object with the path to the included file.
- @ivar text Alias of path.
- @ivar tokens List of tokens for the include statement.
- """
-
- def __init__(self, first_token, tokens):
- self.first_token = first_token
- self.tokens = list(tokens)
- self.path = RawText(tokens)
- self.text = self.path
-
- def getType(self):
- return 'include'
-
- def __str__(self):
- return 'RawInclude(%s)' % (repr(self.path.text),)
-
- def getFormatted(self, formatter):
- res = ['@include ', self.path.text.strip(), '\n']
- return ''.join(res)
-
-
-class RawSnippet(object):
- """A @snippet statement.
-
- @ivar tokens: A list of Token object.
- @ivar path: A RawText object with the path to the included file.
- @ivar name: The name of the snippet, a RawText.
- @ivar text: Alias to path, such that the begin token can be retrieved by
- looking at text in exception handling.
- """
-
- def __init__(self, first_token, path_tokens, name_tokens):
- self.first_token = first_token
- self.tokens = path_tokens + name_tokens
- self.path = raw_doc.RawText(path_tokens)
- self.name = raw_doc.RawText(name_tokens)
- self.text = self.path
-
- def getType(self):
- return 'snippet'
-
- def __str__(self):
- return 'RawSnippet(%s, %s)' % (repr(self.path.text),
- repr(self.name.text))
-
- def getFormatted(self, formatter):
- res = ['@snippet ', self.path.text.strip(), ' ', self.name.text.strip(), '\n']
- return ''.join(res)
-
-
-class RawParagraph(object):
- """A paragraph in the RawBody of an RawEntry object's documentation.
-
- @ivar text A string with the paragraph's text.
- """
-
- def __init__(self, first_token, text=RawText()):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'paragraph'
-
- def __str__(self):
- return 'RawParagraph(%s)' % (repr(self.text.text))
-
- def getFormatted(self, formatter):
- return formatter.formatParagraph(self.text.text)
-
-
-class RawCode(RawParagraph):
- """A special paragraph that is rendered as code.
-
- @ivar extension The extension identifying the language.
- """
-
- def __init__(self, first_token, text=RawText(), extension='.txt'):
- RawParagraph.__init__(self, first_token, text)
- self.extension = extension
-
- def getType(self):
- return 'code'
-
- def __str__(self):
- return 'RawCode(%s)' % repr(self.text)
-
- def getFormatted(self, formatter):
- return '@code%s at endcode' % self.text.text
-
-
-class RawHtmlOnly(RawParagraph):
- """A special paragraph that is directly put into HTML."""
-
- def __init__(self, first_token, text=RawText()):
- RawParagraph.__init__(self, first_token, text)
-
- def getType(self):
- return 'htmlonly'
-
- def __str__(self):
- return 'RawHtmlOnly(%s)' % repr(self.text)
-
- def getFormatted(self, formatter):
- return '@endhtmlonly%s at endhtmlonly' % self.text.text
-
-
-class RawBrief(object):
- """A representation of a @brief entry.
-
- @ivar text The @brief clauses's text.
- """
-
- def __init__(self, first_token, text):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'brief'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('brief', self.text.text.strip())
-
- def __str__(self):
- return 'RawBrief(%s)' % repr(self.text)
-
- def __eq__(self, other):
- return self.text == other.text
-
-
-class RawExtends(object):
- """A representation of a @extends entry.
-
- @ivar text The @extends clauses's text.
- """
-
- def __init__(self, first_token, text):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'extends'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('extends', self.text.text.strip())
-
- def __str__(self):
- return 'RawExtends(%s)' % repr(self.text)
-
- def __eq__(self, other):
- return self.text == other.text
-
-
-class RawImplements(object):
- """A representation of a @implements entry.
-
- @ivar text The @implements clauses's text.
- """
-
- def __init__(self, first_token, text):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'implements'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('implements', self.text.text.strip())
-
- def __str__(self):
- return 'RawImplements(%s)' % repr(self.text)
-
- def __eq__(self, other):
- return self.text == other.text
-
-
-class RawHeaderfile(object):
- """A representation of a @headerfile entry.
-
- @ivar text The @headerfile clauses's text.
- """
-
- def __init__(self, first_token, text):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'headerfile'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('headerfile', self.text.text.strip())
-
- def __str__(self):
- return 'RawHeaderfile(%s)' % repr(self.text)
-
- def __eq__(self, other):
- return self.text == other.text
-
-
-class RawDeprecated(object):
- """A representation of a @deprecated entry.
-
- @ivar text The @deprecated clauses's text.
- """
-
- def __init__(self, first_token, text):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'deprecated'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('deprecated', self.text.text.strip())
-
- def __str__(self):
- return 'RawDeprecated(%s)' % repr(self.text)
-
- def __eq__(self, other):
- return self.text == other.text
-
-
-class RawNote(object):
- """A representation of a @note entry.
-
- @ivar text The @note clauses's text.
- """
-
- def __init__(self, first_token, text):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'note'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('note', self.text.text.strip())
-
- def __str__(self):
- return 'RawNote(%s)' % repr(self.text)
-
- def __eq__(self, other):
- return self.text == other.text
-
-
-class RawWarning(object):
- """A representation of a @warning entry.
-
- @ivar text The @warning clauses's text.
- """
-
- def __init__(self, first_token, text):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'warning'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('warning', self.text.text.strip())
-
- def __str__(self):
- return 'RawWarning(%s)' % repr(self.text)
-
- def __eq__(self, other):
- return self.text == other.text
-
-
-class RawAka(object):
- """A representation of an @aka entry.
-
- @ivar text The @aka clauses's text.
- """
-
- def __init__(self, first_token, text):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'aka'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('aka', self.text.text.strip())
-
- def __str__(self):
- return 'RawAka(%s)' % repr(self.text)
-
- def __eq__(self, other):
- return self.text == other.text
-
-
-class RawInternal(object):
- """A representation of a @internal entry.
-
- @ivar text The @internal clauses's text.
- """
-
- def __init__(self, first_token, text):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'internal'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('internal', self.text.text.strip())
-
- def __str__(self):
- return 'RawInternal(%s)' % repr(self.text)
-
- def __eq__(self, other):
- return self.text == other.text
-
-
-class RawSee(object):
- """A representation of a @see entry.
-
- @ivar text The @see clauses's parameter.
- """
-
- def __init__(self, first_token, text):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'see'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('see', self.text.text)
-
-
-class RawParam(object):
- """RawDoc for one parameter.
-
- @ivar name Name of the parameter.
- @ivar inout String in {'', 'in', 'out', 'in,out'} describing mutability.
- @ivar text RawParagraph entry with the documentation of the parameter.
- """
-
- def getType(self):
- return 'param'
-
- def __init__(self, first_token, name=RawText(), text=RawText(), inout=None):
- self.first_token = first_token
- self.name = name
- self.inout = inout
- self.text = text
-
- def __str__(self):
- inout = ''
- if self.inout:
- inout = self.inout.val
- return ' @param%s %s %s' % (inout, self.name.text, self.text.text)
-
- def getFormatted(self, formatter):
- inout = ''
- if self.inout:
- inout = self.inout.val
- return formatter.formatCommand('param%s' % inout, self.text.text, self.name.text)
-
-
-class RawTParam(RawParam):
- """RawDoc for one template parameter.
-
- @ivar name Name of the parameter.
- @ivar text RawParagraph entry with the documentation of the parameter.
- """
-
- def getType(self):
- return 'tparam'
-
- def __init__(self, first_token, name=RawText(), text=RawText(), in_out=None):
- RawParam.__init__(self, first_token, name, text)
-
- def __str__(self):
- return 'RawTParam(%s, %s)' % (repr(self.name.text), repr(self.text.text))
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('tparam', self.text.text, self.name.text)
-
-
-class RawReturn(RawParam):
- """RawDoc for one return description.
-
- @ivar type The return type.
- @ivar text RawParagraph entry with the documentation of the parameter.
- """
-
- def __init__(self, first_token, name=RawText(), text=RawText(), in_out=None):
- RawParam.__init__(self, first_token, name, text)
-
- def getType(self):
- return 'return'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('return', self.text.text, self.name.text)
-
-
-class RawThrow(RawParam):
- """RawDoc for one throw description.
-
- @ivar type The thrown type.
- @ivar text RawParagraph entry with the documentation of the parameter.
- """
-
- def __init__(self, first_token, name=RawText(), text=RawText(), in_out=None):
- RawParam.__init__(self, first_token, name, text)
-
- def getType(self):
- return 'throw'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('throw', self.text.text, self.name.text)
-
-
-class RawDataRace(object):
- """RawDoc for one data race description.
-
- @ivar text The @datarace clauses's parameter.
- """
-
- def __init__(self, first_token, text=RawText()):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'datarace'
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('datarace', self.text.text)
-
-
-class RawSignature(object):
- """A representation of a @signature entry.
-
- @ivar value The @signature's clauses's parameter. RawText.
- """
-
- def __init__(self, first_token, text):
- self.first_token = first_token
- self.text = text
-
- def getType(self):
- return 'signature'
-
- def __str__(self):
- return 'RawSignature(%s)' % repr(self.text.text)
-
- def getFormatted(self, formatter):
- return formatter.formatCommand('signature', self.text.text.strip())
-
diff --git a/util/py_lib/seqan/dox/sig_parser.py b/util/py_lib/seqan/dox/sig_parser.py
deleted file mode 100644
index 8ba8745..0000000
--- a/util/py_lib/seqan/dox/sig_parser.py
+++ /dev/null
@@ -1,327 +0,0 @@
-#!/usr/bin/env python2
-"""Parser for the signature supported by the SeqAn Doxygen-style documentation.
-"""
-
-# TODO(holtgrew): The parser has become quite complex. Maybe using some external library for parsing is in order.
-
-import sys
-
-import lexer
-
-
-TOKENS = (
- ('KWD_TEMPLATE', r'template'),
- ('KWD_TYPENAME', r'typename'),
- ('KWD_CLASS', r'class'),
- ('KWD_CONCEPT', r'concept'),
- ('KWD_STRUCT', r'struct'),
- ('KWD_ENUM', r'enum'),
-
- ('IDENTIFIER', r'[a-zA-Z_~][a-zA-Z_0-9~]*'),
- ('COMMA', r','),
- ('NAME_SEP', r'::'),
- ('HASH', r'#'),
- ('SEMICOLON', r';'),
- ('SPACE', r'[\t ]'),
- ('PROUND_OPEN', r'\('),
- ('PROUND_OPEN', r'\('),
- ('PROUND_CLOSE', r'\)'),
- ('PANGULAR_OPEN' , r'<'),
- ('PANGULAR_CLOSE', r'>'),
- )
-
-
-class SigParseException(Exception):
- """Raised in the case of signature parsing error."""
-
- def __init__(self, msg, line=0, column=0):
- Exception.__init__(self, msg)
- self.line = line
- self.column = column
-
-
-class Arg(object):
- """
- @ivar type: The type of the template parameter, e.g. 'typename',
- 'class', 'int', 'unsigned' etc. str
- @ivar name: The name of the parameter. str
- """
-
- def __init__(self, type=None, name=None):
- self.type = type
- self.name = name
-
-
-class SigEntry(object):
- """A signature entry.
-
- The following kinds are possible: concept, class, function, variable,
- enum, struct.
-
- @ivar name: Name of the element.
- @ivar kind: The kind of the element.
- @ivar params: Parameters of the function, in case of function.
- @ivar is_tpl: Whether or not the entry is a template.
- @ivar tparams: Template parameters, in case of templates.
- @ivar return_type: The name of the return type, in case of function.
- @ivar return_name: Name after the :: for Metafunctions.
- @ivar var_type: The type of the variable.
-
- """
-
- def __init__(self, name=None, kind=None, params=[], tparams=[],
- is_tpl=False, return_type=None, return_name=None,
- var_type=None):
- self.name = name
- self.kind = kind
- self.params = list([])
- self.tparams = list([])
- self.is_tpl = is_tpl
- self.return_type = return_type
- self.return_name = return_name
- self.var_type = var_type
-
- def toString(self):
- """Convert the SigEntry object back into a string."""
- types = ['concept', 'class', 'struct', 'enum']
- if not self.is_tpl and self.kind in types:
- return '%s %s;' % (self.kind, self.name)
- elif not self.is_tpl and self.kind == 'function':
- params = ', '.join(['%s %s' % (p.type, p.name) for p in self.params])
- if self.return_type:
- return '%s %s(%s);' % (self.return_type, self.name, params)
- else:
- return '%s(%s);' % (self.name, params)
- elif self.is_tpl and self.kind == 'function':
- tparams = ', '.join(['%s %s' % (p.type, p.name) for p in self.tparams])
- params = ', '.join(['%s %s' % (p.type, p.name) for p in self.params])
- return 'template <%s>\n%s %s(%s);' % (tparams, self.return_type, self.name, params)
- elif self.is_tpl and self.kind in ['struct', 'class']:
- tparams = ', '.join(['%s %s' % (p.type, p.name) for p in self.tparams])
- params = ', '.join(['%s %s' % (p.type, p.name) for p in self.params])
- return 'template <%s>\n%s %s;' % (tparams, self.kind, self.name)
- elif self.kind == 'metafunction':
- tparams = ', '.join([p.name for p in self.tparams])
- if self.return_type:
- return '%s %s<%s>::%s;' % (self.return_type, self.name, tparams,
- self.return_name)
- else:
- return '%s<%s>::%s;' % (self.name, tparams, self.return_name)
- elif self.kind == 'variable':
- return '%s %s;' % (self.var_type, self.name)
-
-
-class SigParser(object):
- def __init__(self, buffer):
- self.buffer = buffer
- self.lexer = lexer.Lexer(TOKENS)
- self.lexer.input(buffer)
- self.tokens = self.lexer.tokens()
-
- def parseTemplate(self, token):
- tparams = []
- # Read <
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type != 'PANGULAR_OPEN':
- raise SigParseException('Expected opening angular parenthesis')
- # Parse template parameters.
- self.parseParams('PANGULAR_CLOSE', tparams,
- ['IDENTIFIER', 'KWD_TYPENAME', 'KWD_CLASS'])
- # Parse remaining.
- sig_entry = self.parse()
- sig_entry.is_tpl = True
- sig_entry.tparams = tparams
- return sig_entry
-
- def parseParams(self, end_token, params_dest, type_tokens):
- t = self.tokens.next()
- self.expectNotEof(t)
- while t.type != end_token:
- if t.type not in type_tokens:
- raise SigParseException('Expected identifier got "%s"' % t.val)
- arg = Arg(type=t.val)
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type != 'IDENTIFIER':
- raise SigParseException('Expected identifier got "%s"' % t.val)
- arg.name = t.val
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type not in ['COMMA', end_token]:
- raise SigParseException('Expected COMMA or closing parenthesis')
- if t.type != end_token:
- t = self.tokens.next()
- params_dest.append(arg)
-
- def parseMetafunctionType(self, name):
- sig_entry = SigEntry(kind='metafunction')
- sig_entry.name = name
- # Expect "#$name" or PANGULAR_CLOSE
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type == 'HASH':
- sig_entry.name += '#'
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type != 'IDENTIFIER':
- raise SigParseException('Expecting identifier')
- sig_entry.name += t.val
- t = self.tokens.next()
- self.expectNotEof(t)
- while t.type != 'PANGULAR_CLOSE':
- if t.type != 'IDENTIFIER':
- raise SigParseException('Expecting identifier')
- arg = Arg(name=t.val)
- sig_entry.tparams.append(arg)
- # Read "," or ">"
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type not in ['PANGULAR_CLOSE', 'COMMA']:
- raise SigParseException('Expecting ">" or ","')
- if t.type == 'COMMA':
- t = self.tokens.next()
- self.expectNotEof(t)
- # Expect "::"
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type != 'NAME_SEP':
- raise SigParseException('Expecting "::"')
- # Read return_name
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type != 'IDENTIFIER':
- raise SigParseException('Expecting identifier got %s' % repr(t.val))
- sig_entry.return_name = t.val
- return sig_entry
-
- def parseMetafunctionValue(self, return_type, name):
- sig_entry = self.parseMetafunctionType(name)
- sig_entry.return_type = return_type
- return sig_entry
-
- def parseFunction(self, token):
- """Parse a function, variable, or metafunction.
-
- We started out with an identifier. The things that this function will
- be triggered for:
-
- TReturn name(T1 x1, T2 x2, ...)
- TReturn Klass::name(T1 x1, T2 x2, ...)
- TReturn Klass#name(T1 x1, T2 x2, ...)
- TReturn Name<TParam>::VALUE
- TReturn Klass#Name<TParam>::VALUE
- Name<TParam>::Type
- Klass#Name<TParam>::Type
- T var
-
- @param token: lexer.Token object with the previous token.
-
- """
- is_constructor = False
- other_name = token.val
- # get next token, i sname or "<"
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type in ['HASH', 'NAME_SEP']:
- other_name += t.val
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type != 'IDENTIFIER':
- raise SigParseException('Expecting identifier.')
- other_name += t.val
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type == 'PANGULAR_OPEN':
- return self.parseMetafunctionType(other_name)
- if t.type == 'PROUND_OPEN':
- is_constructor = True
- elif t.type != 'IDENTIFIER':
- raise SigParseException('Expecting identifier as function name.')
- name = t.val
- if not is_constructor:
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type in ['HASH', 'NAME_SEP']:
- name += t.val
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type != 'IDENTIFIER':
- raise SigParseException('Expecting identifier.')
- name += t.val
- t = self.tokens.next()
- self.expectNotEof(t)
- # expect "(" or "<"
- if t.type == 'PANGULAR_OPEN':
- return self.parseMetafunctionValue(other_name, name)
- # Expecting <eof>, ";", or (. The last triggers generation of a
- # function, the other of a variable.
- if t.type in ['EOF', 'SEMICOLON']:
- sig_entry = SigEntry(kind='variable')
- sig_entry.var_type = other_name
- sig_entry.name = name
- return sig_entry
- sig_entry = SigEntry(kind='function')
- if is_constructor:
- sig_entry.return_type = None
- sig_entry.name = other_name
- else:
- sig_entry.return_type = other_name
- sig_entry.name = name
- if t.type in ['HASH', 'NAME_SEP']:
- sig_entry.name += t.val
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type != 'IDENTIFIER':
- raise SigParseException('EOF not expected')
- sig_entry.name += t.val
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type != 'PROUND_OPEN':
- raise SigParseException('Expecting opening parenthesis after '
- 'function name')
- # parse parameters
- self.parseParams('PROUND_CLOSE', sig_entry.params, ['IDENTIFIER'])
- return sig_entry
-
- def parseCSE(self, kind):
- """Parse class, struct, enum."""
- sig_entry = SigEntry(kind=kind)
- t = self.tokens.next()
- self.expectNotEof(t)
- if t.type != 'IDENTIFIER':
- raise SigParseException('Expecting identifier after "%s"!' % kind)
- sig_entry.name = t.val
- return sig_entry
-
- def parseClass(self, token):
- return self.parseCSE('class')
-
- def parseConcept(self, token):
- return self.parseCSE('concept')
-
- def parseStruct(self, token):
- return self.parseCSE('struct')
-
- def parseEnum(self, token):
- return self.parseCSE('enum')
-
- def expectNotEof(self, token):
- if token.type == 'EOF':
- raise SigParseException('Unexpecte EOF!')
-
- def parse(self):
- try:
- t = self.tokens.next()
- self.expectNotEof(t)
- m = {'KWD_TEMPLATE': self.parseTemplate,
- 'KWD_CLASS': self.parseClass,
- 'KWD_CONCEPT': self.parseConcept,
- 'KWD_STRUCT': self.parseStruct,
- 'KWD_ENUM': self.parseEnum,
- 'IDENTIFIER': self.parseFunction}
- if not t.type in m:
- raise SigParseException('Unexpected token of type %s' % t.type)
- return m[t.type](t)
- except lexer.LexerError, e:
- raise SigParseException('Lexer error: %s at pos %s when parsing %s' % (e, e.pos, self.buffer))
diff --git a/util/py_lib/seqan/dox/test/test_dox_parser.py b/util/py_lib/seqan/dox/test/test_dox_parser.py
deleted file mode 100644
index eaf6432..0000000
--- a/util/py_lib/seqan/dox/test/test_dox_parser.py
+++ /dev/null
@@ -1,974 +0,0 @@
-#!/usr/bin/env python2
-"""Tests for the dox_parser module.
-
-The parser results are very complex. We rely on parsing Doxygen-style
-documentation and then dumping it back into this format.
-
-We write the "full" test with the smallest amount of empty lines possible to
-check that the tokenization works well in these corner cases. Having empty
-lines actually is the easier case.
-"""
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-# TODO(holtgrew): Add tests for @implements @extends
-
-import os
-import unittest
-import sys
-
-import seqan.dox.lexer as lexer
-import seqan.dox.dox_tokens as dox_tokens
-import seqan.dox.dox_parser as dox_parser
-
-
-class TestDoxParserBase(unittest.TestCase):
- """Base class for all dox parser tests."""
-
- def __init__(self, *args, **kwargs):
- unittest.TestCase.__init__(self, *args, **kwargs)
- self.maxDiff = 1024*1024
-
- def createLexer(self, text):
- """Create a lexer.Lexer object with the given text."""
- lex = lexer.Lexer(dox_tokens.LEXER_TOKENS, skip_whitespace=False)
- lex.input(text)
- return lex
-
- def parseText(self, text):
- """Create a dox parser and let it parse the given text.
-
- Return the created parser.
- """
- parser = dox_parser.Parser()
- parser.parse(self.createLexer(text))
- return parser
-
-
-class TestClassParsing(TestDoxParserBase):
- def testMinimal(self):
- txt = '@class Klass'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@class Klass\n\n')
-
- def testTwoMinimal(self):
- txt = ('@class A\n'
- '@brief Brief A\n'
- '@class B\n')
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@class A\n\n at brief Brief A\n\n\n\n at class B\n\n\n\n')
-
- def testFull(self):
- txt = ('@class Klass\n'
- '@implements Concept\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '@extends Other Klass\n'
- '@brief This is a brief text.\n'
- '@deprecated Deprecation message.\n'
- '@signature template <typename T1, typename T2>\n'
- ' class Klass;\n'
- '@tparam T1 The first value and a very very very very long \n'
- ' description\n'
- '@tparam T2 The second value and a very very very very long \n'
- ' description\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@class Klass\n'
- '\n'
- '@implements Concept\n'
- '\n'
- '@extends Other Klass\n'
- '\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '\n'
- '@brief This is a brief text.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature template <typename T1, typename T2>\n'
- ' class Klass;\n'
- '\n'
- '@tparam T1 The first value and a very very very\n'
- ' very long description\n'
- '@tparam T2 The second value and a very very very\n'
- ' very long description\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestTypedefParsing(TestDoxParserBase):
- def testGlobalMinimal(self):
- txt = '@typedef Typedef'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@typedef Typedef\n\n')
-
- def testGlobalFull(self):
- txt = ('@typedef Typedef\n'
- '@brief This is an example for a typedef.\n'
- '@deprecated Deprecation message.\n'
- '@signature typedef Foo<Bar> Typedef;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@typedef Typedef\n'
- '\n'
- '@brief This is an example for a typedef.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature typedef Foo<Bar> Typedef;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestAdaptionParsing(TestDoxParserBase):
- def testGlobalMinimal(self):
- txt = '@adaption Adaption'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@adaption Adaption\n\n')
-
- def testGlobalFull(self):
- txt = ('@adaption Adaption\n'
- '@brief This is an example for an adaption.\n'
- '@deprecated Deprecation message.\n'
- '@signature std::string;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@adaption Adaption\n'
- '\n'
- '@brief This is an example for an adaption.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature std::string;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestMacroParsing(TestDoxParserBase):
- def testGlobalMinimal(self):
- txt = '@macro MACRO'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@macro MACRO\n\n')
-
- def testGlobalFull(self):
- txt = ('@macro MACRO\n'
- '@brief This is an example for a macro.\n'
- '@deprecated Deprecation message.\n'
- '@signature MACRO(param)\n'
- '@param param The parameter.\n'
- '@return TString A path as <tt>char const *</tt>.\n'
- '@throw Exception The exception type.\n'
- '@datarace This macro is not thread safe.\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@macro MACRO\n'
- '\n'
- '@brief This is an example for a macro.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature MACRO(param)\n'
- '\n'
- '@param param The parameter.\n'
- '\n'
- '@return TString A path as <tt>char const *</tt>.\n'
- '\n'
- '@throw Exception The exception type.\n'
- '\n'
- '@datarace This macro is not thread safe.\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestFunctionParsing(TestDoxParserBase):
- def testGlobalMinimal(self):
- txt = '@fn funktion'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@fn funktion\n\n')
-
- def testReturnValue(self):
- txt = ('@fn funktion\n'
- '@return bool <tt>true</tt> if empty, <tt>false</tt> otherwise.')
- parser = self.parseText(txt)
- doc = parser.documentation
- fn = doc.entries[0]
- self.assertEqual(len(fn.returns), 1)
- self.assertEqual(fn.returns[0].name.text, 'bool')
- txt = '<tt>true</tt> if empty, <tt>false</tt> otherwise.'
- self.assertEqual(fn.returns[0].text.text, txt)
-
- def testThrow(self):
- txt = ('@fn funktion\n'
- '@throw Exception The thrown exception')
- parser = self.parseText(txt)
- doc = parser.documentation
- fn = doc.entries[0]
- self.assertEqual(len(fn.throws), 1)
- self.assertEqual(fn.throws[0].name.text, 'Exception')
- txt = 'The thrown exception'
- self.assertEqual(fn.throws[0].text.text, txt)
-
- def testDataRace(self):
- txt = ('@fn funktion\n'
- '@datarace This function is thread safe.')
- parser = self.parseText(txt)
- doc = parser.documentation
- fn = doc.entries[0]
- self.assertEqual(len(fn.dataraces), 1)
- txt = 'This function is thread safe.'
- self.assertEqual(fn.dataraces[0].text.text, txt)
-
- def testGlobalFull(self):
- txt = ('@fn funktion\n'
- '@brief This is a brief text.\n'
- '@deprecated Deprecation message.\n'
- '@signature TRes1 funktion<T1>(TParam p1);\n'
- '@signature TRes2 funktion<T2>(TParam p2);\n'
- '@tparam T1 The first value and a very very very very long \n'
- ' description\n'
- '@tparam T2 The second value and a very very very very long \n'
- ' description\n'
- '@param[in] p1 The first parameter.\n'
- '@param p2 The second parameter.\n'
- '@return TRes1 The first return type.\n'
- '@return TRes2 The second return type.\n'
- '\n'
- '@throw Exception The thrown exception.\n'
- '\n'
- '@datarace This function is thread safe.\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@fn funktion\n'
- '\n'
- '@brief This is a brief text.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature TRes1 funktion<T1>(TParam p1);\n'
- '@signature TRes2 funktion<T2>(TParam p2);\n'
- '\n'
- '@tparam T1 The first value and a very very very\n'
- ' very long description\n'
- '@tparam T2 The second value and a very very very\n'
- ' very long description\n'
- '\n'
- '@param[in] p1 The first parameter.\n'
- '@param p2 The second parameter.\n'
- '\n'
- '@return TRes1 The first return type.\n'
- '@return TRes2 The second return type.\n'
- '\n'
- '@throw Exception The thrown exception.\n'
- '\n'
- '@datarace This function is thread safe.\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
- def testInterfaceMinimal(self):
- txt = '@fn Klass#funktion'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@fn Klass#funktion\n\n')
-
- def testInterfaceFull(self):
- txt = ('@fn Klass#funktion\n'
- '@brief This is a brief text.\n'
- '@deprecated Deprecation message.\n'
- '@signature TRes1 funktion<T1>(TParam p1);\n'
- '@signature TRes2 funktion<T2>(TParam p2);\n'
- '@tparam T1 The first value and a very very very very long \n'
- ' description\n'
- '@tparam T2 The second value and a very very very very long \n'
- ' description\n'
- '@param[in] p1 The first parameter.\n'
- '@param p2 The second parameter.\n'
- '@return TRes1 The first return type.\n'
- '@return TRes2 The second return type.\n'
- '@datarace This function is thread safe.\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@fn Klass#funktion\n'
- '\n'
- '@brief This is a brief text.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature TRes1 funktion<T1>(TParam p1);\n'
- '@signature TRes2 funktion<T2>(TParam p2);\n'
- '\n'
- '@tparam T1 The first value and a very very very\n'
- ' very long description\n'
- '@tparam T2 The second value and a very very very\n'
- ' very long description\n'
- '\n'
- '@param[in] p1 The first parameter.\n'
- '@param p2 The second parameter.\n'
- '\n'
- '@return TRes1 The first return type.\n'
- '@return TRes2 The second return type.\n'
- '\n'
- '@datarace This function is thread safe.\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestConceptParsing(TestDoxParserBase):
- def testMinimal(self):
- txt = '@concept Konzept'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@concept Konzept\n\n')
-
- def testFull(self):
- txt = ('@concept Konzept\n'
- '@extends Konzert\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '@brief This is a brief text.\n'
- '@deprecated Deprecation message.\n'
- '@signature concept Konzept;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@concept Konzept\n'
- '\n'
- '@extends Konzert\n'
- '\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '\n'
- '@brief This is a brief text.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature concept Konzept;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestMetafunctionParsing(TestDoxParserBase):
- def testGlobalMinimal(self):
- txt = '@mfn Metafunktion'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@mfn Metafunktion\n\n')
-
- def testGlobalFull(self):
- txt = ('@mfn Metafunktion\n'
- '@brief This is a brief text.\n'
- '@deprecated Deprecation message.\n'
- '@signature Metafunktion<T1>::Type;\n'
- '@signature Metafunktion<T2>::VALUE;\n'
- '@tparam T1 The first value and a very very very very long \n'
- ' description\n'
- '@tparam T2 The second value and a very very very very long \n'
- ' description\n'
- '@return Type The return type.\n'
- '@return VALUE The return value.\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@mfn Metafunktion\n'
- '\n'
- '@brief This is a brief text.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature Metafunktion<T1>::Type;\n'
- '@signature Metafunktion<T2>::VALUE;\n'
- '\n'
- '@tparam T1 The first value and a very very very\n'
- ' very long description\n'
- '@tparam T2 The second value and a very very very\n'
- ' very long description\n'
- '\n'
- '@return Type The return type.\n'
- '@return VALUE The return value.\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
- def testInterfaceMinimal(self):
- txt = '@mfn Klass#Metafunktion'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@mfn Klass#Metafunktion\n\n')
-
- def testInterfaceFull(self):
- txt = ('@mfn Klass#Metafunktion\n'
- '@brief This is a brief text.\n'
- '@deprecated Deprecation message.\n'
- '@signature Metafunktion<T1>::Type;\n'
- '@signature Metafunktion<T2>::VALUE;\n'
- '@tparam T1 The first value and a very very very very long \n'
- ' description\n'
- '@tparam T2 The second value and a very very very very long \n'
- ' description\n'
- '@return Type The return type.\n'
- '@return VALUE The return value.\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@mfn Klass#Metafunktion\n'
- '\n'
- '@brief This is a brief text.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature Metafunktion<T1>::Type;\n'
- '@signature Metafunktion<T2>::VALUE;\n'
- '\n'
- '@tparam T1 The first value and a very very very\n'
- ' very long description\n'
- '@tparam T2 The second value and a very very very\n'
- ' very long description\n'
- '\n'
- '@return Type The return type.\n'
- '@return VALUE The return value.\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestConceptParsing(TestDoxParserBase):
- def testMinimal(self):
- txt = '@concept Konzept'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@concept Konzept\n\n')
-
- def testFull(self):
- txt = ('@concept Konzept\n'
- '@brief This is a brief text.\n'
- '@deprecated Deprecation message.\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '@signature concept Konzept;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@concept Konzept\n'
- '\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '\n'
- '@brief This is a brief text.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature concept Konzept;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestVariableParsing(TestDoxParserBase):
- def testFull(self):
- txt = ('@var int var\n'
- '@brief This is a brief text.\n'
- '@deprecated Deprecation message.\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '@signature int var;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@var int var;\n'
- '\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '\n'
- '@brief This is a brief text.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature int var;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
- def testMemberMinimal(self):
- txt = '@var Klass::Type Klass::var'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@var Klass::Type Klass::var;\n\n')
-
- def testMemberFull(self):
- txt = ('@var Klass::Type Klass::var\n'
- '@brief This is a brief text.\n'
- '@deprecated Deprecation message.\n'
- '@signature Klass::Type Klass::var;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@var Klass::Type Klass::var;\n'
- '\n'
- '@brief This is a brief text.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature Klass::Type Klass::var;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestTagParsing(TestDoxParserBase):
- def testFull(self):
- txt = ('@tag TagName\n'
- '@brief This is a brief text.\n'
- '@deprecated Deprecation message.\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '@signature typedef Tag<TagName_> TagName;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@tag TagName\n'
- '\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '\n'
- '@brief This is a brief text.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature typedef Tag<TagName_> TagName;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestEnumParsing(TestDoxParserBase):
- def testMinimal(self):
- txt = '@enum Enum'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@enum Enum\n\n')
-
- def testFull(self):
- txt = ('@enum Enum\n'
- '@brief This is a brief text.\n'
- '@deprecated Deprecation message.\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '@signature enum Enum;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@enum Enum\n'
- '\n'
- '@headerfile <seqan/base.h>\n'
- '@headerfile <seqan/sequence.h>\n'
- '\n'
- '@brief This is a brief text.\n'
- '\n'
- '@deprecated Deprecation message.\n'
- '\n'
- '@signature enum Enum;\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestPageParsingWithInclude(TestDoxParserBase):
- """Tests for the @include and @snippet command.
-
- We use a @page for simplicity.
- """
-
- def testInclude(self):
- txt = ('@page Page Title\n'
- '@include example.cpp')
- parser = self.parseText(txt)
- doc = parser.documentation
- txt = ('@page Page Title\n'
- '\n'
- '@include example.cpp\n\n')
- self.assertMultiLineEqual(doc.getFormatted(), txt)
-
- def testSnippet(self):
- txt = ('@page Page Title\n'
- '@snippet example.cpp Snippet Name')
- parser = self.parseText(txt)
- doc = parser.documentation
- txt = ('@page Page Title\n'
- '\n'
- '@snippet example.cpp Snippet Name\n\n')
- self.assertMultiLineEqual(doc.getFormatted(), txt)
-
-
-class TestPageParsing(TestDoxParserBase):
- def testMinimal(self):
- txt = '@page Page Title'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@page Page Title\n\n')
-
- def testSmallBody(self):
- txt = ('@page Page Title\n'
- 'This is the body.')
- parser = self.parseText(txt)
- doc = parser.documentation
- txt = ('@page Page Title\n'
- '\n'
- 'This is the body.\n\n')
- self.assertMultiLineEqual(doc.getFormatted(), txt)
-
- def testFull(self):
- txt = ('@page Page Title\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@include path/to/file#hash\n'
- 'This is another paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@page Page Title\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@include path/to/file#hash\n'
- '\n'
- 'This is another paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestPageParsing(TestDoxParserBase):
- def testMinimal(self):
- txt = '@defgroup GroupName Group Title'
- parser = self.parseText(txt)
- doc = parser.documentation
- self.assertMultiLineEqual(doc.getFormatted(), '@defgroup GroupName Group Title\n\n')
-
- def testSmallBody(self):
- txt = ('@defgroup GroupName Group Title\n'
- 'This is the body.')
- parser = self.parseText(txt)
- doc = parser.documentation
- txt = ('@defgroup GroupName Group Title\n'
- '\n'
- 'This is the body.\n\n')
- self.assertMultiLineEqual(doc.getFormatted(), txt)
-
- def testFull(self):
- txt = ('@defgroup GroupName Group Title\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@include path/to/file#hash\n'
- 'This is another paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '@see Other')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@defgroup GroupName Group Title\n'
- '\n'
- '@section This is the first section.\n'
- '\n'
- 'This is the first paragraph.\n'
- '\n'
- '@include path/to/file#hash\n'
- '\n'
- 'This is another paragraph.\n'
- '\n'
- '@subsection This is the first subsection.\n'
- '\n'
- 'This is the second paragraph.\n'
- '\n'
- '@see Other\n'
- '\n')
- self.assertMultiLineEqual(doc.getFormatted(50), expected)
-
-
-class TestLinkParsing(TestDoxParserBase):
- def testMinimal(self):
- txt = ('@page PageTitle Page Title\n'
- '\n'
- '@link PageTitle the page title @endlink.\n')
- parser = self.parseText(txt)
- doc = parser.documentation
- expected = ('@page PageTitle Page Title\n'
- '\n'
- '@link PageTitle the page title @endlink.\n\n')
- self.assertMultiLineEqual(doc.getFormatted(), expected)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/util/py_lib/seqan/dox/test/test_file_mgr.py b/util/py_lib/seqan/dox/test/test_file_mgr.py
deleted file mode 100644
index b5ed93f..0000000
--- a/util/py_lib/seqan/dox/test/test_file_mgr.py
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/usr/bin/env python2
-"""Tests for the path manager."""
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-
-import os
-import os.path
-import unittest
-
-import seqan.dox.file_mgr as file_mgr
-
-
-class Test(unittest.TestCase):
- def setUp(self):
- self.base_dir = os.path.dirname(os.path.realpath(__file__))
- self.mgr = file_mgr.FileManager()
-
- def testSimpleExample(self):
- p = os.path.join(self.base_dir, 'test.cpp')
- f = self.mgr.loadFile(p)
- self.assertEqual(f.path, p)
- self.assertEqual(f.start_markers, ['*!'])
- c = file_mgr.Comment(6, 0, 62, 8, 2, 87, 7, 3, 'Test comment...\n',
- '/*!\n * Test comment...\n*/')
- self.assertEqual(f.comments, [c])
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/util/py_lib/seqan/dox/test/test_inc_mgr.py b/util/py_lib/seqan/dox/test/test_inc_mgr.py
deleted file mode 100644
index 66fe83a..0000000
--- a/util/py_lib/seqan/dox/test/test_inc_mgr.py
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/usr/bin/env python2
-"""Tests for the include manager."""
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-
-import os
-import os.path
-import unittest
-
-import seqan.dox.inc_mgr as inc_mgr
-
-
-class TestIncludeManager(unittest.TestCase):
- def setUp(self):
- base_dir = os.path.dirname(os.path.realpath(__file__))
- base_dir = os.path.join(base_dir, '../', 'test_src')
- self.mgr = inc_mgr.IncludeManager([base_dir])
-
- def testIncludeFile(self):
- txt = self.mgr.loadFile('example.cpp')
- self.assert_(txt.splitlines()[0].startswith('#include <iostream>'))
- self.assert_(txt.splitlines()[-1].endswith('}'))
-
- def testIncludeSnippet(self):
- txt = self.mgr.loadSnippet('example.cpp', 'Print to stdout')
- self.assertEqual(len(txt.splitlines()), 1)
- self.assertEqual(txt.splitlines()[0], r' std::cout << "This is an example.\n";')
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/util/py_lib/seqan/dox/test/test_lexer.py b/util/py_lib/seqan/dox/test/test_lexer.py
deleted file mode 100644
index 2de7816..0000000
--- a/util/py_lib/seqan/dox/test/test_lexer.py
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/usr/bin/env python2
-"""Tests for the lexer module.
-
-We got the lexer itself from an external source so we do not write tests for
-it now as long as it works nicely. However, we need some extension for
-storing the precise token locations.
-"""
-
-import unittest
-
-import seqan.dox.lexer as lexer
-
-
-class TestLexer(unittest.TestCase):
- def testWithoutOffset(self):
- self._testWithOffset(0, 0)
-
- def testWithOffset(self):
- self._testWithOffset(3, 4)
-
- def _testWithOffset(self, line_offset, col_offset):
- rules = (('number', r'[0-9]+'),
- ('word', r'\w+'))
- txt = ('word number 0123\n'
- 'first second\n'
- 'third fourth')
- lex = lexer.Lexer(rules, line_offset=line_offset, col_offset=col_offset)
- lex.input(txt)
- tokens = [t for t in lex.tokens()]
- #for t in tokens: print t;
-
- self.assertEqual(tokens[0].val, 'word')
- self.assertEqual(tokens[0].type, 'word')
- self.assertEqual(tokens[0].pos, 0)
- self.assertEqual(tokens[0].lineno, 0 + line_offset)
- self.assertEqual(tokens[0].column, 0 + col_offset)
-
- self.assertEqual(tokens[1].val, 'number')
- self.assertEqual(tokens[1].type, 'word')
- self.assertEqual(tokens[1].pos, 5)
- self.assertEqual(tokens[1].lineno, 0 + line_offset)
- self.assertEqual(tokens[1].column, 5 + col_offset)
-
- self.assertEqual(tokens[2].val, '0123')
- self.assertEqual(tokens[2].type, 'number')
- self.assertEqual(tokens[2].pos, 12)
- self.assertEqual(tokens[2].lineno, 0 + line_offset)
- self.assertEqual(tokens[2].column, 12 + col_offset)
-
- self.assertEqual(tokens[3].val, 'first')
- self.assertEqual(tokens[3].type, 'word')
- self.assertEqual(tokens[3].pos, 17)
- self.assertEqual(tokens[3].lineno, 1 + line_offset)
- self.assertEqual(tokens[3].column, 0 + col_offset)
-
- self.assertEqual(tokens[4].val, 'second')
- self.assertEqual(tokens[4].type, 'word')
- self.assertEqual(tokens[4].pos, 23)
- self.assertEqual(tokens[4].lineno, 1 + line_offset)
- self.assertEqual(tokens[4].column, 6 + col_offset)
-
- self.assertEqual(tokens[5].val, 'third')
- self.assertEqual(tokens[5].type, 'word')
- self.assertEqual(tokens[5].pos, 30)
- self.assertEqual(tokens[5].lineno, 2 + line_offset)
- self.assertEqual(tokens[5].column, 0 + col_offset)
-
- self.assertEqual(tokens[6].val, 'fourth')
- self.assertEqual(tokens[6].type, 'word')
- self.assertEqual(tokens[6].pos, 36)
- self.assertEqual(tokens[6].lineno, 2 + line_offset)
- self.assertEqual(tokens[6].column, 6 + col_offset)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/util/py_lib/seqan/dox/test/test_proc_doc.py b/util/py_lib/seqan/dox/test/test_proc_doc.py
deleted file mode 100644
index 7d4d91e..0000000
--- a/util/py_lib/seqan/dox/test/test_proc_doc.py
+++ /dev/null
@@ -1,1390 +0,0 @@
-#!/usr/bin/env python2
-"""Tests for the proc_doc module."""
-
-import sys
-import os.path
-import unittest
-
-import seqan.dox.lexer as lexer
-import seqan.dox.dox_tokens as dox_tokens
-import seqan.dox.dox_parser as dox_parser
-import seqan.dox.proc_doc as proc_doc
-import seqan.dox.raw_doc as raw_doc
-import seqan.dox.pure as pure
-
-
-class TextNodeTest(unittest.TestCase):
- def testRenderSimple(self):
- parent = proc_doc.TextNode(text='This is some text.')
- self.assertEqual(parent.toHtmlLike(), 'This is some text.')
-
- def testRenderNested(self):
- parent = proc_doc.TextNode(
- type='a', attrs={'href': 'http://www.example.com'})
- parent.addChild(proc_doc.TextNode(text='A word'))
- parent.addChild(proc_doc.TextNode(text=' does not make a '))
- parent.addChild(proc_doc.TextNode(text='sentence'))
- self.assertEqual(parent.toHtmlLike(),
- '<a href="http://www.example.com">A word does '
- 'not make a sentence</a>')
-
-
-class TestTextNodeConversion(unittest.TestCase):
- def setUp(self):
- base_dir = os.path.dirname(os.path.realpath(__file__))
- self.lexer = lexer.Lexer(dox_tokens.LEXER_TOKENS, skip_whitespace=False)
- self.doc_proc = proc_doc.DocProcessor(include_dirs=[base_dir],
- expected_tags=pure.EXPECTED_TAGS)
- self.conv = proc_doc.RawTextToTextNodeConverter(doc_proc=self.doc_proc,
- expected_tags=pure.EXPECTED_TAGS)
-
- def strToTokens(self, s):
- self.lexer.input(s)
- tokens = [t for t in self.lexer.tokens()]
- return tokens[:-1]
-
- def testConversionPlain(self):
- r = raw_doc.RawText(self.strToTokens('This is some example.'))
- n = self.conv.run(r)
- self.assertEqual(n.toHtmlLike(), '<div>This is some example.</div>')
-
- def testConversionOneLevel(self):
- r = raw_doc.RawText(self.strToTokens('This <b>is</b> some example.'))
- n = self.conv.run(r)
- self.assertEqual(n.toHtmlLike(), '<div>This <b>is</b> some example.</div>')
-
- def testConversionOneLevel(self):
- txt = 'This is a list: <ul><li>foo</li><li>ba</li></ul>'
- r = raw_doc.RawText(self.strToTokens(txt))
- n = self.conv.run(r)
- self.assertEqual(n.toHtmlLike(), '<div>This is a list: <ul><li>foo</li><li>ba</li></ul></div>')
-
- def testConversionList(self):
- txt = '<ul><li>Lists</li><li>Lists again!</li></ul>'
- r = raw_doc.RawText(self.strToTokens(txt))
- n = self.conv.run(r)
- self.assertEqual(n.toHtmlLike(), '<div>%s</div>' % txt)
-
-
-class TestConverterBase(unittest.TestCase):
- def createDocProcessor(self):
- base_dir = os.path.dirname(os.path.realpath(__file__))
- return proc_doc.DocProcessor(include_dirs=[base_dir],
- expected_tags=pure.EXPECTED_TAGS)
-
- def createLexer(self, text):
- """Create a lexer.Lexer object with the given text."""
- lex = lexer.Lexer(dox_tokens.LEXER_TOKENS, skip_whitespace=False)
- lex.input(text)
- return lex
-
- def parseText(self, text):
- """Create a dox parser and let it parse the given text.
-
- Return the created parser.
- """
- parser = dox_parser.Parser()
- parser.parse(self.createLexer(text))
- for e in parser.documentation.entries:
- parser.documentation.filenames.append('dummy' + e.name.text)
- return parser.documentation
-
-
-class TestConvertPageWithIncludes(TestConverterBase):
- """Tests for @page with @include and @snippet commands."""
-
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['page']
-
- def testInclude(self):
- txt = ('@page Page Page Title\n'
- '@section Example\n'
- '@include example.cpp')
- raw_page = self.parseText(txt).entries[0]
- proc_page = self.conv.process(raw_page)
- txt = ('<div><h1>Example</h1><dox:code source="include" type=".cpp" path="example.cpp">#include <iostream>\n'
- '\n'
- 'int main(int arg, char const ** argv)\n'
- '{\n'
- ' //![Print to stdout]\n'
- ' std::cout << "This is an example.\\n";\n'
- ' //![Print to stdout]\n'
- ' return 0;\n'
- '}\n'
- '</dox:code></div>')
- self.assertMultiLineEqual(proc_page.body.toHtmlLike(), txt)
-
- def testSnippet(self):
- txt = ('@page Page Page Title\n'
- '@section Example\n'
- '@snippet example.cpp Print to stdout')
- raw_page = self.parseText(txt).entries[0]
- proc_page = self.conv.process(raw_page)
- txt = ('<div><h1>Example</h1><dox:code source="snippet" type=".cpp" path="example.cpp">'
- ' std::cout << "This is an example.\\n";'
- '</dox:code></div>')
- self.assertMultiLineEqual(proc_page.body.toHtmlLike(), txt)
-
-
-class TestConvertPageWithLink(TestConverterBase):
- """Tests for @page with @link command."""
-
- def setUp(self):
- base_dir = os.path.dirname(os.path.realpath(__file__))
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['page']
-
- def testLinkWithTitle(self):
- txt = ('@page Page Page Title\n'
- '\n'
- 'A link with @link OtherPage a title @endlink.\n')
- raw_page = self.parseText(txt).entries[0]
- proc_page = self.conv.process(raw_page)
- txt = ('<div><p>A link with <a href="seqan:OtherPage">a title</a>.'
- '</p></div>')
- self.assertMultiLineEqual(proc_page.body.toHtmlLike(), txt)
-
- def testLinkWithoutTitle(self):
- txt = ('@page Page Page Title\n'
- '\n'
- 'And a link without a title: @link OtherPage @endlink.\n')
- raw_page = self.parseText(txt).entries[0]
- proc_page = self.conv.process(raw_page)
- txt = ('<div><p>And a link without a title: <a href="seqan:OtherPage">OtherPage</a>'
- '.</p></div>')
- self.assertMultiLineEqual(proc_page.body.toHtmlLike(), txt)
-
-
-class TestConvertPageWithImage(TestConverterBase):
- """Tests for @page with <img> tag."""
-
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['page']
-
- def testLinkWithTitle(self):
- txt = ('@page Page Page Title\n'
- '\n'
- 'Here is an image: <img src="img.png" title="My image" />.\n')
- raw_page = self.parseText(txt).entries[0]
- proc_page = self.conv.process(raw_page)
- txt = ('<div><p>Here is an image: <img src="img.png" '
- 'title="My image" />.</p></div>')
- self.assertMultiLineEqual(proc_page.body.toHtmlLike(), txt)
-
- def testLinkWithoutTitle(self):
- txt = ('@page Page Page Title\n'
- '\n'
- 'And a link without a title: @link OtherPage @endlink.\n')
- raw_page = self.parseText(txt).entries[0]
- proc_page = self.conv.process(raw_page)
- txt = ('<div><p>And a link without a title: <a href="seqan:OtherPage">'
- 'OtherPage</a>.</p></div>')
- self.assertMultiLineEqual(proc_page.body.toHtmlLike(), txt)
-
-
-class TestConvertPage(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['page']
-
- def testConvertMinimal(self):
- txt = '@page Page Page Title <i>italic</i>.'
- raw_page = self.parseText(txt).entries[0]
- proc_page = self.conv.process(raw_page)
- self.assertEqual(proc_page.name, 'Page')
- self.assertEqual(proc_page.kind, 'page')
- self.assertEqual(proc_page.title, 'Page Title <i>italic</i>.')
-
- def testConvertFull(self):
- txt = ('@page Page Page Title\n'
- '@brief This is the <i>very important</i> page brief.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_page = self.parseText(txt).entries[0]
- proc_page = self.conv.process(raw_page)
- self.assertEqual(proc_page.name, 'Page')
- self.assertEqual(proc_page.kind, 'page')
- self.assertEqual(proc_page.title, 'Page Title')
- txt = '<div>This is the <i>very important</i> page brief.</div>'
- self.assertEqual(proc_page.brief.toHtmlLike(), txt)
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_page.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_page.sees), 1)
- self.assertEqual(proc_page.sees[0].toHtmlLike(), txt)
-
- def testConvertWithCode(self):
- txt = ('@page Page Page Title\n'
- '@code{.cpp}\n'
- 'int main(int argc, char const ** argv) {\n return 0;\n}\n'
- '@endcode\n')
- raw_page = self.parseText(txt).entries[0]
- proc_page = self.conv.process(raw_page)
- txt = ('<div>'
- '<dox:code type=".cpp">'
- 'int main(int argc, char const ** argv) {\n return 0;\n}'
- '</dox:code>'
- '</div>')
- self.assertEqual(proc_page.body.toHtmlLike(), txt)
-
-
-class TestConvertGroup(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['defgroup']
-
- def testConvertMinimal(self):
- txt = '@defgroup Group Group Title <i>italic</i>.'
- raw_group = self.parseText(txt).entries[0]
- proc_group = self.conv.process(raw_group)
- self.assertEqual(proc_group.name, 'Group')
- self.assertEqual(proc_group.kind, 'group')
- self.assertEqual(proc_group.title, 'Group Title <i>italic</i>.')
-
- def testConvertFull(self):
- txt = ('@defgroup Group Group Title\n'
- '@brief This is the <i>very important</i> group brief.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_group = self.parseText(txt).entries[0]
- proc_group = self.conv.process(raw_group)
- self.assertEqual(proc_group.name, 'Group')
- self.assertEqual(proc_group.kind, 'group')
- self.assertEqual(proc_group.title, 'Group Title')
- txt = '<div>This is the <i>very important</i> group brief.</div>'
- self.assertEqual(proc_group.brief.toHtmlLike(), txt)
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_group.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_group.sees), 1)
- self.assertEqual(proc_group.sees[0].toHtmlLike(), txt)
-
- def testConvertWithCode(self):
- txt = ('@defgroup Group Group Title\n'
- '@code{.cpp}\n'
- 'int main(int argc, char const ** argv) {\n return 0;\n}\n'
- '@endcode\n')
- raw_group = self.parseText(txt).entries[0]
- proc_group = self.conv.process(raw_group)
- txt = ('<div>'
- '<dox:code type=".cpp">'
- 'int main(int argc, char const ** argv) {\n return 0;\n}'
- '</dox:code>'
- '</div>')
- self.assertEqual(proc_group.body.toHtmlLike(), txt)
-
-
-class TestConvertEnum(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['enum']
-
- def testConvertMinimal(self):
- txt = '@enum MyEnum My Enum'
- raw_enum = self.parseText(txt).entries[0]
- proc_enum = self.conv.process(raw_enum)
- self.assertEqual(proc_enum.name, 'MyEnum')
- self.assertEqual(proc_enum.title, 'My Enum')
-
- def testConvertFull(self):
- txt = ('@enum EnumName Enum Name\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> enum brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature Enum Name;\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_enum = self.parseText(txt).entries[0]
- proc_enum = self.conv.process(raw_enum)
- self.assertEqual(proc_enum.name, 'EnumName')
- self.assertEqual(proc_enum.title, 'Enum Name')
- self.assertEqual(proc_enum.kind, 'enum')
- self.assertEqual(proc_enum.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- self.assertEqual(len(proc_enum.signatures), 1)
- self.assertEqual(proc_enum.signatures[0].toHtmlLike(), '<div>Enum Name;</div>')
- txt = '<div>This is the <i>very important</i> enum brief.</div>'
- self.assertEqual(proc_enum.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_enum.deprecation_msgs), 1)
- self.assertEqual(proc_enum.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_enum.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_enum.sees), 1)
- self.assertEqual(proc_enum.sees[0].toHtmlLike(), txt)
-
-
-class TestConvertAdaption(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['adaption']
-
- def testConvertMinimal(self):
- txt = '@adaption MyAdaption My Adaption'
- raw_adaption = self.parseText(txt).entries[0]
- proc_adaption = self.conv.process(raw_adaption)
- self.assertEqual(proc_adaption.name, 'MyAdaption')
- self.assertEqual(proc_adaption.title, 'My Adaption')
-
- def testConvertFull(self):
- txt = ('@adaption AdaptionName Adaption Name\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> adaption brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature Adaption Name;\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_adaption = self.parseText(txt).entries[0]
- proc_adaption = self.conv.process(raw_adaption)
- self.assertEqual(proc_adaption.name, 'AdaptionName')
- self.assertEqual(proc_adaption.title, 'Adaption Name')
- self.assertEqual(proc_adaption.kind, 'adaption')
- self.assertEqual(proc_adaption.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- self.assertEqual(len(proc_adaption.signatures), 1)
- self.assertEqual(proc_adaption.signatures[0].toHtmlLike(), '<div>Adaption Name;</div>')
- txt = '<div>This is the <i>very important</i> adaption brief.</div>'
- self.assertEqual(proc_adaption.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_adaption.deprecation_msgs), 1)
- self.assertEqual(proc_adaption.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_adaption.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_adaption.sees), 1)
- self.assertEqual(proc_adaption.sees[0].toHtmlLike(), txt)
-
-
-class TestConvertTypedef(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['global_typedef']
-
- def testConvertMinimal(self):
- txt = '@typedef MyTypedef My Typedef'
- raw_typedef = self.parseText(txt).entries[0]
- proc_typedef = self.conv.process(raw_typedef)
- self.assertEqual(proc_typedef.name, 'MyTypedef')
- self.assertEqual(proc_typedef.title, 'My Typedef')
-
- def testConvertFull(self):
- txt = ('@typedef TypedefName Typedef Name\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> typedef brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature typedef int Name;\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_typedef = self.parseText(txt).entries[0]
- proc_typedef = self.conv.process(raw_typedef)
- self.assertEqual(proc_typedef.name, 'TypedefName')
- self.assertEqual(proc_typedef.title, 'Typedef Name')
- self.assertEqual(proc_typedef.kind, 'global_typedef')
- self.assertEqual(proc_typedef.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- self.assertEqual(len(proc_typedef.signatures), 1)
- self.assertEqual(proc_typedef.signatures[0].toHtmlLike(), '<div>typedef int Name;</div>')
- txt = '<div>This is the <i>very important</i> typedef brief.</div>'
- self.assertEqual(proc_typedef.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_typedef.deprecation_msgs), 1)
- self.assertEqual(proc_typedef.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_typedef.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_typedef.sees), 1)
- self.assertEqual(proc_typedef.sees[0].toHtmlLike(), txt)
-
-
-class TestConvertConcept(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['concept']
-
- def testConvertMinimal(self):
- txt = '@concept MyConcept My Concept'
- raw_concept = self.parseText(txt).entries[0]
- proc_concept = self.conv.process(raw_concept)
- self.assertEqual(proc_concept.name, 'MyConcept')
- self.assertEqual(proc_concept.title, 'My Concept')
- self.assertEqual(proc_concept.kind, 'concept')
-
- def testConvertFull(self):
- txt = ('@concept ConceptName Concept Name\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@extends Other Concept\n'
- '@brief This is the <i>very important</i> concept brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature concept Name;\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_concept = self.parseText(txt).entries[0]
- proc_concept = self.conv.process(raw_concept)
- self.assertEqual(proc_concept.name, 'ConceptName')
- self.assertEqual(proc_concept.title, 'Concept Name')
- self.assertEqual(proc_concept.kind, 'concept')
- self.assertEqual(proc_concept.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- self.assertEqual(len(proc_concept.signatures), 1)
- self.assertEqual(proc_concept.signatures[0].toHtmlLike(), '<div>concept Name;</div>')
- self.assertEqual(len(proc_concept.extends), 1)
- self.assertEqual(proc_concept.extends[0], 'Other Concept')
- txt = '<div>This is the <i>very important</i> concept brief.</div>'
- self.assertEqual(proc_concept.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_concept.deprecation_msgs), 1)
- self.assertEqual(proc_concept.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_concept.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_concept.sees), 1)
- self.assertEqual(proc_concept.sees[0].toHtmlLike(), txt)
-
-
-class TestConvertClass(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['class']
-
- def testConvertMinimal(self):
- txt = '@class MyClass My Class'
- raw_class = self.parseText(txt).entries[0]
- proc_class = self.conv.process(raw_class)
- self.assertEqual(proc_class.name, 'MyClass')
- self.assertEqual(proc_class.title, 'My Class')
- self.assertEqual(proc_class.kind, 'class')
-
- def testConvertFull(self):
- txt = ('@class ClassName Class Name\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@implements A Class\n'
- '@extends Other Class\n'
- '@brief This is the <i>very important</i> class brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature template <typename T>\n'
- ' class Name;\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_class = self.parseText(txt).entries[0]
- proc_class = self.conv.process(raw_class)
- self.assertEqual(proc_class.name, 'ClassName')
- self.assertEqual(proc_class.title, 'Class Name')
- self.assertEqual(proc_class.kind, 'specialization')
- self.assertEqual(proc_class.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- self.assertEqual(len(proc_class.signatures), 1)
- self.assertEqual(proc_class.signatures[0].toHtmlLike(), '<div>template <typename T>\nclass Name;</div>')
- self.assertEqual(len(proc_class.extends), 1)
- self.assertEqual(proc_class.extends[0], 'Other Class')
- self.assertEqual(len(proc_class.implements), 1)
- self.assertEqual(proc_class.implements[0], 'A Class')
- txt = '<div>This is the <i>very important</i> class brief.</div>'
- self.assertEqual(proc_class.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_class.deprecation_msgs), 1)
- self.assertEqual(proc_class.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_class.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_class.sees), 1)
- self.assertEqual(proc_class.sees[0].toHtmlLike(), txt)
-
-
-class TestConvertTag(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['tag']
-
- def testConvertMinimal(self):
- txt = '@tag MyTag My Tag'
- raw_tag = self.parseText(txt).entries[0]
- proc_tag = self.conv.process(raw_tag)
- self.assertEqual(proc_tag.name, 'MyTag')
- self.assertEqual(proc_tag.title, 'My Tag')
- self.assertEqual(proc_tag.kind, 'tag')
-
- def testConvertFull(self):
- txt = ('@tag TagName Tag Name\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> tag brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature typedef Tag<TagName_> TagName;\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_tag = self.parseText(txt).entries[0]
- proc_tag = self.conv.process(raw_tag)
- self.assertEqual(proc_tag.name, 'TagName')
- self.assertEqual(proc_tag.title, 'Tag Name')
- self.assertEqual(proc_tag.kind, 'tag')
- self.assertEqual(proc_tag.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- self.assertEqual(len(proc_tag.signatures), 1)
- self.assertEqual(proc_tag.signatures[0].toHtmlLike(), '<div>typedef Tag<TagName_> TagName;</div>')
- txt = '<div>This is the <i>very important</i> tag brief.</div>'
- self.assertEqual(proc_tag.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_tag.deprecation_msgs), 1)
- self.assertEqual(proc_tag.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_tag.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_tag.sees), 1)
- self.assertEqual(proc_tag.sees[0].toHtmlLike(), txt)
-
- def testConvertFullGrouped(self):
- txt = ('@tag Group#TagName Tag Name\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> tag brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature typedef Tag<TagName_> TagName;\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_tag = self.parseText(txt).entries[0]
- proc_tag = self.conv.process(raw_tag)
- self.assertEqual(proc_tag.name, 'Group#TagName')
- self.assertEqual(proc_tag.title, 'Tag Name')
- self.assertEqual(proc_tag.kind, 'grouped_tag')
- self.assertEqual(proc_tag.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- self.assertEqual(len(proc_tag.signatures), 1)
- self.assertEqual(proc_tag.signatures[0].toHtmlLike(), '<div>typedef Tag<TagName_> TagName;</div>')
- txt = '<div>This is the <i>very important</i> tag brief.</div>'
- self.assertEqual(proc_tag.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_tag.deprecation_msgs), 1)
- self.assertEqual(proc_tag.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_tag.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_tag.sees), 1)
- self.assertEqual(proc_tag.sees[0].toHtmlLike(), txt)
-
-
-class TestConvertFunction(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['global_function']
-
- def testConvertMinimalGlobal(self):
- txt = '@fn myFunction my Function'
- raw_function = self.parseText(txt).entries[0]
- proc_function = self.conv.process(raw_function)
- self.assertEqual(proc_function.name, 'myFunction')
- self.assertEqual(proc_function.title, 'my Function')
- self.assertEqual(proc_function.kind, 'global_function')
-
- def testConvertMinimalInterface(self):
- txt = '@fn Klass#myFunction my Function'
- raw_function = self.parseText(txt).entries[0]
- proc_function = self.conv.process(raw_function)
- self.assertEqual(proc_function.name, 'Klass#myFunction')
- self.assertEqual(proc_function.title, 'my Function')
- self.assertEqual(proc_function.kind, 'interface_function')
-
- def testConvertMinimalMember(self):
- txt = '@fn Klass::myFunction my Function'
- raw_function = self.parseText(txt).entries[0]
- proc_function = self.conv.process(raw_function)
- self.assertEqual(proc_function.name, 'Klass::myFunction')
- self.assertEqual(proc_function.title, 'my Function')
- self.assertEqual(proc_function.kind, 'member_function')
-
- def testConvertFullGlobal(self):
- txt = ('@fn myFunction my Function\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> class brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature template <typename T1>\n'
- ' TReturn foo(T1 x);\n'
- '@param[in] x The parameter\n'
- '@tparam T1 The type of the first template parameter.\n'
- '@return TReturn The return value.\n'
- '@throw Exception The exception type.\n'
- '@datarace This function is thread safe.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_function = self.parseText(txt).entries[0]
- proc_function = self.conv.process(raw_function)
- self.assertEqual(proc_function.name, 'myFunction')
- self.assertEqual(proc_function.title, 'my Function')
- self.assertEqual(proc_function.kind, 'global_function')
- self.assertEqual(proc_function.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- # params
- self.assertEqual(len(proc_function.params), 1)
- self.assertEqual(proc_function.params[0].name, 'x')
- txt = '<div>The parameter</div>'
- self.assertEqual(proc_function.params[0].desc.toHtmlLike(), txt)
- self.assertEqual(proc_function.params[0].in_out, proc_doc.ProcParam.IN)
- # tparams
- self.assertEqual(len(proc_function.tparams), 1)
- self.assertEqual(proc_function.tparams[0].type, 'T1')
- txt = '<div>The type of the first template parameter.</div>'
- self.assertEqual(proc_function.tparams[0].desc.toHtmlLike(), txt)
- # returns
- self.assertEqual(len(proc_function.returns), 1)
- txt = '<div>The return value.</div>'
- self.assertEqual(proc_function.returns[0].desc.toHtmlLike(), txt)
- # throws
- self.assertEqual(len(proc_function.throws), 1)
- txt = '<div>The exception type.</div>'
- self.assertEqual(proc_function.throws[0].desc.toHtmlLike(), txt)
- # dataraces
- self.assertEqual(len(proc_function.dataraces), 1)
- txt = '<div>This function is thread safe.</div>'
- self.assertEqual(proc_function.dataraces[0].desc.toHtmlLike(), txt)
- # brief
- txt = '<div>This is the <i>very important</i> class brief.</div>'
- self.assertEqual(proc_function.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_function.deprecation_msgs), 1)
- self.assertEqual(proc_function.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_function.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_function.sees), 1)
- self.assertEqual(proc_function.sees[0].toHtmlLike(), txt)
-
- def testConvertFullInterface(self):
- txt = ('@fn Klass#myFunction my Function\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> class brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature template <typename T1>\n'
- ' TReturn foo(T1 x);\n'
- '@param[in] x The parameter\n'
- '@tparam T1 The type of the first template parameter.\n'
- '@return TReturn The return value.\n'
- '@throw Excpetion The exception type.\n'
- '@datarace This function is thread safe.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_function = self.parseText(txt).entries[0]
- proc_function = self.conv.process(raw_function)
- self.assertEqual(proc_function.name, 'Klass#myFunction')
- self.assertEqual(proc_function.title, 'my Function')
- self.assertEqual(proc_function.kind, 'interface_function')
- self.assertEqual(proc_function.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- # params
- self.assertEqual(len(proc_function.params), 1)
- self.assertEqual(proc_function.params[0].name, 'x')
- txt = '<div>The parameter</div>'
- self.assertEqual(proc_function.params[0].desc.toHtmlLike(), txt)
- self.assertEqual(proc_function.params[0].in_out, proc_doc.ProcParam.IN)
- # tparams
- self.assertEqual(len(proc_function.tparams), 1)
- self.assertEqual(proc_function.tparams[0].type, 'T1')
- txt = '<div>The type of the first template parameter.</div>'
- self.assertEqual(proc_function.tparams[0].desc.toHtmlLike(), txt)
- # returns
- self.assertEqual(len(proc_function.returns), 1)
- txt = '<div>The return value.</div>'
- self.assertEqual(proc_function.returns[0].desc.toHtmlLike(), txt)
- # throws
- self.assertEqual(len(proc_function.throws), 1)
- txt = '<div>The exception type.</div>'
- self.assertEqual(proc_function.throws[0].desc.toHtmlLike(), txt)
- # dataraces
- self.assertEqual(len(proc_function.dataraces), 1)
- txt = '<div>This function is thread safe.</div>'
- self.assertEqual(proc_function.dataraces[0].desc.toHtmlLike(), txt)
- # brief
- txt = '<div>This is the <i>very important</i> class brief.</div>'
- self.assertEqual(proc_function.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_function.deprecation_msgs), 1)
- self.assertEqual(proc_function.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_function.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_function.sees), 1)
- self.assertEqual(proc_function.sees[0].toHtmlLike(), txt)
-
- def testConvertFullMember(self):
- txt = ('@fn Klass::myFunction my Function\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> class brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature template <typename T1>\n'
- ' TReturn foo(T1 x);\n'
- '@param[in] x The parameter\n'
- '@tparam T1 The type of the first template parameter.\n'
- '@return TReturn The return value.\n'
- '@throw Excpetion The exception type.\n'
- '@datarace This function is thread safe.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_function = self.parseText(txt).entries[0]
- proc_function = self.conv.process(raw_function)
- self.assertEqual(proc_function.name, 'Klass::myFunction')
- self.assertEqual(proc_function.title, 'my Function')
- self.assertEqual(proc_function.kind, 'member_function')
- self.assertEqual(proc_function.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- # params
- self.assertEqual(len(proc_function.params), 1)
- self.assertEqual(proc_function.params[0].name, 'x')
- txt = '<div>The parameter</div>'
- self.assertEqual(proc_function.params[0].desc.toHtmlLike(), txt)
- self.assertEqual(proc_function.params[0].in_out, proc_doc.ProcParam.IN)
- # tparams
- self.assertEqual(len(proc_function.tparams), 1)
- self.assertEqual(proc_function.tparams[0].type, 'T1')
- txt = '<div>The type of the first template parameter.</div>'
- self.assertEqual(proc_function.tparams[0].desc.toHtmlLike(), txt)
- # returns
- self.assertEqual(len(proc_function.returns), 1)
- txt = '<div>The return value.</div>'
- self.assertEqual(proc_function.returns[0].desc.toHtmlLike(), txt)
- # throws
- self.assertEqual(len(proc_function.throws), 1)
- txt = '<div>The exception type.</div>'
- self.assertEqual(proc_function.throws[0].desc.toHtmlLike(), txt)
- # dataraces
- self.assertEqual(len(proc_function.dataraces), 1)
- txt = '<div>This function is thread safe.</div>'
- self.assertEqual(proc_function.dataraces[0].desc.toHtmlLike(), txt)
- # brief
- txt = '<div>This is the <i>very important</i> class brief.</div>'
- self.assertEqual(proc_function.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_function.deprecation_msgs), 1)
- self.assertEqual(proc_function.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_function.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_function.sees), 1)
- self.assertEqual(proc_function.sees[0].toHtmlLike(), txt)
-
-
-class TestConvertMacro(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['macro']
-
- def testConvertMinimalGlobal(self):
- txt = '@macro MACRO macro title'
- raw_macro = self.parseText(txt).entries[0]
- proc_macro = self.conv.process(raw_macro)
- self.assertEqual(proc_macro.name, 'MACRO')
- self.assertEqual(proc_macro.title, 'macro title')
- self.assertEqual(proc_macro.kind, 'macro')
-
- def testConvertMinimalGrouped(self):
- txt = '@fn Group#MACRO macro title'
- raw_macro = self.parseText(txt).entries[0]
- proc_macro = self.conv.process(raw_macro)
- self.assertEqual(proc_macro.name, 'Group#MACRO')
- self.assertEqual(proc_macro.title, 'macro title')
- self.assertEqual(proc_macro.kind, 'grouped_macro')
-
- def testConvertFullGlobal(self):
- txt = ('@macro MACRO macro title\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> macro brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature MACRO(param, param2)\n'
- '@param param The parameter.\n'
- '@param param2 The second parameter.\n'
- '@return TReturn The return value.\n'
- '@throw Exception The exception type.\n'
- '@datarace This function is not thread safe.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_macro = self.parseText(txt).entries[0]
- proc_macro = self.conv.process(raw_macro)
- self.assertEqual(proc_macro.name, 'MACRO')
- self.assertEqual(proc_macro.title, 'macro title')
- self.assertEqual(proc_macro.kind, 'macro')
- self.assertEqual(proc_macro.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- # params
- self.assertEqual(len(proc_macro.params), 2)
- self.assertEqual(proc_macro.params[0].name, 'param')
- txt = '<div>The parameter.</div>'
- self.assertEqual(proc_macro.params[0].desc.toHtmlLike(), txt)
- self.assertEqual(proc_macro.params[0].in_out, None)
- self.assertEqual(proc_macro.params[1].name, 'param2')
- txt = '<div>The second parameter.</div>'
- self.assertEqual(proc_macro.params[1].desc.toHtmlLike(), txt)
- self.assertEqual(proc_macro.params[1].in_out, None)
- # returns
- self.assertEqual(len(proc_macro.returns), 1)
- txt = '<div>The return value.</div>'
- self.assertEqual(proc_macro.returns[0].desc.toHtmlLike(), txt)
- # throws
- self.assertEqual(len(proc_macro.throws), 1)
- txt = '<div>The exception type.</div>'
- self.assertEqual(proc_macro.throws[0].desc.toHtmlLike(), txt)
- # dataraces
- self.assertEqual(len(proc_macro.dataraces), 1)
- txt = '<div>This function is not thread safe.</div>'
- self.assertEqual(proc_macro.dataraces[0].desc.toHtmlLike(), txt)
- # brief
- txt = '<div>This is the <i>very important</i> macro brief.</div>'
- self.assertEqual(proc_macro.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_macro.deprecation_msgs), 1)
- self.assertEqual(proc_macro.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_macro.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_macro.sees), 1)
- self.assertEqual(proc_macro.sees[0].toHtmlLike(), txt)
-
- def testConvertFullGrouped(self):
- txt = ('@macro Group#MACRO macro title\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> class brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature MACRO(param)\n'
- '@param param The parameter\n'
- '@return TReturn The return value.\n'
- '@throw Exception The exception type.\n'
- '@datarace This function is not thread safe.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_macro = self.parseText(txt).entries[0]
- proc_macro = self.conv.process(raw_macro)
- self.assertEqual(proc_macro.name, 'Group#MACRO')
- self.assertEqual(proc_macro.title, 'macro title')
- self.assertEqual(proc_macro.kind, 'grouped_macro')
- self.assertEqual(proc_macro.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- # params
- self.assertEqual(len(proc_macro.params), 1)
- self.assertEqual(proc_macro.params[0].name, 'param')
- txt = '<div>The parameter</div>'
- self.assertEqual(proc_macro.params[0].desc.toHtmlLike(), txt)
- self.assertEqual(proc_macro.params[0].in_out, None)
- # returns
- self.assertEqual(len(proc_macro.returns), 1)
- txt = '<div>The return value.</div>'
- self.assertEqual(proc_macro.returns[0].desc.toHtmlLike(), txt)
- # throws
- self.assertEqual(len(proc_macro.throws), 1)
- txt = '<div>The exception type.</div>'
- self.assertEqual(proc_macro.throws[0].desc.toHtmlLike(), txt)
- # dataraces
- self.assertEqual(len(proc_macro.dataraces), 1)
- txt = '<div>This function is not thread safe.</div>'
- self.assertEqual(proc_macro.dataraces[0].desc.toHtmlLike(), txt)
- # brief
- txt = '<div>This is the <i>very important</i> class brief.</div>'
- self.assertEqual(proc_macro.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_macro.deprecation_msgs), 1)
- self.assertEqual(proc_macro.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_macro.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_macro.sees), 1)
- self.assertEqual(proc_macro.sees[0].toHtmlLike(), txt)
-
-
-class TestConvertMetafunction(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['global_metafunction']
-
- def testConvertMinimalGlobal(self):
- txt = '@mfn Metafunktion metafunction title'
- raw_function = self.parseText(txt).entries[0]
- proc_function = self.conv.process(raw_function)
- self.assertEqual(proc_function.name, 'Metafunktion')
- self.assertEqual(proc_function.title, 'metafunction title')
- self.assertEqual(proc_function.kind, 'global_metafunction')
-
- def testConvertMinimalInterface(self):
- txt = '@mfn Klass#Metafunktion metafunction title'
- raw_function = self.parseText(txt).entries[0]
- proc_function = self.conv.process(raw_function)
- self.assertEqual(proc_function.name, 'Klass#Metafunktion')
- self.assertEqual(proc_function.title, 'metafunction title')
- self.assertEqual(proc_function.kind, 'interface_metafunction')
-
- def testConvertFullGlobal(self):
- txt = ('@mfn Metafunktion metafunction title\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> class brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature template <typename T1>\n'
- ' Metafunktion<T1>::Type;\n'
- '@tparam T1 The type of the first template parameter.\n'
- '@return Type The return type.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_metafunction = self.parseText(txt).entries[0]
- proc_metafunction = self.conv.process(raw_metafunction)
- self.assertEqual(proc_metafunction.name, 'Metafunktion')
- self.assertEqual(proc_metafunction.title, 'metafunction title')
- self.assertEqual(proc_metafunction.kind, 'global_metafunction')
- self.assertEqual(proc_metafunction.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- # tparams
- self.assertEqual(len(proc_metafunction.tparams), 1)
- self.assertEqual(proc_metafunction.tparams[0].type, 'T1')
- txt = '<div>The type of the first template parameter.</div>'
- self.assertEqual(proc_metafunction.tparams[0].desc.toHtmlLike(), txt)
- # returns
- self.assertEqual(len(proc_metafunction.returns), 1)
- txt = '<div>The return type.</div>'
- self.assertEqual(proc_metafunction.returns[0].desc.toHtmlLike(), txt)
- # brief
- txt = '<div>This is the <i>very important</i> class brief.</div>'
- self.assertEqual(proc_metafunction.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_metafunction.deprecation_msgs), 1)
- self.assertEqual(proc_metafunction.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_metafunction.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_metafunction.sees), 1)
- self.assertEqual(proc_metafunction.sees[0].toHtmlLike(), txt)
-
- def testConvertFullInterface(self):
- txt = ('@fn Klass#Metafunktion metafunction title\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> class brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature template <typename T1>\n'
- ' Metafunktion<T1>::Type;\n'
- '@tparam T1 The type of the first template parameter.\n'
- '@return Type The return type.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_metafunction = self.parseText(txt).entries[0]
- proc_metafunction = self.conv.process(raw_metafunction)
- self.assertEqual(proc_metafunction.name, 'Klass#Metafunktion')
- self.assertEqual(proc_metafunction.title, 'metafunction title')
- self.assertEqual(proc_metafunction.kind, 'interface_metafunction')
- # tparams
- self.assertEqual(len(proc_metafunction.tparams), 1)
- self.assertEqual(proc_metafunction.tparams[0].type, 'T1')
- txt = '<div>The type of the first template parameter.</div>'
- self.assertEqual(proc_metafunction.tparams[0].desc.toHtmlLike(), txt)
- # returns
- self.assertEqual(len(proc_metafunction.returns), 1)
- txt = '<div>The return type.</div>'
- self.assertEqual(proc_metafunction.returns[0].desc.toHtmlLike(), txt)
- # brief
- txt = '<div>This is the <i>very important</i> class brief.</div>'
- self.assertEqual(proc_metafunction.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_metafunction.deprecation_msgs), 1)
- self.assertEqual(proc_metafunction.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_metafunction.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_metafunction.sees), 1)
- self.assertEqual(proc_metafunction.sees[0].toHtmlLike(), txt)
-
-
-class TestConvertVariable(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
- self.conv = self.proc.converters['variable']
-
- def testConvertMinimalGlobal(self):
- txt = '@var Type myVar'
- raw_function = self.parseText(txt).entries[0]
- proc_function = self.conv.process(raw_function)
- self.assertEqual(proc_function.name, 'myVar')
- self.assertEqual(proc_function.title, 'myVar')
- self.assertEqual(proc_function.type, 'Type')
- self.assertEqual(proc_function.kind, 'variable')
-
- def testConvertMinimalMember(self):
- txt = '@var Type Klass::myVar'
- raw_function = self.parseText(txt).entries[0]
- doc = proc_doc.ProcDoc
- proc_function = self.conv.process(raw_function)
- self.assertEqual(proc_function.name, 'Klass::myVar')
- self.assertEqual(proc_function.title, 'Klass::myVar')
- self.assertEqual(proc_function.type, 'Type')
- self.assertEqual(proc_function.kind, 'member_variable')
-
- def testConvertFullGlobal(self):
- txt = ('@var Type myVar\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> variable brief.\n'
- '@signature Type myVar;\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_variable = self.parseText(txt).entries[0]
- proc_variable = self.conv.process(raw_variable)
- self.assertEqual(proc_variable.name, 'myVar')
- self.assertEqual(proc_variable.title, 'myVar')
- self.assertEqual(proc_variable.type, 'Type')
- self.assertEqual(proc_variable.kind, 'variable')
- # brief
- txt = '<div>This is the <i>very important</i> variable brief.</div>'
- self.assertEqual(proc_variable.brief.toHtmlLike(), txt)
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_variable.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_variable.sees), 1)
- self.assertEqual(proc_variable.sees[0].toHtmlLike(), txt)
-
-
- def testConvertFullMember(self):
- txt = ('@var Type Klass::myVar\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> variable brief.\n'
- '@deprecated Deprecation msg.\n'
- '@signature Type myVar;\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_variable = self.parseText(txt).entries[0]
- proc_variable = self.conv.process(raw_variable)
- self.assertEqual(proc_variable.name, 'Klass::myVar')
- self.assertEqual(proc_variable.title, 'Klass::myVar')
- self.assertEqual(proc_variable.type, 'Type')
- self.assertEqual(proc_variable.kind, 'member_variable')
- self.assertEqual(proc_variable.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- # brief
- txt = '<div>This is the <i>very important</i> variable brief.</div>'
- self.assertEqual(proc_variable.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_variable.deprecation_msgs), 1)
- self.assertEqual(proc_variable.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_variable.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_variable.sees), 1)
- self.assertEqual(proc_variable.sees[0].toHtmlLike(), txt)
-
- def testConvertFullEnumValue(self):
- txt = ('@var Enum CONSTANT\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> value brief.\n'
- '@deprecated Deprecation msg.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_variable = self.parseText(txt).entries[0]
- proc_variable = self.conv.process(raw_variable)
- self.assertEqual(proc_variable.name, 'CONSTANT')
- self.assertEqual(proc_variable.title, 'CONSTANT')
- self.assertEqual(proc_variable.type, 'Enum')
- self.assertEqual(proc_variable.kind, 'variable')
- self.assertEqual(proc_variable.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- # brief
- txt = '<div>This is the <i>very important</i> value brief.</div>'
- self.assertEqual(proc_variable.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_variable.deprecation_msgs), 1)
- self.assertEqual(proc_variable.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_variable.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_variable.sees), 1)
- self.assertEqual(proc_variable.sees[0].toHtmlLike(), txt)
-
- def testConvertFullMemberEnumValue(self):
- txt = ('@var Klass::Enum Klass::CONSTANT\n'
- '@headerfile <seqan/header.h>\n'
- '@headerfile <seqan/header2.h>\n'
- '@brief This is the <i>very important</i> value brief.\n'
- '@deprecated Deprecation msg.\n'
- '\n'
- 'This is the first paragraph.\n'
- '@section First <em>heading</em>\n'
- '\n'
- 'Second paragraph\n'
- '@see Link Target\n')
- raw_variable = self.parseText(txt).entries[0]
- proc_variable = self.conv.process(raw_variable)
- self.assertEqual(proc_variable.name, 'Klass::CONSTANT')
- self.assertEqual(proc_variable.title, 'Klass::CONSTANT')
- self.assertEqual(proc_variable.type, 'Klass::Enum')
- self.assertEqual(proc_variable.kind, 'member_variable')
- self.assertEqual(proc_variable.headerfiles, ['<seqan/header.h>', '<seqan/header2.h>'])
- # brief
- txt = '<div>This is the <i>very important</i> value brief.</div>'
- self.assertEqual(proc_variable.brief.toHtmlLike(), txt)
- self.assertEqual(len(proc_variable.deprecation_msgs), 1)
- self.assertEqual(proc_variable.deprecation_msgs[0].toHtmlLike(), '<div>Deprecation msg.</div>')
- txt = ('<div>'
- '<p>This is the first paragraph.</p>'
- '<h1>First <em>heading</em></h1>'
- '<p>Second paragraph</p>'
- '</div>'
- )
- self.assertEqual(proc_variable.body.toHtmlLike(), txt)
- txt = '<a href="seqan:Link Target">Link Target</a>'
- self.assertEqual(len(proc_variable.sees), 1)
- self.assertEqual(proc_variable.sees[0].toHtmlLike(), txt)
-
-
-class TestDocProcessorInheritance(TestConverterBase):
- def setUp(self):
- self.proc = self.createDocProcessor()
-
- def testConceptInheritance(self):
- txt = ('@concept ConceptA1\n'
- '@brief Concept A1\n'
- '\n'
- '@concept ConceptA2\n'
- '@brief Concept A2\n'
- '\n'
- '@concept ConceptB\n'
- '@brief Concept B\n'
- '@extends ConceptA1\n'
- '@extends ConceptA2\n'
- '\n'
- '@concept ConceptC\n'
- '@brief Concept C\n'
- '@extends ConceptB\n')
- raw_doc = self.parseText(txt)
- proc_doc = self.proc.run(raw_doc)
- concept_a1 = proc_doc.top_level_entries['ConceptA1']
- self.assertEqual(concept_a1.all_extended, set())
- self.assertEqual(concept_a1.all_extending, set(['ConceptB', 'ConceptC']))
- concept_a2 = proc_doc.top_level_entries['ConceptA2']
- self.assertEqual(concept_a2.all_extended, set())
- self.assertEqual(concept_a2.all_extending, set(['ConceptB', 'ConceptC']))
- concept_b = proc_doc.top_level_entries['ConceptB']
- self.assertEqual(concept_b.all_extended, set(['ConceptA1', 'ConceptA2']))
- self.assertEqual(concept_b.all_extending, set(['ConceptC']))
- concept_c = proc_doc.top_level_entries['ConceptC']
- self.assertEqual(concept_c.all_extended, set(['ConceptA1', 'ConceptA2', 'ConceptB']))
- self.assertEqual(concept_c.all_extending, set([]))
-
- def testClassInheritance(self):
- txt = ('@class ClassA\n'
- '@brief Brief A\n'
- '@signature class A\n'
- '\n'
- '@class ClassB\n'
- '@brief Brief B\n'
- '@signature class B\n'
- '@extends ClassA\n'
- '\n'
- '@class ClassC\n'
- '@brief Brief C\n'
- '@signature class C\n'
- '@extends ClassB\n')
- raw_doc = self.parseText(txt)
- proc_doc = self.proc.run(raw_doc)
- class_a = proc_doc.top_level_entries['ClassA']
- self.assertEqual(class_a.all_extended, set())
- self.assertEqual(class_a.all_extending, set(['ClassB', 'ClassC']))
- class_b = proc_doc.top_level_entries['ClassB']
- self.assertEqual(class_b.all_extended, set(['ClassA']))
- self.assertEqual(class_b.all_extending, set(['ClassC']))
- class_c = proc_doc.top_level_entries['ClassC']
- self.assertEqual(class_c.all_extended, set(['ClassA', 'ClassB']))
-
- def testConceptClassInheritance(self):
- txt = ('@concept ConceptA\n'
- '@brief Concept A\n'
- '@signature concept A;\n'
- '\n'
- '@concept ConceptB\n'
- '@brief Concept B\n'
- '@signature concept B;\n'
- '@extends ConceptA\n'
- '\n'
- '@class ClassA\n'
- '@brief Class A\n'
- '@signature class A\n'
- '@implements ConceptB\n'
- '\n'
- '@class ClassB\n'
- '@brief Class B\n'
- '@signature class B\n'
- '@extends ClassA\n'
- '\n'
- '@class ClassC\n'
- '@brief Class C\n'
- '@signature class C\n'
- '@extends ClassB\n')
- raw_doc = self.parseText(txt)
- proc_doc = self.proc.run(raw_doc)
- concept_a = proc_doc.top_level_entries['ConceptA']
- self.assertEqual(concept_a.all_extended, set())
- self.assertEqual(concept_a.all_extending, set(['ConceptB']))
- self.assertEqual(concept_a.all_implementing, set(['ClassA', 'ClassB', 'ClassC']))
- concept_b = proc_doc.top_level_entries['ConceptB']
- self.assertEqual(concept_b.all_extended, set(['ConceptA']))
- self.assertEqual(concept_b.all_extending, set([]))
- self.assertEqual(concept_b.all_implementing, set(['ClassA', 'ClassB', 'ClassC']))
- class_a = proc_doc.top_level_entries['ClassA']
- self.assertEqual(class_a.all_extended, set())
- self.assertEqual(class_a.all_extending, set(['ClassB', 'ClassC']))
- self.assertEqual(class_a.all_implemented, set(['ConceptA', 'ConceptB']))
- class_b = proc_doc.top_level_entries['ClassB']
- self.assertEqual(class_b.all_extended, set(['ClassA']))
- self.assertEqual(class_b.all_extending, set(['ClassC']))
- self.assertEqual(class_b.all_implemented, set(['ConceptA', 'ConceptB']))
- class_c = proc_doc.top_level_entries['ClassC']
- self.assertEqual(class_c.all_extended, set(['ClassA', 'ClassB']))
- self.assertEqual(class_c.all_extending, set([]))
- self.assertEqual(class_c.all_implemented, set(['ConceptA', 'ConceptB']))
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/util/py_lib/seqan/dox/test/test_raw_doc.py b/util/py_lib/seqan/dox/test/test_raw_doc.py
deleted file mode 100644
index 058e8a8..0000000
--- a/util/py_lib/seqan/dox/test/test_raw_doc.py
+++ /dev/null
@@ -1,624 +0,0 @@
-#!/usr/bin/env python2
-"""Tests for the raw_doc module."""
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-# TODO(holtgrew): Implement test for Class, Function, Metafunction, Macro, Page, Group, Tag.
-
-import unittest
-
-import seqan.dox.lexer as lexer
-import seqan.dox.raw_doc as raw_doc
-
-
-class TestDoxFormatter(unittest.TestCase):
- def setUp(self):
- self.fmt = raw_doc.DoxFormatter(50)
- self.txt = ('This is a quite long string that is used to determine '
- 'whether the formatter wraps correctly.\n')
-
- def testFormatParagraph(self):
- res = self.fmt.formatParagraph(self.txt)
- txt = ('This is a quite long string that is used to\n'
- 'determine whether the formatter wraps correctly.\n')
- self.assertMultiLineEqual(res, txt)
-
- def testFormatCommandNoLeading(self):
- res = self.fmt.formatCommand('cmd', self.txt)
- txt = ('@cmd This is a quite long string that is used to\n'
- ' determine whether the formatter wraps\n'
- ' correctly.\n')
- self.assertMultiLineEqual(res, txt)
-
- def testFormatCommandLeading(self):
- res = self.fmt.formatCommand('cmd', self.txt, 'leading')
- txt = ('@cmd leading This is a quite long string that is\n'
- ' used to determine whether the\n'
- ' formatter wraps correctly.\n')
- self.assertMultiLineEqual(res, txt)
-
-
-class TestText(unittest.TestCase):
- def testConstructionWithTokens(self):
- tokens = [lexer.Token('WORD', 'test', 0, 0, 0),
- lexer.Token('SPACE', ' ', 0, 0, 0),
- lexer.Token('WORD', 'foo', 0, 0, 0)]
- text = raw_doc.RawText(tokens)
- self.assertEqual(text.tokens, tokens)
- self.failIf(text.empty)
-
- def testConstructionWithoutTokens(self):
- text = raw_doc.RawText()
- self.assertEqual(text.tokens, [])
- self.assert_(text.empty)
-
-
-class TestDocumentation(unittest.TestCase):
- # TODO(holtgrew): Write more tests!
-
- def testMerge(self):
- self.page_token = lexer.Token('COMMAND_PAGE', '@page', 0, 0, 0)
- doc_left = raw_doc.RawDoc()
- page_left = raw_doc.RawPage(self.page_token)
- doc_left.entries.append(page_left)
- doc_right = raw_doc.RawDoc()
- page_right = raw_doc.RawPage(self.page_token)
- doc_right.entries.append(page_right)
- doc_left.merge(doc_right)
-
- self.assertEqual(len(doc_left.entries), 2)
- self.assertEqual(len(doc_right.entries), 1)
- self.assertEqual(doc_left.entries[0], page_left)
- self.assertEqual(doc_left.entries[1], page_right)
-
-
-class TestEntry(unittest.TestCase):
- def setUp(self):
- self.tok = lexer.Token('WORD', 'entry', 0, 0, 0)
- self.brief_tok = lexer.Token('WORD', 'This is brief.', 0, 0, 0)
- self.name_tok = lexer.Token('WORD', 'Concept', 0, 0, 0)
- self.title_tok = lexer.Token('WORD', 'Concept Title', 0, 0, 0)
- self.tok_see = lexer.Token('WORD', 'See', 0, 0, 0)
-
- def testInitialization(self):
- entry = raw_doc.RawEntry(self.tok)
- self.assertEqual(entry.name.text, raw_doc.RawText().text)
- self.assertEqual(len(entry.briefs), 0)
- self.assertEqual(entry.body, raw_doc.RawBody())
- self.assertEqual(entry.sees, [])
- self.assertEqual(entry.command, '<entry>')
-
- def testAddBrief(self):
- entry = raw_doc.RawEntry(self.tok)
- self.assertEqual(entry.briefs, [])
- b = raw_doc.RawBrief(self.brief_tok, raw_doc.RawText())
- entry.addBrief(b)
- self.assertEqual(len(entry.briefs), 1)
- self.assertEqual(entry.briefs, [b])
-
- def testAddSee(self):
- entry = raw_doc.RawEntry(self.tok_see)
- self.assertEqual(entry.sees, [])
- s = raw_doc.RawSee(self.tok_see, raw_doc.RawText())
- entry.addSee(s)
- self.assertEqual(len(entry.sees), 1)
- self.assertEqual(entry.sees, [s])
-
- def testEntryTypes(self):
- expected = ('concept', 'class', 'function', 'metafunction', 'page',
- 'enum', 'var', 'tag', 'defgroup', 'macro', 'enum_value')
- self.assertEqual(raw_doc.RawEntry.entryTypes(), expected)
-
- def testAddParagraph(self):
- entry = raw_doc.RawEntry(self.tok)
- self.assertEqual(entry.body, raw_doc.RawBody())
- p = raw_doc.RawParagraph(self.tok)
- entry.addParagraph(p)
- b = raw_doc.RawBody()
- b.addParagraph(p)
- self.assertEqual(entry.body, b)
-
- def testGetFormatted(self):
- b = raw_doc.RawBrief(self.brief_tok, raw_doc.RawText([self.brief_tok]))
- entry = raw_doc.RawEntry(self.brief_tok, [b])
- entry.name = raw_doc.RawText([self.name_tok])
- entry.title = raw_doc.RawText([self.title_tok])
- entry.sees = [raw_doc.RawSee(self.tok_see, raw_doc.RawText([self.tok_see]))]
- formatter = raw_doc.DoxFormatter()
- msg = ('@<entry> Concept Concept Title\n\n'
- '@brief This is brief.\n\n'
- '@see See\n\n')
- self.assertMultiLineEqual(entry.getFormatted(formatter), msg)
-
-
-class CodeEntryTest(unittest.TestCase):
- def setUp(self):
- self.code_tok = lexer.Token('COMMAND_CODE', '@code', 0, 0, 0)
- self.sig_tok = lexer.Token('COMMAND_SIGNATURE', '@signature', 0, 0, 0)
- self.brief_tok = lexer.Token('WORD', 'This is brief.', 0, 0, 0)
- self.name_tok = lexer.Token('WORD', 'Concept', 0, 0, 0)
- self.title_tok = lexer.Token('WORD', 'Concept Title', 0, 0, 0)
- self.tok_see = lexer.Token('WORD', 'See', 0, 0, 0)
- self.tok_sig = lexer.Token('WORD', 'payload', 0, 0, 0)
-
- def testCreation(self):
- code_entry = raw_doc.RawCodeEntry(self.code_tok)
- self.assertEqual(code_entry.signatures, [])
- self.assertEqual(code_entry.command, '<code entry>')
-
- def testAddSignature(self):
- code_entry = raw_doc.RawCodeEntry(self.code_tok)
- s = raw_doc.RawSignature(self.sig_tok, raw_doc.RawText(
- [lexer.Token('WORD', 'payload', 0, 0, 0)]))
- code_entry.addSignature(s)
-
- def testGetFormatted(self):
- code_entry = raw_doc.RawCodeEntry(self.code_tok)
- b = raw_doc.RawBrief(self.brief_tok, raw_doc.RawText([self.brief_tok]))
- code_entry = raw_doc.RawCodeEntry(self.code_tok, [b])
- code_entry.name = raw_doc.RawText([self.name_tok])
- code_entry.title = raw_doc.RawText([self.title_tok])
- code_entry.sees = [raw_doc.RawSee(self.tok_see, raw_doc.RawText([self.tok_see]))]
- s = raw_doc.RawSignature(self.tok_sig, raw_doc.RawText([self.tok_sig]))
- code_entry.addSignature(s)
- formatter = raw_doc.DoxFormatter()
- txt = ('@<code entry> Concept Concept Title\n\n'
- '@brief This is brief.\n\n'
- '@signature payload\n\n'
- '@see See\n\n')
- self.assertMultiLineEqual(code_entry.getFormatted(formatter), txt)
-
-
-class ConceptTest(unittest.TestCase):
- def setUp(self):
- self.brief_tok = lexer.Token('WORD', 'This is brief.', 0, 0, 0)
- self.name_tok = lexer.Token('WORD', 'Concept', 0, 0, 0)
- self.title_tok = lexer.Token('WORD', 'Concept Title', 0, 0, 0)
- self.tok_see = lexer.Token('WORD', 'See', 0, 0, 0)
- self.tok_sig = lexer.Token('WORD', 'payload', 0, 0, 0)
- self.formatter = raw_doc.DoxFormatter()
-
- def testGetFormatted(self):
- b = raw_doc.RawBrief(self.brief_tok, raw_doc.RawText([self.brief_tok]))
- code_entry = raw_doc.RawConcept(self.brief_tok, [b])
- code_entry.name = raw_doc.RawText([self.name_tok])
- code_entry.title = raw_doc.RawText([self.title_tok])
- code_entry.sees = [raw_doc.RawSee(self.tok_see, raw_doc.RawText([self.tok_see]))]
- s = raw_doc.RawSignature(self.tok_sig, raw_doc.RawText([self.tok_sig]))
- code_entry.addSignature(s)
- txt = ('@concept Concept Concept Title\n\n'
- '@brief This is brief.\n\n'
- '@signature payload\n\n'
- '@see See\n\n')
- self.assertMultiLineEqual(code_entry.getFormatted(self.formatter), txt)
-
-
-class EnumTest(unittest.TestCase):
- def setUp(self):
- self.brief_tok = lexer.Token('WORD', 'This is brief.', 0, 0, 0)
- self.name_tok = lexer.Token('WORD', 'Enum', 0, 0, 0)
- self.title_tok = lexer.Token('WORD', 'Enum Title', 0, 0, 0)
- self.tok_see = lexer.Token('WORD', 'See', 0, 0, 0)
- self.tok_sig = lexer.Token('WORD', 'payload', 0, 0, 0)
- self.formatter = raw_doc.DoxFormatter()
-
- def testGetFormatted(self):
- b = raw_doc.RawBrief(self.brief_tok, raw_doc.RawText([self.brief_tok]))
- code_entry = raw_doc.RawEnum(self.brief_tok, [b])
- code_entry.name = raw_doc.RawText([self.name_tok])
- code_entry.title = raw_doc.RawText([self.title_tok])
- code_entry.sees = [raw_doc.RawSee(self.tok_see, raw_doc.RawText([self.tok_see]))]
- s = raw_doc.RawSignature(self.tok_sig, raw_doc.RawText([self.tok_sig]))
- code_entry.addSignature(s)
- txt = ('@enum Enum Enum Title\n\n'
- '@brief This is brief.\n\n'
- '@signature payload\n\n'
- '@see See\n\n')
- self.assertMultiLineEqual(code_entry.getFormatted(self.formatter), txt)
-
-
-class TypedefTest(unittest.TestCase):
- def setUp(self):
- self.brief_tok = lexer.Token('WORD', 'This is brief.', 0, 0, 0)
- self.name_tok = lexer.Token('WORD', 'TypeDef', 0, 0, 0)
- self.title_tok = lexer.Token('WORD', 'Typedef Title', 0, 0, 0)
- self.tok_see = lexer.Token('WORD', 'See', 0, 0, 0)
- self.tok_sig = lexer.Token('WORD', 'payload', 0, 0, 0)
- self.formatter = raw_doc.DoxFormatter()
-
- def testGetFormatted(self):
- b = raw_doc.RawBrief(self.brief_tok, raw_doc.RawText([self.brief_tok]))
- code_entry = raw_doc.RawTypedef(self.brief_tok, [b])
- code_entry.name = raw_doc.RawText([self.name_tok])
- code_entry.title = raw_doc.RawText([self.title_tok])
- code_entry.sees = [raw_doc.RawSee(self.tok_see, raw_doc.RawText([self.tok_see]))]
- s = raw_doc.RawSignature(self.tok_sig, raw_doc.RawText([self.tok_sig]))
- code_entry.addSignature(s)
- txt = ('@typedef TypeDef Typedef Title\n\n'
- '@brief This is brief.\n\n'
- '@signature payload\n\n'
- '@see See\n\n')
- self.assertMultiLineEqual(code_entry.getFormatted(self.formatter), txt)
-
-
-class AdaptionTest(unittest.TestCase):
- def setUp(self):
- self.brief_tok = lexer.Token('WORD', 'This is brief.', 0, 0, 0)
- self.name_tok = lexer.Token('WORD', 'Adaption', 0, 0, 0)
- self.title_tok = lexer.Token('WORD', 'Adaption Title', 0, 0, 0)
- self.tok_see = lexer.Token('WORD', 'See', 0, 0, 0)
- self.tok_sig = lexer.Token('WORD', 'payload', 0, 0, 0)
- self.formatter = raw_doc.DoxFormatter()
-
- def testGetFormatted(self):
- b = raw_doc.RawBrief(self.brief_tok, raw_doc.RawText([self.brief_tok]))
- code_entry = raw_doc.RawAdaption(self.brief_tok, [b])
- code_entry.name = raw_doc.RawText([self.name_tok])
- code_entry.title = raw_doc.RawText([self.title_tok])
- code_entry.sees = [raw_doc.RawSee(self.tok_see, raw_doc.RawText([self.tok_see]))]
- s = raw_doc.RawSignature(self.tok_sig, raw_doc.RawText([self.tok_sig]))
- code_entry.addSignature(s)
- txt = ('@adaption Adaption Adaption Title\n\n'
- '@brief This is brief.\n\n'
- '@signature payload\n\n'
- '@see See\n\n')
- self.assertMultiLineEqual(code_entry.getFormatted(self.formatter), txt)
-
-
-class VariableTest(unittest.TestCase):
- def setUp(self):
- self.brief_tok = lexer.Token('WORD', 'This is brief.', 0, 0, 0)
- self.name_tok = lexer.Token('WORD', 'var', 0, 0, 0)
- self.type_tok = lexer.Token('WORD', 'int', 0, 0, 0)
- self.tok_see = lexer.Token('WORD', 'See', 0, 0, 0)
- self.tok_sig = lexer.Token('WORD', 'payload', 0, 0, 0)
- self.formatter = raw_doc.DoxFormatter()
-
- def testGetFormatted(self):
- b = raw_doc.RawBrief(self.brief_tok, raw_doc.RawText([self.brief_tok]))
- code_entry = raw_doc.RawVariable(self.brief_tok, [b])
- code_entry.name = raw_doc.RawText([self.name_tok])
- code_entry.type = raw_doc.RawText([self.type_tok])
- code_entry.sees = [raw_doc.RawSee(self.tok_see, raw_doc.RawText([self.tok_see]))]
- s = raw_doc.RawSignature(self.tok_sig, raw_doc.RawText([self.tok_sig]))
- code_entry.addSignature(s)
- txt = ('@var int var;\n\n'
- '@brief This is brief.\n\n'
- '@signature payload\n\n'
- '@see See\n\n')
- self.assertMultiLineEqual(code_entry.getFormatted(self.formatter), txt)
-
-
-class BodyTest(unittest.TestCase):
- def setUp(self):
- self.t = lexer.Token('WORD', 'aword', 0, 0, 0)
- self.p = raw_doc.RawParagraph(self.t, raw_doc.RawText([self.t]))
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- body = raw_doc.RawBody()
- self.assertEqual(body.paragraphs, [])
- body.addParagraph(self.p)
- self.assertEqual(body.paragraphs, [self.p])
-
- def testGetFormatted(self):
- body = raw_doc.RawBody()
- body.addParagraph(self.p)
- self.assertEqual(body.getFormatted(self.formatter), 'aword\n')
-
-
-class SectionTest(unittest.TestCase):
- def setUp(self):
- self.t = lexer.Token('WORD', 'aword', 0, 0, 0)
- self.formatter = raw_doc.DoxFormatter()
- self.txt = raw_doc.RawText([self.t])
-
- def testCreation(self):
- section = raw_doc.RawSection(self.t, self.txt)
- self.assertEqual(section.heading, self.txt)
- self.assertEqual(section.level, 0)
-
- def testGetType(self):
- section = raw_doc.RawSection(self.t, self.txt, 1)
- self.assertEqual(section.getType(), 'section')
-
- def testCreationWithLevel(self):
- section = raw_doc.RawSection(self.t, self.txt, 1)
- self.assertEqual(section.heading, self.txt)
- self.assertEqual(section.level, 1)
-
- def testGetCommand(self):
- section = raw_doc.RawSection(self.t, self.txt, 0)
- self.assertEqual(section.getCommand(), 'section')
- section = raw_doc.RawSection(self.t, self.txt, 1)
- self.assertEqual(section.getCommand(), 'subsection')
-
- def testGetFormatted(self):
- section = raw_doc.RawSection(self.t, self.txt, 1)
- self.assertEqual(section.getFormatted(self.formatter), '@subsection aword\n')
-
-
-class IncludeTest(unittest.TestCase):
- def setUp(self):
- self.path_t = lexer.Token('WORD', 'apath', 0, 0, 0)
- self.path = raw_doc.RawText([self.path_t])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- include = raw_doc.RawInclude(self.path_t, [self.path_t])
- self.assertEqual(include.path, self.path)
- self.assertEqual(include.getFormatted(self.formatter), '@include apath\n')
-
-
-class SnippetTest(unittest.TestCase):
- def setUp(self):
- self.path_t = lexer.Token('WORD', 'apath', 0, 0, 0)
- self.path = raw_doc.RawText([self.path_t])
- self.snippet_t0 = lexer.Token('WORD', 'The', 0, 0, 0)
- self.snippet_t1 = lexer.Token('SPACE', ' ', 0, 0, 0)
- self.snippet_t2 = lexer.Token('WORD', 'snippet', 0, 0, 0)
- self.snippet = raw_doc.RawText([self.snippet_t0, self.snippet_t1,
- self.snippet_t2])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- snippet = raw_doc.RawSnippet(self.path_t, self.path.tokens, self.snippet.tokens)
- self.assertEqual(snippet.getFormatted(self.formatter),
- '@snippet apath The snippet\n')
-
-
-class CodeTest(unittest.TestCase):
- def setUp(self):
- self.t = lexer.Token('WORD', 'aword', 0, 0, 0)
- self.txt = raw_doc.RawText([self.t])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- paragraph = raw_doc.RawCode(self.t, self.txt)
- self.assertEqual(paragraph.text, self.txt)
- self.assertEqual(paragraph.extension, '.txt')
-
- def testCreationWithExtension(self):
- paragraph = raw_doc.RawCode(self.t, self.txt, '.cpp')
- self.assertEqual(paragraph.text, self.txt)
- self.assertEqual(paragraph.extension, '.cpp')
-
- def testGetType(self):
- pass
-
- def testGetFormatted(self):
- pass
-
-
-class BriefTest(unittest.TestCase):
- def setUp(self):
- self.t = lexer.Token('WORD', 'aword', 0, 0, 0)
- self.txt = raw_doc.RawText([self.t])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- brief = raw_doc.RawBrief(self.t, self.txt)
- self.assertEqual(brief.text, self.txt)
-
- def testGetType(self):
- brief = raw_doc.RawBrief(self.t, self.txt)
- self.assertEqual(brief.getType(), 'brief')
-
- def testGetFormatted(self):
- brief = raw_doc.RawBrief(self.t, self.txt)
- self.assertEqual(brief.getFormatted(self.formatter), '@brief aword\n')
-
-
-class ExtendsTest(unittest.TestCase):
- def setUp(self):
- self.t = lexer.Token('WORD', 'aword', 0, 0, 0)
- self.txt = raw_doc.RawText([self.t])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- extends = raw_doc.RawExtends(self.t, self.txt)
- self.assertEqual(extends.text, self.txt)
-
- def testGetType(self):
- extends = raw_doc.RawExtends(self.t, self.txt)
- self.assertEqual(extends.getType(), 'extends')
-
- def testGetFormatted(self):
- extends = raw_doc.RawExtends(self.t, self.txt)
- self.assertEqual(extends.getFormatted(self.formatter), '@extends aword\n')
-
-
-class ImplementsTest(unittest.TestCase):
- def setUp(self):
- self.t = lexer.Token('WORD', 'aword', 0, 0, 0)
- self.txt = raw_doc.RawText([self.t])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- implements = raw_doc.RawImplements(self.t, self.txt)
- self.assertEqual(implements.text, self.txt)
-
- def testGetType(self):
- implements = raw_doc.RawImplements(self.t, self.txt)
- self.assertEqual(implements.getType(), 'implements')
-
- def testGetFormatted(self):
- implements = raw_doc.RawImplements(self.t, self.txt)
- self.assertEqual(implements.getFormatted(self.formatter), '@implements aword\n')
-
-
-class SeeTest(unittest.TestCase):
- def setUp(self):
- self.t = lexer.Token('WORD', 'aword', 0, 0, 0)
- self.txt = raw_doc.RawText([self.t])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- see = raw_doc.RawSee(self.t, self.txt)
- self.assertEqual(see.text, self.txt)
-
- def testGetType(self):
- see = raw_doc.RawSee(self.t, self.txt)
- self.assertEqual(see.getType(), 'see')
-
- def testGetFormatted(self):
- see = raw_doc.RawSee(self.t, self.txt)
- self.assertEqual(see.getFormatted(self.formatter), '@see aword\n')
-
-
-class ParamTest(unittest.TestCase):
- def setUp(self):
- self.tok = lexer.Token('COMMAND_PARAM', '@param', 0, 0, 0)
- self.tok_name = lexer.Token('WORD', 'name', 0, 0, 0)
- self.tok_text = lexer.Token('WORD', 'text', 0, 0, 0)
- self.tok_inout = lexer.Token('PARAM_IN_OUT', '[in,out]', 0, 0, 0)
- self.txt_name = raw_doc.RawText([self.tok_name])
- self.txt_text = raw_doc.RawText([self.tok_text])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- param = raw_doc.RawParam(self.tok, self.txt_name, self.txt_text)
- self.assertEqual(param.name, self.txt_name)
- self.assertEqual(param.text, self.txt_text)
- self.assertEqual(param.inout, None)
-
- def testCreationInOut(self):
- param = raw_doc.RawParam(self.tok, self.txt_name, self.txt_text, self.tok_inout)
- self.assertEqual(param.name, self.txt_name)
- self.assertEqual(param.text, self.txt_text)
- self.assertEqual(param.inout, self.tok_inout)
-
- def testGetType(self):
- param = raw_doc.RawParam(self.tok, self.txt_name, self.txt_text)
- self.assertEqual(param.getType(), 'param')
-
- def testGetFormatted(self):
- param = raw_doc.RawParam(self.tok, self.txt_name, self.txt_text)
- self.assertEqual(param.getFormatted(self.formatter),
- '@param name text\n')
- param = raw_doc.RawParam(self.tok, self.txt_name, self.txt_text, self.tok_inout)
- self.assertEqual(param.getFormatted(self.formatter),
- '@param[in,out] name text\n')
-
-
-class TParamTest(unittest.TestCase):
- def setUp(self):
- self.tok = lexer.Token('COMMAND_TPARAM', '@tparam', 0, 0, 0)
- self.tok_name = lexer.Token('WORD', 'name', 0, 0, 0)
- self.tok_text = lexer.Token('WORD', 'text', 0, 0, 0)
- self.txt_name = raw_doc.RawText([self.tok_name])
- self.txt_text = raw_doc.RawText([self.tok_text])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- param = raw_doc.RawTParam(self.tok, self.txt_name, self.txt_text)
- self.assertEqual(param.name, self.txt_name)
- self.assertEqual(param.text, self.txt_text)
-
- def testGetType(self):
- param = raw_doc.RawTParam(self.tok, self.txt_name, self.txt_text)
- self.assertEqual(param.getType(), 'tparam')
-
- def testGetFormatted(self):
- param = raw_doc.RawTParam(self.tok, self.txt_name, self.txt_text)
- self.assertEqual(param.getFormatted(self.formatter),
- '@tparam name text\n')
-
-
-class ReturnTest(unittest.TestCase):
- def setUp(self):
- self.tok = lexer.Token('COMMAND_RETURN', '@return', 0, 0, 0)
- self.tok_name = lexer.Token('WORD', 'name', 0, 0, 0)
- self.tok_text = lexer.Token('WORD', 'text', 0, 0, 0)
- self.txt_name = raw_doc.RawText([self.tok_name])
- self.txt_text = raw_doc.RawText([self.tok_text])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- ret = raw_doc.RawReturn(self.tok, self.txt_name, self.txt_text)
- self.assertEqual(ret.name, self.txt_name)
- self.assertEqual(ret.text, self.txt_text)
- self.assertEqual(ret.inout, None)
-
- def testGetType(self):
- ret = raw_doc.RawReturn(self.tok, self.txt_name, self.txt_text)
- self.assertEqual(ret.getType(), 'return')
-
- def testGetFormatted(self):
- ret = raw_doc.RawReturn(self.tok, self.txt_name, self.txt_text)
- self.assertEqual(ret.getFormatted(self.formatter),
- '@return name text\n')
-
-
-class ThrowTest(unittest.TestCase):
- """Test for the RawThrow class, mostly tests instance variables."""
-
- def setUp(self):
- self.tok = lexer.Token('COMMAND_THROW', '@throw', 0, 0, 0)
- self.tok_type = lexer.Token('WORD', 'type', 0, 0, 0)
- self.tok_text = lexer.Token('WORD', 'text', 0, 0, 0)
- self.txt_type = raw_doc.RawText([self.tok_type])
- self.txt_text = raw_doc.RawText([self.tok_text])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- ret = raw_doc.RawThrow(self.tok, self.txt_type, self.txt_text)
- self.assertEqual(ret.name, self.txt_type)
- self.assertEqual(ret.text, self.txt_text)
- self.assertEqual(ret.inout, None)
-
- def testGetType(self):
- ret = raw_doc.RawThrow(self.tok, self.txt_type, self.txt_text)
- self.assertEqual(ret.getType(), 'throw')
-
- def testGetFormatted(self):
- ret = raw_doc.RawThrow(self.tok, self.txt_type, self.txt_text)
- self.assertEqual(ret.getFormatted(self.formatter),
- '@throw type text\n')
-
-
-class DataRaceTest(unittest.TestCase):
- """Test for the RawDataRace class, mostly tests instance variables."""
-
- def setUp(self):
- self.tok = lexer.Token('COMMAND_DATARACE', '@datarace', 0, 0, 0)
- self.tok_text = lexer.Token('WORD', 'text', 0, 0, 0)
- self.txt_text = raw_doc.RawText([self.tok_text])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- dataRace = raw_doc.RawDataRace(self.tok, self.txt_text)
- self.assertEqual(dataRace.text, self.txt_text)
-
- def testGetType(self):
- dataRace = raw_doc.RawDataRace(self.tok, self.txt_text)
- self.assertEqual(dataRace.getType(), 'datarace')
-
- def testGetFormatted(self):
- dataRace = raw_doc.RawDataRace(self.tok, self.txt_text)
- self.assertEqual(dataRace.getFormatted(self.formatter), '@datarace text\n')
-
-
-class SignatureTest(unittest.TestCase):
- def setUp(self):
- self.tok = lexer.Token('COMMAND_SIGNATURE', '@signature', 0, 0, 0)
- self.tok_text = lexer.Token('WORD', 'text', 0, 0, 0)
- self.txt_text = raw_doc.RawText([self.tok_text])
- self.formatter = raw_doc.DoxFormatter()
-
- def testCreation(self):
- signature = raw_doc.RawSignature(self.tok, self.txt_text)
- self.assertEqual(signature.text, self.txt_text)
-
- def testGetType(self):
- signature = raw_doc.RawSignature(self.tok, self.txt_text)
- self.assertEqual(signature.getType(), 'signature')
-
- def testGetFormatted(self):
- signature = raw_doc.RawSignature(self.tok, self.txt_text)
- self.assertEqual(signature.getFormatted(self.formatter),
- '@signature text\n')
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/util/py_lib/seqan/dox/test/test_sig_parser.py b/util/py_lib/seqan/dox/test/test_sig_parser.py
deleted file mode 100644
index d391478..0000000
--- a/util/py_lib/seqan/dox/test/test_sig_parser.py
+++ /dev/null
@@ -1,317 +0,0 @@
-#!/usr/bin/env python2
-
-import sys
-import unittest
-
-import seqan.dox.sig_parser as sig_parser
-
-
-class TestParseEnum(unittest.TestCase):
- def testValid(self):
- txt = 'enum EnumName'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'enum')
- self.assertEqual(entry.name, 'EnumName')
- txt = 'enum EnumName;'
- self.assertEqual(entry.toString(), txt)
-
-
-class TestParseStruct(unittest.TestCase):
- def testValid(self):
- txt = 'struct StructName'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'struct')
- self.assertEqual(entry.name, 'StructName')
- txt = 'struct StructName;'
- self.assertEqual(entry.toString(), txt)
-
-
-class TestParseClass(unittest.TestCase):
- def testValid(self):
- txt = 'class ClassName'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'class')
- self.assertEqual(entry.name, 'ClassName')
- txt = 'class ClassName;'
- self.assertEqual(entry.toString(), txt)
-
-
-class TestParseConcept(unittest.TestCase):
- def testValid(self):
- txt = 'concept ConceptConcept'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'concept')
- self.assertEqual(entry.name, 'ConceptConcept')
- txt = 'concept ConceptConcept;'
- self.assertEqual(entry.toString(), txt)
-
-
-class TestParseVariable(unittest.TestCase):
- def testValid(self):
- txt = 'Type variable;'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'variable')
- self.assertEqual(entry.var_type, 'Type')
- self.assertEqual(entry.name, 'variable')
- txt = 'Type variable;'
- self.assertEqual(entry.toString(), txt)
-
-
-class TestParseFunction(unittest.TestCase):
- def testEmptyParams(self):
- txt = 'void foo()'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'function')
- self.assertEqual(entry.return_type, 'void')
- self.assertEqual(entry.is_tpl, False)
- self.assertEqual(len(entry.params), 0)
-
- def testWithParams(self):
- txt = 'void foo(int x, double y)'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'function')
- self.assertEqual(entry.return_type, 'void')
- self.assertEqual(entry.is_tpl, False)
- self.assertEqual(len(entry.params), 2)
- self.assertEqual(entry.params[0].type, 'int')
- self.assertEqual(entry.params[0].name, 'x')
- self.assertEqual(entry.params[1].type, 'double')
- self.assertEqual(entry.params[1].name, 'y')
- txt = 'void foo(int x, double y);'
- self.assertEqual(entry.toString(), txt)
-
- def testMemberFunction(self):
- txt = 'void Foo::bar(int x, double y)'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'function')
- self.assertEqual(entry.name, 'Foo::bar')
- self.assertEqual(entry.return_type, 'void')
- self.assertEqual(entry.is_tpl, False)
- self.assertEqual(len(entry.params), 2)
- self.assertEqual(entry.params[0].type, 'int')
- self.assertEqual(entry.params[0].name, 'x')
- self.assertEqual(entry.params[1].type, 'double')
- self.assertEqual(entry.params[1].name, 'y')
- txt = 'void Foo::bar(int x, double y);'
- self.assertEqual(entry.toString(), txt)
-
- def testConstructorNoParams(self):
- txt = 'String::String()'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'function')
- self.assertEqual(entry.name, 'String::String')
- self.assertEqual(entry.return_type, None)
- self.assertEqual(entry.is_tpl, False)
- self.assertEqual(len(entry.params), 0)
- txt = 'String::String();'
- self.assertEqual(entry.toString(), txt)
-
- def testConstructorParams(self):
- txt = 'String::String(int x, double y)'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'function')
- self.assertEqual(entry.name, 'String::String')
- self.assertEqual(entry.return_type, None)
- self.assertEqual(entry.is_tpl, False)
- self.assertEqual(len(entry.params), 2)
- self.assertEqual(entry.params[0].type, 'int')
- self.assertEqual(entry.params[0].name, 'x')
- self.assertEqual(entry.params[1].type, 'double')
- self.assertEqual(entry.params[1].name, 'y')
- txt = 'String::String(int x, double y);'
- self.assertEqual(entry.toString(), txt)
-
- def testDestructorNoParams(self):
- txt = 'String::~String()'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'function')
- self.assertEqual(entry.name, 'String::~String')
- self.assertEqual(entry.return_type, None)
- self.assertEqual(entry.is_tpl, False)
- self.assertEqual(len(entry.params), 0)
- txt = 'String::~String();'
- self.assertEqual(entry.toString(), txt)
-
- def testInterfaceFunction(self):
- txt = 'void Foo#bar(int x, double y)'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'function')
- self.assertEqual(entry.name, 'Foo#bar')
- self.assertEqual(entry.return_type, 'void')
- self.assertEqual(entry.is_tpl, False)
- self.assertEqual(len(entry.params), 2)
- self.assertEqual(entry.params[0].type, 'int')
- self.assertEqual(entry.params[0].name, 'x')
- self.assertEqual(entry.params[1].type, 'double')
- self.assertEqual(entry.params[1].name, 'y')
- txt = 'void Foo#bar(int x, double y);'
- self.assertEqual(entry.toString(), txt)
-
- def testConstructor(self):
- pass
-
-
-class TestTemplateFunction(unittest.TestCase):
- def testEmptyParams(self):
- txt = ('template <typename T1, int I>\n'
- 'void foo()')
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'function')
- self.assertEqual(entry.return_type, 'void')
- self.assertEqual(entry.is_tpl, True)
- self.assertEqual(len(entry.params), 0)
- self.assertEqual(len(entry.tparams), 2)
- self.assertEqual(entry.tparams[0].type, 'typename')
- self.assertEqual(entry.tparams[0].name, 'T1')
- self.assertEqual(entry.tparams[1].type, 'int')
- self.assertEqual(entry.tparams[1].name, 'I')
- txt = ('template <typename T1, int I>\n'
- 'void foo();')
- self.assertEqual(entry.toString(), txt)
-
- def testWithParams(self):
- txt = ('template <typename T1, int I>\n'
- 'void foo(int x, double y)')
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'function')
- self.assertEqual(entry.return_type, 'void')
- self.assertEqual(entry.is_tpl, True)
- self.assertEqual(len(entry.params), 2)
- self.assertEqual(entry.params[0].type, 'int')
- self.assertEqual(entry.params[0].name, 'x')
- self.assertEqual(entry.params[1].type, 'double')
- self.assertEqual(entry.params[1].name, 'y')
- self.assertEqual(len(entry.tparams), 2)
- self.assertEqual(entry.tparams[0].type, 'typename')
- self.assertEqual(entry.tparams[0].name, 'T1')
- self.assertEqual(entry.tparams[1].type, 'int')
- self.assertEqual(entry.tparams[1].name, 'I')
- txt = ('template <typename T1, int I>\n'
- 'void foo(int x, double y);')
- self.assertEqual(entry.toString(), txt)
-
-
-class TestTemplateClass(unittest.TestCase):
- def testEmptyParams(self):
- txt = ('template <>\n'
- 'class C')
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'class')
- self.assertEqual(entry.name, 'C')
- self.assertEqual(entry.is_tpl, True)
- self.assertEqual(len(entry.tparams), 0)
- txt = ('template <>\n'
- 'class C;')
- self.assertEqual(entry.toString(), txt)
-
-
- def testWithParams(self):
- txt = ('template <typename T1, int I>\n'
- 'class C')
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'class')
- self.assertEqual(entry.is_tpl, True)
- self.assertEqual(len(entry.tparams), 2)
- self.assertEqual(entry.name, 'C')
- self.assertEqual(entry.tparams[0].type, 'typename')
- self.assertEqual(entry.tparams[0].name, 'T1')
- self.assertEqual(entry.tparams[1].type, 'int')
- self.assertEqual(entry.tparams[1].name, 'I')
- txt = ('template <typename T1, int I>\n'
- 'class C;')
- self.assertEqual(entry.toString(), txt)
-
-
-class TestMetafunction(unittest.TestCase):
- def testValueNoParam(self):
- txt = 'TInt Metafunction<>::VALUE'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'metafunction')
- self.assertEqual(entry.name, 'Metafunction')
- self.assertEqual(entry.return_type, 'TInt')
- self.assertEqual(entry.return_name, 'VALUE')
- self.assertEqual(len(entry.tparams), 0)
- txt = 'TInt Metafunction<>::VALUE;'
- self.assertEqual(entry.toString(), txt)
-
- def testValueInterfaceNoParam(self):
- txt = 'TInt Klass#Metafunction<>::VALUE'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'metafunction')
- self.assertEqual(entry.name, 'Klass#Metafunction')
- self.assertEqual(entry.return_type, 'TInt')
- self.assertEqual(entry.return_name, 'VALUE')
- self.assertEqual(len(entry.tparams), 0)
- txt = 'TInt Klass#Metafunction<>::VALUE;'
- self.assertEqual(entry.toString(), txt)
-
- def testValueWithParam(self):
- txt = 'TInt Metafunction<T1, T2>::VALUE'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'metafunction')
- self.assertEqual(entry.name, 'Metafunction')
- self.assertEqual(entry.return_type, 'TInt')
- self.assertEqual(entry.return_name, 'VALUE')
- self.assertEqual(len(entry.tparams), 2)
- self.assertEqual(entry.tparams[0].name, 'T1')
- self.assertEqual(entry.tparams[1].name, 'T2')
- txt = 'TInt Metafunction<T1, T2>::VALUE;'
- self.assertEqual(entry.toString(), txt)
-
- def testTypeNoParam(self):
- txt = 'Metafunction<>::Type'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'metafunction')
- self.assertEqual(entry.name, 'Metafunction')
- self.assertEqual(entry.return_name, 'Type')
- self.assertEqual(len(entry.tparams), 0)
- txt = 'Metafunction<>::Type;'
- self.assertEqual(entry.toString(), txt)
-
- def testTypeInterfaceNoParam(self):
- txt = 'Klass#Metafunction<>::Type'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'metafunction')
- self.assertEqual(entry.name, 'Klass#Metafunction')
- self.assertEqual(entry.return_name, 'Type')
- self.assertEqual(len(entry.tparams), 0)
- txt = 'Klass#Metafunction<>::Type;'
- self.assertEqual(entry.toString(), txt)
-
- def testTypeWithParam(self):
- txt = 'Metafunction<T1, T2>::Type'
- parser = sig_parser.SigParser(txt)
- entry = parser.parse()
- self.assertEqual(entry.kind, 'metafunction')
- self.assertEqual(entry.name, 'Metafunction')
- self.assertEqual(entry.return_name, 'Type')
- self.assertEqual(len(entry.tparams), 2)
- self.assertEqual(entry.tparams[0].name, 'T1')
- self.assertEqual(entry.tparams[1].name, 'T2')
- txt = 'Metafunction<T1, T2>::Type;'
- self.assertEqual(entry.toString(), txt)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/util/py_lib/seqan/dox/tpl/css/full_list.css b/util/py_lib/seqan/dox/tpl/css/full_list.css
deleted file mode 100644
index 0154271..0000000
--- a/util/py_lib/seqan/dox/tpl/css/full_list.css
+++ /dev/null
@@ -1,31 +0,0 @@
-html {
- height: 100%;
-}
-
-body {
- margin: 0;
- font-family: "Open Sans", "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
- font-size: 13px;
- height: 100%;
- overflow-x: hidden;
-}
-
-#content {
- height: calc(100% - 40px);
- overflow: auto;
-}
-
-h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; }
-.clear { clear: both; }
-#noresults { padding: 7px 12px; }
-#content.insearch #noresults { margin-left: 7px; }
-.frames #nav span:after { content: ' | '; }
-.frames #nav span:last-child:after { content: ''; }
-
-.frames #content h1 { margin-top: 0; }
-.frames li { white-space: nowrap; cursor: normal; }
-.frames li small { display: block; font-size: 0.8em; }
-.frames li small:before { content: ""; }
-.frames li small:after { content: ""; }
-.frames li small.search_info { display: none; }
-.frames #nav { display: block; }
diff --git a/util/py_lib/seqan/dox/tpl/lib/bootstrap-treeview/css/bootstrap-treeview.css b/util/py_lib/seqan/dox/tpl/lib/bootstrap-treeview/css/bootstrap-treeview.css
deleted file mode 100644
index 312071a..0000000
--- a/util/py_lib/seqan/dox/tpl/lib/bootstrap-treeview/css/bootstrap-treeview.css
+++ /dev/null
@@ -1,60 +0,0 @@
-/* =========================================================
- * bootstrap-treeview.css v1.2.0
- * =========================================================
- * Copyright 2013 Jonathan Miles
- * Project URL : http://www.jondmiles.com/bootstrap-treeview
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================= */
-
-.treeview {
- font-size: 12px;
-}
-
-.treeview .badge {
- font-size: 12px;
-}
-
-.treeview .list-group {
- margin-left: 10px;
- margin-right: 10px;
-}
-
-.treeview .list-group-item {
- cursor: pointer;
- line-height: 10px;
-}
-
-.treeview li {
- line-style: none;
- margin: 0px;
-}
-
-.treeview li:before {
- content: "";
-}
-
-.treeview span.indent {
- margin-left: 10px;
- margin-right: 10px;
-}
-
-.treeview span.icon {
- width: 5px;
- margin-right: 5px;
-}
-
-.treeview .node-disabled {
- color: silver;
- cursor: not-allowed;
-}
diff --git a/util/py_lib/seqan/dox/tpl/lib/bootstrap-treeview/js/bootstrap-treeview.js b/util/py_lib/seqan/dox/tpl/lib/bootstrap-treeview/js/bootstrap-treeview.js
deleted file mode 100644
index 97720e6..0000000
--- a/util/py_lib/seqan/dox/tpl/lib/bootstrap-treeview/js/bootstrap-treeview.js
+++ /dev/null
@@ -1,1248 +0,0 @@
-/* =========================================================
- * bootstrap-treeview.js v1.2.0
- * =========================================================
- * Copyright 2013 Jonathan Miles
- * Project URL : http://www.jondmiles.com/bootstrap-treeview
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ========================================================= */
-
-;(function ($, window, document, undefined) {
-
- /*global jQuery, console*/
-
- 'use strict';
-
- var pluginName = 'treeview';
-
- var _default = {};
-
- _default.settings = {
-
- injectStyle: true,
-
- levels: 2,
-
- expandIcon: 'glyphicon glyphicon-chevron-right',
- collapseIcon: 'glyphicon glyphicon-chevron-down',
- emptyIcon: 'glyphicon',
- nodeIcon: '',
- selectedIcon: '',
- checkedIcon: 'glyphicon glyphicon-check',
- uncheckedIcon: 'glyphicon glyphicon-unchecked',
-
- color: '#000000', // '#000000',
- backColor: undefined, // '#FFFFFF',
- borderColor: undefined, // '#dddddd',
- onhoverColor: '#F5F5F5',
- selectedColor: '#FFFFFF',
- selectedBackColor: '#428bca',
- searchResultColor: '#D9534F',
- searchResultBackColor: undefined, //'#FFFFFF',
-
- enableLinks: false,
- highlightSelected: true,
- highlightSearchResults: true,
- showBorder: true,
- showIcon: true,
- showCheckbox: false,
- showTags: false,
- multiSelect: false,
-
- // Event handlers
- onNodeChecked: undefined,
- onNodeCollapsed: undefined,
- onNodeDisabled: undefined,
- onNodeEnabled: undefined,
- onNodeExpanded: undefined,
- onNodeSelected: undefined,
- onNodeUnchecked: undefined,
- onNodeUnselected: undefined,
- onSearchComplete: undefined,
- onSearchCleared: undefined
- };
-
- _default.options = {
- silent: false,
- ignoreChildren: false
- };
-
- _default.searchOptions = {
- ignoreCase: true,
- exactMatch: false,
- revealResults: true
- };
-
- var Tree = function (element, options) {
-
- this.$element = $(element);
- this.elementId = element.id;
- this.styleId = this.elementId + '-style';
-
- this.init(options);
-
- return {
-
- // Options (public access)
- options: this.options,
-
- // Initialize / destroy methods
- init: $.proxy(this.init, this),
- remove: $.proxy(this.remove, this),
-
- // Get methods
- getNode: $.proxy(this.getNode, this),
- getParent: $.proxy(this.getParent, this),
- getSiblings: $.proxy(this.getSiblings, this),
- getSelected: $.proxy(this.getSelected, this),
- getUnselected: $.proxy(this.getUnselected, this),
- getExpanded: $.proxy(this.getExpanded, this),
- getCollapsed: $.proxy(this.getCollapsed, this),
- getChecked: $.proxy(this.getChecked, this),
- getUnchecked: $.proxy(this.getUnchecked, this),
- getDisabled: $.proxy(this.getDisabled, this),
- getEnabled: $.proxy(this.getEnabled, this),
-
- // Select methods
- selectNode: $.proxy(this.selectNode, this),
- unselectNode: $.proxy(this.unselectNode, this),
- toggleNodeSelected: $.proxy(this.toggleNodeSelected, this),
-
- // Expand / collapse methods
- collapseAll: $.proxy(this.collapseAll, this),
- collapseNode: $.proxy(this.collapseNode, this),
- expandAll: $.proxy(this.expandAll, this),
- expandNode: $.proxy(this.expandNode, this),
- toggleNodeExpanded: $.proxy(this.toggleNodeExpanded, this),
- revealNode: $.proxy(this.revealNode, this),
-
- // Expand / collapse methods
- checkAll: $.proxy(this.checkAll, this),
- checkNode: $.proxy(this.checkNode, this),
- uncheckAll: $.proxy(this.uncheckAll, this),
- uncheckNode: $.proxy(this.uncheckNode, this),
- toggleNodeChecked: $.proxy(this.toggleNodeChecked, this),
-
- // Disable / enable methods
- disableAll: $.proxy(this.disableAll, this),
- disableNode: $.proxy(this.disableNode, this),
- enableAll: $.proxy(this.enableAll, this),
- enableNode: $.proxy(this.enableNode, this),
- toggleNodeDisabled: $.proxy(this.toggleNodeDisabled, this),
-
- // Search methods
- search: $.proxy(this.search, this),
- clearSearch: $.proxy(this.clearSearch, this)
- };
- };
-
- Tree.prototype.init = function (options) {
-
- this.tree = [];
- this.nodes = [];
-
- if (options.data) {
- if (typeof options.data === 'string') {
- options.data = $.parseJSON(options.data);
- }
- this.tree = $.extend(true, [], options.data);
- delete options.data;
- }
- this.options = $.extend({}, _default.settings, options);
-
- this.destroy();
- this.subscribeEvents();
- this.setInitialStates({ nodes: this.tree }, 0);
- this.render();
- };
-
- Tree.prototype.remove = function () {
- this.destroy();
- $.removeData(this, pluginName);
- $('#' + this.styleId).remove();
- };
-
- Tree.prototype.destroy = function () {
-
- if (!this.initialized) return;
-
- this.$wrapper.remove();
- this.$wrapper = null;
-
- // Switch off events
- this.unsubscribeEvents();
-
- // Reset this.initialized flag
- this.initialized = false;
- };
-
- Tree.prototype.unsubscribeEvents = function () {
-
- this.$element.off('click');
- this.$element.off('nodeChecked');
- this.$element.off('nodeCollapsed');
- this.$element.off('nodeDisabled');
- this.$element.off('nodeEnabled');
- this.$element.off('nodeExpanded');
- this.$element.off('nodeSelected');
- this.$element.off('nodeUnchecked');
- this.$element.off('nodeUnselected');
- this.$element.off('searchComplete');
- this.$element.off('searchCleared');
- };
-
- Tree.prototype.subscribeEvents = function () {
-
- this.unsubscribeEvents();
-
- this.$element.on('click', $.proxy(this.clickHandler, this));
-
- if (typeof (this.options.onNodeChecked) === 'function') {
- this.$element.on('nodeChecked', this.options.onNodeChecked);
- }
-
- if (typeof (this.options.onNodeCollapsed) === 'function') {
- this.$element.on('nodeCollapsed', this.options.onNodeCollapsed);
- }
-
- if (typeof (this.options.onNodeDisabled) === 'function') {
- this.$element.on('nodeDisabled', this.options.onNodeDisabled);
- }
-
- if (typeof (this.options.onNodeEnabled) === 'function') {
- this.$element.on('nodeEnabled', this.options.onNodeEnabled);
- }
-
- if (typeof (this.options.onNodeExpanded) === 'function') {
- this.$element.on('nodeExpanded', this.options.onNodeExpanded);
- }
-
- if (typeof (this.options.onNodeSelected) === 'function') {
- this.$element.on('nodeSelected', this.options.onNodeSelected);
- }
-
- if (typeof (this.options.onNodeUnchecked) === 'function') {
- this.$element.on('nodeUnchecked', this.options.onNodeUnchecked);
- }
-
- if (typeof (this.options.onNodeUnselected) === 'function') {
- this.$element.on('nodeUnselected', this.options.onNodeUnselected);
- }
-
- if (typeof (this.options.onSearchComplete) === 'function') {
- this.$element.on('searchComplete', this.options.onSearchComplete);
- }
-
- if (typeof (this.options.onSearchCleared) === 'function') {
- this.$element.on('searchCleared', this.options.onSearchCleared);
- }
- };
-
- /*
- Recurse the tree structure and ensure all nodes have
- valid initial states. User defined states will be preserved.
- For performance we also take this opportunity to
- index nodes in a flattened structure
- */
- Tree.prototype.setInitialStates = function (node, level) {
-
- if (!node.nodes) return;
- level += 1;
-
- var parent = node;
- var _this = this;
- $.each(node.nodes, function checkStates(index, node) {
-
- // nodeId : unique, incremental identifier
- node.nodeId = _this.nodes.length;
-
- // parentId : transversing up the tree
- node.parentId = parent.nodeId;
-
- // if not provided set selectable default value
- if (!node.hasOwnProperty('selectable')) {
- node.selectable = true;
- }
-
- // where provided we should preserve states
- node.state = node.state || {};
-
- // set checked state; unless set always false
- if (!node.state.hasOwnProperty('checked')) {
- node.state.checked = false;
- }
-
- // set enabled state; unless set always false
- if (!node.state.hasOwnProperty('disabled')) {
- node.state.disabled = false;
- }
-
- // set expanded state; if not provided based on levels
- if (!node.state.hasOwnProperty('expanded')) {
- if (!node.state.disabled &&
- (level < _this.options.levels) &&
- (node.nodes && node.nodes.length > 0)) {
- node.state.expanded = true;
- }
- else {
- node.state.expanded = false;
- }
- }
-
- // set selected state; unless set always false
- if (!node.state.hasOwnProperty('selected')) {
- node.state.selected = false;
- }
-
- // index nodes in a flattened structure for use later
- _this.nodes.push(node);
-
- // recurse child nodes and transverse the tree
- if (node.nodes) {
- _this.setInitialStates(node, level);
- }
- });
- };
-
- Tree.prototype.clickHandler = function (event) {
-
- if (!this.options.enableLinks) event.preventDefault();
-
- var target = $(event.target);
- var node = this.findNode(target);
- if (!node || node.state.disabled) return;
-
- var classList = target.attr('class') ? target.attr('class').split(' ') : [];
- if ((classList.indexOf('expand-icon') !== -1)) {
-
- this.toggleExpandedState(node, _default.options);
- this.render();
- }
- else if ((classList.indexOf('check-icon') !== -1)) {
-
- this.toggleCheckedState(node, _default.options);
- this.render();
- }
- else {
-
- if (node.selectable) {
- this.toggleSelectedState(node, _default.options);
- } else {
- this.toggleExpandedState(node, _default.options);
- }
-
- this.render();
- }
- };
-
- // Looks up the DOM for the closest parent list item to retrieve the
- // data attribute nodeid, which is used to lookup the node in the flattened structure.
- Tree.prototype.findNode = function (target) {
-
- var nodeId = target.closest('li.list-group-item').attr('data-nodeid');
- var node = this.nodes[nodeId];
-
- if (!node) {
- console.log('Error: node does not exist');
- }
- return node;
- };
-
- Tree.prototype.toggleExpandedState = function (node, options) {
- if (!node) return;
- this.setExpandedState(node, !node.state.expanded, options);
- };
-
- Tree.prototype.setExpandedState = function (node, state, options) {
-
- if (state === node.state.expanded) return;
-
- if (state && node.nodes) {
-
- // Expand a node
- node.state.expanded = true;
- if (!options.silent) {
- this.$element.trigger('nodeExpanded', $.extend(true, {}, node));
- }
- }
- else if (!state) {
-
- // Collapse a node
- node.state.expanded = false;
- if (!options.silent) {
- this.$element.trigger('nodeCollapsed', $.extend(true, {}, node));
- }
-
- // Collapse child nodes
- if (node.nodes && !options.ignoreChildren) {
- $.each(node.nodes, $.proxy(function (index, node) {
- this.setExpandedState(node, false, options);
- }, this));
- }
- }
- };
-
- Tree.prototype.toggleSelectedState = function (node, options) {
- if (!node) return;
- this.setSelectedState(node, !node.state.selected, options);
- };
-
- Tree.prototype.setSelectedState = function (node, state, options) {
-
- if (state === node.state.selected) return;
-
- if (state) {
-
- // If multiSelect false, unselect previously selected
- if (!this.options.multiSelect) {
- $.each(this.findNodes('true', 'g', 'state.selected'), $.proxy(function (index, node) {
- this.setSelectedState(node, false, options);
- }, this));
- }
-
- // Continue selecting node
- node.state.selected = true;
- if (!options.silent) {
- this.$element.trigger('nodeSelected', $.extend(true, {}, node));
- }
- }
- else {
-
- // Unselect node
- node.state.selected = false;
- if (!options.silent) {
- this.$element.trigger('nodeUnselected', $.extend(true, {}, node));
- }
- }
- };
-
- Tree.prototype.toggleCheckedState = function (node, options) {
- if (!node) return;
- this.setCheckedState(node, !node.state.checked, options);
- };
-
- Tree.prototype.setCheckedState = function (node, state, options) {
-
- if (state === node.state.checked) return;
-
- if (state) {
-
- // Check node
- node.state.checked = true;
-
- if (!options.silent) {
- this.$element.trigger('nodeChecked', $.extend(true, {}, node));
- }
- }
- else {
-
- // Uncheck node
- node.state.checked = false;
- if (!options.silent) {
- this.$element.trigger('nodeUnchecked', $.extend(true, {}, node));
- }
- }
- };
-
- Tree.prototype.setDisabledState = function (node, state, options) {
-
- if (state === node.state.disabled) return;
-
- if (state) {
-
- // Disable node
- node.state.disabled = true;
-
- // Disable all other states
- this.setExpandedState(node, false, options);
- this.setSelectedState(node, false, options);
- this.setCheckedState(node, false, options);
-
- if (!options.silent) {
- this.$element.trigger('nodeDisabled', $.extend(true, {}, node));
- }
- }
- else {
-
- // Enabled node
- node.state.disabled = false;
- if (!options.silent) {
- this.$element.trigger('nodeEnabled', $.extend(true, {}, node));
- }
- }
- };
-
- Tree.prototype.render = function () {
-
- if (!this.initialized) {
-
- // Setup first time only components
- this.$element.addClass(pluginName);
- this.$wrapper = $(this.template.list);
-
- this.injectStyle();
-
- this.initialized = true;
- }
-
- this.$element.empty().append(this.$wrapper.empty());
-
- // Build tree
- this.buildTree(this.tree, 0);
- };
-
- // Starting from the root node, and recursing down the
- // structure we build the tree one node at a time
- Tree.prototype.buildTree = function (nodes, level) {
-
- if (!nodes) return;
- level += 1;
-
- var _this = this;
- $.each(nodes, function addNodes(id, node) {
-
- var treeItem = $(_this.template.item)
- .addClass('node-' + _this.elementId)
- .addClass(node.state.checked ? 'node-checked' : '')
- .addClass(node.state.disabled ? 'node-disabled': '')
- .addClass(node.state.selected ? 'node-selected' : '')
- .addClass(node.searchResult ? 'search-result' : '')
- .attr('data-nodeid', node.nodeId)
- .attr('style', _this.buildStyleOverride(node));
-
- // Add indent/spacer to mimic tree structure
- for (var i = 0; i < (level - 1); i++) {
- treeItem.append(_this.template.indent);
- }
-
- // Add tags as badges
- if (_this.options.showTags && node.tags) {
- $.each(node.tags, function addTag(id, tag) {
- treeItem
- .append($(_this.template.badge)
- .append(tag)
- );
- });
- }
-
- // Add expand, collapse or empty spacer icons
- var classList = [];
- if (node.nodes) {
- classList.push('expand-icon');
- if (node.state.expanded) {
- classList.push(_this.options.collapseIcon);
- }
- else {
- classList.push(_this.options.expandIcon);
- }
- }
- else {
- classList.push(_this.options.emptyIcon);
- }
-
- treeItem
- .append($(_this.template.icon)
- .addClass(classList.join(' '))
- );
-
- // Add node icon
- if (_this.options.showIcon) {
-
- var classList = ['node-icon'];
-
- classList.push(node.icon || _this.options.nodeIcon);
- if (node.state.selected) {
- classList.pop();
- classList.push(node.selectedIcon || _this.options.selectedIcon ||
- node.icon || _this.options.nodeIcon);
- }
-
- treeItem
- .append($(_this.template.icon)
- .addClass(classList.join(' '))
- );
- }
-
- // Add check / unchecked icon
- if (_this.options.showCheckbox) {
-
- var classList = ['check-icon'];
- if (node.state.checked) {
- classList.push(_this.options.checkedIcon);
- }
- else {
- classList.push(_this.options.uncheckedIcon);
- }
-
- treeItem
- .append($(_this.template.icon)
- .addClass(classList.join(' '))
- );
- }
-
- // Add text
- if (_this.options.enableLinks) {
- // Add hyperlink
- treeItem
- .append($(_this.template.link)
- .attr('href', node.href)
- .append(node.text)
- );
- }
- else {
- // otherwise just text
- treeItem
- .append(node.text);
- }
-
- // Add item to the tree
- _this.$wrapper.append(treeItem);
-
- // Recursively add child ndoes
- if (node.nodes && node.state.expanded && !node.state.disabled) {
- return _this.buildTree(node.nodes, level);
- }
- });
- };
-
- // Define any node level style override for
- // 1. selectedNode
- // 2. node|data assigned color overrides
- Tree.prototype.buildStyleOverride = function (node) {
-
- if (node.state.disabled) return '';
-
- var color = node.color;
- var backColor = node.backColor;
-
- if (this.options.highlightSelected && node.state.selected) {
- if (this.options.selectedColor) {
- color = this.options.selectedColor;
- }
- if (this.options.selectedBackColor) {
- backColor = this.options.selectedBackColor;
- }
- }
-
- if (this.options.highlightSearchResults && node.searchResult && !node.state.disabled) {
- if (this.options.searchResultColor) {
- color = this.options.searchResultColor;
- }
- if (this.options.searchResultBackColor) {
- backColor = this.options.searchResultBackColor;
- }
- }
-
- return 'color:' + color +
- ';background-color:' + backColor + ';';
- };
-
- // Add inline style into head
- Tree.prototype.injectStyle = function () {
-
- if (this.options.injectStyle && !document.getElementById(this.styleId)) {
- $('<style type="text/css" id="' + this.styleId + '"> ' + this.buildStyle() + ' </style>').appendTo('head');
- }
- };
-
- // Construct trees style based on user options
- Tree.prototype.buildStyle = function () {
-
- var style = '.node-' + this.elementId + '{';
-
- if (this.options.color) {
- style += 'color:' + this.options.color + ';';
- }
-
- if (this.options.backColor) {
- style += 'background-color:' + this.options.backColor + ';';
- }
-
- if (!this.options.showBorder) {
- style += 'border:none;';
- }
- else if (this.options.borderColor) {
- style += 'border:1px solid ' + this.options.borderColor + ';';
- }
- style += '}';
-
- if (this.options.onhoverColor) {
- style += '.node-' + this.elementId + ':not(.node-disabled):hover{' +
- 'background-color:' + this.options.onhoverColor + ';' +
- '}';
- }
-
- return this.css + style;
- };
-
- Tree.prototype.template = {
- list: '<ul class="list-group"></ul>',
- item: '<li class="list-group-item"></li>',
- indent: '<span class="indent"></span>',
- icon: '<span class="icon"></span>',
- link: '<a href="#" style="color:inherit;"></a>',
- badge: '<span class="badge"></span>'
- };
-
- Tree.prototype.css = '.treeview .list-group-item{cursor:pointer}.treeview span.indent{margin-left:10px;margin-right:10px}.treeview span.icon{width:12px;margin-right:5px}.treeview .node-disabled{color:silver;cursor:not-allowed}'
-
-
- /**
- Returns a single node object that matches the given node id.
- @param {Number} nodeId - A node's unique identifier
- @return {Object} node - Matching node
- */
- Tree.prototype.getNode = function (nodeId) {
- return this.nodes[nodeId];
- };
-
- /**
- Returns the parent node of a given node, if valid otherwise returns undefined.
- @param {Object|Number} identifier - A valid node or node id
- @returns {Object} node - The parent node
- */
- Tree.prototype.getParent = function (identifier) {
- var node = this.identifyNode(identifier);
- return this.nodes[node.parentId];
- };
-
- /**
- Returns an array of sibling nodes for a given node, if valid otherwise returns undefined.
- @param {Object|Number} identifier - A valid node or node id
- @returns {Array} nodes - Sibling nodes
- */
- Tree.prototype.getSiblings = function (identifier) {
- var node = this.identifyNode(identifier);
- var parent = this.getParent(node);
- var nodes = parent ? parent.nodes : this.tree;
- return nodes.filter(function (obj) {
- return obj.nodeId !== node.nodeId;
- });
- };
-
- /**
- Returns an array of selected nodes.
- @returns {Array} nodes - Selected nodes
- */
- Tree.prototype.getSelected = function () {
- return this.findNodes('true', 'g', 'state.selected');
- };
-
- /**
- Returns an array of unselected nodes.
- @returns {Array} nodes - Unselected nodes
- */
- Tree.prototype.getUnselected = function () {
- return this.findNodes('false', 'g', 'state.selected');
- };
-
- /**
- Returns an array of expanded nodes.
- @returns {Array} nodes - Expanded nodes
- */
- Tree.prototype.getExpanded = function () {
- return this.findNodes('true', 'g', 'state.expanded');
- };
-
- /**
- Returns an array of collapsed nodes.
- @returns {Array} nodes - Collapsed nodes
- */
- Tree.prototype.getCollapsed = function () {
- return this.findNodes('false', 'g', 'state.expanded');
- };
-
- /**
- Returns an array of checked nodes.
- @returns {Array} nodes - Checked nodes
- */
- Tree.prototype.getChecked = function () {
- return this.findNodes('true', 'g', 'state.checked');
- };
-
- /**
- Returns an array of unchecked nodes.
- @returns {Array} nodes - Unchecked nodes
- */
- Tree.prototype.getUnchecked = function () {
- return this.findNodes('false', 'g', 'state.checked');
- };
-
- /**
- Returns an array of disabled nodes.
- @returns {Array} nodes - Disabled nodes
- */
- Tree.prototype.getDisabled = function () {
- return this.findNodes('true', 'g', 'state.disabled');
- };
-
- /**
- Returns an array of enabled nodes.
- @returns {Array} nodes - Enabled nodes
- */
- Tree.prototype.getEnabled = function () {
- return this.findNodes('false', 'g', 'state.disabled');
- };
-
-
- /**
- Set a node state to selected
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.selectNode = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setSelectedState(node, true, options);
- }, this));
-
- this.render();
- };
-
- /**
- Set a node state to unselected
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.unselectNode = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setSelectedState(node, false, options);
- }, this));
-
- this.render();
- };
-
- /**
- Toggles a node selected state; selecting if unselected, unselecting if selected.
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.toggleNodeSelected = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.toggleSelectedState(node, options);
- }, this));
-
- this.render();
- };
-
-
- /**
- Collapse all tree nodes
- @param {optional Object} options
- */
- Tree.prototype.collapseAll = function (options) {
- var identifiers = this.findNodes('true', 'g', 'state.expanded');
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setExpandedState(node, false, options);
- }, this));
-
- this.render();
- };
-
- /**
- Collapse a given tree node
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.collapseNode = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setExpandedState(node, false, options);
- }, this));
-
- this.render();
- };
-
- /**
- Expand all tree nodes
- @param {optional Object} options
- */
- Tree.prototype.expandAll = function (options) {
- options = $.extend({}, _default.options, options);
-
- if (options && options.levels) {
- this.expandLevels(this.tree, options.levels, options);
- }
- else {
- var identifiers = this.findNodes('false', 'g', 'state.expanded');
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setExpandedState(node, true, options);
- }, this));
- }
-
- this.render();
- };
-
- /**
- Expand a given tree node
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.expandNode = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setExpandedState(node, true, options);
- if (node.nodes && (options && options.levels)) {
- this.expandLevels(node.nodes, options.levels-1, options);
- }
- }, this));
-
- this.render();
- };
-
- Tree.prototype.expandLevels = function (nodes, level, options) {
- options = $.extend({}, _default.options, options);
-
- $.each(nodes, $.proxy(function (index, node) {
- this.setExpandedState(node, (level > 0) ? true : false, options);
- if (node.nodes) {
- this.expandLevels(node.nodes, level-1, options);
- }
- }, this));
- };
-
- /**
- Reveals a given tree node, expanding the tree from node to root.
- @param {Object|Number|Array} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.revealNode = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- var parentNode = this.getParent(node);
- while (parentNode) {
- this.setExpandedState(parentNode, true, options);
- parentNode = this.getParent(parentNode);
- };
- }, this));
-
- this.render();
- };
-
- /**
- Toggles a nodes expanded state; collapsing if expanded, expanding if collapsed.
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.toggleNodeExpanded = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.toggleExpandedState(node, options);
- }, this));
-
- this.render();
- };
-
-
- /**
- Check all tree nodes
- @param {optional Object} options
- */
- Tree.prototype.checkAll = function (options) {
- var identifiers = this.findNodes('false', 'g', 'state.checked');
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setCheckedState(node, true, options);
- }, this));
-
- this.render();
- };
-
- /**
- Check a given tree node
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.checkNode = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setCheckedState(node, true, options);
- }, this));
-
- this.render();
- };
-
- /**
- Uncheck all tree nodes
- @param {optional Object} options
- */
- Tree.prototype.uncheckAll = function (options) {
- var identifiers = this.findNodes('true', 'g', 'state.checked');
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setCheckedState(node, false, options);
- }, this));
-
- this.render();
- };
-
- /**
- Uncheck a given tree node
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.uncheckNode = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setCheckedState(node, false, options);
- }, this));
-
- this.render();
- };
-
- /**
- Toggles a nodes checked state; checking if unchecked, unchecking if checked.
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.toggleNodeChecked = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.toggleCheckedState(node, options);
- }, this));
-
- this.render();
- };
-
-
- /**
- Disable all tree nodes
- @param {optional Object} options
- */
- Tree.prototype.disableAll = function (options) {
- var identifiers = this.findNodes('false', 'g', 'state.disabled');
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setDisabledState(node, true, options);
- }, this));
-
- this.render();
- };
-
- /**
- Disable a given tree node
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.disableNode = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setDisabledState(node, true, options);
- }, this));
-
- this.render();
- };
-
- /**
- Enable all tree nodes
- @param {optional Object} options
- */
- Tree.prototype.enableAll = function (options) {
- var identifiers = this.findNodes('true', 'g', 'state.disabled');
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setDisabledState(node, false, options);
- }, this));
-
- this.render();
- };
-
- /**
- Enable a given tree node
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.enableNode = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setDisabledState(node, false, options);
- }, this));
-
- this.render();
- };
-
- /**
- Toggles a nodes disabled state; disabling is enabled, enabling if disabled.
- @param {Object|Number} identifiers - A valid node, node id or array of node identifiers
- @param {optional Object} options
- */
- Tree.prototype.toggleNodeDisabled = function (identifiers, options) {
- this.forEachIdentifier(identifiers, options, $.proxy(function (node, options) {
- this.setDisabledState(node, !node.state.disabled, options);
- }, this));
-
- this.render();
- };
-
-
- /**
- Common code for processing multiple identifiers
- */
- Tree.prototype.forEachIdentifier = function (identifiers, options, callback) {
-
- options = $.extend({}, _default.options, options);
-
- if (!(identifiers instanceof Array)) {
- identifiers = [identifiers];
- }
-
- $.each(identifiers, $.proxy(function (index, identifier) {
- callback(this.identifyNode(identifier), options);
- }, this));
- };
-
- /*
- Identifies a node from either a node id or object
- */
- Tree.prototype.identifyNode = function (identifier) {
- return ((typeof identifier) === 'number') ?
- this.nodes[identifier] :
- identifier;
- };
-
- /**
- Searches the tree for nodes (text) that match given criteria
- @param {String} pattern - A given string to match against
- @param {optional Object} options - Search criteria options
- @return {Array} nodes - Matching nodes
- */
- Tree.prototype.search = function (pattern, options) {
- options = $.extend({}, _default.searchOptions, options);
-
- this.clearSearch({ render: false });
-
- var results = [];
- if (pattern && pattern.length > 0) {
-
- if (options.exactMatch) {
- pattern = '^' + pattern + '$';
- }
-
- var modifier = 'g';
- if (options.ignoreCase) {
- modifier += 'i';
- }
-
- results = this.findNodes(pattern, modifier);
-
- // Add searchResult property to all matching nodes
- // This will be used to apply custom styles
- // and when identifying result to be cleared
- $.each(results, function (index, node) {
- node.searchResult = true;
- })
- }
-
- // If revealResults, then render is triggered from revealNode
- // otherwise we just call render.
- if (options.revealResults) {
- this.revealNode(results);
- }
- else {
- this.render();
- }
-
- this.$element.trigger('searchComplete', $.extend(true, {}, results));
-
- return results;
- };
-
- /**
- Clears previous search results
- */
- Tree.prototype.clearSearch = function (options) {
-
- options = $.extend({}, { render: true }, options);
-
- var results = $.each(this.findNodes('true', 'g', 'searchResult'), function (index, node) {
- node.searchResult = false;
- });
-
- if (options.render) {
- this.render();
- }
-
- this.$element.trigger('searchCleared', $.extend(true, {}, results));
- };
-
- /**
- Find nodes that match a given criteria
- @param {String} pattern - A given string to match against
- @param {optional String} modifier - Valid RegEx modifiers
- @param {optional String} attribute - Attribute to compare pattern against
- @return {Array} nodes - Nodes that match your criteria
- */
- Tree.prototype.findNodes = function (pattern, modifier, attribute) {
-
- modifier = modifier || 'g';
- attribute = attribute || 'text';
-
- var _this = this;
- return $.grep(this.nodes, function (node) {
- var val = _this.getNodeValue(node, attribute);
- if (typeof val === 'string') {
- return val.match(new RegExp(pattern, modifier));
- }
- });
- };
-
- /**
- Recursive find for retrieving nested attributes values
- All values are return as strings, unless invalid
- @param {Object} obj - Typically a node, could be any object
- @param {String} attr - Identifies an object property using dot notation
- @return {String} value - Matching attributes string representation
- */
- Tree.prototype.getNodeValue = function (obj, attr) {
- var index = attr.indexOf('.');
- if (index > 0) {
- var _obj = obj[attr.substring(0, index)];
- var _attr = attr.substring(index + 1, attr.length);
- return this.getNodeValue(_obj, _attr);
- }
- else {
- if (obj.hasOwnProperty(attr)) {
- return obj[attr].toString();
- }
- else {
- return undefined;
- }
- }
- };
-
- var logError = function (message) {
- if (window.console) {
- window.console.error(message);
- }
- };
-
- // Prevent against multiple instantiations,
- // handle updates and method calls
- $.fn[pluginName] = function (options, args) {
-
- var result;
-
- this.each(function () {
- var _this = $.data(this, pluginName);
- if (typeof options === 'string') {
- if (!_this) {
- logError('Not initialized, can not call method : ' + options);
- }
- else if (!$.isFunction(_this[options]) || options.charAt(0) === '_') {
- logError('No such method : ' + options);
- }
- else {
- if (!(args instanceof Array)) {
- args = [ args ];
- }
- result = _this[options].apply(_this, args);
- }
- }
- else if (typeof options === 'boolean') {
- result = _this;
- }
- else {
- $.data(this, pluginName, new Tree(this, $.extend(true, {}, options)));
- }
- });
-
- return result || this;
- };
-
-})(jQuery, window, document);
diff --git a/util/py_lib/seqan/dox/tpl/list.html b/util/py_lib/seqan/dox/tpl/list.html
deleted file mode 100644
index 154b73b..0000000
--- a/util/py_lib/seqan/dox/tpl/list.html
+++ /dev/null
@@ -1,14744 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html class="list">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-
-
-
-
- <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
-
- <link rel="stylesheet" href="lib/bootstrap/css/bootstrap.css" type="text/css" media="screen" charset="utf-8" />
- <script type="text/javascript" charset="utf-8" src="lib/bootstrap/js/bootstrap.min.js"></script>
-
- <link rel="stylesheet" href="lib/bootstrap-multiselect/css/bootstrap-multiselect.css" type="text/css" media="screen" charset="utf-8" />
- <script type="text/javascript" charset="utf-8" src="lib/bootstrap-multiselect/js/bootstrap-multiselect.js"></script>
-
- <link rel="stylesheet" href="lib/bootstrap-treeview/css/bootstrap-treeview.css" type="text/css" media="screen" charset="utf-8" />
- <script type="text/javascript" charset="utf-8" src="lib/bootstrap-treeview/js/bootstrap-treeview.js"></script>
-
- <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
- <link rel="stylesheet" href="css/common.less.css" type="text/css" media="screen" charset="utf-8" />
- <script type="text/javascript" charset="utf-8" src="js/less.min.js"></script>
-
-
-
-
- <script type="text/javascript" charset="utf-8" src="lib/jquery-bbq/jquery.ba-bbq.min.js"></script>
- <script type="text/javascript" charset="utf-8" src="js/jquery.smooth-scroll.js"></script>
-
- <script type="text/javascript" charset="utf-8" src="js/link.data.js"></script>
- <script type="text/javascript" charset="utf-8" src="js/lang_entities.js"></script>
- <script type="text/javascript" charset="utf-8" src="js/search.data.js"></script>
- <script type="text/javascript" charset="utf-8" src="js/search.data.module.js"></script>
- <script type="text/javascript" charset="utf-8" src="js/search.engine.js"></script>
- <script type="text/javascript" charset="utf-8" src="js/common.js"></script>
-
-
- <base id="base_target" target="_parent" />
- </head>
- <body>
- <script type="text/javascript" charset="utf-8">
- if (window.top.frames.main) {
- document.getElementById('base_target').target = 'main';
- document.body.className += ' frames';
- }
- </script>
- <div id="content"><form role="form" id="search">
- <div class="pre-action">
- <h1><a href="page_mainpage.html" target="main"><span class="replace">SeqAn</span> API Documentation</a></h1>
- </div>
- <div class="input-group" style="z-index: 2">
- <!--span class="input-group-addon"><b class="glyphicon glyphicon-search"></b></span-->
- <span class="input-group-btn btn-group">
- <select multiple="multiple">
- <optgroup label="Concept related">
- <option value="typedef" selected>Typedefs</option>
- <option value="concept" selected>Concepts</option>
- <option value="class" selected>Classes</option>
- <option value="enum" selected>Enums</option>
- </optgroup>
- <optgroup label="Function related">
- <option value="metafunction" selected>Metafunctions</option>
- <option value="function" selected>Functions</option>
- <option value="tag" selected>Tags</option>
- <option value="variable" selected>Variables</option>
- </optgroup>
- <optgroup label="Miscellaneous">
- <option value="adaption" selected>Adaptions</option>
- <option value="macro" selected>Macros</option>
- <option value="group" selected>Groups</option>
- <option value="page" selected>Pages</option>
- </optgroup>
- </select>
- <!--button class="btn btn-primary">Select All</button-->
- </span>
- <input type="search" class="form-control" id="search_input" placeholder="Search the API ..." tabindex="0">
- </div>
- </form>
-
- <div id="results">
- <ol class="results">
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AbndmAlgoPattern.html" target="main">AbndmAlgoPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AbndmAlgoPattern.html" target="main">specialization_AbndmAlgoPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Accumulator.html" target="main">Accumulator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Accumulator.html" target="main">class_Accumulator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AdaptorIterator.html" target="main">AdaptorIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AdaptorIterator.html" target="main">specialization_AdaptorIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_addToProfile.html" target="main">addToProfile</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_addToProfile.html" target="main">global_function_addToProfile.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AdjacencyIterator.html" target="main">AdjacencyIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AdjacencyIterator.html" target="main">specialization_AdjacencyIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_AFScore.html" target="main">AFScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_AFScore.html" target="main">class_AFScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_AggregateConcept.html" target="main">AggregateConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_AggregateConcept.html" target="main">concept_AggregateConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_AggregateTags.html" target="main">AggregateTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_AggregateTags.html" target="main">group_AggregateTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AhoCorasickPattern.html" target="main">AhoCorasickPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AhoCorasickPattern.html" target="main">specialization_AhoCorasickPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Align.html" target="main">Align</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Align.html" target="main">class_Align.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AlignColIterator.html" target="main">AlignColIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AlignColIterator.html" target="main">specialization_AlignColIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_AlignCols.html" target="main">AlignCols</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_AlignCols.html" target="main">class_AlignCols.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_AlignConfig.html" target="main">AlignConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_AlignConfig.html" target="main">class_AlignConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_AlignedReadLayout.html" target="main">AlignedReadLayout</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_AlignedReadLayout.html" target="main">class_AlignedReadLayout.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_AlignedReadStoreElement.html" target="main">AlignedReadStoreElement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_AlignedReadStoreElement.html" target="main">class_AlignedReadStoreElement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_AlignmentAlgorithmTags.html" target="main">AlignmentAlgorithmTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_AlignmentAlgorithmTags.html" target="main">group_AlignmentAlgorithmTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_alignmentEvaluation.html" target="main">alignmentEvaluation</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_alignmentEvaluation.html" target="main">global_function_alignmentEvaluation.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_alignmentFreeComparison.html" target="main">alignmentFreeComparison</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_alignmentFreeComparison.html" target="main">global_function_alignmentFreeComparison.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AlignmentGraph.html" target="main">AlignmentGraph</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AlignmentGraph.html" target="main">specialization_AlignmentGraph.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_AlignmentGraphCombinationTags.html" target="main">AlignmentGraphCombinationTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_AlignmentGraphCombinationTags.html" target="main">group_AlignmentGraphCombinationTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_AlignmentGraphFormatTags.html" target="main">AlignmentGraphFormatTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_AlignmentGraphFormatTags.html" target="main">group_AlignmentGraphFormatTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_AlignmentStats.html" target="main">AlignmentStats</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_AlignmentStats.html" target="main">class_AlignmentStats.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_AlignQualityStoreElement.html" target="main">AlignQualityStoreElement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_AlignQualityStoreElement.html" target="main">class_AlignQualityStoreElement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_AlignTraceback.html" target="main">AlignTraceback</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_AlignTraceback.html" target="main">class_AlignTraceback.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Allocator.html" target="main">Allocator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Allocator.html" target="main">class_Allocator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_AllocatorUsageTags.html" target="main">AllocatorUsageTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_AllocatorUsageTags.html" target="main">group_AllocatorUsageTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AllocString.html" target="main">AllocString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AllocString.html" target="main">specialization_AllocString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_AllowsFastRandomAccess.html" target="main">AllowsFastRandomAccess</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_AllowsFastRandomAccess.html" target="main">global_metafunction_AllowsFastRandomAccess.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_allPairsShortestPath.html" target="main">allPairsShortestPath</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_allPairsShortestPath.html" target="main">global_function_allPairsShortestPath.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_AlphabetConcept.html" target="main">AlphabetConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_AlphabetConcept.html" target="main">concept_AlphabetConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_AlphabetExpansion.html" target="main">AlphabetExpansion</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_AlphabetExpansion.html" target="main">class_AlphabetExpansion.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_AlphabetWithGapsConcept.html" target="main">AlphabetWithGapsConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_AlphabetWithGapsConcept.html" target="main">concept_AlphabetWithGapsConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_AlphabetWithQualitiesConcept.html" target="main">AlphabetWithQualitiesConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_AlphabetWithQualitiesConcept.html" target="main">concept_AlphabetWithQualitiesConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_AlphabetWithUnknownValueConcept.html" target="main">AlphabetWithUnknownValueConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_AlphabetWithUnknownValueConcept.html" target="main">concept_AlphabetWithUnknownValueConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AminoAcid.html" target="main">AminoAcid</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AminoAcid.html" target="main">specialization_AminoAcid.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_AminoAcidScoreMatrixID.html" target="main">AminoAcidScoreMatrixID</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_AminoAcidScoreMatrixID.html" target="main">enum_AminoAcidScoreMatrixID.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AnchorGaps.html" target="main">AnchorGaps</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AnchorGaps.html" target="main">specialization_AnchorGaps.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_AnnotationStoreElement.html" target="main">AnnotationStoreElement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_AnnotationStoreElement.html" target="main">class_AnnotationStoreElement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AnnotationTreeIterator.html" target="main">AnnotationTreeIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AnnotationTreeIterator.html" target="main">specialization_AnnotationTreeIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_ApproximateFinderSearchTypeTags.html" target="main">ApproximateFinderSearchTypeTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_ApproximateFinderSearchTypeTags.html" target="main">group_ApproximateFinderSearchTypeTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ArgParseArgument.html" target="main">ArgParseArgument</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ArgParseArgument.html" target="main">class_ArgParseArgument.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_ArgParseArgument_58_58ArgumentType.html" target="main">ArgParseArgument::ArgumentType</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_ArgParseArgument_58_58ArgumentType.html" target="main">enum_ArgParseArgument_58_58ArgumentType.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ArgParseOption.html" target="main">ArgParseOption</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ArgParseOption.html" target="main">specialization_ArgParseOption.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ArgumentParser.html" target="main">ArgumentParser</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ArgumentParser.html" target="main">class_ArgumentParser.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_ArgumentParser_58_58ParseResult.html" target="main">ArgumentParser::ParseResult</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_ArgumentParser_58_58ParseResult.html" target="main">enum_ArgumentParser_58_58ParseResult.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayClearSpace.html" target="main">arrayClearSpace</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayClearSpace.html" target="main">global_function_arrayClearSpace.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayConstruct.html" target="main">arrayConstruct</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayConstruct.html" target="main">global_function_arrayConstruct.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayConstructCopy.html" target="main">arrayConstructCopy</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayConstructCopy.html" target="main">global_function_arrayConstructCopy.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayConstructMove.html" target="main">arrayConstructMove</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayConstructMove.html" target="main">global_function_arrayConstructMove.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayCopy.html" target="main">arrayCopy</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayCopy.html" target="main">global_function_arrayCopy.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayCopyBackward.html" target="main">arrayCopyBackward</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayCopyBackward.html" target="main">global_function_arrayCopyBackward.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayCopyForward.html" target="main">arrayCopyForward</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayCopyForward.html" target="main">global_function_arrayCopyForward.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayDestruct.html" target="main">arrayDestruct</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayDestruct.html" target="main">global_function_arrayDestruct.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayFill.html" target="main">arrayFill</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayFill.html" target="main">global_function_arrayFill.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ArrayGaps.html" target="main">ArrayGaps</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ArrayGaps.html" target="main">specialization_ArrayGaps.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayMove.html" target="main">arrayMove</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayMove.html" target="main">global_function_arrayMove.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayMoveBackward.html" target="main">arrayMoveBackward</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayMoveBackward.html" target="main">global_function_arrayMoveBackward.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_arrayMoveForward.html" target="main">arrayMoveForward</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_arrayMoveForward.html" target="main">global_function_arrayMoveForward.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ArrayString.html" target="main">ArrayString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ArrayString.html" target="main">specialization_ArrayString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_AssertMacros.html" target="main">AssertMacros</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_AssertMacros.html" target="main">group_AssertMacros.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_AssignableConcept.html" target="main">AssignableConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_AssignableConcept.html" target="main">concept_AssignableConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_assignQualities.html" target="main">assignQualities</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_assignQualities.html" target="main">global_function_assignQualities.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_assignTagsBamToSam.html" target="main">assignTagsBamToSam</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_assignTagsBamToSam.html" target="main">global_function_assignTagsBamToSam.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_assignTagsSamToBam.html" target="main">assignTagsSamToBam</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_assignTagsSamToBam.html" target="main">global_function_assignTagsSamToBam.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AsyncFile.html" target="main">AsyncFile</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AsyncFile.html" target="main">specialization_AsyncFile.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_AsyncRequest.html" target="main">AsyncRequest</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_AsyncRequest.html" target="main">class_AsyncRequest.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_atomicMax.html" target="main">atomicMax</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_atomicMax.html" target="main">global_function_atomicMax.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_atomicMin.html" target="main">atomicMin</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_atomicMin.html" target="main">global_function_atomicMin.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_AtomicPrimitives.html" target="main">AtomicPrimitives</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_AtomicPrimitives.html" target="main">group_AtomicPrimitives.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Automaton.html" target="main">Automaton</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Automaton.html" target="main">specialization_Automaton.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AutoSeqFormat.html" target="main">AutoSeqFormat</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AutoSeqFormat.html" target="main">specialization_AutoSeqFormat.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_AverageAccumulator.html" target="main">AverageAccumulator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_AverageAccumulator.html" target="main">specialization_AverageAccumulator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BadAlloc.html" target="main">BadAlloc</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BadAlloc.html" target="main">class_BadAlloc.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BadCast.html" target="main">BadCast</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BadCast.html" target="main">class_BadCast.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BadLexicalCast.html" target="main">BadLexicalCast</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BadLexicalCast.html" target="main">specialization_BadLexicalCast.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BaiBamIndex.html" target="main">BaiBamIndex</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BaiBamIndex.html" target="main">specialization_BaiBamIndex.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="variable" data-pimped="true">
- <span data-lang-entity="variable"><a href="page_LanguageEntities.html#variable">var</a><span>var</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="variable" data-pimped="true">
- <a href="page_LanguageEntities.html#variable">var</a>
- <a href="variable_BAM_95FLAG_95SUPPLEMENTARY_32_61_320x0800.html" target="main">BAM_FLAG_SUPPLEMENTARY = 0x0800</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="variable_BAM_95FLAG_95SUPPLEMENTARY_32_61_320x0800.html" target="main">variable_BAM_95FLAG_95SUPPLEMENTARY_32_61_320x0800.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BamAlignmentRecord.html" target="main">BamAlignmentRecord</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BamAlignmentRecord.html" target="main">class_BamAlignmentRecord.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BamFileIn.html" target="main">BamFileIn</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BamFileIn.html" target="main">specialization_BamFileIn.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BamFileOut.html" target="main">BamFileOut</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BamFileOut.html" target="main">specialization_BamFileOut.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_BamFlags.html" target="main">BamFlags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_BamFlags.html" target="main">enum_BamFlags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BamHeader.html" target="main">BamHeader</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BamHeader.html" target="main">class_BamHeader.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BamHeaderRecord.html" target="main">BamHeaderRecord</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BamHeaderRecord.html" target="main">class_BamHeaderRecord.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_BamHeaderRecordType.html" target="main">BamHeaderRecordType</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_BamHeaderRecordType.html" target="main">enum_BamHeaderRecordType.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BamIndex.html" target="main">BamIndex</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BamIndex.html" target="main">class_BamIndex.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BamIOContext.html" target="main">BamIOContext</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BamIOContext.html" target="main">class_BamIOContext.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_BamIOContextMemberTag.html" target="main">BamIOContextMemberTag</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_BamIOContextMemberTag.html" target="main">group_BamIOContextMemberTag.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_BamSortOrder.html" target="main">BamSortOrder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_BamSortOrder.html" target="main">enum_BamSortOrder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BamTagsDict.html" target="main">BamTagsDict</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BamTagsDict.html" target="main">class_BamTagsDict.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_bandedChainAlignment.html" target="main">bandedChainAlignment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_bandedChainAlignment.html" target="main">global_function_bandedChainAlignment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BandedLocalAlignmentEnumerator.html" target="main">BandedLocalAlignmentEnumerator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BandedLocalAlignmentEnumerator.html" target="main">specialization_BandedLocalAlignmentEnumerator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_BasicStream.html" target="main">BasicStream</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_BasicStream.html" target="main">global_metafunction_BasicStream.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Bed12Record.html" target="main">Bed12Record</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Bed12Record.html" target="main">specialization_Bed12Record.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Bed3Record.html" target="main">Bed3Record</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Bed3Record.html" target="main">specialization_Bed3Record.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Bed4Record.html" target="main">Bed4Record</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Bed4Record.html" target="main">specialization_Bed4Record.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Bed5Record.html" target="main">Bed5Record</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Bed5Record.html" target="main">specialization_Bed5Record.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Bed6Record.html" target="main">Bed6Record</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Bed6Record.html" target="main">specialization_Bed6Record.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BedFileIn.html" target="main">BedFileIn</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BedFileIn.html" target="main">specialization_BedFileIn.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BedFileOut.html" target="main">BedFileOut</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BedFileOut.html" target="main">specialization_BedFileOut.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BedRecord.html" target="main">BedRecord</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BedRecord.html" target="main">class_BedRecord.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BedRgb.html" target="main">BedRgb</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BedRgb.html" target="main">class_BedRgb.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_bellmanFordAlgorithm.html" target="main">bellmanFordAlgorithm</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_bellmanFordAlgorithm.html" target="main">global_function_bellmanFordAlgorithm.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BetaDistribution.html" target="main">BetaDistribution</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BetaDistribution.html" target="main">class_BetaDistribution.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BfamPattern.html" target="main">BfamPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BfamPattern.html" target="main">specialization_BfamPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BfsIterator.html" target="main">BfsIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BfsIterator.html" target="main">specialization_BfsIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BidirectionalIndex.html" target="main">BidirectionalIndex</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BidirectionalIndex.html" target="main">class_BidirectionalIndex.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_BidirectionalIteratorConcept.html" target="main">BidirectionalIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_BidirectionalIteratorConcept.html" target="main">concept_BidirectionalIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_BidirectionalStreamConcept.html" target="main">BidirectionalStreamConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_BidirectionalStreamConcept.html" target="main">concept_BidirectionalStreamConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BitPackedPair.html" target="main">BitPackedPair</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BitPackedPair.html" target="main">specialization_BitPackedPair.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BitPackedTuple.html" target="main">BitPackedTuple</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BitPackedTuple.html" target="main">specialization_BitPackedTuple.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_bitScanForward.html" target="main">bitScanForward</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_bitScanForward.html" target="main">global_function_bitScanForward.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_bitScanReverse.html" target="main">bitScanReverse</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_bitScanReverse.html" target="main">global_function_bitScanReverse.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BlastIOContext.html" target="main">BlastIOContext</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BlastIOContext.html" target="main">class_BlastIOContext.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BlastMatch.html" target="main">BlastMatch</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BlastMatch.html" target="main">class_BlastMatch.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BlastMatchField.html" target="main">BlastMatchField</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BlastMatchField.html" target="main">class_BlastMatchField.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_BlastMatchField_58_58Enum.html" target="main">BlastMatchField::Enum</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_BlastMatchField_58_58Enum.html" target="main">enum_BlastMatchField_58_58Enum.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_BlastProgram.html" target="main">BlastProgram</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_BlastProgram.html" target="main">enum_BlastProgram.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BlastProgramSelector.html" target="main">BlastProgramSelector</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BlastProgramSelector.html" target="main">class_BlastProgramSelector.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BlastRecord.html" target="main">BlastRecord</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BlastRecord.html" target="main">class_BlastRecord.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BlastReport.html" target="main">BlastReport</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BlastReport.html" target="main">class_BlastReport.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BlastReportFileOut.html" target="main">BlastReportFileOut</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BlastReportFileOut.html" target="main">specialization_BlastReportFileOut.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BlastScoringScheme.html" target="main">BlastScoringScheme</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BlastScoringScheme.html" target="main">class_BlastScoringScheme.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BlastTabular.html" target="main">BlastTabular</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BlastTabular.html" target="main">class_BlastTabular.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BlastTabularFileIn.html" target="main">BlastTabularFileIn</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BlastTabularFileIn.html" target="main">specialization_BlastTabularFileIn.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BlastTabularFileOut.html" target="main">BlastTabularFileOut</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BlastTabularFileOut.html" target="main">specialization_BlastTabularFileOut.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BlastTabularLL.html" target="main">BlastTabularLL</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BlastTabularLL.html" target="main">class_BlastTabularLL.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_BlastTabularSpec.html" target="main">BlastTabularSpec</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_BlastTabularSpec.html" target="main">enum_BlastTabularSpec.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BlastTabularSpecSelector.html" target="main">BlastTabularSpecSelector</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BlastTabularSpecSelector.html" target="main">class_BlastTabularSpecSelector.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BlockString.html" target="main">BlockString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BlockString.html" target="main">specialization_BlockString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Blosum30.html" target="main">Blosum30</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Blosum30.html" target="main">global_typedef_Blosum30.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Blosum45.html" target="main">Blosum45</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Blosum45.html" target="main">global_typedef_Blosum45.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Blosum62.html" target="main">Blosum62</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Blosum62.html" target="main">global_typedef_Blosum62.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Blosum80.html" target="main">Blosum80</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Blosum80.html" target="main">global_typedef_Blosum80.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BndmAlgoPattern.html" target="main">BndmAlgoPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BndmAlgoPattern.html" target="main">specialization_BndmAlgoPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_BottomUp.html" target="main">BottomUp</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_BottomUp.html" target="main">group_BottomUp.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_BottomUpIterator.html" target="main">BottomUpIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_BottomUpIterator.html" target="main">specialization_BottomUpIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_breadthFirstSearch.html" target="main">breadthFirstSearch</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_breadthFirstSearch.html" target="main">global_function_breadthFirstSearch.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_BufferedStream.html" target="main">BufferedStream</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_BufferedStream.html" target="main">class_BufferedStream.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_buildAlignmentGraph.html" target="main">buildAlignmentGraph</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_buildAlignmentGraph.html" target="main">global_function_buildAlignmentGraph.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_bundle2.html" target="main">bundle2</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_bundle2.html" target="main">global_function_bundle2.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Bundle2.html" target="main">Bundle2</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Bundle2.html" target="main">class_Bundle2.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_bundle3.html" target="main">bundle3</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_bundle3.html" target="main">global_function_bundle3.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Bundle3.html" target="main">Bundle3</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Bundle3.html" target="main">class_Bundle3.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_bundle5.html" target="main">bundle5</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_bundle5.html" target="main">global_function_bundle5.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Bundle5.html" target="main">Bundle5</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Bundle5.html" target="main">class_Bundle5.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_BytesPerValue.html" target="main">BytesPerValue</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_BytesPerValue.html" target="main">global_metafunction_BytesPerValue.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_calcBetaDistParam.html" target="main">calcBetaDistParam</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_calcBetaDistParam.html" target="main">global_function_calcBetaDistParam.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_calcLogNormalDistParam.html" target="main">calcLogNormalDistParam</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_calcLogNormalDistParam.html" target="main">global_function_calcLogNormalDistParam.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_calculateCovariance.html" target="main">calculateCovariance</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_calculateCovariance.html" target="main">global_function_calculateCovariance.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_calculateOverlapIndicator.html" target="main">calculateOverlapIndicator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_calculateOverlapIndicator.html" target="main">global_function_calculateOverlapIndicator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_calculatePeriodicity.html" target="main">calculatePeriodicity</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_calculatePeriodicity.html" target="main">global_function_calculatePeriodicity.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_calculateProbability.html" target="main">calculateProbability</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_calculateProbability.html" target="main">global_function_calculateProbability.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_calculateVariance.html" target="main">calculateVariance</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_calculateVariance.html" target="main">global_function_calculateVariance.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Cargo.html" target="main">Cargo</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Cargo.html" target="main">global_metafunction_Cargo.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Caster.html" target="main">Caster</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Caster.html" target="main">specialization_Caster.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ChainedSeed.html" target="main">ChainedSeed</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ChainedSeed.html" target="main">specialization_ChainedSeed.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_chainSeedsGlobally.html" target="main">chainSeedsGlobally</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_chainSeedsGlobally.html" target="main">global_function_chainSeedsGlobally.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_CharIterator.html" target="main">CharIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_CharIterator.html" target="main">global_typedef_CharIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_CharString.html" target="main">CharString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_CharString.html" target="main">global_typedef_CharString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Chunk.html" target="main">Chunk</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Chunk.html" target="main">global_metafunction_Chunk.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_CigarElement.html" target="main">CigarElement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_CigarElement.html" target="main">class_CigarElement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_clearAllBits.html" target="main">clearAllBits</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_clearAllBits.html" target="main">global_function_clearAllBits.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_clearBit.html" target="main">clearBit</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_clearBit.html" target="main">global_function_clearBit.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_ComparableConcept.html" target="main">ComparableConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_ComparableConcept.html" target="main">concept_ComparableConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Comparator.html" target="main">Comparator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Comparator.html" target="main">global_metafunction_Comparator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_CompareType.html" target="main">CompareType</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_CompareType.html" target="main">global_metafunction_CompareType.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_CompareTypeImpl.html" target="main">CompareTypeImpl</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_CompareTypeImpl.html" target="main">global_metafunction_CompareTypeImpl.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_complement.html" target="main">complement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_complement.html" target="main">global_function_complement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_CompressedSA.html" target="main">CompressedSA</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_CompressedSA.html" target="main">class_CompressedSA.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_CompressedSAFibres.html" target="main">CompressedSAFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_CompressedSAFibres.html" target="main">group_CompressedSAFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_computeAlignmentStats.html" target="main">computeAlignmentStats</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_computeAlignmentStats.html" target="main">global_function_computeAlignmentStats.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_computeSplitters.html" target="main">computeSplitters</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_computeSplitters.html" target="main">global_function_computeSplitters.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ConcatDirectStringSet.html" target="main">ConcatDirectStringSet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ConcatDirectStringSet.html" target="main">specialization_ConcatDirectStringSet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ConcatenatorManyToOne.html" target="main">ConcatenatorManyToOne</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ConcatenatorManyToOne.html" target="main">class_ConcatenatorManyToOne.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ConcatVirtualIterator.html" target="main">ConcatVirtualIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ConcatVirtualIterator.html" target="main">specialization_ConcatVirtualIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_ConceptChecking.html" target="main">ConceptChecking</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_ConceptChecking.html" target="main">group_ConceptChecking.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ConcurrentQueue.html" target="main">ConcurrentQueue</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ConcurrentQueue.html" target="main">class_ConcurrentQueue.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ConcurrentSuspendableQueue.html" target="main">ConcurrentSuspendableQueue</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ConcurrentSuspendableQueue.html" target="main">specialization_ConcurrentSuspendableQueue.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_connectedComponents.html" target="main">connectedComponents</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_connectedComponents.html" target="main">global_function_connectedComponents.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ConsensusAlignerIllegalArgumentException.html" target="main">ConsensusAlignerIllegalArgumentException</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ConsensusAlignerIllegalArgumentException.html" target="main">class_ConsensusAlignerIllegalArgumentException.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_consensusAlignment.html" target="main">consensusAlignment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_consensusAlignment.html" target="main">global_function_consensusAlignment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ConsensusAlignmentOptions.html" target="main">ConsensusAlignmentOptions</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ConsensusAlignmentOptions.html" target="main">class_ConsensusAlignmentOptions.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ConsensusScoreSequenceEntry.html" target="main">ConsensusScoreSequenceEntry</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ConsensusScoreSequenceEntry.html" target="main">class_ConsensusScoreSequenceEntry.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_ContainerConcept.html" target="main">ContainerConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_ContainerConcept.html" target="main">concept_ContainerConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_ContainerIteratorTags.html" target="main">ContainerIteratorTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_ContainerIteratorTags.html" target="main">group_ContainerIteratorTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ContainerView.html" target="main">ContainerView</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ContainerView.html" target="main">class_ContainerView.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ContigFile.html" target="main">ContigFile</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ContigFile.html" target="main">class_ContigFile.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ContigStoreElement.html" target="main">ContigStoreElement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ContigStoreElement.html" target="main">class_ContigStoreElement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_convert.html" target="main">convert</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_convert.html" target="main">global_function_convert.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Convert.html" target="main">Convert</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Convert.html" target="main">global_metafunction_Convert.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_ConvertibleConcept.html" target="main">ConvertibleConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_ConvertibleConcept.html" target="main">concept_ConvertibleConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_convertImpl.html" target="main">convertImpl</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_convertImpl.html" target="main">global_function_convertImpl.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_convertQuality.html" target="main">convertQuality</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_convertQuality.html" target="main">global_function_convertQuality.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_CopyConstructibleConcept.html" target="main">CopyConstructibleConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_CopyConstructibleConcept.html" target="main">concept_CopyConstructibleConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Counter.html" target="main">Counter</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Counter.html" target="main">specialization_Counter.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_CountingIdManager.html" target="main">CountingIdManager</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_CountingIdManager.html" target="main">specialization_CountingIdManager.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_countKmers.html" target="main">countKmers</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_countKmers.html" target="main">global_function_countKmers.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_cpuTime.html" target="main">cpuTime</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_cpuTime.html" target="main">global_function_cpuTime.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_createBWTable.html" target="main">createBWTable</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_createBWTable.html" target="main">global_function_createBWTable.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_createInvSuffixArray.html" target="main">createInvSuffixArray</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_createInvSuffixArray.html" target="main">global_function_createInvSuffixArray.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_createLcpTable.html" target="main">createLcpTable</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_createLcpTable.html" target="main">global_function_createLcpTable.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_createSuffixArray.html" target="main">createSuffixArray</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_createSuffixArray.html" target="main">global_function_createSuffixArray.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_CStyleString.html" target="main">CStyleString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_CStyleString.html" target="main">specialization_CStyleString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_cutNs.html" target="main">cutNs</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_cutNs.html" target="main">global_function_cutNs.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_CyclicShape.html" target="main">CyclicShape</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_CyclicShape.html" target="main">class_CyclicShape.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_D2AFScore.html" target="main">D2AFScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_D2AFScore.html" target="main">specialization_D2AFScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_D2StarAFScore.html" target="main">D2StarAFScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_D2StarAFScore.html" target="main">specialization_D2StarAFScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_D2zAFScore.html" target="main">D2zAFScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_D2zAFScore.html" target="main">specialization_D2zAFScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_dagShortestPath.html" target="main">dagShortestPath</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_dagShortestPath.html" target="main">global_function_dagShortestPath.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_DeepestSpec.html" target="main">DeepestSpec</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_DeepestSpec.html" target="main">global_metafunction_DeepestSpec.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="tag" data-pimped="true">
- <span data-lang-entity="tag"><a href="page_LanguageEntities.html#tag">Tag</a><span>Tag</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="tag" data-pimped="true">
- <a href="page_LanguageEntities.html#tag">Tag</a>
- <a href="tag_Default.html" target="main">Default</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="tag_Default.html" target="main">tag_Default.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_DefaultConstructibleConcept.html" target="main">DefaultConstructibleConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_DefaultConstructibleConcept.html" target="main">concept_DefaultConstructibleConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_DefaultFindBeginPatternSpec.html" target="main">DefaultFindBeginPatternSpec</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_DefaultFindBeginPatternSpec.html" target="main">global_metafunction_DefaultFindBeginPatternSpec.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_DefaultFinder.html" target="main">DefaultFinder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_DefaultFinder.html" target="main">global_metafunction_DefaultFinder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_DefaultJstConfig.html" target="main">DefaultJstConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_DefaultJstConfig.html" target="main">class_DefaultJstConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_DefaultOverflowExplicit.html" target="main">DefaultOverflowExplicit</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_DefaultOverflowExplicit.html" target="main">global_metafunction_DefaultOverflowExplicit.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_DefaultOverflowImplicit.html" target="main">DefaultOverflowImplicit</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_DefaultOverflowImplicit.html" target="main">global_metafunction_DefaultOverflowImplicit.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_DefaultPattern.html" target="main">DefaultPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_DefaultPattern.html" target="main">global_metafunction_DefaultPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_DefaultPrefixOrder.html" target="main">DefaultPrefixOrder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_DefaultPrefixOrder.html" target="main">global_metafunction_DefaultPrefixOrder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_defaultRng.html" target="main">defaultRng</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_defaultRng.html" target="main">global_function_defaultRng.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_DefaultSeedConfig.html" target="main">DefaultSeedConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_DefaultSeedConfig.html" target="main">class_DefaultSeedConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_DeltaMap.html" target="main">DeltaMap</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_DeltaMap.html" target="main">class_DeltaMap.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_DeltaMapIterator.html" target="main">DeltaMapIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_DeltaMapIterator.html" target="main">specialization_DeltaMapIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_DeltaType.html" target="main">DeltaType</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_DeltaType.html" target="main">enum_DeltaType.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_DeltaTypeTags.html" target="main">DeltaTypeTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_DeltaTypeTags.html" target="main">group_DeltaTypeTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_DependentStringSet.html" target="main">DependentStringSet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_DependentStringSet.html" target="main">specialization_DependentStringSet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_depthFirstSearch.html" target="main">depthFirstSearch</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_depthFirstSearch.html" target="main">global_function_depthFirstSearch.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Deque.html" target="main">Deque</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Deque.html" target="main">class_Deque.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_DestructibleConcept.html" target="main">DestructibleConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_DestructibleConcept.html" target="main">concept_DestructibleConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Device.html" target="main">Device</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Device.html" target="main">global_metafunction_Device.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_DfiIndexFibres.html" target="main">DfiIndexFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_DfiIndexFibres.html" target="main">group_DfiIndexFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_DfsOrder.html" target="main">DfsOrder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_DfsOrder.html" target="main">group_DfsOrder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_DfsPreorderIterator.html" target="main">DfsPreorderIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_DfsPreorderIterator.html" target="main">specialization_DfsPreorderIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Difference.html" target="main">Difference</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Difference.html" target="main">global_metafunction_Difference.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_dijkstra.html" target="main">dijkstra</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_dijkstra.html" target="main">global_function_dijkstra.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_DirectedGraph.html" target="main">DirectedGraph</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_DirectedGraph.html" target="main">specialization_DirectedGraph.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_DirectionTags.html" target="main">DirectionTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_DirectionTags.html" target="main">group_DirectionTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_DistanceCalculationTags.html" target="main">DistanceCalculationTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_DistanceCalculationTags.html" target="main">group_DistanceCalculationTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Dna.html" target="main">Dna</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Dna.html" target="main">specialization_Dna.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Dna5.html" target="main">Dna5</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Dna5.html" target="main">specialization_Dna5.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Dna5Iterator.html" target="main">Dna5Iterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Dna5Iterator.html" target="main">global_typedef_Dna5Iterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Dna5Q.html" target="main">Dna5Q</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Dna5Q.html" target="main">specialization_Dna5Q.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Dna5QString.html" target="main">Dna5QString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Dna5QString.html" target="main">global_typedef_Dna5QString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Dna5String.html" target="main">Dna5String</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Dna5String.html" target="main">global_typedef_Dna5String.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Dna5StringComplement.html" target="main">Dna5StringComplement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Dna5StringComplement.html" target="main">global_typedef_Dna5StringComplement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Dna5StringReverse.html" target="main">Dna5StringReverse</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Dna5StringReverse.html" target="main">global_typedef_Dna5StringReverse.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Dna5StringReverseComplement.html" target="main">Dna5StringReverseComplement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Dna5StringReverseComplement.html" target="main">global_typedef_Dna5StringReverseComplement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_DnaIterator.html" target="main">DnaIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_DnaIterator.html" target="main">global_typedef_DnaIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_DnaQ.html" target="main">DnaQ</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_DnaQ.html" target="main">specialization_DnaQ.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_DnaQString.html" target="main">DnaQString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_DnaQString.html" target="main">global_typedef_DnaQString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_DnaString.html" target="main">DnaString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_DnaString.html" target="main">global_typedef_DnaString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_DnaStringComplement.html" target="main">DnaStringComplement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_DnaStringComplement.html" target="main">global_typedef_DnaStringComplement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_DnaStringReverse.html" target="main">DnaStringReverse</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_DnaStringReverse.html" target="main">global_typedef_DnaStringReverse.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_DnaStringReverseComplement.html" target="main">DnaStringReverseComplement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_DnaStringReverseComplement.html" target="main">global_typedef_DnaStringReverseComplement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="tag" data-pimped="true">
- <span data-lang-entity="tag"><a href="page_LanguageEntities.html#tag">Tag</a><span>Tag</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="tag" data-pimped="true">
- <a href="page_LanguageEntities.html#tag">Tag</a>
- <a href="tag_DotDrawing.html" target="main">DotDrawing</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="tag_DotDrawing.html" target="main">tag_DotDrawing.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_DPBand.html" target="main">DPBand</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_DPBand.html" target="main">global_typedef_DPBand.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_DPBandConfig.html" target="main">DPBandConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_DPBandConfig.html" target="main">class_DPBandConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_DPBandSwitch.html" target="main">DPBandSwitch</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_DPBandSwitch.html" target="main">group_DPBandSwitch.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_DPSearchPattern.html" target="main">DPSearchPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_DPSearchPattern.html" target="main">specialization_DPSearchPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Echoer.html" target="main">Echoer</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Echoer.html" target="main">specialization_Echoer.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_EdgeIterator.html" target="main">EdgeIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_EdgeIterator.html" target="main">specialization_EdgeIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_EdgeStump.html" target="main">EdgeStump</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_EdgeStump.html" target="main">class_EdgeStump.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="tag" data-pimped="true">
- <span data-lang-entity="tag"><a href="page_LanguageEntities.html#tag">Tag</a><span>Tag</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="tag" data-pimped="true">
- <a href="page_LanguageEntities.html#tag">Tag</a>
- <a href="tag_EditDistance.html" target="main">EditDistance</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="tag_EditDistance.html" target="main">tag_EditDistance.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_EditDistanceScore.html" target="main">EditDistanceScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_EditDistanceScore.html" target="main">specialization_EditDistanceScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_EditDistanceScoreTypedef.html" target="main">EditDistanceScoreTypedef</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_EditDistanceScoreTypedef.html" target="main">global_typedef_EditDistanceScoreTypedef.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_EditEnvironment.html" target="main">EditEnvironment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_EditEnvironment.html" target="main">specialization_EditEnvironment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_EmptyFieldError.html" target="main">EmptyFieldError</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_EmptyFieldError.html" target="main">specialization_EmptyFieldError.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_EnableIfFunctionality.html" target="main">EnableIfFunctionality</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_EnableIfFunctionality.html" target="main">group_EnableIfFunctionality.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_endsWith.html" target="main">endsWith</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_endsWith.html" target="main">global_function_endsWith.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_EqualityComparableConcept.html" target="main">EqualityComparableConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_EqualityComparableConcept.html" target="main">concept_EqualityComparableConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Equidistant.html" target="main">Equidistant</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Equidistant.html" target="main">specialization_Equidistant.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ExactFragment.html" target="main">ExactFragment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ExactFragment.html" target="main">specialization_ExactFragment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ExactReversableFragment.html" target="main">ExactReversableFragment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ExactReversableFragment.html" target="main">specialization_ExactReversableFragment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Exception.html" target="main">Exception</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Exception.html" target="main">class_Exception.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_ExceptionHandling.html" target="main">ExceptionHandling</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_ExceptionHandling.html" target="main">group_ExceptionHandling.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_expectation.html" target="main">expectation</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_expectation.html" target="main">global_function_expectation.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_extendAlignment.html" target="main">extendAlignment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_extendAlignment.html" target="main">global_function_extendAlignment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_ExtensionDirection.html" target="main">ExtensionDirection</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_ExtensionDirection.html" target="main">enum_ExtensionDirection.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ExternalConfig.html" target="main">ExternalConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ExternalConfig.html" target="main">class_ExternalConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ExternalConfigLarge.html" target="main">ExternalConfigLarge</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ExternalConfigLarge.html" target="main">class_ExternalConfigLarge.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ExternalConfigSize.html" target="main">ExternalConfigSize</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ExternalConfigSize.html" target="main">class_ExternalConfigSize.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ExternalString.html" target="main">ExternalString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ExternalString.html" target="main">specialization_ExternalString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_FaiIndex.html" target="main">FaiIndex</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_FaiIndex.html" target="main">class_FaiIndex.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Fibre.html" target="main">Fibre</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Fibre.html" target="main">global_metafunction_Fibre.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_File.html" target="main">File</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_File.html" target="main">class_File.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_FileCompressionTags.html" target="main">FileCompressionTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_FileCompressionTags.html" target="main">group_FileCompressionTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_FileExtensions.html" target="main">FileExtensions</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_FileExtensions.html" target="main">global_metafunction_FileExtensions.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_FileFormats.html" target="main">FileFormats</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_FileFormats.html" target="main">group_FileFormats.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_FileMapping.html" target="main">FileMapping</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_FileMapping.html" target="main">class_FileMapping.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_FileMappingAdvise.html" target="main">FileMappingAdvise</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_FileMappingAdvise.html" target="main">enum_FileMappingAdvise.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_FileMappingMode.html" target="main">FileMappingMode</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_FileMappingMode.html" target="main">enum_FileMappingMode.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_FileOpenMode.html" target="main">FileOpenMode</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_FileOpenMode.html" target="main">enum_FileOpenMode.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Filter.html" target="main">Filter</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Filter.html" target="main">specialization_Filter.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Find.html" target="main">Find</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Find.html" target="main">global_metafunction_Find.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Finder.html" target="main">Finder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Finder.html" target="main">class_Finder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_findRepeats.html" target="main">findRepeats</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_findRepeats.html" target="main">global_function_findRepeats.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Finite.html" target="main">Finite</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Finite.html" target="main">specialization_Finite.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_FiniteOrderedAlphabetConcept.html" target="main">FiniteOrderedAlphabetConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_FiniteOrderedAlphabetConcept.html" target="main">concept_FiniteOrderedAlphabetConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_FixedCyclicShape.html" target="main">FixedCyclicShape</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_FixedCyclicShape.html" target="main">specialization_FixedCyclicShape.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_floydWarshallAlgorithm.html" target="main">floydWarshallAlgorithm</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_floydWarshallAlgorithm.html" target="main">global_function_floydWarshallAlgorithm.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_FMIndex.html" target="main">FMIndex</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_FMIndex.html" target="main">specialization_FMIndex.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_FMIndexCompressionSpec.html" target="main">FMIndexCompressionSpec</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_FMIndexCompressionSpec.html" target="main">group_FMIndexCompressionSpec.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_FMIndexConfig.html" target="main">FMIndexConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_FMIndexConfig.html" target="main">class_FMIndexConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_FMIndexFibres.html" target="main">FMIndexFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_FMIndexFibres.html" target="main">group_FMIndexFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_FMIndexRankDictionarySpec.html" target="main">FMIndexRankDictionarySpec</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_FMIndexRankDictionarySpec.html" target="main">group_FMIndexRankDictionarySpec.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_fordFulkersonAlgorithm.html" target="main">fordFulkersonAlgorithm</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_fordFulkersonAlgorithm.html" target="main">global_function_fordFulkersonAlgorithm.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_FormattedFile.html" target="main">FormattedFile</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_FormattedFile.html" target="main">class_FormattedFile.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_FormattedFileHeaderConcept.html" target="main">FormattedFileHeaderConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_FormattedFileHeaderConcept.html" target="main">concept_FormattedFileHeaderConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_FormattedFileIn.html" target="main">FormattedFileIn</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_FormattedFileIn.html" target="main">specialization_FormattedFileIn.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_FormattedFileOut.html" target="main">FormattedFileOut</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_FormattedFileOut.html" target="main">specialization_FormattedFileOut.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_FormattedFileRecordConcept.html" target="main">FormattedFileRecordConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_FormattedFileRecordConcept.html" target="main">concept_FormattedFileRecordConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_FormattedNumber.html" target="main">FormattedNumber</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_FormattedNumber.html" target="main">class_FormattedNumber.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_ForwardContainerConcept.html" target="main">ForwardContainerConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_ForwardContainerConcept.html" target="main">concept_ForwardContainerConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_ForwardIteratorConcept.html" target="main">ForwardIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_ForwardIteratorConcept.html" target="main">concept_ForwardIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Fragment.html" target="main">Fragment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Fragment.html" target="main">class_Fragment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_FragmentStore.html" target="main">FragmentStore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_FragmentStore.html" target="main">class_FragmentStore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_FragmentStore_58_58PredefinedAnnotationTypes.html" target="main">FragmentStore::PredefinedAnnotationTypes</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_FragmentStore_58_58PredefinedAnnotationTypes.html" target="main">enum_FragmentStore_58_58PredefinedAnnotationTypes.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_FunctorComplement.html" target="main">FunctorComplement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_FunctorComplement.html" target="main">class_FunctorComplement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_FunctorConvert.html" target="main">FunctorConvert</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_FunctorConvert.html" target="main">class_FunctorConvert.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_FunctorLowcase.html" target="main">FunctorLowcase</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_FunctorLowcase.html" target="main">class_FunctorLowcase.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_FunctorUpcase.html" target="main">FunctorUpcase</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_FunctorUpcase.html" target="main">class_FunctorUpcase.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_GapAnchor.html" target="main">GapAnchor</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_GapAnchor.html" target="main">class_GapAnchor.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_GapDirectionTags.html" target="main">GapDirectionTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_GapDirectionTags.html" target="main">group_GapDirectionTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_GappedShape.html" target="main">GappedShape</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_GappedShape.html" target="main">specialization_GappedShape.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_GappedValueType.html" target="main">GappedValueType</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_GappedValueType.html" target="main">global_metafunction_GappedValueType.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Gaps.html" target="main">Gaps</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Gaps.html" target="main">class_Gaps.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_GapsIterator.html" target="main">GapsIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_GapsIterator.html" target="main">class_GapsIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_GapsSpecTag.html" target="main">GapsSpecTag</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_GapsSpecTag.html" target="main">group_GapsSpecTag.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_GenericCyclicShape.html" target="main">GenericCyclicShape</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_GenericCyclicShape.html" target="main">specialization_GenericCyclicShape.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_GenericShape.html" target="main">GenericShape</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_GenericShape.html" target="main">specialization_GenericShape.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_GenerousDependentStringSet.html" target="main">GenerousDependentStringSet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_GenerousDependentStringSet.html" target="main">specialization_GenerousDependentStringSet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="tag" data-pimped="true">
- <span data-lang-entity="tag"><a href="page_LanguageEntities.html#tag">Tag</a><span>Tag</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="tag" data-pimped="true">
- <a href="page_LanguageEntities.html#tag">Tag</a>
- <a href="tag_GeneticCode.html" target="main">GeneticCode</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="tag_GeneticCode.html" target="main">tag_GeneticCode.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_GeneticCodeSpec.html" target="main">GeneticCodeSpec</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_GeneticCodeSpec.html" target="main">enum_GeneticCodeSpec.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_GenomicRegion.html" target="main">GenomicRegion</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_GenomicRegion.html" target="main">class_GenomicRegion.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_getAbsolutePath.html" target="main">getAbsolutePath</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_getAbsolutePath.html" target="main">global_function_getAbsolutePath.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_getBamTypeChar.html" target="main">getBamTypeChar</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_getBamTypeChar.html" target="main">global_function_getBamTypeChar.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_getBamTypeSize.html" target="main">getBamTypeSize</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_getBamTypeSize.html" target="main">global_function_getBamTypeSize.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_GetDefaultRng.html" target="main">GetDefaultRng</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_GetDefaultRng.html" target="main">global_metafunction_GetDefaultRng.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_getTerminalSize.html" target="main">getTerminalSize</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_getTerminalSize.html" target="main">global_function_getTerminalSize.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_GetValue.html" target="main">GetValue</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_GetValue.html" target="main">global_metafunction_GetValue.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_GffFileIn.html" target="main">GffFileIn</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_GffFileIn.html" target="main">specialization_GffFileIn.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_GffFileOut.html" target="main">GffFileOut</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_GffFileOut.html" target="main">specialization_GffFileOut.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_GffRecord.html" target="main">GffRecord</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_GffRecord.html" target="main">class_GffRecord.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_GlobalAlign.html" target="main">GlobalAlign</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_GlobalAlign.html" target="main">specialization_GlobalAlign.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_globalAlignment.html" target="main">globalAlignment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_globalAlignment.html" target="main">global_function_globalAlignment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_globalAlignmentScore.html" target="main">globalAlignmentScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_globalAlignmentScore.html" target="main">global_function_globalAlignmentScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_GlobalChain.html" target="main">GlobalChain</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_GlobalChain.html" target="main">specialization_GlobalChain.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_GlobalChainingTags.html" target="main">GlobalChainingTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_GlobalChainingTags.html" target="main">group_GlobalChainingTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_globalMsaAlignment.html" target="main">globalMsaAlignment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_globalMsaAlignment.html" target="main">global_function_globalMsaAlignment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Graph.html" target="main">Graph</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Graph.html" target="main">class_Graph.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_GraphIteratorTags.html" target="main">GraphIteratorTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_GraphIteratorTags.html" target="main">group_GraphIteratorTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_GraphOverAlphabetConcept.html" target="main">GraphOverAlphabetConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_GraphOverAlphabetConcept.html" target="main">concept_GraphOverAlphabetConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_guessFormatFromFilename.html" target="main">guessFormatFromFilename</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_guessFormatFromFilename.html" target="main">global_function_guessFormatFromFilename.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="tag" data-pimped="true">
- <span data-lang-entity="tag"><a href="page_LanguageEntities.html#tag">Tag</a><span>Tag</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="tag" data-pimped="true">
- <a href="page_LanguageEntities.html#tag">Tag</a>
- <a href="tag_HammingDistance.html" target="main">HammingDistance</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="tag_HammingDistance.html" target="main">tag_HammingDistance.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_HammingSimplePattern.html" target="main">HammingSimplePattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_HammingSimplePattern.html" target="main">specialization_HammingSimplePattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_HammingStringEnumerator.html" target="main">HammingStringEnumerator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_HammingStringEnumerator.html" target="main">specialization_HammingStringEnumerator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_HardwiredShape.html" target="main">HardwiredShape</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_HardwiredShape.html" target="main">specialization_HardwiredShape.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_HasMoveConstructor.html" target="main">HasMoveConstructor</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_HasMoveConstructor.html" target="main">global_metafunction_HasMoveConstructor.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_heaviestIncreasingSubsequence.html" target="main">heaviestIncreasingSubsequence</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_heaviestIncreasingSubsequence.html" target="main">global_function_heaviestIncreasingSubsequence.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_HierarchicalPexPattern.html" target="main">HierarchicalPexPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_HierarchicalPexPattern.html" target="main">specialization_HierarchicalPexPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_HmmAlgorithms.html" target="main">HmmAlgorithms</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_HmmAlgorithms.html" target="main">group_HmmAlgorithms.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_HmmGraph.html" target="main">HmmGraph</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_HmmGraph.html" target="main">specialization_HmmGraph.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Holder.html" target="main">Holder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Holder.html" target="main">class_Holder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_HorspoolPattern.html" target="main">HorspoolPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_HorspoolPattern.html" target="main">specialization_HorspoolPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_HostedConcept.html" target="main">HostedConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_HostedConcept.html" target="main">concept_HostedConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Id.html" target="main">Id</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Id.html" target="main">global_metafunction_Id.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_IdManager.html" target="main">IdManager</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_IdManager.html" target="main">class_IdManager.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_ignoreUnusedVariableWarning.html" target="main">ignoreUnusedVariableWarning</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_ignoreUnusedVariableWarning.html" target="main">global_function_ignoreUnusedVariableWarning.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Index.html" target="main">Index</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Index.html" target="main">class_Index.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_IndexDfi.html" target="main">IndexDfi</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_IndexDfi.html" target="main">specialization_IndexDfi.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_IndexEsa.html" target="main">IndexEsa</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_IndexEsa.html" target="main">specialization_IndexEsa.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_IndexEsaFibres.html" target="main">IndexEsaFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_IndexEsaFibres.html" target="main">group_IndexEsaFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_IndexFindAlgorithm.html" target="main">IndexFindAlgorithm</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_IndexFindAlgorithm.html" target="main">group_IndexFindAlgorithm.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_IndexQGram.html" target="main">IndexQGram</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_IndexQGram.html" target="main">specialization_IndexQGram.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_IndexSa.html" target="main">IndexSa</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_IndexSa.html" target="main">specialization_IndexSa.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_IndexWotd.html" target="main">IndexWotd</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_IndexWotd.html" target="main">specialization_IndexWotd.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_InfixSegment.html" target="main">InfixSegment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_InfixSegment.html" target="main">specialization_InfixSegment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_InputIteratorConcept.html" target="main">InputIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_InputIteratorConcept.html" target="main">concept_InputIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_InputStreamConcept.html" target="main">InputStreamConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_InputStreamConcept.html" target="main">concept_InputStreamConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_InputStreamIterator.html" target="main">InputStreamIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_InputStreamIterator.html" target="main">specialization_InputStreamIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_IntegerConcept.html" target="main">IntegerConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_IntegerConcept.html" target="main">concept_IntegerConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IntegralForValue.html" target="main">IntegralForValue</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IntegralForValue.html" target="main">global_metafunction_IntegralForValue.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_integrateAlign.html" target="main">integrateAlign</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_integrateAlign.html" target="main">global_function_integrateAlign.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_InternalPointerPropertyMap.html" target="main">InternalPointerPropertyMap</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_InternalPointerPropertyMap.html" target="main">class_InternalPointerPropertyMap.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_InternalPropertyMap.html" target="main">InternalPropertyMap</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_InternalPropertyMap.html" target="main">class_InternalPropertyMap.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_IntervalAndCargo.html" target="main">IntervalAndCargo</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_IntervalAndCargo.html" target="main">class_IntervalAndCargo.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_IntervalTree.html" target="main">IntervalTree</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_IntervalTree.html" target="main">class_IntervalTree.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_IntervalTreeNode.html" target="main">IntervalTreeNode</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_IntervalTreeNode.html" target="main">class_IntervalTreeNode.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_IntervalTreeNodeTypeTags.html" target="main">IntervalTreeNodeTypeTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_IntervalTreeNodeTypeTags.html" target="main">group_IntervalTreeNodeTypeTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_IOError.html" target="main">IOError</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_IOError.html" target="main">class_IOError.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IosOpenMode.html" target="main">IosOpenMode</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IosOpenMode.html" target="main">global_metafunction_IosOpenMode.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Is.html" target="main">Is</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Is.html" target="main">global_metafunction_Is.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_isAnsiColorTerminal.html" target="main">isAnsiColorTerminal</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_isAnsiColorTerminal.html" target="main">global_function_isAnsiColorTerminal.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_isBitSet.html" target="main">isBitSet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_isBitSet.html" target="main">global_function_isBitSet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IsCharType.html" target="main">IsCharType</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IsCharType.html" target="main">global_metafunction_IsCharType.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IsContiguous.html" target="main">IsContiguous</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IsContiguous.html" target="main">global_metafunction_IsContiguous.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IsDevice.html" target="main">IsDevice</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IsDevice.html" target="main">global_metafunction_IsDevice.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IsInteger.html" target="main">IsInteger</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IsInteger.html" target="main">global_metafunction_IsInteger.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IsIntegral.html" target="main">IsIntegral</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IsIntegral.html" target="main">global_metafunction_IsIntegral.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IsLightWeight.html" target="main">IsLightWeight</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IsLightWeight.html" target="main">global_metafunction_IsLightWeight.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IsSameType.html" target="main">IsSameType</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IsSameType.html" target="main">global_metafunction_IsSameType.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IsSequence.html" target="main">IsSequence</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IsSequence.html" target="main">global_metafunction_IsSequence.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IsSimple.html" target="main">IsSimple</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IsSimple.html" target="main">global_metafunction_IsSimple.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_isTerminal.html" target="main">isTerminal</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_isTerminal.html" target="main">global_function_isTerminal.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_IsView.html" target="main">IsView</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_IsView.html" target="main">global_metafunction_IsView.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Iter.html" target="main">Iter</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Iter.html" target="main">class_Iter.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_IteratorAssociatedTypesConcept.html" target="main">IteratorAssociatedTypesConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_IteratorAssociatedTypesConcept.html" target="main">concept_IteratorAssociatedTypesConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_IteratorProxy.html" target="main">IteratorProxy</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_IteratorProxy.html" target="main">specialization_IteratorProxy.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Iupac.html" target="main">Iupac</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Iupac.html" target="main">specialization_Iupac.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_IupacIterator.html" target="main">IupacIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_IupacIterator.html" target="main">global_typedef_IupacIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_IupacString.html" target="main">IupacString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_IupacString.html" target="main">global_typedef_IupacString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_JoinConfig.html" target="main">JoinConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_JoinConfig.html" target="main">class_JoinConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Joiner.html" target="main">Joiner</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Joiner.html" target="main">specialization_Joiner.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_JoinStrategiesTags.html" target="main">JoinStrategiesTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_JoinStrategiesTags.html" target="main">group_JoinStrategiesTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_JournaledSet.html" target="main">JournaledSet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_JournaledSet.html" target="main">specialization_JournaledSet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_JournaledString.html" target="main">JournaledString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_JournaledString.html" target="main">specialization_JournaledString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_JournaledStringTree.html" target="main">JournaledStringTree</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_JournaledStringTree.html" target="main">class_JournaledStringTree.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Key.html" target="main">Key</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Key.html" target="main">global_metafunction_Key.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_kruskalsAlgorithm.html" target="main">kruskalsAlgorithm</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_kruskalsAlgorithm.html" target="main">global_function_kruskalsAlgorithm.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_LENGTH.html" target="main">LENGTH</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_LENGTH.html" target="main">global_metafunction_LENGTH.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_LessThanComparableConcept.html" target="main">LessThanComparableConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_LessThanComparableConcept.html" target="main">concept_LessThanComparableConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="tag" data-pimped="true">
- <span data-lang-entity="tag"><a href="page_LanguageEntities.html#tag">Tag</a><span>Tag</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="tag" data-pimped="true">
- <a href="page_LanguageEntities.html#tag">Tag</a>
- <a href="tag_LevenshteinDistance.html" target="main">LevenshteinDistance</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="tag_LevenshteinDistance.html" target="main">tag_LevenshteinDistance.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_LevenshteinStringEnumerator.html" target="main">LevenshteinStringEnumerator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_LevenshteinStringEnumerator.html" target="main">specialization_LevenshteinStringEnumerator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Lexical.html" target="main">Lexical</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Lexical.html" target="main">class_Lexical.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_lexicalCast.html" target="main">lexicalCast</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_lexicalCast.html" target="main">global_function_lexicalCast.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_lexicalCastWithException.html" target="main">lexicalCastWithException</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_lexicalCastWithException.html" target="main">global_function_lexicalCastWithException.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_LF.html" target="main">LF</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_LF.html" target="main">class_LF.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_LFTableFibres.html" target="main">LFTableFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_LFTableFibres.html" target="main">group_LFTableFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_LibraryStoreElement.html" target="main">LibraryStoreElement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_LibraryStoreElement.html" target="main">class_LibraryStoreElement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="variable" data-pimped="true">
- <span data-lang-entity="variable"><a href="page_LanguageEntities.html#variable">var</a><span>var</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="variable" data-pimped="true">
- <a href="page_LanguageEntities.html#variable">var</a>
- <a href="variable_LibraryStoreElementstd.html" target="main">LibraryStoreElementstd</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="variable_LibraryStoreElementstd.html" target="main">variable_LibraryStoreElementstd.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_localAlignment.html" target="main">localAlignment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_localAlignment.html" target="main">global_function_localAlignment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_LocalAlignmentEnumerator.html" target="main">LocalAlignmentEnumerator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_LocalAlignmentEnumerator.html" target="main">class_LocalAlignmentEnumerator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_LocalChainingTags.html" target="main">LocalChainingTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_LocalChainingTags.html" target="main">group_LocalChainingTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_LocalMatch.html" target="main">LocalMatch</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_LocalMatch.html" target="main">class_LocalMatch.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_LocalMatchStore.html" target="main">LocalMatchStore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_LocalMatchStore.html" target="main">class_LocalMatchStore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_LocalMatchStoreConfig.html" target="main">LocalMatchStoreConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_LocalMatchStoreConfig.html" target="main">class_LocalMatchStoreConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_log2.html" target="main">log2</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_log2.html" target="main">global_function_log2.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_LogicalValuesTags.html" target="main">LogicalValuesTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_LogicalValuesTags.html" target="main">group_LogicalValuesTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_LogicMetaprogramming.html" target="main">LogicMetaprogramming</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_LogicMetaprogramming.html" target="main">group_LogicMetaprogramming.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_LogProb.html" target="main">LogProb</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_LogProb.html" target="main">class_LogProb.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_longestCommonSubsequence.html" target="main">longestCommonSubsequence</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_longestCommonSubsequence.html" target="main">global_function_longestCommonSubsequence.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_longestIncreasingSubsequence.html" target="main">longestIncreasingSubsequence</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_longestIncreasingSubsequence.html" target="main">global_function_longestIncreasingSubsequence.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Loop.html" target="main">Loop</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Loop.html" target="main">class_Loop.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_LoopReverse.html" target="main">LoopReverse</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_LoopReverse.html" target="main">class_LoopReverse.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_lowerBoundAlignedReads.html" target="main">lowerBoundAlignedReads</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_lowerBoundAlignedReads.html" target="main">global_function_lowerBoundAlignedReads.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_MagicHeader.html" target="main">MagicHeader</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_MagicHeader.html" target="main">global_metafunction_MagicHeader.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_MakePacked.html" target="main">MakePacked</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_MakePacked.html" target="main">global_metafunction_MakePacked.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_MakeSigned.html" target="main">MakeSigned</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_MakeSigned.html" target="main">global_metafunction_MakeSigned.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_MakeUnsigned.html" target="main">MakeUnsigned</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_MakeUnsigned.html" target="main">global_metafunction_MakeUnsigned.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_makeZipIterator.html" target="main">makeZipIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_makeZipIterator.html" target="main">global_function_makeZipIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_makeZipView.html" target="main">makeZipView</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_makeZipView.html" target="main">global_function_makeZipView.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Map.html" target="main">Map</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Map.html" target="main">class_Map.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MapperConfig.html" target="main">MapperConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MapperConfig.html" target="main">specialization_MapperConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MapperConfigSize.html" target="main">MapperConfigSize</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MapperConfigSize.html" target="main">specialization_MapperConfigSize.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MapperSpec.html" target="main">MapperSpec</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MapperSpec.html" target="main">specialization_MapperSpec.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_MarkovModel.html" target="main">MarkovModel</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_MarkovModel.html" target="main">class_MarkovModel.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_matchRefinement.html" target="main">matchRefinement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_matchRefinement.html" target="main">global_function_matchRefinement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_MatePairStoreElement.html" target="main">MatePairStoreElement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_MatePairStoreElement.html" target="main">class_MatePairStoreElement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Matrix.html" target="main">Matrix</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Matrix.html" target="main">class_Matrix.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MatrixScore.html" target="main">MatrixScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MatrixScore.html" target="main">specialization_MatrixScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MaxRepeatsIterator.html" target="main">MaxRepeatsIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MaxRepeatsIterator.html" target="main">specialization_MaxRepeatsIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Member.html" target="main">Member</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Member.html" target="main">global_metafunction_Member.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_memset.html" target="main">memset</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_memset.html" target="main">global_function_memset.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_MetafunctionSwitch.html" target="main">MetafunctionSwitch</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_MetafunctionSwitch.html" target="main">group_MetafunctionSwitch.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_MetaprogrammingMath.html" target="main">MetaprogrammingMath</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_MetaprogrammingMath.html" target="main">group_MetaprogrammingMath.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_MMapConfig.html" target="main">MMapConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_MMapConfig.html" target="main">class_MMapConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MMapString.html" target="main">MMapString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MMapString.html" target="main">specialization_MMapString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ModCyclicShapeModifiedIterator.html" target="main">ModCyclicShapeModifiedIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ModCyclicShapeModifiedIterator.html" target="main">specialization_ModCyclicShapeModifiedIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ModCyclicShapeModifiedString.html" target="main">ModCyclicShapeModifiedString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ModCyclicShapeModifiedString.html" target="main">specialization_ModCyclicShapeModifiedString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ModifiedAlphabet.html" target="main">ModifiedAlphabet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ModifiedAlphabet.html" target="main">class_ModifiedAlphabet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ModifiedIterator.html" target="main">ModifiedIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ModifiedIterator.html" target="main">class_ModifiedIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ModifiedString.html" target="main">ModifiedString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ModifiedString.html" target="main">class_ModifiedString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ModReverseIterator.html" target="main">ModReverseIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ModReverseIterator.html" target="main">specialization_ModReverseIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ModReverseString.html" target="main">ModReverseString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ModReverseString.html" target="main">specialization_ModReverseString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ModViewModifiedIterator.html" target="main">ModViewModifiedIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ModViewModifiedIterator.html" target="main">specialization_ModViewModifiedIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ModViewModifiedString.html" target="main">ModViewModifiedString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ModViewModifiedString.html" target="main">specialization_ModViewModifiedString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="tag" data-pimped="true">
- <span data-lang-entity="tag"><a href="page_LanguageEntities.html#tag">Tag</a><span>Tag</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="tag" data-pimped="true">
- <a href="page_LanguageEntities.html#tag">Tag</a>
- <a href="tag_Move.html" target="main">Move</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="tag_Move.html" target="main">tag_Move.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_MsaOptions.html" target="main">MsaOptions</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_MsaOptions.html" target="main">class_MsaOptions.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MultiBfamPattern.html" target="main">MultiBfamPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MultiBfamPattern.html" target="main">specialization_MultiBfamPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MultiMemsIterator.html" target="main">MultiMemsIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MultiMemsIterator.html" target="main">specialization_MultiMemsIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_MultipleSequenceAlignmentTags.html" target="main">MultipleSequenceAlignmentTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_MultipleSequenceAlignmentTags.html" target="main">group_MultipleSequenceAlignmentTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MultipleShiftAndPattern.html" target="main">MultipleShiftAndPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MultipleShiftAndPattern.html" target="main">specialization_MultipleShiftAndPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MultiPoolAllocator.html" target="main">MultiPoolAllocator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MultiPoolAllocator.html" target="main">specialization_MultiPoolAllocator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MumsIterator.html" target="main">MumsIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MumsIterator.html" target="main">specialization_MumsIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="tag" data-pimped="true">
- <span data-lang-entity="tag"><a href="page_LanguageEntities.html#tag">Tag</a><span>Tag</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="tag" data-pimped="true">
- <a href="page_LanguageEntities.html#tag">Tag</a>
- <a href="tag_Murphy10.html" target="main">Murphy10</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="tag_Murphy10.html" target="main">tag_Murphy10.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_MutableBidirectionalIteratorConcept.html" target="main">MutableBidirectionalIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_MutableBidirectionalIteratorConcept.html" target="main">concept_MutableBidirectionalIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_MutableForwardIteratorConcept.html" target="main">MutableForwardIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_MutableForwardIteratorConcept.html" target="main">concept_MutableForwardIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_MutableRandomAccessIteratorConcept.html" target="main">MutableRandomAccessIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_MutableRandomAccessIteratorConcept.html" target="main">concept_MutableRandomAccessIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_MutableRootedIteratorConcept.html" target="main">MutableRootedIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_MutableRootedIteratorConcept.html" target="main">concept_MutableRootedIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_MutableRootedRandomAccessIteratorConcept.html" target="main">MutableRootedRandomAccessIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_MutableRootedRandomAccessIteratorConcept.html" target="main">concept_MutableRootedRandomAccessIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_MyersPattern.html" target="main">MyersPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_MyersPattern.html" target="main">specialization_MyersPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_MyersUkkonen.html" target="main">MyersUkkonen</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_MyersUkkonen.html" target="main">global_typedef_MyersUkkonen.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_MyersUkkonenBanded.html" target="main">MyersUkkonenBanded</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_MyersUkkonenBanded.html" target="main">global_typedef_MyersUkkonenBanded.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_MyersUkkonenGlobal.html" target="main">MyersUkkonenGlobal</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_MyersUkkonenGlobal.html" target="main">global_typedef_MyersUkkonenGlobal.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_MyersUkkonenGlobalBanded.html" target="main">MyersUkkonenGlobalBanded</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_MyersUkkonenGlobalBanded.html" target="main">global_typedef_MyersUkkonenGlobalBanded.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_N2AFScore.html" target="main">N2AFScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_N2AFScore.html" target="main">specialization_N2AFScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Namer.html" target="main">Namer</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Namer.html" target="main">specialization_Namer.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_NameStoreCache.html" target="main">NameStoreCache</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_NameStoreCache.html" target="main">class_NameStoreCache.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_njTree.html" target="main">njTree</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_njTree.html" target="main">global_function_njTree.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_NonHierarchicalPexPattern.html" target="main">NonHierarchicalPexPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_NonHierarchicalPexPattern.html" target="main">specialization_NonHierarchicalPexPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="tag" data-pimped="true">
- <span data-lang-entity="tag"><a href="page_LanguageEntities.html#tag">Tag</a><span>Tag</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="tag" data-pimped="true">
- <a href="page_LanguageEntities.html#tag">Tag</a>
- <a href="tag_Nothing.html" target="main">Nothing</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="tag_Nothing.html" target="main">tag_Nothing.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_NumberConcept.html" target="main">NumberConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_NumberConcept.html" target="main">concept_NumberConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_OneGappedShape.html" target="main">OneGappedShape</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_OneGappedShape.html" target="main">specialization_OneGappedShape.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_OpenAddressingQGramIndex.html" target="main">OpenAddressingQGramIndex</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_OpenAddressingQGramIndex.html" target="main">specialization_OpenAddressingQGramIndex.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_OpenAdressingTags.html" target="main">OpenAdressingTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_OpenAdressingTags.html" target="main">group_OpenAdressingTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_OracleBfamPattern.html" target="main">OracleBfamPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_OracleBfamPattern.html" target="main">specialization_OracleBfamPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_OracleMultiBfamPattern.html" target="main">OracleMultiBfamPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_OracleMultiBfamPattern.html" target="main">specialization_OracleMultiBfamPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_OrderedAlphabetConcept.html" target="main">OrderedAlphabetConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_OrderedAlphabetConcept.html" target="main">concept_OrderedAlphabetConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_orderOccurrences.html" target="main">orderOccurrences</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_orderOccurrences.html" target="main">global_function_orderOccurrences.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_OutEdgeIterator.html" target="main">OutEdgeIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_OutEdgeIterator.html" target="main">specialization_OutEdgeIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_OutputIteratorConcept.html" target="main">OutputIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_OutputIteratorConcept.html" target="main">concept_OutputIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_OutputStreamConcept.html" target="main">OutputStreamConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_OutputStreamConcept.html" target="main">concept_OutputStreamConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_OutputStreamIterator.html" target="main">OutputStreamIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_OutputStreamIterator.html" target="main">specialization_OutputStreamIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_OverflowStrategyTags.html" target="main">OverflowStrategyTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_OverflowStrategyTags.html" target="main">group_OverflowStrategyTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_OwnerStringSet.html" target="main">OwnerStringSet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_OwnerStringSet.html" target="main">specialization_OwnerStringSet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PackedPair.html" target="main">PackedPair</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PackedPair.html" target="main">specialization_PackedPair.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PackedString.html" target="main">PackedString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PackedString.html" target="main">specialization_PackedString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PackedTriple.html" target="main">PackedTriple</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PackedTriple.html" target="main">specialization_PackedTriple.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Pair.html" target="main">Pair</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Pair.html" target="main">class_Pair.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_PairwiseLocalAlignmentAlgorithms.html" target="main">PairwiseLocalAlignmentAlgorithms</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_PairwiseLocalAlignmentAlgorithms.html" target="main">group_PairwiseLocalAlignmentAlgorithms.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Pam120.html" target="main">Pam120</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Pam120.html" target="main">global_typedef_Pam120.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Pam200.html" target="main">Pam200</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Pam200.html" target="main">global_typedef_Pam200.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Pam250.html" target="main">Pam250</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Pam250.html" target="main">global_typedef_Pam250.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Pam40.html" target="main">Pam40</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Pam40.html" target="main">global_typedef_Pam40.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_ParallelismTags.html" target="main">ParallelismTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_ParallelismTags.html" target="main">group_ParallelismTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ParseError.html" target="main">ParseError</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ParseError.html" target="main">specialization_ParseError.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_partialSum.html" target="main">partialSum</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_partialSum.html" target="main">global_function_partialSum.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Pattern.html" target="main">Pattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Pattern.html" target="main">class_Pattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Peptide.html" target="main">Peptide</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Peptide.html" target="main">global_typedef_Peptide.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_PeptideIterator.html" target="main">PeptideIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_PeptideIterator.html" target="main">global_typedef_PeptideIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PexPattern.html" target="main">PexPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PexPattern.html" target="main">specialization_PexPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PigeonholeFinder.html" target="main">PigeonholeFinder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PigeonholeFinder.html" target="main">specialization_PigeonholeFinder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_PigeonholeParameters.html" target="main">PigeonholeParameters</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_PigeonholeParameters.html" target="main">class_PigeonholeParameters.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PigeonholePattern.html" target="main">PigeonholePattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PigeonholePattern.html" target="main">specialization_PigeonholePattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Pipe.html" target="main">Pipe</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Pipe.html" target="main">class_Pipe.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PizzaChiliIndex.html" target="main">PizzaChiliIndex</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PizzaChiliIndex.html" target="main">specialization_PizzaChiliIndex.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_PizzaChiliIndexFibres.html" target="main">PizzaChiliIndexFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_PizzaChiliIndexFibres.html" target="main">group_PizzaChiliIndexFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_PizzaChiliIndexTags.html" target="main">PizzaChiliIndexTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_PizzaChiliIndexTags.html" target="main">group_PizzaChiliIndexTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PizzaChiliString.html" target="main">PizzaChiliString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PizzaChiliString.html" target="main">specialization_PizzaChiliString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="macro" data-pimped="true">
- <span data-lang-entity="macro"><a href="page_LanguageEntities.html#macro">#define</a><span>#define</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="macro" data-pimped="true">
- <a href="page_LanguageEntities.html#macro">#define</a>
- <a href="macro_PLATFORM_95GCC.html" target="main">PLATFORM_GCC</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="macro_PLATFORM_95GCC.html" target="main">macro_PLATFORM_95GCC.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_PointAndCargo.html" target="main">PointAndCargo</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_PointAndCargo.html" target="main">class_PointAndCargo.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Pool.html" target="main">Pool</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Pool.html" target="main">class_Pool.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PoolConfig.html" target="main">PoolConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PoolConfig.html" target="main">specialization_PoolConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PoolConfigSize.html" target="main">PoolConfigSize</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PoolConfigSize.html" target="main">specialization_PoolConfigSize.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PoolSpec.html" target="main">PoolSpec</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PoolSpec.html" target="main">specialization_PoolSpec.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_popCount.html" target="main">popCount</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_popCount.html" target="main">global_function_popCount.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Position.html" target="main">Position</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Position.html" target="main">global_metafunction_Position.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_PositionCalculation.html" target="main">PositionCalculation</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_PositionCalculation.html" target="main">group_PositionCalculation.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PositionIterator.html" target="main">PositionIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PositionIterator.html" target="main">specialization_PositionIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_PrefixOrderTags.html" target="main">PrefixOrderTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_PrefixOrderTags.html" target="main">group_PrefixOrderTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PrefixSegment.html" target="main">PrefixSegment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PrefixSegment.html" target="main">specialization_PrefixSegment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_primsAlgorithm.html" target="main">primsAlgorithm</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_primsAlgorithm.html" target="main">global_function_primsAlgorithm.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_printDebugLevel.html" target="main">printDebugLevel</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_printDebugLevel.html" target="main">global_function_printDebugLevel.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_PriorityHeap.html" target="main">PriorityHeap</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_PriorityHeap.html" target="main">specialization_PriorityHeap.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_PriorityType.html" target="main">PriorityType</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_PriorityType.html" target="main">class_PriorityType.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ProfileChar.html" target="main">ProfileChar</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ProfileChar.html" target="main">class_ProfileChar.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ProfileSeqFracScore.html" target="main">ProfileSeqFracScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ProfileSeqFracScore.html" target="main">specialization_ProfileSeqFracScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ProfileSeqScore.html" target="main">ProfileSeqScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ProfileSeqScore.html" target="main">specialization_ProfileSeqScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_progressiveAlignment.html" target="main">progressiveAlignment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_progressiveAlignment.html" target="main">global_function_progressiveAlignment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_PropertyMapConcept.html" target="main">PropertyMapConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_PropertyMapConcept.html" target="main">concept_PropertyMapConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Proxy.html" target="main">Proxy</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Proxy.html" target="main">class_Proxy.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_QGramIndexFibres.html" target="main">QGramIndexFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_QGramIndexFibres.html" target="main">group_QGramIndexFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_RandomAccessContainerConcept.html" target="main">RandomAccessContainerConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_RandomAccessContainerConcept.html" target="main">concept_RandomAccessContainerConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_RandomAccessIteratorConcept.html" target="main">RandomAccessIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_RandomAccessIteratorConcept.html" target="main">concept_RandomAccessIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Range.html" target="main">Range</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Range.html" target="main">class_Range.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_RankDictionary.html" target="main">RankDictionary</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_RankDictionary.html" target="main">class_RankDictionary.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_RankDictionaryFibres.html" target="main">RankDictionaryFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_RankDictionaryFibres.html" target="main">group_RankDictionaryFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_RankSupportBitString.html" target="main">RankSupportBitString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_RankSupportBitString.html" target="main">class_RankSupportBitString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_RankSupportBitStringFibres.html" target="main">RankSupportBitStringFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_RankSupportBitStringFibres.html" target="main">group_RankSupportBitStringFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_readEmblHeader.html" target="main">readEmblHeader</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_readEmblHeader.html" target="main">global_function_readEmblHeader.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ReadStoreElement.html" target="main">ReadStoreElement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ReadStoreElement.html" target="main">class_ReadStoreElement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_reAlign.html" target="main">reAlign</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_reAlign.html" target="main">global_function_reAlign.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_reAlignment.html" target="main">reAlignment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_reAlignment.html" target="main">global_function_reAlignment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ReducedAminoAcid.html" target="main">ReducedAminoAcid</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ReducedAminoAcid.html" target="main">specialization_ReducedAminoAcid.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Reference.html" target="main">Reference</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Reference.html" target="main">global_metafunction_Reference.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_RemoveConst.html" target="main">RemoveConst</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_RemoveConst.html" target="main">global_metafunction_RemoveConst.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_RemovePointer.html" target="main">RemovePointer</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_RemovePointer.html" target="main">global_metafunction_RemovePointer.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_RemoveReference.html" target="main">RemoveReference</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_RemoveReference.html" target="main">global_metafunction_RemoveReference.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_RemoveView.html" target="main">RemoveView</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_RemoveView.html" target="main">global_metafunction_RemoveView.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Repeat.html" target="main">Repeat</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Repeat.html" target="main">class_Repeat.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ResizableContainerView.html" target="main">ResizableContainerView</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ResizableContainerView.html" target="main">specialization_ResizableContainerView.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_reverse.html" target="main">reverse</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_reverse.html" target="main">global_function_reverse.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_reverseComplement.html" target="main">reverseComplement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_reverseComplement.html" target="main">global_function_reverseComplement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_ReversibleContainerConcept.html" target="main">ReversibleContainerConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_ReversibleContainerConcept.html" target="main">concept_ReversibleContainerConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_RevTextFibre.html" target="main">RevTextFibre</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_RevTextFibre.html" target="main">class_RevTextFibre.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_RightArrayBinaryTree.html" target="main">RightArrayBinaryTree</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_RightArrayBinaryTree.html" target="main">class_RightArrayBinaryTree.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_RightArrayBinaryTreeFibres.html" target="main">RightArrayBinaryTreeFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_RightArrayBinaryTreeFibres.html" target="main">group_RightArrayBinaryTreeFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_RightArrayBinaryTreeIterator.html" target="main">RightArrayBinaryTreeIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_RightArrayBinaryTreeIterator.html" target="main">specialization_RightArrayBinaryTreeIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Rna.html" target="main">Rna</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Rna.html" target="main">specialization_Rna.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Rna5.html" target="main">Rna5</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Rna5.html" target="main">specialization_Rna5.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Rna5Iterator.html" target="main">Rna5Iterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Rna5Iterator.html" target="main">global_typedef_Rna5Iterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Rna5String.html" target="main">Rna5String</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Rna5String.html" target="main">global_typedef_Rna5String.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Rna5StringComplement.html" target="main">Rna5StringComplement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Rna5StringComplement.html" target="main">global_typedef_Rna5StringComplement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Rna5StringReverse.html" target="main">Rna5StringReverse</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Rna5StringReverse.html" target="main">global_typedef_Rna5StringReverse.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Rna5StringReverseComplement.html" target="main">Rna5StringReverseComplement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Rna5StringReverseComplement.html" target="main">global_typedef_Rna5StringReverseComplement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_RnaIterator.html" target="main">RnaIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_RnaIterator.html" target="main">global_typedef_RnaIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_RnaString.html" target="main">RnaString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_RnaString.html" target="main">global_typedef_RnaString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_RnaStringComplement.html" target="main">RnaStringComplement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_RnaStringComplement.html" target="main">global_typedef_RnaStringComplement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_RnaStringReverse.html" target="main">RnaStringReverse</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_RnaStringReverse.html" target="main">global_typedef_RnaStringReverse.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_RnaStringReverseComplement.html" target="main">RnaStringReverseComplement</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_RnaStringReverseComplement.html" target="main">global_typedef_RnaStringReverseComplement.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_RoiFileIn.html" target="main">RoiFileIn</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_RoiFileIn.html" target="main">specialization_RoiFileIn.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_RoiFileOut.html" target="main">RoiFileOut</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_RoiFileOut.html" target="main">specialization_RoiFileOut.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_RootedIteratorConcept.html" target="main">RootedIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_RootedIteratorConcept.html" target="main">concept_RootedIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_RootedRandomAccessIteratorConcept.html" target="main">RootedRandomAccessIteratorConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_RootedRandomAccessIteratorConcept.html" target="main">concept_RootedRandomAccessIteratorConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_RuntimeError.html" target="main">RuntimeError</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_RuntimeError.html" target="main">class_RuntimeError.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Sampler.html" target="main">Sampler</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Sampler.html" target="main">specialization_Sampler.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_SAValue.html" target="main">SAValue</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_SAValue.html" target="main">global_metafunction_SAValue.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Score.html" target="main">Score</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Score.html" target="main">class_Score.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Seed.html" target="main">Seed</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Seed.html" target="main">class_Seed.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_SeedDiagonal.html" target="main">SeedDiagonal</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_SeedDiagonal.html" target="main">class_SeedDiagonal.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_SeedExtensionTags.html" target="main">SeedExtensionTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_SeedExtensionTags.html" target="main">group_SeedExtensionTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_SeedSet.html" target="main">SeedSet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_SeedSet.html" target="main">class_SeedSet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Segment.html" target="main">Segment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Segment.html" target="main">class_Segment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_SegmentableConcept.html" target="main">SegmentableConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_SegmentableConcept.html" target="main">concept_SegmentableConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_SegmentMatchGenerationTags.html" target="main">SegmentMatchGenerationTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_SegmentMatchGenerationTags.html" target="main">group_SegmentMatchGenerationTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_SelectableAminoAcidMatrix.html" target="main">SelectableAminoAcidMatrix</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_SelectableAminoAcidMatrix.html" target="main">global_typedef_SelectableAminoAcidMatrix.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_SentinelRankDictionary.html" target="main">SentinelRankDictionary</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_SentinelRankDictionary.html" target="main">class_SentinelRankDictionary.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_SentinelRankDictionaryFibres.html" target="main">SentinelRankDictionaryFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_SentinelRankDictionaryFibres.html" target="main">group_SentinelRankDictionaryFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="macro" data-pimped="true">
- <span data-lang-entity="macro"><a href="page_LanguageEntities.html#macro">#define</a><span>#define</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="macro" data-pimped="true">
- <a href="page_LanguageEntities.html#macro">#define</a>
- <a href="macro_SEQAN_95ENABLE_95PARALLELISM.html" target="main">SEQAN_ENABLE_PARALLELISM</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="macro_SEQAN_95ENABLE_95PARALLELISM.html" target="main">macro_SEQAN_95ENABLE_95PARALLELISM.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="macro" data-pimped="true">
- <span data-lang-entity="macro"><a href="page_LanguageEntities.html#macro">#define</a><span>#define</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="macro" data-pimped="true">
- <a href="page_LanguageEntities.html#macro">#define</a>
- <a href="macro_SEQAN_95HAS_95BZIP2.html" target="main">SEQAN_HAS_BZIP2</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="macro_SEQAN_95HAS_95BZIP2.html" target="main">macro_SEQAN_95HAS_95BZIP2.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="macro" data-pimped="true">
- <span data-lang-entity="macro"><a href="page_LanguageEntities.html#macro">#define</a><span>#define</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="macro" data-pimped="true">
- <a href="page_LanguageEntities.html#macro">#define</a>
- <a href="macro_SEQAN_95HAS_95ZLIB.html" target="main">SEQAN_HAS_ZLIB</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="macro_SEQAN_95HAS_95ZLIB.html" target="main">macro_SEQAN_95HAS_95ZLIB.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="macro" data-pimped="true">
- <span data-lang-entity="macro"><a href="page_LanguageEntities.html#macro">#define</a><span>#define</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="macro" data-pimped="true">
- <a href="page_LanguageEntities.html#macro">#define</a>
- <a href="macro_SEQAN_95IS_9532_95BIT.html" target="main">SEQAN_IS_32_BIT</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="macro_SEQAN_95IS_9532_95BIT.html" target="main">macro_SEQAN_95IS_9532_95BIT.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="macro" data-pimped="true">
- <span data-lang-entity="macro"><a href="page_LanguageEntities.html#macro">#define</a><span>#define</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="macro" data-pimped="true">
- <a href="page_LanguageEntities.html#macro">#define</a>
- <a href="macro_SEQAN_95IS_9564_95BIT.html" target="main">SEQAN_IS_64_BIT</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="macro_SEQAN_95IS_9564_95BIT.html" target="main">macro_SEQAN_95IS_9564_95BIT.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="macro" data-pimped="true">
- <span data-lang-entity="macro"><a href="page_LanguageEntities.html#macro">#define</a><span>#define</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="macro" data-pimped="true">
- <a href="page_LanguageEntities.html#macro">#define</a>
- <a href="macro_SEQAN_95OMP_95PRAGMA.html" target="main">SEQAN_OMP_PRAGMA</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="macro_SEQAN_95OMP_95PRAGMA.html" target="main">macro_SEQAN_95OMP_95PRAGMA.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="macro" data-pimped="true">
- <span data-lang-entity="macro"><a href="page_LanguageEntities.html#macro">#define</a><span>#define</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="macro" data-pimped="true">
- <a href="page_LanguageEntities.html#macro">#define</a>
- <a href="macro_SEQAN_95PATH_95TO_95ROOT.html" target="main">SEQAN_PATH_TO_ROOT</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="macro_SEQAN_95PATH_95TO_95ROOT.html" target="main">macro_SEQAN_95PATH_95TO_95ROOT.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="macro" data-pimped="true">
- <span data-lang-entity="macro"><a href="page_LanguageEntities.html#macro">#define</a><span>#define</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="macro" data-pimped="true">
- <a href="page_LanguageEntities.html#macro">#define</a>
- <a href="macro_SEQAN_95TEMP_95FILENAME.html" target="main">SEQAN_TEMP_FILENAME</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="macro_SEQAN_95TEMP_95FILENAME.html" target="main">macro_SEQAN_95TEMP_95FILENAME.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SeqFileIn.html" target="main">SeqFileIn</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SeqFileIn.html" target="main">specialization_SeqFileIn.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SeqFileOut.html" target="main">SeqFileOut</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SeqFileOut.html" target="main">specialization_SeqFileOut.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_SequenceOutputOptions.html" target="main">SequenceOutputOptions</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_SequenceOutputOptions.html" target="main">class_SequenceOutputOptions.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_setBit.html" target="main">setBit</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_setBit.html" target="main">global_function_setBit.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_setBitTo.html" target="main">setBitTo</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_setBitTo.html" target="main">global_function_setBitTo.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SetHorspoolPattern.html" target="main">SetHorspoolPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SetHorspoolPattern.html" target="main">specialization_SetHorspoolPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Shape.html" target="main">Shape</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Shape.html" target="main">class_Shape.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_shareResources.html" target="main">shareResources</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_shareResources.html" target="main">global_function_shareResources.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ShiftAndPattern.html" target="main">ShiftAndPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ShiftAndPattern.html" target="main">specialization_ShiftAndPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Shifter.html" target="main">Shifter</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Shifter.html" target="main">specialization_Shifter.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ShiftOrPattern.html" target="main">ShiftOrPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ShiftOrPattern.html" target="main">specialization_ShiftOrPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_shuffle.html" target="main">shuffle</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_shuffle.html" target="main">global_function_shuffle.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_SignedIntegerConcept.html" target="main">SignedIntegerConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_SignedIntegerConcept.html" target="main">concept_SignedIntegerConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SimpleAllocator.html" target="main">SimpleAllocator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SimpleAllocator.html" target="main">specialization_SimpleAllocator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SimpleHolder.html" target="main">SimpleHolder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SimpleHolder.html" target="main">specialization_SimpleHolder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SimpleIntervalsFileIn.html" target="main">SimpleIntervalsFileIn</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SimpleIntervalsFileIn.html" target="main">specialization_SimpleIntervalsFileIn.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SimpleIntervalsFileInOut.html" target="main">SimpleIntervalsFileInOut</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SimpleIntervalsFileInOut.html" target="main">specialization_SimpleIntervalsFileInOut.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_SimpleIntervalsIOContext.html" target="main">SimpleIntervalsIOContext</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_SimpleIntervalsIOContext.html" target="main">class_SimpleIntervalsIOContext.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SimplePattern.html" target="main">SimplePattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SimplePattern.html" target="main">specialization_SimplePattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SimpleScore.html" target="main">SimpleScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SimpleScore.html" target="main">specialization_SimpleScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_SimpleScoreTypedef.html" target="main">SimpleScoreTypedef</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_SimpleScoreTypedef.html" target="main">global_typedef_SimpleScoreTypedef.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SimpleSeed.html" target="main">SimpleSeed</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SimpleSeed.html" target="main">specialization_SimpleSeed.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SimpleShape.html" target="main">SimpleShape</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SimpleShape.html" target="main">specialization_SimpleShape.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_SimpleType.html" target="main">SimpleType</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_SimpleType.html" target="main">class_SimpleType.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SinglePoolAllocator.html" target="main">SinglePoolAllocator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SinglePoolAllocator.html" target="main">specialization_SinglePoolAllocator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Size.html" target="main">Size</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Size.html" target="main">global_metafunction_Size.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Skiplist.html" target="main">Skiplist</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Skiplist.html" target="main">specialization_Skiplist.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_sortAlignedReads.html" target="main">sortAlignedReads</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_sortAlignedReads.html" target="main">global_function_sortAlignedReads.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_SortAlignedReadTags.html" target="main">SortAlignedReadTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_SortAlignedReadTags.html" target="main">group_SortAlignedReadTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SorterConfig.html" target="main">SorterConfig</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SorterConfig.html" target="main">specialization_SorterConfig.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SorterConfigSize.html" target="main">SorterConfigSize</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SorterConfigSize.html" target="main">specialization_SorterConfigSize.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SorterSpec.html" target="main">SorterSpec</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SorterSpec.html" target="main">specialization_SorterSpec.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Source.html" target="main">Source</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Source.html" target="main">specialization_Source.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_SparseString.html" target="main">SparseString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_SparseString.html" target="main">class_SparseString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_SparseStringFibres.html" target="main">SparseStringFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_SparseStringFibres.html" target="main">group_SparseStringFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Spec.html" target="main">Spec</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Spec.html" target="main">global_metafunction_Spec.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_splitAlignment.html" target="main">splitAlignment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_splitAlignment.html" target="main">global_function_splitAlignment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_splitGenBankHeader.html" target="main">splitGenBankHeader</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_splitGenBankHeader.html" target="main">global_function_splitGenBankHeader.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Splitter.html" target="main">Splitter</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Splitter.html" target="main">class_Splitter.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_StandardIntegers.html" target="main">StandardIntegers</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_StandardIntegers.html" target="main">group_StandardIntegers.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_startsWith.html" target="main">startsWith</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_startsWith.html" target="main">global_function_startsWith.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_StdAdaptorIterator.html" target="main">StdAdaptorIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_StdAdaptorIterator.html" target="main">specialization_StdAdaptorIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_StoreIntervalsIntervalTreeNode.html" target="main">StoreIntervalsIntervalTreeNode</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_StoreIntervalsIntervalTreeNode.html" target="main">specialization_StoreIntervalsIntervalTreeNode.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_StorePointsOnlyIntervalTreeNode.html" target="main">StorePointsOnlyIntervalTreeNode</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_StorePointsOnlyIntervalTreeNode.html" target="main">specialization_StorePointsOnlyIntervalTreeNode.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_StreamBuffer.html" target="main">StreamBuffer</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_StreamBuffer.html" target="main">class_StreamBuffer.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_StreamConcept.html" target="main">StreamConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_StreamConcept.html" target="main">concept_StreamConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_StreamFormats.html" target="main">StreamFormats</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_StreamFormats.html" target="main">group_StreamFormats.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_StreamIterator.html" target="main">StreamIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_StreamIterator.html" target="main">specialization_StreamIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_String.html" target="main">String</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_String.html" target="main">class_String.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_StringConcept.html" target="main">StringConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_StringConcept.html" target="main">concept_StringConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_StringEnumerator.html" target="main">StringEnumerator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_StringEnumerator.html" target="main">class_StringEnumerator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_StringIndexConcept.html" target="main">StringIndexConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_StringIndexConcept.html" target="main">concept_StringIndexConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_StringSet.html" target="main">StringSet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_StringSet.html" target="main">class_StringSet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_stringToStringSet.html" target="main">stringToStringSet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_stringToStringSet.html" target="main">global_function_stringToStringSet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_StringTreeConcept.html" target="main">StringTreeConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_StringTreeConcept.html" target="main">concept_StringTreeConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_StringTrieConcept.html" target="main">StringTrieConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_StringTrieConcept.html" target="main">concept_StringTrieConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_stronglyConnectedComponents.html" target="main">stronglyConnectedComponents</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_stronglyConnectedComponents.html" target="main">global_function_stronglyConnectedComponents.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SuffixSegment.html" target="main">SuffixSegment</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SuffixSegment.html" target="main">specialization_SuffixSegment.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_sum.html" target="main">sum</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_sum.html" target="main">global_function_sum.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_sumOfPairsScore.html" target="main">sumOfPairsScore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_sumOfPairsScore.html" target="main">global_function_sumOfPairsScore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SuperMaxRepeatsFastIterator.html" target="main">SuperMaxRepeatsFastIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SuperMaxRepeatsFastIterator.html" target="main">specialization_SuperMaxRepeatsFastIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SuperMaxRepeatsIterator.html" target="main">SuperMaxRepeatsIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SuperMaxRepeatsIterator.html" target="main">specialization_SuperMaxRepeatsIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SwiftFinder.html" target="main">SwiftFinder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SwiftFinder.html" target="main">specialization_SwiftFinder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SwiftLocalFinder.html" target="main">SwiftLocalFinder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SwiftLocalFinder.html" target="main">specialization_SwiftLocalFinder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SwiftLocalPattern.html" target="main">SwiftLocalPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SwiftLocalPattern.html" target="main">specialization_SwiftLocalPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_SwiftParameters.html" target="main">SwiftParameters</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_SwiftParameters.html" target="main">class_SwiftParameters.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SwiftPattern.html" target="main">SwiftPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SwiftPattern.html" target="main">specialization_SwiftPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SwiftSemiGlobalFinder.html" target="main">SwiftSemiGlobalFinder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SwiftSemiGlobalFinder.html" target="main">specialization_SwiftSemiGlobalFinder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SwiftSemiGlobalPattern.html" target="main">SwiftSemiGlobalPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SwiftSemiGlobalPattern.html" target="main">specialization_SwiftSemiGlobalPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_SyncFile.html" target="main">SyncFile</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_SyncFile.html" target="main">specialization_SyncFile.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_sysTime.html" target="main">sysTime</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_sysTime.html" target="main">global_function_sysTime.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_TabixIndex.html" target="main">TabixIndex</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_TabixIndex.html" target="main">class_TabixIndex.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Tag.html" target="main">Tag</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Tag.html" target="main">class_Tag.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_TagList.html" target="main">TagList</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_TagList.html" target="main">class_TagList.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_TagSelector.html" target="main">TagSelector</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_TagSelector.html" target="main">class_TagSelector.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_testAllOnes.html" target="main">testAllOnes</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_testAllOnes.html" target="main">global_function_testAllOnes.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_testAllZeros.html" target="main">testAllZeros</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_testAllZeros.html" target="main">global_function_testAllZeros.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_TestSystemMacros.html" target="main">TestSystemMacros</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_TestSystemMacros.html" target="main">group_TestSystemMacros.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_TextConcept.html" target="main">TextConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_TextConcept.html" target="main">concept_TextConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_TightDependentStringSet.html" target="main">TightDependentStringSet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_TightDependentStringSet.html" target="main">specialization_TightDependentStringSet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_toLower.html" target="main">toLower</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_toLower.html" target="main">global_function_toLower.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ToolDoc.html" target="main">ToolDoc</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ToolDoc.html" target="main">class_ToolDoc.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_TopDown.html" target="main">TopDown</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_TopDown.html" target="main">group_TopDown.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_TopDownHistoryIterator.html" target="main">TopDownHistoryIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_TopDownHistoryIterator.html" target="main">specialization_TopDownHistoryIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_TopDownIterator.html" target="main">TopDownIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_TopDownIterator.html" target="main">specialization_TopDownIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_topologicalSort.html" target="main">topologicalSort</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_topologicalSort.html" target="main">global_function_topologicalSort.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_ToStdAllocator.html" target="main">ToStdAllocator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_ToStdAllocator.html" target="main">class_ToStdAllocator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_toUpper.html" target="main">toUpper</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_toUpper.html" target="main">global_function_toUpper.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_TraceBack.html" target="main">TraceBack</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_TraceBack.html" target="main">global_typedef_TraceBack.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_transitiveClosure.html" target="main">transitiveClosure</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_transitiveClosure.html" target="main">global_function_transitiveClosure.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_translate.html" target="main">translate</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_translate.html" target="main">global_function_translate.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="enum" data-pimped="true">
- <span data-lang-entity="enum"><a href="page_LanguageEntities.html#enum">enum</a><span>enum</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="enum" data-pimped="true">
- <a href="page_LanguageEntities.html#enum">enum</a>
- <a href="enum_TranslationFrames.html" target="main">TranslationFrames</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="enum_TranslationFrames.html" target="main">enum_TranslationFrames.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Tree.html" target="main">Tree</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Tree.html" target="main">specialization_Tree.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_TrieBfamPattern.html" target="main">TrieBfamPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_TrieBfamPattern.html" target="main">specialization_TrieBfamPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Triple.html" target="main">Triple</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Triple.html" target="main">class_Triple.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_tripletLibraryExtension.html" target="main">tripletLibraryExtension</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_tripletLibraryExtension.html" target="main">global_function_tripletLibraryExtension.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_TristateHolder.html" target="main">TristateHolder</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_TristateHolder.html" target="main">specialization_TristateHolder.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_Tuple.html" target="main">Tuple</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_Tuple.html" target="main">class_Tuple.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_Tupler.html" target="main">Tupler</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_Tupler.html" target="main">specialization_Tupler.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_TView.html" target="main">TView</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_TView.html" target="main">global_function_TView.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_TwoLevelRankDictionary.html" target="main">TwoLevelRankDictionary</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_TwoLevelRankDictionary.html" target="main">specialization_TwoLevelRankDictionary.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_UcscFileIn.html" target="main">UcscFileIn</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_UcscFileIn.html" target="main">specialization_UcscFileIn.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_UcscFileOut.html" target="main">UcscFileOut</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_UcscFileOut.html" target="main">specialization_UcscFileOut.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_UcscIOContext.html" target="main">UcscIOContext</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_UcscIOContext.html" target="main">class_UcscIOContext.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_UcscRecord.html" target="main">UcscRecord</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_UcscRecord.html" target="main">class_UcscRecord.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_UnbandedLocalAlignmentEnumerator.html" target="main">UnbandedLocalAlignmentEnumerator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_UnbandedLocalAlignmentEnumerator.html" target="main">specialization_UnbandedLocalAlignmentEnumerator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_UndirectedGraph.html" target="main">UndirectedGraph</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_UndirectedGraph.html" target="main">specialization_UndirectedGraph.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_UnexpectedEnd.html" target="main">UnexpectedEnd</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_UnexpectedEnd.html" target="main">specialization_UnexpectedEnd.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_UngappedShape.html" target="main">UngappedShape</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_UngappedShape.html" target="main">specialization_UngappedShape.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_UnicodeString.html" target="main">UnicodeString</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_UnicodeString.html" target="main">global_typedef_UnicodeString.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_UnionFind.html" target="main">UnionFind</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_UnionFind.html" target="main">class_UnionFind.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="concept" data-pimped="true">
- <span data-lang-entity="concept"><a href="page_LanguageEntities.html#concept">Concept</a><span>Concept</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="concept" data-pimped="true">
- <a href="page_LanguageEntities.html#concept">Concept</a>
- <a href="concept_UnsignedIntegerConcept.html" target="main">UnsignedIntegerConcept</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="concept_UnsignedIntegerConcept.html" target="main">concept_UnsignedIntegerConcept.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_UpgmaConfiguratorTags.html" target="main">UpgmaConfiguratorTags</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_UpgmaConfiguratorTags.html" target="main">group_UpgmaConfiguratorTags.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_upgmaTree.html" target="main">upgmaTree</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_upgmaTree.html" target="main">global_function_upgmaTree.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_upperBoundAlignedReads.html" target="main">upperBoundAlignedReads</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_upperBoundAlignedReads.html" target="main">global_function_upperBoundAlignedReads.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_Value.html" target="main">Value</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_Value.html" target="main">global_metafunction_Value.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_valueConstruct.html" target="main">valueConstruct</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_valueConstruct.html" target="main">global_function_valueConstruct.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_valueDestruct.html" target="main">valueDestruct</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_valueDestruct.html" target="main">global_function_valueDestruct.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_variance.html" target="main">variance</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_variance.html" target="main">global_function_variance.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_VcfFileIn.html" target="main">VcfFileIn</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_VcfFileIn.html" target="main">specialization_VcfFileIn.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_VcfFileOut.html" target="main">VcfFileOut</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_VcfFileOut.html" target="main">specialization_VcfFileOut.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_VcfHeader.html" target="main">VcfHeader</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_VcfHeader.html" target="main">class_VcfHeader.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_VcfHeaderRecord.html" target="main">VcfHeaderRecord</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_VcfHeaderRecord.html" target="main">class_VcfHeaderRecord.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_VcfIOContext.html" target="main">VcfIOContext</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_VcfIOContext.html" target="main">class_VcfIOContext.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_VcfRecord.html" target="main">VcfRecord</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_VcfRecord.html" target="main">class_VcfRecord.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_VectorSet.html" target="main">VectorSet</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_VectorSet.html" target="main">specialization_VectorSet.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_VertexDescriptor.html" target="main">VertexDescriptor</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_VertexDescriptor.html" target="main">global_metafunction_VertexDescriptor.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_VertexIterator.html" target="main">VertexIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_VertexIterator.html" target="main">specialization_VertexIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_View.html" target="main">View</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_View.html" target="main">global_metafunction_View.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_VirtualStream.html" target="main">VirtualStream</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_VirtualStream.html" target="main">class_VirtualStream.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="class" data-pimped="true">
- <span data-lang-entity="class"><a href="page_LanguageEntities.html#class">Class</a><span>Class</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="class" data-pimped="true">
- <a href="page_LanguageEntities.html#class">Class</a>
- <a href="class_VolatilePtr.html" target="main">VolatilePtr</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="class_VolatilePtr.html" target="main">class_VolatilePtr.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_VSTreeIterator.html" target="main">VSTreeIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_VSTreeIterator.html" target="main">specialization_VSTreeIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_typedef" data-pimped="true">
- <span data-lang-entity="global_typedef"><a href="page_LanguageEntities.html#global_typedef">typedef</a><span>typedef</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_typedef" data-pimped="true">
- <a href="page_LanguageEntities.html#global_typedef">typedef</a>
- <a href="global_typedef_Vtml200.html" target="main">Vtml200</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_typedef_Vtml200.html" target="main">global_typedef_Vtml200.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_WaveletTree.html" target="main">WaveletTree</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_WaveletTree.html" target="main">specialization_WaveletTree.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_WaveletTreeFibres.html" target="main">WaveletTreeFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_WaveletTreeFibres.html" target="main">group_WaveletTreeFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_weaklyConnectedComponents.html" target="main">weaklyConnectedComponents</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_weaklyConnectedComponents.html" target="main">global_function_weaklyConnectedComponents.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_metafunction" data-pimped="true">
- <span data-lang-entity="global_metafunction"><a href="page_LanguageEntities.html#global_metafunction">Fn<></a><span>Fn<></span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_metafunction" data-pimped="true">
- <a href="page_LanguageEntities.html#global_metafunction">Fn<></a>
- <a href="global_metafunction_WEIGHT.html" target="main">WEIGHT</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_metafunction_WEIGHT.html" target="main">global_metafunction_WEIGHT.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_WildShiftAndPattern.html" target="main">WildShiftAndPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_WildShiftAndPattern.html" target="main">specialization_WildShiftAndPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_WordGraph.html" target="main">WordGraph</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_WordGraph.html" target="main">specialization_WordGraph.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="group" data-pimped="true">
- <span data-lang-entity="group"><a href="page_LanguageEntities.html#group">Group</a><span>Group</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="group" data-pimped="true">
- <a href="page_LanguageEntities.html#group">Group</a>
- <a href="group_WOTDIndexFibres.html" target="main">WOTDIndexFibres</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="group_WOTDIndexFibres.html" target="main">group_WOTDIndexFibres.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_WuManberPattern.html" target="main">WuManberPattern</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_WuManberPattern.html" target="main">specialization_WuManberPattern.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ZipContainerView.html" target="main">ZipContainerView</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ZipContainerView.html" target="main">specialization_ZipContainerView.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="specialization" data-pimped="true">
- <span data-lang-entity="specialization"><a href="page_LanguageEntities.html#specialization">Spec</a><span>Spec</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="specialization" data-pimped="true">
- <a href="page_LanguageEntities.html#specialization">Spec</a>
- <a href="specialization_ZipIterator.html" target="main">ZipIterator</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="specialization_ZipIterator.html" target="main">specialization_ZipIterator.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
-
- <li data-lang-entity-container="global_function" data-pimped="true">
- <span data-lang-entity="global_function"><a href="page_LanguageEntities.html#global_function">fn()</a><span>fn()</span></span>
- <ol class="nav">
- <li class="result">
- <h2 data-lang-entity="global_function" data-pimped="true">
- <a href="page_LanguageEntities.html#global_function">fn()</a>
- <a href="global_function_zscore.html" target="main">zscore</a>
- </h2>
- <div>
- <div class="text"></div>
- <div class="location"><a href="global_function_zscore.html" target="main">global_function_zscore.html</a></div>
- </div>
- </li>
-
- </ol>
- </li>
-
-
- </ol>
- </div>
- </div>
-
- <div id="list_bottom" style="background:#dad9dc; vertical-align:middle; transparent:false; line-hieght:150px; width:100%; text-align:right; position:fixed; padding:10px; padding-right:20px; bottom:0px;">
- <div id="list_bottom_left" style="text-align:left; float:left;"></div>
- <div id="list_bottom_right" style="text-align:right; float:right"></div>
- </div>
- <script type="text/javascript" charset="utf-8" src="js/module_tree.js"></script>
- <script type="text/javascript" charset="utf-8" src="js/version.js"></script>
- </body>
-</html>
diff --git a/util/py_lib/seqan/dox/validation.py b/util/py_lib/seqan/dox/validation.py
deleted file mode 100644
index 5666d3b..0000000
--- a/util/py_lib/seqan/dox/validation.py
+++ /dev/null
@@ -1,139 +0,0 @@
-#!/usr/bin/env python2
-"""Some validation for proc_doc.Proc*"""
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-class ProcDocValidator(object):
- """Validate proc_doc.Proc* objects.
-
- Implements the visitor pattern.
- """
-
- def __init__(self, msg_printer):
- self.msg_printer = msg_printer
-
- def validate(self, proc_entry):
- return
-
-
-class MissingSignatureValidator(ProcDocValidator):
- """Validates for missing or empty signature."""
-
- def validate(self, proc_entry):
- IGNORED = ['variable', 'member_variable', 'tag', 'grouped_tag', 'typedef',
- 'grouped_typedef', 'signature', 'concept', 'member_typedef',
- 'enum', 'grouped_enum', 'enum_value']
- if not hasattr(proc_entry, 'signatures') or proc_entry.kind in IGNORED:
- return # Skip if type has no signatures.
- if not proc_entry.signatures:
- msg = 'Missing @signature for this entry!'
- self.msg_printer.printTokenError(proc_entry.raw.first_token, msg, 'warning')
-
-
-class MissingSignatureKeywordsValidator(ProcDocValidator):
- """Validates for missing keywords in signature (e.g. "class" for @class)."""
-
- def validate(self, proc_entry):
- if proc_entry.kind not in ['class', 'specialization']:
- return # only handle those
- for i, sig in enumerate(proc_entry.raw.signatures):
- # TODO(holtgrew): Really allow typedef and ::Type/mfns here?
- if 'class ' not in sig.text.text and 'struct ' not in sig.text.text \
- and 'typedef ' not in sig.text.text and 'using' not in sig.text.text \
- and not sig.text.text.strip().endswith('::Type') \
- and not sig.text.text.strip().endswith('::Type;'):
- msg = 'Missing keyword "class", "struct", "typedef", "using" in signature.'
- self.msg_printer.printTokenError(proc_entry.raw.signatures[i].text.tokens[0], msg, 'warning')
-
-
-class OnlyRemarksInBodyValidator(ProcDocValidator):
- """Validates for the body starting with '@section Remarks'."""
-
- def validate(self, proc_entry):
- if not hasattr(proc_entry, 'body') or not proc_entry.body.children:
- return # only handle if has non-empty body
- if proc_entry.body.children[0].type in ['h1', 'h2', 'h3', 'h4', 'h5'] and \
- proc_entry.body.children[0].children and \
- proc_entry.body.children[0].children[0].text == 'Remarks':
- msg = 'Detailed descrition starts with Remarks'
- self.msg_printer.printTokenError(proc_entry.raw.first_token, msg, 'warning')
-
-
-class MissingParameterDescriptionValidator(ProcDocValidator):
- """Warns if the description is missing for a @param or @return."""
-
- def validate(self, proc_entry):
- if not hasattr(proc_entry, 'params') and \
- not hasattr(proc_entry, 'tparams') and \
- not hasattr(proc_entry, 'returns'):
- return # Skip if type has no parameters
- # Check for empty name.
- for key in ['params', 'tparams', 'returns']:
- if not hasattr(proc_entry, key):
- continue # Skip if missing.
- for val in getattr(proc_entry, key):
- if hasattr(val, 'name') and not val.name:
- msg = 'Missing name for @%s' % key[:-1]
- elif hasattr(val, 'type') and not val.type:
- msg = 'Missing type for @%s' % key[:-1]
- else:
- continue # skip
- self.msg_printer.printTokenError(val.raw.first_token, msg, 'warning')
- # Check for empty description.
- for key in ['params', 'tparams', 'returns']:
- if not hasattr(proc_entry, key):
- continue # Skip if missing.
- for val in getattr(proc_entry, key):
- if val.desc.empty:
- msg = 'Missing description for @%s' % key[:-1]
- self.msg_printer.printTokenError(val.raw.first_token, msg, 'warning')
-
-
-class ReturnVoidValidator(ProcDocValidator):
- """Warns if there is a (superflous) @return void entry."""
-
- def validate(self, proc_entry):
- if not hasattr(proc_entry, 'returns'):
- return # Skip if type has no returns member.
- for r in proc_entry.returns:
- if r.type == 'void':
- msg = '@return superflous for "void" type -- simply show "void" in signature.'
- self.msg_printer.printTokenError(r.raw.first_token, msg, 'warning')
-
-
-class EmptyBriefValidator(ProcDocValidator):
- """Warns if there is no non-empty @brief section for an entry."""
-
- def validate(self, proc_entry):
- IGNORED = ['mainpage', 'page']
- if proc_entry.kind in IGNORED:
- return # Skip.
- if not hasattr(proc_entry, 'brief'):
- return # Skip if type has no returns member.
- if not proc_entry.brief or proc_entry.brief.empty:
- msg = 'Missing non-empty @brief clause.'
- self.msg_printer.printTokenError(proc_entry.raw.first_token, msg, 'warning')
-
-
-class ClassCannotExtendConceptValidator(ProcDocValidator):
- """Warns a class extends a concept."""
-
- def validate(self, proc_entry):
- if proc_entry.kind not in ['class', 'specialization']:
- return # Skip.
- for ext in proc_entry.extends:
- if not ext in proc_entry.doc.top_level_entries:
- continue
- if proc_entry.doc.top_level_entries[ext].kind not in ['class', 'specialization']:
- msg = 'Class %s tries to inherit from non-class %s' % (proc_entry.name, ext)
- self.msg_printer.printTokenError(proc_entry.raw.first_token, msg, 'error')
-
-
-# Array with the validator classes to use.
-VALIDATORS = [MissingSignatureValidator,
- MissingParameterDescriptionValidator,
- MissingSignatureKeywordsValidator,
- #OnlyRemarksInBodyValidator,
- ReturnVoidValidator,
- EmptyBriefValidator,
- ClassCannotExtendConceptValidator]
diff --git a/util/py_lib/seqan/dox/write_html.py b/util/py_lib/seqan/dox/write_html.py
deleted file mode 100644
index 387531d..0000000
--- a/util/py_lib/seqan/dox/write_html.py
+++ /dev/null
@@ -1,561 +0,0 @@
-#!/usr/bin/env python2
-"""Writing for HTML pages."""
-
-import distutils.dir_util
-import json
-import os
-import os.path
-import shutil
-import sys
-import xml.sax.saxutils
-import urllib
-
-import jinja2
-import proc_doc
-import raw_doc
-
-
-def escapeForXml(s):
- """Return escaped XML of s."""
- return xml.sax.saxutils.escape(s)
-
-
-def escapeName(name):
- """Escape a name such that it is safe to use for files and anchors."""
- """TODO(rmaerker): Encode special chars using urllib.quote(c.encode('utf8'))"""
- escape = '_'
- xs = []
- for c in name:
- if c.isalnum() or c in "-":
- xs.append(c)
- else:
- xs += [escape, str(ord(c))]
- return ''.join(xs)
-
-
-def escapeAnchor(name):
- """Escape a name such that it is safe to use for anchors."""
- return name
-
-
-class PathManager(object):
- """Handles the path and link generation."""
-
- def __init__(self, out_dir):
- self.out_dir = out_dir
- self.this_dir = os.path.dirname(os.path.realpath(__file__))
-
- def getTplPath(self, path):
- """Returns path to template."""
- return os.path.join(self.this_dir, 'tpl', path)
-
- def getEntryPath(self, entry):
- """Returns target path for page for entry."""
- path = '%s_%s.html' % (entry.kind, escapeName(entry.name))
- return os.path.join(self.out_dir, path)
-
- def getTopFramesetPath(self):
- """Returns target path for top frameset."""
- return os.path.join(self.out_dir, 'index.html')
-
- def getListPath(self):
- """Returns target path for list."""
- return os.path.join(self.out_dir, 'list.html')
-
- def translateDemoPath(self, path):
- """Translate demo path."""
- return path
-
-
-class TextNodeToHtml(object):
- def __init__(self, text_node, skip_top_tag=None, start_heading=2, path_mgr=None):
- self.skip_top_tag = skip_top_tag
- self.text_node = text_node
- self.res = []
- self.start_heading = start_heading
- self.heading_table = {}
- self.path_mgr = path_mgr
- for i in range(0, 10):
- self.heading_table['h%d' % i] = 'h%d' % (i + start_heading - 1)
-
- def openTag(self, text_node, **kwargs):
- if text_node.raw_html:
- res = ['<', text_node.type]
- else:
- res = ['<', self.heading_table.get(text_node.type, text_node.type)]
- for key, value in text_node.attrs.iteritems():
- res += [' ', key, '=', '"', repr(value)[1:-1], '"']
- for key, value in kwargs.iteritems():
- res += [' ', key, '=', '"', value, '"']
- res.append('>')
- return res
-
- def closeTag(self, text_node):
- if text_node.raw_html:
- return ['</', text_node.type, '>']
- else:
- return ['</', self.heading_table.get(text_node.type, text_node.type), '>']
-
- def convertCode(self, source_code):
- # TODO(holtgrew): Interpret source type.
- try:
- import pygments, pygments.lexers, pygments.formatters
- return pygments.highlight(
- source_code, pygments.lexers.CppLexer(),
- pygments.formatters.HtmlFormatter(style='friendly'))
- except ImportError:
- return '<pre class="code">' + escapeForXml(source_code) + '</pre>'
- return
-
- def handleTag(self, text_node):
- if text_node.type == '<text>':
- self.res.append(text_node.text)
- elif text_node.type == 'dox:code':
- target_path = text_node.attrs.get('path')
- if text_node.attrs.get('type') in ['.cpp', '.h']:
- self.res.append('<div data-src-path="%s">%s' %
- (target_path, self.convertCode(text_node.children[0].text)))
- if self.path_mgr:
- target_path = self.path_mrg.translateDemoPath(self.path_mgr)
- if text_node.attrs.get('source') == 'snippet':
- self.res.append(
- '<div class="path_label"><span class="label">Snippet from:'
- '</span> <a href="%s" target="_top">%s</a></div>' %
- (target_path, text_node.attrs.get('path')))
- elif text_node.attrs.get('source') == 'include':
- self.res.append(
- '<div class="path_label"><span class="label">Demo:'
- '</span> <a href="%s" target="_top">%s</a></div>' %
- (target_path, text_node.attrs.get('path')))
- self.res.append('</div>')
- elif text_node.attrs.get('type') in ['.console', '.stdout', '.stderr']:
- self.res.append('<pre class="console" data-src-path="%s">%s</pre>' %
- (target_path, escapeForXml(text_node.children[0].text)))
- else:
- self.res.append('<pre class="code" data-src-path="%s">%s</pre>' %
- (target_path, escapeForXml(text_node.children[0].text)))
- else:
- self.res += self.openTag(text_node)
- for c in text_node.children:
- self.handleTag(c)
- self.res += self.closeTag(text_node)
-
- def convert(self):
- if not self.text_node:
- return None
- if not self.skip_top_tag:
- self.res += self.openTag(self.text_node)
- for c in self.text_node.children:
- self.handleTag(c)
- if not self.skip_top_tag:
- self.res += self.closeTag(self.text_node)
- return ''.join(self.res)
-
-
-def toDox(proc_entry, line_length=110, in_comment=False):
- """Process a ProcEntry into the dox-like format."""
- formatter = raw_doc.DoxFormatter()
- result = []
- result.append(proc_entry.raw_entry.getFormatted(formatter))
- for key, lst in proc_entry.subentries.iteritems():
- for elem in lst:
- result.append(elem.raw_entry.getFormatted(formatter))
- if in_comment:
- result = [' * ' + l for line in result for l in line.splitlines(False)]
- while result and result[-1] == ' * ':
- result.pop(-1)
- result = ['/*!'] + result + [' */']
- return '\n'.join(result)
-
-
-def transTextNode(text_node, top=True, start_heading=3, path_mgr=None, **kwargs):
- #return text_node.toHtmlLike(skip_top_tag=not top)
- converter = TextNodeToHtml(text_node, skip_top_tag=not top, start_heading=start_heading, path_mgr=path_mgr)
- return converter.convert() or ''
-
-
-def createTransLink(doc, path_mgr):
- link_converter = LinkConverter(doc)
- def transLink(entity_name, text=None):
- if not text:
- text = entity_name
- text_node = proc_doc.TextNode(type='a')
- text_node.attrs['href'] = 'seqan:%s' % entity_name
- text_node.children = [proc_doc.TextNode(text=text)]
- link_converter.visit(text_node)
- return transTextNode(text_node, path_mgr)
- return transLink
-
-
-def createNameToPath(doc):
- path_converter = PathConverter(doc)
- def convertPath(entry_name):
- return path_converter.convert(entry_name)[0]
- return convertPath
-
-
-class TemplateManager(object):
- def __init__(self, path_manager, doc):
- self.path_manager = path_manager
- self.env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.join(self.path_manager.this_dir, 'tpl')))
- def identity(x):
- return x
- self.env.filters['escape_name'] = escapeName
- self.env.filters['escape_anchor'] = escapeAnchor
- self.env.filters['url_encode'] = urllib.quote
- self.env.filters['transtext'] = transTextNode
- self.env.filters['to_dox'] = toDox
- self.env.filters['translink'] = createTransLink(doc, self)
- self.env.filters['name_to_path'] = createNameToPath(doc)
- self.env.filters['tojson'] = json.dumps
- self.tpls = {}
- for path in ['page.html', 'concept.html']:
- self.loadTemplate(path)
-
- def loadTemplate(self, path):
- """Load template string at path."""
- self.tpls[path] = self.env.get_template(path)
-
- def render(self, path, **kwargs):
- if not path in self.tpls:
- self.loadTemplate(path)
- return self.tpls[path].render(**kwargs)
-
-
-class PathConverter(object):
- """Convert entry names to URL fragments (filename + anchor)."""
-
- def __init__(self, doc):
- self.doc = doc
-
- def convert(self, name):
- """Return None, None on failure path, title otherwise."""
- if self.doc.top_level_entries.get(name):
- entry = self.doc.top_level_entries.get(name)
- path = '%s_%s.html' % (entry.kind, escapeName(entry.name))
- title = None
- if entry.kind == 'page':
- title = entry.title
- return path, title, entry
- elif self.doc.entries.get(name):
- first, second = proc_doc.splitSecondLevelEntry(name)
- father = self.doc.top_level_entries.get(first)
- entry = self.doc.second_level_entries.get(name)
- path = '%s_%s.html#%s' % (father.kind, escapeName(father.name), escapeAnchor(name))
- return path, name, entry
- else:
- return None, None, None
-
-
-# TODO(holtgrew): Should be doable in a simpler way than recursing ourselves here. Visitor pattern for TextNode?
-class LinkConverter(proc_doc.TextNodeVisitor):
- """Convert raw links to HTML-like links.
-
- Raw links are links of the form <a href="seqan:$target">$label</a>.
- """
-
- def __init__(self, doc):
- self.doc = doc
- self.path_converter = PathConverter(doc)
-
- def visit(self, text_node):
- if not text_node or text_node.type == '<text>':
- return
- if text_node.type == 'a':
- self._translateLink(text_node)
- else:
- for i, c in enumerate(text_node.children):
- text_node.children[i] = self._replaceNode(c)
-
- def _translateLink(self, a_node):
- if not a_node.attrs.get('href', '').startswith('seqan:'):
- return
- target = a_node.attrs['href'][6:]
- target_path, target_title, target_obj = self.path_converter.convert(target)
- # Shorten path title if not manually specified.
- if (a_node.children and a_node.plainText == target_title and
- self.doc.local_name_counter.get(target_title, 1) <= 1):
- short_title = proc_doc.splitSecondLevelEntry(target_title)[1]
- a_node.children = [proc_doc.TextNode(text=short_title)]
- if target_title:
- target_title = proc_doc.TextNode(text=target_title)
- else:
- target_title = proc_doc.TextNode(text=target)
- # TODO(holtgrew): Catch target_title being None, target_path not found!
- if target_path is not None:
- if target_obj:
- a_node.attrs['data-lang-entity'] = target_obj.kind
- a_node.attrs['href'] = target_path
- if not a_node.children:
- a_node.addChild(target_title)
- else:
- class_attr = a_node.attrs.get('class', '')
- if class_attr:
- class_attr += ' '
- class_attr += 'error'
- a_node.attrs['class'] = class_attr
- if a_node.attrs.get('href'):
- del a_node.attrs['href']
- #a_node.addChild(target_title)
-
- def _replaceNode(self, text_node):
- if text_node.type == '<text>':
- return text_node
- if text_node.type == 'a':
- self._translateLink(text_node)
- for i, c in enumerate(text_node.children):
- text_node.children[i] = self._replaceNode(c)
- return text_node
-
-
-class ImagePathUpdater(proc_doc.TextNodeVisitor):
- """Update image paths to target image path."""
-
- def __init__(self, doc, prefix):
- self.doc = doc
- self.prefix = prefix
-
- def visit(self, text_node):
- if not text_node or text_node.type == '<text>':
- return
- if text_node.type == 'img':
- self._updateImagePath(text_node)
- else:
- for i, c in enumerate(text_node.children):
- text_node.children[i] = self._replaceNode(c)
-
- def _updateImagePath(self, img_node):
- if not img_node.attrs.get('src'):
- return # No path.
- img_node.attrs['src'] = os.path.join(self.prefix, img_node.attrs['src'])
-
- def _replaceNode(self, text_node):
- if text_node.type == '<text>':
- return text_node
- if text_node.type == 'img':
- self._updateImagePath(text_node)
- for i, c in enumerate(text_node.children):
- text_node.children[i] = self._replaceNode(c)
- return text_node
-
-
-class HtmlWriter(object):
- def __init__(self, doc, args, config):
- self.doc = doc
- self.out_dirs = {}
- self.args = args
- self.config = config
- # Normalize path.
- out_dir = args.out_dir
- # Generate path names.
- self.out_dirs['root'] = out_dir
- self.out_dirs['css'] = os.path.join(out_dir, 'css')
- self.out_dirs['img'] = os.path.join(out_dir, 'img')
- self.out_dirs['js'] = os.path.join(out_dir, 'js')
- self.out_dirs['lib'] = os.path.join(out_dir, 'lib')
- self.out_dirs['lists'] = os.path.join(out_dir, 'lists')
- self.out_dirs['docs'] = os.path.join(out_dir, 'docs', 'seqan')
- # Create managers.
- self.path_manager = PathManager(out_dir)
- self.tpl_manager = TemplateManager(self.path_manager, doc)
- self.path_converter = PathConverter(doc)
-
- def generateFor(self):
- self.log('Generating HTML documentation')
- self.log('Output Directory: %s', self.out_dirs['root'])
- self.makedirs()
- self.copyStaticFiles()
- self.copyDocImages()
- self.generateTopFrameSet()
- self.generateLists(self.doc)
- self.translateLinks(self.doc)
- self.updateImagePaths(self.doc)
- self.generatePages(self.doc, self.config)
- self.generateDemoPages(self.doc)
- self.generateSearchIndex(self.doc)
- self.generateLinkData(self.doc)
- self.generateLanguageEntities()
-
- def makedirs(self):
- for path in self.out_dirs.values():
- if not os.path.exists(path):
- #self.log('Creating directory %s', path)
- os.makedirs(path)
-
- def copyStaticFiles(self):
- """Copy static files."""
- for kind in ['css', 'js', 'img', 'lib']:
- in_dir = os.path.join(self.path_manager.this_dir, 'tpl/%s' % kind)
- out_path = self.out_dirs[kind]
- self.log(' Copying %s => %s', in_dir, out_path)
- distutils.dir_util.copy_tree(in_dir, out_path, verbose=True)
-
- def copyDocImages(self):
- """Copy images from paths given in --image-dir parameter."""
- for image_dir in self.args.image_dirs:
- join = os.path.join # shortcut
- files = [f for f in os.listdir(image_dir)
- if os.path.isfile(join(image_dir, f))]
- for f in files:
- in_path = join(image_dir, f)
- out_path = os.path.join(self.out_dirs['img'], f)
- #self.log(' Copying %s => %s', in_path, out_path)
- shutil.copy(in_path, out_path)
-
- def generateTopFrameSet(self):
- """Generate frameset."""
- html = self.tpl_manager.render('index.html',
- development=self.args.development) # TODO(holtgrew): Add title.
- with open(self.path_manager.getTopFramesetPath(), 'w') as f:
- f.write(html)
-
- def generateLists(self, doc):
- """Generate top level/second level/page index."""
- with open(self.path_manager.getListPath(), 'w') as f:
- f.write(self.tpl_manager.render('list.html', doc=doc, config=self.config,
- development=self.args.development))
-
- def translateLinks(self, doc):
- link_converter = LinkConverter(doc)
- for proc_entry in doc.entries.values():
- #self.log(' * %s', proc_entry.name)
- proc_entry.visitTextNodes(link_converter)
-
- def updateImagePaths(self, doc):
- """Appends image output directory to src attributes."""
- updater = ImagePathUpdater(doc, 'img')
- for proc_entry in doc.entries.values():
- #self.log(' * %s', proc_entry.name)
- proc_entry.visitTextNodes(updater)
-
- def generatePages(self, doc, config):
- """Generate pages for proc_doc.Documentation entries."""
- try:
- import pygments, pygments.lexers, pygments.formatters
- pygments_style = pygments.formatters.HtmlFormatter().get_style_defs('.highlight')
- except ImportError:
- pygments_style = '<!-- pygments not available -->'
-
- for entry in doc.top_level_entries.values():
- path = self.path_manager.getEntryPath(entry)
- #self.log('Creating %s', path)
- self.generatePage(entry, path, doc, config, pygments_style)
-
- def generatePage(self, entry, path, doc, config, pygments_style):
- """Generate page for entry to file at path."""
-
- common_kwargs = {'doc': doc,
- 'config': config,
- 'development': self.args.development,
- 'pygments_style': pygments_style,
- 'entry_kind': entry.kind,
- 'entry_name': entry.name}
- if entry.kind == 'page':
- html = self.tpl_manager.render('page.html', page=entry, **common_kwargs)
- elif entry.kind == 'concept':
- html = self.tpl_manager.render('concept.html', concept=entry, **common_kwargs)
- elif entry.kind in ['class', 'specialization']:
- html = self.tpl_manager.render('class.html', klass=entry, **common_kwargs)
- elif entry.kind == 'enum':
- html = self.tpl_manager.render('enum.html', enum=entry, **common_kwargs)
- elif entry.kind == 'adaption':
- html = self.tpl_manager.render('adaption.html', adaption=entry, **common_kwargs)
- elif entry.kind == 'shortcut':
- html = self.tpl_manager.render('shortcut.html', shortcut=entry, **common_kwargs)
- elif entry.kind in ['global_function', 'member_function', 'interface_function']:
- html = self.tpl_manager.render('function.html', function=entry, **common_kwargs)
- elif entry.kind in ['global_metafunction', 'interface_metafunction']:
- html = self.tpl_manager.render('metafunction.html', metafunction=entry, **common_kwargs)
- elif entry.kind == 'group':
- html = self.tpl_manager.render('group.html', group=entry, **common_kwargs)
- elif entry.kind == 'tag':
- html = self.tpl_manager.render('tag.html', tag=entry, **common_kwargs)
- elif entry.kind == 'macro':
- html = self.tpl_manager.render('macro.html', macro=entry, **common_kwargs)
- elif entry.kind == 'global_typedef':
- html = self.tpl_manager.render('typedef.html', typedef=entry, **common_kwargs)
- elif entry.kind == 'global_variable':
- html = self.tpl_manager.render('variable.html', variable=entry, **common_kwargs)
- elif entry.kind == 'variable':
- html = self.tpl_manager.render('variable.html', variable=entry, **common_kwargs)
- else:
- assert False, entry.kind
- with open(self.path_manager.getEntryPath(entry), 'w') as f:
- f.write(html)
-
- def generateDemoPages(self, doc):
- """Copy over all demo pages."""
- file_names = set(doc.doc_processor.include_mgr.file_cache.keys() +
- [x[0] for x in doc.doc_processor.include_mgr.snippet_cache.keys()])
- for path in sorted(file_names):
- self.generateDemoPage(path)
-
- def generateDemoPage(self, path):
- """Generate a demo page."""
- dirname = os.path.join(self.out_dirs['root'], os.path.dirname(path))
- if not os.path.exists(dirname):
- os.makedirs(dirname)
- in_path = self.doc.doc_processor.include_mgr.resolvePath(path)
- to_path = os.path.join(self.out_dirs['root'], path)
- #print >>sys.stderr, in_path, '=>', to_path
- shutil.copyfile(in_path, to_path)
-
- def generateSearchIndex(self, doc):
- """Generate the search index."""
- js = ['window.searchData = [']
- js_module = ['window.searchDataModule = [']
- for entry in doc.top_level_entries.itervalues():
- akas, subentries, headerfile = '', '', ''
- if hasattr(entry, 'akas'):
- akas = ','.join(entry.akas)
- if hasattr(entry, 'subentries'):
- subentries = []
- for t in entry.subentries.values():
- for s in t:
- sID = s.title
- title = proc_doc.splitSecondLevelEntry(s.title)[1]
- subentries.append({'type': s.kind, 'name': s.name, 'title': title, 'id': sID})
- if hasattr(entry, 'headerfiles') and len(entry.headerfiles) > 0 :
- headerfile = entry.headerfiles[0]
- headerfile = headerfile[headerfile.find("/")+1:-3]
-
- if entry in self.doc.doc_processor.topLevelEntry_filenames:
- delimiter = "/include/seqan/"
- srcfile = self.doc.doc_processor.topLevelEntry_filenames[entry]
- srcfile = srcfile[srcfile.find(delimiter)+len(delimiter):]
- else :
- srcfile = ""
-
- js.append(' {title:%s,name:%s,text:%s,akas:%s,subentries:%s,loc:%s,langEntity:%s},' %
- (repr(entry.title), repr(entry.name), repr(""), repr(akas), repr(subentries),
- repr(self.path_converter.convert(entry.name)[0]), repr(entry.kind)))
- js_module.append(' {definedIn:%s,srcfile:%s},' % (repr(headerfile), repr(srcfile)))
- js.append('];')
- js_module.append('];')
-
- with open(os.path.join(self.out_dirs['js'], 'search.data.js'), 'wb') as f:
- f.write('\n'.join(js))
- with open(os.path.join(self.out_dirs['js'], 'search.data.module.js'), 'wb') as f:
- f.write('\n'.join(js_module))
-
- def generateLinkData(self, doc):
- """Generate the Data for top level entry links."""
- js = ['window.lookup = {']
- for entry in doc.top_level_entries.itervalues():
- js.append(' \'%(name)s\': \'%(kind)s_%(name)s\',' % { 'name': entry.name,
- 'kind': entry.kind })
- js.append('};')
- with open(os.path.join(self.out_dirs['js'], 'link.data.js'), 'wb') as f:
- f.write('\n'.join(js))
-
- def generateLanguageEntities(self):
- """Generate language entities JavaScript file."""
- js = self.tpl_manager.render('js/lang_entities.js', config=self.config,
- development=self.args.development)
- with open(os.path.join(self.out_dirs['js'], 'lang_entities.js'), 'wb') as f:
- f.write(js)
-
- def log(self, s, *args):
- print >>sys.stderr, s % args
-
-
diff --git a/util/py_lib/seqan/fixgcov/__init__.py b/util/py_lib/seqan/fixgcov/__init__.py
deleted file mode 100755
index c9f5931..0000000
--- a/util/py_lib/seqan/fixgcov/__init__.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python2
-
-import sys
-
-import app
-
-main = app.main
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/util/py_lib/seqan/fixgcov/app.py b/util/py_lib/seqan/fixgcov/app.py
deleted file mode 100755
index 22a548c..0000000
--- a/util/py_lib/seqan/fixgcov/app.py
+++ /dev/null
@@ -1,291 +0,0 @@
-#!/usr/bin/env python2
-"""Small libclang based app to fix gcov output.
-
-Fix gcov output with templates. This is done by first parsing in the .cpp files
-(compilation units) with libclang. The AST is then parsed and all lines within
-composite statements ({ stmt; stmt; ... }) are memoized as 'interesting' lines.
-The resulting interesting lines are serialized to a location file with pickle.
-Finally, gcov output files are read and updated. If a line is interesting but
-not marked as covered or uncovered (marker '-'), it is marked as uncovered
-(marker '#####').
-
-USAGE: fixgcov.py -i $include_dir -g $gcov_file
-USAGE: fixgcov.py -i $include_dir -s $source_file
-
-Copyright: (c) 2010, Knut Reinert, FU Berlin
-License: 3-clause BSD (see LICENSE)
-"""
-
-from __future__ import with_statement
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-import optparse
-import os
-import pickle
-import sys
-
-import clang.cindex as ci
-
-
-def _hasFileLocation(node):
- """Return True if node has a file lcoation."""
- if not hasattr(node, 'location'):
- return False
- if not hasattr(node.location, 'file'):
- return False
- if not node.location.file:
- return False
- if not hasattr(node.location.file, 'name'):
- return False
- if not node.location.file.name:
- return False
- return True
-
-
-class CollectCompoundStatementNodeVisitor(object):
- """Visitor for AST nodes that collects compound statements."""
-
- def __init__(self, options):
- self.options = options
- self.stack = []
- self.ranges = []
-
- def enterNode(self, node):
- """Called when a node is entered ("pre-order" traversal)."""
- self.stack.append(node)
- ## print ' ' * len(self.stack), node.kind,
- num_children = len([x for x in node.get_children()])
- ## if _hasFileLocation(node):
- ## print node.location.file.name, '%d-%d' % (node.extent.start.line, node.extent.end.line)
- ## else:
- ## print
- # Only add range for statements that are no compound statements. Add
- # for empty compounds.
- if not node.kind.is_statement():
- ## print 'skipping, no statement'
- return
- if node.kind == ci.CursorKind.COMPOUND_STMT and num_children > 0:
- ## print 'skipping, non-empty compound statement', num_children
- return
- if node.kind == ci.CursorKind.DECL_STMT:
- return # Skip declarations.
- # Only add if has file location.
- if _hasFileLocation(node):
- self.ranges.append((node.location.file.name, node.extent.start.line, node.extent.end.line))
-
- def exitNode(self, node):
- """Called when a node is left ("post-order" traversa)."""
- self.stack.pop()
-
-
-class VisitAllowedRule(object):
- """Decides whether a AST node and its children is visited."""
-
- def __init__(self, options):
- self.options = options
- self.include_dirs = [os.path.abspath(x) for x in options.include_dirs]
- self.cache = {}
-
- def visitAllowed(self, node):
- """Return True if visiting is allowed."""
- # TODO(holtgrew): For this application, stopping at compound statements
- # would be enough. Visit if translation unit.
- if node.kind == ci.CursorKind.TRANSLATION_UNIT:
- return True
- # Don't visit if it has no location (built-in).
- if not _hasFileLocation(node):
- return False
- # Try to hit cache.
- if self.cache.has_key(node.location.file.name):
- return self.cache[node.location.file.name]
- # Check whether node's location is below the include directories. It is
- # only visited if this is the case.
- filename = os.path.abspath(node.location.file.name)
- result = False
- for x in self.include_dirs:
- if filename.startswith(x):
- # print filename, x
- result = True
- break
- self.cache[node.location.file.name] = result # Save in cache.
- return result
-
-
-class AstTraverser(object):
- """Traverses AST tree and applies given visitor object."""
-
- def __init__(self, node_visitor, options):
- self.node_visitor = node_visitor
- self.options = options
- self.visit_allowed_rule = VisitAllowedRule(options)
-
- def _recurse(self, node):
- """Recursion helper."""
- if not self.visit_allowed_rule.visitAllowed(node):
- return False # We did not visit this node.
- self.node_visitor.enterNode(node)
- for c in node.get_children():
- self._recurse(c)
- self.node_visitor.exitNode(node)
- return True
-
- def run(self, filename):
- """Main entry point."""
- index = ci.Index.create()
- args = ['-I%s' % s for s in self.options.include_dirs]
- # print args
- tu = index.parse(filename, args=args)
- if self.options.verbosity >= 1:
- print 'Translation unit: %s.' % tu.spelling
- return self._recurse(tu.cursor)
-
- @classmethod
- def visitFile(klass, filename, node_visitor, options):
- """Don't instantiate AstTraverser yourself, use this function."""
- traverser = AstTraverser(node_visitor, options)
- res = traverser.run(filename)
- return res == True
-
-
-def main():
- """Main entry point."""
- # ========================================================================
- # Parse command line arguments.
- # ========================================================================
- parser = optparse.OptionParser("USAGE: %prog [options] -s file.cpp")
- parser.add_option('-I', '--include-dir', dest='include_dirs', default=[],
- type='string', help='Specify include directories',
- action='append')
- parser.add_option('-s', '--src-file', dest='source_files', default=[],
- type='string', help='Specify compilation units.',
- action='append')
- parser.add_option('--src-file-files', dest='source_files_files', default=[],
- type='string', help='Specify file with paths to compilation units.',
- action='append')
- parser.add_option('-l', '--location-file', dest='location_file',
- default='locations.dat', type='string',
- help='Path to file with compound statement locations.')
- parser.add_option('-g', '--gcov-file', dest='gcov_files', default=[],
- type='string', help='Specify gcov files to process.',
- action='append')
- parser.add_option('--gcov-files', dest='gcov_files_files', default=[],
- type='string', help='Specify gcov files to process.',
- action='append')
- parser.add_option('-q', '--quiet', dest='verbosity', default=1,
- action='store_const', const=0, help='Fewer message.')
- parser.add_option('-v', '--verbose', dest='verbosity', default=1,
- action='store_const', const=2, help='More messages.')
- options, args = parser.parse_args()
- if len(args) != 0:
- parser.error('Incorrect number of arguments!')
- return 1
-
- options.include_dirs += [os.path.abspath(os.path.dirname(s)) for s in options.source_files]
-
- # ========================================================================
- # Read in files with paths from arguments.
- # ========================================================================
-
- for path in options.source_files_files:
- with open(path, 'rb') as f:
- options.source_files += [x.strip() for x in f.readlines()]
- for path in options.gcov_files_files:
- with open(path, 'rb') as f:
- options.gcov_files += [x.strip() for x in f.readlines()]
-
- if not options.source_files and not options.gcov_files:
- parser.error('Neither source nor gcov file given!')
- return 1
-
- # ========================================================================
- # Collect interesting lines if any source files given.
- # ========================================================================
-
- if options.source_files:
- # If any source file is given, all given source files are parsed and all
- # lines with compound statements in all included files are written to
- # the location file.
- if options.verbosity >= 1:
- print >>sys.stderr, 'Building Locations'
- if options.verbosity >= 2:
- print >>sys.stderr, '=================='
-
- # Fire off AST traversal.
- if options.verbosity >= 1:
- print >>sys.stderr, 'AST Traversal'
- node_visitor = CollectCompoundStatementNodeVisitor(options)
- for src in options.source_files:
- if options.verbosity >= 2:
- print >>sys.stderr, ' Compilation Unit', src
- AstTraverser.visitFile(src, node_visitor, options)
-
- # Convert locations into points.
- locations = {}
- for filename, start, stop in node_visitor.ranges:
- filename = os.path.abspath(filename)
- for i in range(start, stop + 1):
- locations.setdefault(filename, set()).add(i)
-
- # Write out the source locations.
- if options.verbosity >= 1:
- print >>sys.stderr, 'Writing out locations to', options.location_file
- with open(options.location_file, 'wb') as f:
- pickle.dump(locations, f)
-
- # ========================================================================
- # Process GCOV files if any are given.
- # ========================================================================
-
- if options.gcov_files:
- # If no source files and gcov files are given then
- if options.verbosity >= 1:
- print >>sys.stderr, 'Updating gcov Results'
- if options.verbosity >= 2:
- print >>sys.stderr, '====================='
-
- if not options.source_files:
- if options.verbosity >= 1:
- print >>sys.stderr, 'Loading locations from', options.location_file
- with open(options.location_file, 'rb') as f:
- locations = pickle.load(f)
-
- for filename in options.gcov_files:
- filename = os.path.abspath(filename)
- if options.verbosity >= 2:
- print >>sys.stderr, 'Processing', filename
- with open(filename, 'rb') as f:
- lines = f.readlines()
- pos0 = lines[0].find(':')
- pos1 = lines[0].find(':', pos0 + 1)
- source = None
- result = []
- skip = False
- for i, line in enumerate(lines):
- coverage = line[:pos0]
- lineno = int(line[pos0 + 1:pos1].strip())
- slineno = line[pos0 + 1:pos1]
- txt = line[pos1 + 1:]
- if txt.startswith('Source:'):
- source = os.path.abspath(txt[len('Source:'):].strip())
- if not locations.has_key(source):
- if options.verbosity >= 2:
- print >>sys.stderr, ' Skipping.'
- skip = True
- break
- if not source or lineno == 0:
- result.append(line)
- continue # Proceed only if in file.
- if lineno in locations[source] and coverage.strip() == '-':
- coverage = ('%%%ds' % pos0) % '#####'
- result.append(':'.join([coverage, slineno, txt]))
- # Write back file if not skipped.
- if skip:
- continue
- with open (filename, 'wb') as f:
- f.write(''.join(result))
- #print ''.join(result)
-
-# Entry point if called as program.
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/util/py_lib/seqan/paths.py b/util/py_lib/seqan/paths.py
deleted file mode 100755
index 0bce2ef..0000000
--- a/util/py_lib/seqan/paths.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/env python2
-"""SeqAn path utilities.
-
-Code to get paths within the SeqAn repository; Useful for setting defaults in
-options.
-
-When called as a program, the paths are printed.
-
-The main assumption is that this module lies in '/util/py_lib/seqan.'
-
-Copyright: (c) 2010, Knut Reinert, FU Berlin
-License: 3-clause BSD (see LICENSE)
-"""
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-import os
-import os.path
-import sys
-
-def repositoryRoot():
- """Return path to directory root."""
- abs_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../..'))
- return os.path.relpath(abs_path, os.getcwd())
-
-def pathToSkeletons():
- """Return path to '${REPOSITORY}/util/skel'."""
- return os.path.join(repositoryRoot(), 'util/skel')
-
-def pathToTemplate(template, filename):
- """Return path to file with given name in given template."""
- return os.path.join(pathToSkeletons(), template, filename)
-
-def pathToApp(location, app):
- """Return path to the app in the given location/repository."""
- return os.path.join(repositoryRoot(), location, 'apps', app)
-
-def pathToInclude(location):
- """Return path to the include dir in the given location/repository."""
- return os.path.join(repositoryRoot(), location, 'include')
-
-def pathToDemo(location, demo):
- """Return path to the demo file in the given location/repository."""
- return os.path.join(repositoryRoot(), location, 'demos', '%s.cpp' % demo)
-
-def pathToTest(location, test):
- """Return path to the test in the given location/repository."""
- return os.path.join(repositoryRoot(), location, 'tests', test)
-
-def pathToRepository(location):
- """Return path to the given location/repository."""
- return os.path.join(repositoryRoot(), location)
-
-def pathToHeader(location, filename):
- """Return path to the given header - just concatenate."""
- return os.path.join(repositoryRoot(), location, filename)
-
-def main(args):
- print 'SeqAn paths'
- print
- print 'repositoryRoot() ==', repositoryRoot()
- print 'pathToSkeletons() ==', pathToSkeletons()
-
-if __name__ == '__main__':
- sys.exit(main(sys.argv))
diff --git a/util/py_lib/seqan/pyclangcheck/__init__.py b/util/py_lib/seqan/pyclangcheck/__init__.py
deleted file mode 100755
index c9f5931..0000000
--- a/util/py_lib/seqan/pyclangcheck/__init__.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python2
-
-import sys
-
-import app
-
-main = app.main
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/util/py_lib/seqan/pyclangcheck/app.py b/util/py_lib/seqan/pyclangcheck/app.py
deleted file mode 100755
index aa6d0cf..0000000
--- a/util/py_lib/seqan/pyclangcheck/app.py
+++ /dev/null
@@ -1,322 +0,0 @@
-#!/usr/bin/env python2
-"""pyclangcheck driver code
-
-This code is the driver code for the pyclangcheck tool.
-
-Copyright: (c) 2010, Knut Reinert, FU Berlin
-License: 3-clause BSD (see LICENSE)
-"""
-
-from __future__ import with_statement
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-import datetime
-import optparse
-import os
-import os.path
-import sys
-
-import clang.cindex as ci
-
-import simple_checks
-import violations
-import rules
-
-def _hasFileLocation(node):
- """Return True if node has a file lcoation."""
- if hasattr(node, '_has_file_location'):
- return node._has_file_location
- if not hasattr(node, 'location'):
- node._has_file_location = False
- return False
- if not hasattr(node.location, 'file'):
- node._has_file_location = False
- return False
- if not node.location.file:
- node._has_file_location = False
- return False
- if not hasattr(node.location.file, 'name'):
- node._has_file_location = False
- return False
- if not node.location.file.name:
- node._has_file_location = False
- return False
- node._has_file_location = True
- return True
-
-
-class FileCache(object):
- def __init__(self):
- self.cache = {}
-
- def get(self, path):
- if self.cache.has_key(path):
- return self.cache[path]
- with open(path, 'rb') as f:
- fcontents = f.readlines()
- self.cache[path] = fcontents
- return self.cache[path]
-
-
-class CollectViolationsVisitor(object):
- """Visitor for AST nodes that collects rule violations."""
-
- def __init__(self, options, rules):
- self.options = options
- self.rules = rules
- for rule in self.rules:
- rule.visitor = self
- self.stack = []
- self.violations = {}
- self.file_cache = FileCache()
- self.class_stack = []
- self.seen_files = set()
- self.blocked_files = set()
-
- def seenToBlocked(self):
- """Move seen files to blocked files."""
- self.blocked_files |= self.seen_files
-
- def enterNode(self, node):
- """Called when a node is entered ("pre-order" traversal)."""
- self.stack.append(node)
- ck = ci.CursorKind
- if node.kind in [ck.CLASS_TEMPLATE, ck.CLASS_TEMPLATE_PARTIAL_SPECIALIZATION, ck.CLASS_DECL]:
- ## print 'PUSH CLASS', node.spelling
- self.class_stack.append(node)
-
- # Mark file as seen for nodes that are directly below the compilation unit.
- if len(self.stack) <= 2 and _hasFileLocation(node):
- self.seen_files.add(node.location.file.name)
-
- if self.options.verbosity >= 2:
- if node.extent.start.file:
- filename = node.extent.start.file.name
- lines = self.file_cache.get(filename)
- start = "%s:%d:%d" % (os.path.basename(filename), node.extent.start.line-1, node.extent.start.column-1)
- end = "%s:%d:%d" % ('#', node.extent.end.line-1, node.extent.end.column-1)
- lines = [x for x in lines[node.extent.start.line-1:node.extent.end.line]]
- if len(lines) == 1:
- lines[0] = lines[0][node.extent.start.column - 1:node.extent.end.column-1]
- else:
- lines[0] = lines[0][node.extent.start.column - 1:]
- lines[-1] = lines[-1][:node.extent.end.column-1]
- if len(lines) > 1:
- txt = '<multiline>'
- else:
- txt = ''.join(lines).replace('\n', '\\n')
- print ' ' * len(self.stack), 'Entering', node.kind, node._kind_id, node.spelling, 'txt="%s"' % txt, "%s-%s" % (start, end)
- violations = []
- for rule in self.rules:
- if rule.allowVisit(node):
- #print ' ', ' ' * len(self.stack), 'Checking rule', rule.rule_id
- vs = rule.check(node)
- ## if self.options.verbosity >= 2:
- ## for v in vs:
- ## print 'VIOLATION', v
- violations += vs
- for v in violations:
- ## if self.options.verbosity >= 2:
- ## print v
- self.violations[v.key()] = v
-
- def exitNode(self, node):
- """Called when a node is left ("post-order" traversa)."""
- self.stack.pop()
- if self.class_stack and self.class_stack[-1] is node:
- ## print 'POP CLASS', node.spelling
- self.class_stack.pop()
-
- def getCurrentClassName(self):
- """Returns name of current class."""
- if not self.class_stack:
- ## print 'CURRENT CLASS', None
- return None
- ## print 'CURRENT CLASS', self.class_stack[-1].spelling
- return self.class_stack[-1].spelling
-
-
-class VisitAllowedRule(object):
- """Decides whether a AST node and its children is visited."""
-
- def __init__(self, options, blocked_files):
- self.options = options
- self.include_dirs = [os.path.abspath(x) for x in options.include_dirs]
- self.cache = {}
- self.blocked_files = blocked_files
-
- def visitAllowed(self, node):
- """Return True if visiting is allowed."""
- # Visit if translation unit.
- if node.kind == ci.CursorKind.TRANSLATION_UNIT:
- return True
- # Don't visit if it has no location (built-in).
- if not _hasFileLocation(node):
- return False
- # Try to hit cache.
- if self.cache.has_key(node.location.file.name):
- return self.cache[node.location.file.name]
- # Check whether the file is blocked.
- if node.location.file.name in self.blocked_files:
- # print 'Blocked', node.location.file.name
- self.cache[node.location.file.name] = False
- return False
- # Check whether node's location is below the include directories. It is
- # only visited if this is the case.
- filename = os.path.abspath(node.location.file.name)
- result = False
- for x in self.include_dirs:
- if filename.startswith(x):
- # print filename, x
- result = True
- break
- self.cache[node.location.file.name] = result # Save in cache.
- return result
-
-
-class AstTraverser(object):
- """Traverses AST tree and applies given visitor object."""
-
- def __init__(self, node_visitor, options):
- self.node_visitor = node_visitor
- self.options = options
- self.visit_allowed_rule = VisitAllowedRule(options, node_visitor.blocked_files)
-
- def _recurse(self, node):
- """Recursion helper."""
- if not self.visit_allowed_rule.visitAllowed(node):
- return False # We did not visit this node.
- self.node_visitor.enterNode(node)
- for c in node.get_children():
- self._recurse(c)
- self.node_visitor.exitNode(node)
- return True
-
- def run(self, filename):
- """Main entry point."""
- index = ci.Index.create()
- args = ['-I%s' % s for s in self.options.include_dirs]
- # print args
- tu = index.parse(filename, args=args)
- if self.options.verbosity >= 1:
- print 'Translation unit: %s.' % tu.spelling
- return self._recurse(tu.cursor)
-
- @classmethod
- def visitFile(klass, filename, node_visitor, options):
- """Don't instantiate AstTraverser yourself, use this function."""
- if options.verbosity >= 1:
- print >>sys.stderr, 'Checking', filename
- traverser = AstTraverser(node_visitor, options)
- res = traverser.run(filename)
- return res != True
-
-
-def main():
- # ========================================================================
- # Parse command line arguments.
- # ========================================================================
- parser = optparse.OptionParser("USAGE: %prog [options] file.cpp")
- parser.add_option('-s', '--source-file', dest='source_files', default=[],
- type='string', help='Specify source (.cpp) files.',
- action='append')
- parser.add_option('-S', '--source-file-file', dest='source_file_files', default=[],
- type='string', help='File with path to source files.',
- action='append')
- parser.add_option('-i', '--include-dir', dest='include_dirs', default=[],
- type='string', help='Specify include directories',
- action='append')
- parser.add_option('-e', '--exclude-dir', dest='exclude_dirs', default=[],
- type='string', help='Violations in these directories are not shown.',
- action='append')
- parser.add_option('-q', '--quiet', dest='verbosity', default=1,
- action='store_const', const=0, help='Fewer message.')
- parser.add_option('-v', '--verbose', dest='verbosity', default=1,
- action='store_const', const=2, help='More messages.')
- parser.add_option('--ignore-nolint', dest='ignore_nolint', default=False,
- action='store_const', const=True, help='Ignore // nolint statements.')
- parser.add_option('--dont-show-source', dest='show_source', default=True,
- action='store_const', const=False, help='Suppress source line display')
- options, args = parser.parse_args()
-
- if len(args) != 0:
- parser.error('Incorrect number of arguments!')
- return 1
-
- # Load source files given in file of paths.
- for filename in options.source_file_files:
- with open(filename, 'rb') as f:
- options.source_files += [x.strip() for x in f.readlines()]
-
- # ========================================================================
- # Setup traversal.
- # ========================================================================
-
- # Recursion Rule: Only check symbols within the include directories.
- recurse_rules = []
- recurse_rules.append(rules.InIncludeDirsRule(options.include_dirs, options.exclude_dirs, options.source_files))
- # Define symbol naming rules.
- R = rules.GenericSymbolNameRule
- r = rules
- ck = ci.CursorKind
- check_rules = [
- R(ck.STRUCT_DECL , r.RE_STRUCT , r.RULE_NAMING_STRUCT ),
- R(ck.UNION_DECL , r.RE_TYPE , r.RULE_NAMING_UNION ),
- R(ck.CLASS_DECL , r.RE_TYPE , r.RULE_NAMING_CLASS ),
- R(ck.ENUM_DECL , r.RE_TYPE , r.RULE_NAMING_ENUM ),
- R(ck.FIELD_DECL , r.RE_VARIABLE , r.RULE_NAMING_FIELD ),
- R(ck.ENUM_CONSTANT_DECL , r.RE_CONSTANT , r.RULE_NAMING_ENUM_CONSTANT ),
- R(ck.FUNCTION_DECL , r.RE_FUNCTION , r.RULE_NAMING_FUNCTION ),
- R(ck.PARM_DECL , r.RE_VARIABLE , r.RULE_NAMING_PARAMETER ),
- R(ck.TYPEDEF_DECL , r.RE_TYPE , r.RULE_NAMING_TYPEDEF ),
- R(ck.CXX_METHOD , r.RE_FUNCTION , r.RULE_NAMING_CXX_METHOD ),
- R(ck.TEMPLATE_TYPE_PARAMETER , r.RE_TYPE , r.RULE_NAMING_TPL_TYPE_PARAMETER ),
- R(ck.TEMPLATE_NON_TYPE_PARAMETER , r.RE_CONSTANT , r.RULE_NAMING_TPL_NON_TYPE_PARAMETER),
- R(ck.TEMPLATE_TEMPLATE_PARAMTER , r.RE_TYPE , r.RULE_NAMING_TPL_TPL_PARAMETER ),
- #R(ck.FUNCTION_TEMPLATE , r.RE_FUNCTION , r.RULE_NAMING_FUNCTION_TPL ),
- R(ck.CLASS_TEMPLATE , r.RE_TYPE_TEMPLATE, r.RULE_NAMING_CLASS_TPL ),
- R(ck.CLASS_TEMPLATE_PARTIAL_SPECIALIZATION, r.RE_TYPE_TEMPLATE, r.RULE_NAMING_CLASS_TPL_SPEC ),
- rules.FunctionTemplateRule(),
- rules.VariableNameRule(),
- ]
-
- # ========================================================================
- # Perform traversal.
- # ========================================================================
-
- node_visitor = CollectViolationsVisitor(options, check_rules)
- for filename in options.source_files:
- start = datetime.datetime.now()
- res = AstTraverser.visitFile(filename, node_visitor, options)
- node_visitor.seenToBlocked()
- elapsed = datetime.datetime.now() - start
- print >>sys.stderr, ' took', elapsed.seconds, 's'
- if res:
- break
-
- # ========================================================================
- # Dumber checks (e.g. whitespace at end of file).
- # ========================================================================
-
- checkers = [simple_checks.WhitespaceChecker(),
- simple_checks.CommentChecker()]
- vs = {}
- for filename in node_visitor.seen_files:
- for checker in checkers:
- vs.update(checker.check(filename))
-
- # ========================================================================
- # Print violations.
- # ========================================================================
-
- print 'VIOLATIONS'
- vs.update(node_visitor.violations)
- printer = violations.ViolationPrinter(options.ignore_nolint,
- options.show_source)
- printer.show(vs)
- return len(vs) > 0
-
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/util/py_lib/seqan/pyclangcheck/rules.py b/util/py_lib/seqan/pyclangcheck/rules.py
deleted file mode 100755
index 15c8d33..0000000
--- a/util/py_lib/seqan/pyclangcheck/rules.py
+++ /dev/null
@@ -1,201 +0,0 @@
-#!/usr/bin/env python2
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-import os.path
-import re
-
-import clang.cindex as ci
-
-import app
-import violations
-
-RULE_NAMING_CONSTANT = 'naming.constant'
-RULE_NAMING_STRUCT = 'naming.struct'
-RULE_NAMING_UNION = 'naming.union'
-RULE_NAMING_CLASS = 'naming.class'
-RULE_NAMING_ENUM = 'naming.enum'
-RULE_NAMING_FIELD = 'naming.field'
-RULE_NAMING_ENUM_CONSTANT = 'naming.enum_constant'
-RULE_NAMING_VARIABLE = 'naming.variable'
-RULE_NAMING_FUNCTION = 'naming.function'
-RULE_NAMING_PARAMETER = 'naming.parameter'
-RULE_NAMING_VARIABLE = 'naming.variable'
-RULE_NAMING_CXX_METHOD = 'naming.method'
-RULE_NAMING_TYPEDEF = 'naming.typedef'
-RULE_NAMING_TPL_NON_TYPE_PARAMETER = 'naming.tpl_nontype_param'
-RULE_NAMING_TPL_TYPE_PARAMETER = 'naming.tpl_type_param'
-RULE_NAMING_TPL_TPL_PARAMETER = 'naming.tpl_tpl_param'
-RULE_NAMING_FUNCTION_TPL = 'naming.function_tpl'
-RULE_NAMING_CLASS_TPL = 'naming.class_tpl'
-RULE_NAMING_CLASS_TPL_SPEC = 'naming.class_tpl_spec'
-
-RE_CONSTANT = r'^[A-Z]([_A-Z0-9])*_*$'
-RE_VARIABLE = r'^_?[a-z]([_a-zA-Z0-9])*_*$'
-RE_FUNCTION = r'operator.*|^_?[a-z]([_a-zA-Z0-9])*\(.*\)_*$'
-RE_TYPE = r'^[A-Z]([a-zA-Z0-9])*_*$'
-RE_TYPE_TEMPLATE = r'^[A-Z]([a-zA-Z0-9])*_*<.*>$'
-RE_STRUCT = r'^[A-Z]([a-zA-Z0-9])*_*(<.*>)?$'
-
-RULE_TEXTS = {
- RULE_NAMING_CONSTANT: 'Constant names must be all upper-case, separated by underscores.',
- RULE_NAMING_STRUCT: 'Struct names must be all camel case, starting with upper case.',
- RULE_NAMING_UNION: 'Union names must be all camel case, starting with upper case.',
- RULE_NAMING_CLASS: 'Class names must be all camel case, starting with upper case.',
- RULE_NAMING_ENUM: 'Enum names must be all camel case, starting with upper case.',
- RULE_NAMING_FIELD: 'Field names must be camel case case, starting with lower case.',
- RULE_NAMING_ENUM_CONSTANT: 'Enum constant names must be all upper-case, separated by underscores.',
- RULE_NAMING_VARIABLE: 'Variable names must be camel case case, starting with lower case.',
- RULE_NAMING_FUNCTION: 'Function names must be camel case case, starting with lower case.',
- RULE_NAMING_PARAMETER: 'Parameter names must be camel case case, starting with lower case.',
- RULE_NAMING_CXX_METHOD: 'Method names must be camel case case, starting with lower case.',
- RULE_NAMING_TYPEDEF: 'Typedef names must be all camel case, starting with upper case.',
- RULE_NAMING_TPL_NON_TYPE_PARAMETER: 'Template non-type parameters must be all upper-case, separated by underscores.',
- RULE_NAMING_TPL_TYPE_PARAMETER: 'Template type parameter names must be all camel case, starting with upper case.',
- RULE_NAMING_TPL_TPL_PARAMETER: 'Template template parameter names must be all camel case, starting with upper case.',
- RULE_NAMING_FUNCTION_TPL: 'Function template names must be camel case case, starting with lower case.',
- RULE_NAMING_CLASS_TPL: 'Class template names must be all camel case, starting with upper case.',
- RULE_NAMING_CLASS_TPL_SPEC: 'Partial specialization names must be all camel case, starting with upper case.',
-}
-
-
-class GenericSymbolNameRule(object):
- def __init__(self, kind, regular_ex, rule_name):
- self.kind = kind
- self.regular_ex = regular_ex
- self.rule_name = rule_name
- self.visitor = None
-
- def allowVisit(self, node):
- if not app._hasFileLocation(node):
- #print 'no location'
- return False
- if not node.displayname:
- #print 'no displayname'
- return False # Ignore empty symbols.
- # print 'allow visit template type?', displayname, node.kind
- if node.kind == self.kind:
- #print 'different kind'
- return True
- return False
-
- def check(self, node):
- displayname = node.displayname
- #print 'checking', displayname
- #import pdb; pdb.set_trace()
- if not re.match(self.regular_ex, displayname):
- v = violations.RuleViolation(
- self.rule_name, displayname, node.location.file.name,
- node.location.line, node.location.column)
- return [v]
- return []
-
-
-class VariableNameRule(object):
- """Checks variable names (in variable declarations).
-
- The name must either be camel case (starting with lower case character) or
- all upper case.
- """
-
- def __init__(self):
- self.visitor = None
-
- def allowVisit(self, node):
- if not app._hasFileLocation(node):
- return False
- displayname = node.displayname
- if not displayname:
- return False # Ignore empty symbols.
- if node.kind == ci.CursorKind.VAR_DECL:
- return True
- return False
-
- def check(self, node):
- displayname = node.displayname
- if not re.match(RE_VARIABLE, displayname) and not re.match(RE_CONSTANT, displayname):
- # TODO(holtgrew): Only allow RE_CONSTANT if 'const' in declaration type.
- v = violations.RuleViolation(
- RULE_NAMING_VARIABLE, displayname, node.location.file.name,
- node.location.line, node.location.column)
- return [v]
- return []
-
-
-class FunctionTemplateRule(object):
- """Checks function templates.
-
- Function template have to follow the function naming scheme. However,
- libclang also exposes constructors with kind function template. The visitor
- keeps a stack of current classes so we look whether the current class or
- class template has the same name as the function template and allow this
- besides the function naming scheme.
- """
-
- def __init__(self):
- self.visitor = None
-
- def allowVisit(self, node):
- if not app._hasFileLocation(node):
- return False
- displayname = node.displayname
- if not displayname:
- return False # Ignore empty symbols.
- if node.kind == ci.CursorKind.FUNCTION_TEMPLATE:
- return True
- return False
-
- def check(self, node):
- displayname = node.displayname
- if not re.match(RE_FUNCTION, displayname):
- up_to_bracket = displayname[:displayname.find('<')]
- ## print 'CHECK', self.visitor.getCurrentClassName(), '!=?', up_to_bracket
- if self.visitor.getCurrentClassName() != up_to_bracket:
- v = violations.RuleViolation(
- RULE_NAMING_FUNCTION_TPL, displayname, node.location.file.name,
- node.location.line, node.location.column)
- return [v]
- return []
-
-
-class InIncludeDirsRule(object):
- """Rule to block visiting and recursion outside include dirs."""
-
- def __init__(self, include_dirs, exclude_dirs, source_files):
- self.include_dirs = [os.path.abspath(x) for x in include_dirs]
- self.source_files = [os.path.abspath(x) for x in source_files]
- self.exclude_dirs = [os.path.abspath(x) for x in exclude_dirs]
- self.cache = {}
-
- def allowVisit(self, node):
- """Return True if visiting is allowed."""
- if node.kind == ci.CursorKind.TRANSLATION_UNIT:
- return True
- if not app._hasFileLocation(node):
- return False
- if self.cache.has_key(node.location.file.name):
- return self.cache[node.location.file.name]
- # Check whether node's location is below the include directories or one
- # of the source files.
- filename = os.path.abspath(node.location.file.name)
- result = False
- for x in self.include_dirs:
- if filename.startswith(x):
- result = True
- break
- if not result:
- for x in self.source_files:
- if filename == x:
- result = True
- break
- if result:
- for x in self.exclude_dirs:
- if filename.startswith(x):
- result = False
- break
- self.cache[node.location.file.name] = result
- return result
-
- def allowRecurse(self, node):
- """Return True if we want to recurse below node."""
- return self.allowVisit(node)
diff --git a/util/py_lib/seqan/pyclangcheck/simple_checks.py b/util/py_lib/seqan/pyclangcheck/simple_checks.py
deleted file mode 100755
index b39a4aa..0000000
--- a/util/py_lib/seqan/pyclangcheck/simple_checks.py
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/env python2
-"""Simple source code checks, e.g. trailing whitespace."""
-
-from __future__ import with_statement
-
-import bisect
-import re
-import sys
-
-import violations
-
-RULE_TRAILING_WHITESPACE = 'whitespace.trailing'
-RULE_TEXT_TRAILING_WHITESPACE = 'Trailing whitespace is not allowed.'
-
-RULE_TODO_ONE_SPACE = 'whitespace.todo'
-RULE_TEXT_TODO_ONE_SPACE= 'There should be exactly one space before TODO.'
-
-RULE_TODO_USERNAME = 'readability.todo'
-RULE_TEXT_TODO_USERNAME = 'TODO comments should look like this: "// TODO(username): Text".'
-
-RULE_TODO_SPACE_AFTER = 'whitespace.todo'
-RULE_TEXT_TODO_SPACE_AFTER = '"TODO (username):" should be followed by a space.'
-
-RE_TODO = r'^//(\s*)TODO(\(.+?\))?:?(\s|$)?'
-
-class WhitespaceChecker(object):
- """Performs simple white space checks."""
-
- # TODO(holtgrew): Do not allow tabs.
-
- def check(self, filename):
- vs = []
- with open(filename, 'rb') as f:
- line_no = 0
- for line in f:
- line_no += 1
- if line.rstrip() == line.rstrip('\r\n'):
- continue
- v = violations.SimpleRuleViolation(
- RULE_TRAILING_WHITESPACE, filename, line_no,
- len(line.rstrip()) + 1, RULE_TEXT_TRAILING_WHITESPACE)
- vs.append(v)
- return dict([(v.key(), v) for v in vs])
-
-
-class SourceFile(object):
- def __init__(self, name):
- self.name = name
-
-
-class SourceLocation(object):
- def __init__(self, filename, line, column, offset):
- self.file = SourceFile(filename)
- self.line = line
- self.column = column
- self.offset = offset
-
- def __str__(self):
- return '%s:%d/%d (@%d)' % (self.file.name, self.line, self.column,
- self.offset)
-
- def __repr__(self):
- return str(self)
-
-
-def enumerateComments(filename):
- # Read file.
- with open (filename, 'rb') as f:
- lines = f.readlines()
- fcontents = ''.join(lines)
- # Build line break index.
- line_starts = [0]
- for line in lines:
- line_starts.append(line_starts[-1] + len(line))
- #print line_starts
- # Search for all comments.
- pattern = re.compile(
- r'//.*?$|/\*.*?\*/|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"',
- re.DOTALL | re.MULTILINE)
- for match in re.finditer(pattern, fcontents):
- line_start = bisect.bisect(line_starts, match.start(0))
- line_end = bisect.bisect(line_starts, match.end(0) - 1)
- column_start = match.start(0) - line_starts[line_start - 1]
- column_end = match.end(0) - line_starts[line_end - 1]
- yield (SourceLocation(filename, line_start, column_start + 1, match.start(0)),
- SourceLocation(filename, line_end, column_end + 1, match.end(0)),
- match.group(0))
-
-
-class CommentChecker(object):
- """Performs the checks on comments."""
-
- def check(self, filename):
- vs = []
- for cstart, cend, comment in enumerateComments(filename):
- if comment.startswith('//'):
- # Check TODO comments.
- match = re.match(RE_TODO, comment)
- if match:
- if len(match.group(1)) > 1:
- print comment
- v = violations.SimpleRuleViolation(
- RULE_TODO_ONE_SPACE, filename, cstart.line,
- cstart.column, RULE_TEXT_TODO_ONE_SPACE)
- vs.append(v)
- if not match.group(2):
- v = violations.SimpleRuleViolation(
- RULE_TODO_USERNAME, filename, cstart.line,
- cstart.column, RULE_TEXT_TODO_USERNAME)
- vs.append(v)
- if match.group(3) != ' ' and match.group(3) != '':
- v = violations.SimpleRuleViolation(
- RULE_TODO_SPACE_AFTER, filename, cstart.line,
- cstart.column, RULE_TEXT_TODO_SPACE_AFTER)
- vs.append(v)
- return dict([(v.key(), v) for v in vs])
-
diff --git a/util/py_lib/seqan/pyclangcheck/suppressions.py b/util/py_lib/seqan/pyclangcheck/suppressions.py
deleted file mode 100755
index 18ff536..0000000
--- a/util/py_lib/seqan/pyclangcheck/suppressions.py
+++ /dev/null
@@ -1 +0,0 @@
-#!/usr/bin/env python2
diff --git a/util/py_lib/seqan/pyclangcheck/violations.py b/util/py_lib/seqan/pyclangcheck/violations.py
deleted file mode 100755
index f91b8fb..0000000
--- a/util/py_lib/seqan/pyclangcheck/violations.py
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/usr/bin/env python2
-"""Code related to violations and suppressions."""
-
-from __future__ import with_statement
-
-import os
-import os.path
-import sys
-
-import app
-import rules
-
-
-class RuleViolation(object):
- def __init__(self, rule_id, violator, file, line, column):
- self.rule_id = rule_id
- self.violator = violator
- self.file = file
- self.line = line
- self.column = column
-
- def key(self):
- return (self.file, self.line, self.column, self.rule_id, self.violator)
-
- def __str__(self):
- msg = '[%s:%d/%d] %s "%s": %s'
- return msg % ('/'.join(self.file.split('/')[-2:]), self.line, self.column,
- self.rule_id, self.violator, rules.RULE_TEXTS[self.rule_id])
-
-
-class SimpleRuleViolation(object):
- def __init__(self, rule_id, file, line, column, msg):
- self.rule_id = rule_id
- self.file = file
- self.line = line
- self.column = column
- self.msg = msg
-
- def key(self):
- return (self.file, self.line, self.column, self.rule_id)
-
- def __str__(self):
- msg = '[%s:%d/%d] %s : %s'
- return msg % ('/'.join(self.file.split('/')[-2:]), self.line, self.column,
- self.rule_id, self.msg)
-
-
-class NolintManager(object):
- """Manage the lines ending in '//nolint'."""
-
- def __init__(self):
- self.locations = {}
-
- def hasNolint(self, filename, lineno):
- filename = os.path.abspath(filename)
- # Ensure that the nolint lines are registered in self.locations[filename].
- if not self.locations.has_key(filename):
- line_set = set()
- with open(filename, 'rb') as f:
- line_no = 0
- for line in f:
- line_no += 1
- if line.strip().endswith('// nolint'):
- ## print 'nolint', filename, line_no
- line_set.add(line_no)
- self.locations[filename] = line_set
- # Query self.locations[filename].
- return lineno in self.locations[filename]
-
-
-class ViolationPrinter(object):
- def __init__(self, ignore_nolint, show_source):
- self.nolints = NolintManager()
- self.file_cache = app.FileCache()
- self.ignore_nolint = ignore_nolint
- self.show_source = show_source
-
- def show(self, vs):
- previous = None
- for k in sorted(vs.keys()):
- violation = vs[k]
- if self.ignore_nolint or not self.nolints.hasNolint(violation.file, violation.line):
- print violation
- line = self.file_cache.get(violation.file)[violation.line - 1]
- if self.show_source:
- print line.rstrip()
- print '%s^' % (' ' * (violation.column - 1))
- print
- previous = violation
- print 'Total: %d violations' % len(vs)
-
diff --git a/util/py_lib/seqan/skel.py b/util/py_lib/seqan/skel.py
deleted file mode 100755
index d5a2197..0000000
--- a/util/py_lib/seqan/skel.py
+++ /dev/null
@@ -1,467 +0,0 @@
-#!/usr/bin/env python2
-"""SeqAn code generation from templates / skeletons.
-
-This module contains code to help the creation of modules, tests, apps etc.
-It can be called directly or imported and the main() function can be called.
-
-It will perform the following replacements:
-
- %(AUTHOR)s will be replaced by the author's name, either given on command
- line or taken from environment variable SEQAN_AUTHOR.
-
- %(NAME)s will be replaced by the name of the generated code.
- %(TITLE)s will be replaced by the name of the generated, but centered in
- 74 characters, to be used in the file header comment.
-
- %(YEAR)d will be replaced by the current year.
- %(DATE)s will be replaced by the current date.
- %(TIME)s will be replaced by the current time.
-
- %(HEADER_GUARD)s will be replaced by the UPPER_CASE_PATH_H_ to the file.
-
- %(CMAKE_PROJECT_NAME)s will be replaced by lower_case_path to the target
- directory.
-
- %(CMAKE_PROJECT_PATH)s will be replaced by the path to the target directory.
-
-Copyright: (c) 2010, Knut Reinert, FU Berlin
-License: 3-clause BSD (see LICENSE)
-"""
-
-from __future__ import with_statement
-
-__author__ = 'Manuel Holtgrewe <manuel.holtgrewe at fu-berlin.de>'
-
-import datetime
-import optparse
-import os
-import os.path
-import sys
-import string
-
-import paths
-
-# Add os.path.relpath if it is not already there, so we can use Python 2.5, too.
-# TODO(holtgrew): This could go into a "compatibility" module.
-if not 'relpath' in dir(os.path):
- import posixpath
- from posixpath import curdir, sep, pardir, join
-
- def relpath(path, start=curdir):
- """Return a relative version of a path"""
- if not path:
- raise ValueError("no path specified")
- start_list = posixpath.abspath(start).split(sep)
- path_list = posixpath.abspath(path).split(sep)
- # Work out how much of the filepath is shared by start and path.
- i = len(posixpath.commonprefix([start_list, path_list]))
- rel_list = [pardir] * (len(start_list)-i) + path_list[i:]
- if not rel_list:
- return curdir
- return join(*rel_list)
- os.path.relpath = relpath
-
-# Length of the header comment.
-HEADER_CENTER_WIDTH = 74
-
-# Fallback for author string if neither given on command line or environment
-# Variable SEQAN_AUTHOR.
-DEFAULT_AUTHOR = 'Your Name <your.email at example.net>'
-
-# Program usage string for command line parser.
-USAGE = """
-Usage: %prog [options] repository NAME
- %prog [options] [module|test|app|demo|header|lheader] NAME LOCATION
- %prog [options] app_tests LOCATION
-""".strip()
-
-# Program description, used for command line parser. Will be wrapped by, though.
-DESCRIPTION = """
-The SeqAn code generator.
-
-The first version ("repository") is to be be called to create your new entries
-below the directory sandbox. The second version is to be called to create new
-library modules, tests, apps, app tests, and demos inside a sandbox.
-""".strip()
-#"""
-#Example:
-#
-# %prog repository sandbox/john_doe
-#
-#The second version is to be called to create new library modules, tests, apps,
-#and demos inside a sandbox. Example:
-#
-# %prog module my_module sandbox/john_doe
-#
-#This command creates a new library module in sandbox/john_doe/include/seqan.
-#It consists of the directory my_module, the files my_module.h and
-#my_module/my_module_base.h.
-#
-# %prog test my_module sandbox/john_doe
-#
-#This command creates the tests for module "my_module" in sandbox/john_doe.
-#
-# %prog app my_app sandbox/john_doe
-#
-#This command creates a new application named my_app in sandbox/john_doe/apps.
-#
-# %prog demo my_demo sandbox/john_doe
-#
-#This command creates a new demo in sandbox/john_doe/demos.
-#""".strip()
-
-def createDirectory(path, dry_run=False):
- print 'mkdir(%s)' % path
- print
- if not dry_run:
- if not os.path.exists(path):
- os.mkdir(path)
-
-def configureFile(target_file, source_file, replacements, dry_run, options):
- print 'Configuring file.'
- print ' Source:', source_file
- print ' Target:', target_file
- print
- if os.path.exists(target_file) and not options.force:
- msg = 'Target file already exists. Move it away and call the script again.'
- print >>sys.stderr, msg
- return 1
-
- with open(source_file, 'rb') as f:
- contents = f.read()
- target_contents = contents % replacements
- if dry_run:
- print 'The contents of the target file are:'
- print '-' * 78
- print target_contents
- print '-' * 78
- else:
- with open(target_file, 'wb') as f:
- f.write(target_contents)
- return 0
-
-def _pathToIdentifier(relative_path):
- result = relative_path.replace('/', '_')
- result = result.replace('\\', '_')
- result = result.replace('-', '_')
- result = result.replace('.', '_')
- result = result.replace(' ', '_')
- return result
-
-def buildReplacements(type_, name, location, target_file, options):
- result = {}
- result['AUTHOR'] = options.author
- result['YEAR'] = datetime.date.today().year
- result['TIME'] = datetime.datetime.now().strftime('%H:%M')
- result['DATE'] = datetime.date.today().strftime('%Y-%m-%d')
- result['NAME'] = name
- result['TITLE'] = name.center(HEADER_CENTER_WIDTH).rstrip()
- path = os.path.relpath(target_file, paths.repositoryRoot())
- guard = _pathToIdentifier(path).upper()
- result['HEADER_GUARD'] = guard + '_'
- path = os.path.relpath(os.path.dirname(target_file),
- paths.repositoryRoot())
- cmake_project_name = _pathToIdentifier(path)
- result['CMAKE_PROJECT_NAME'] = cmake_project_name
- result['CMAKE_PROJECT_PATH'] = path.replace('\\', '\\\\')
- if type_ == 'repository':
- result['REPOSITORY_PSEUDO_TARGET_NAME'] = name.replace('/', '_').replace('\\', '_').replace(' ', '_')
- if type_ == 'app_tests':
- result['APP_NAME'] = os.path.split(os.path.split(location)[0])[1]
- result['APP_NAME_U'] = result['APP_NAME'].upper()
- result['LOCATION'] = os.path.join(os.path.split(os.path.normpath(location))[0])
- return result
-
-def _checkTargetPaths(target_path, options):
- """Check that the path does not exist but its parent does."""
- # Check that the given path does not exist yet.
- if os.path.exists(target_path) and not options.force:
- msg = 'The path %s already exists. Move it and call this script again.'
- print >>sys.stderr, msg % target_path
- return False
- # Check that the parent path already exists.
- if not os.path.exists(os.path.dirname(target_path)):
- msg = 'The parent of the target path does not exist yet: %s'
- print >>sys.stderr, msg % os.path.dirname(target_path)
- print >>sys.stderr, 'Please create it and call this script again.'
- return False
- return True
-
-def createModule(name, location, options):
- include_path = paths.pathToInclude(location)
- seqan_path = os.path.join(include_path, 'seqan')
- module_path = os.path.join(seqan_path, name)
- header_path = os.path.join(seqan_path, '%s.h' % name)
- print 'Creating module in %s' % module_path
- if options.create_dirs and not _checkTargetPaths(module_path, options):
- return 1
- if options.create_dirs and not _checkTargetPaths(header_path, options):
- return 1
- print ' Module path is: %s' % module_path
- print ' Module header path is: %s' % header_path
- print ''
- if options.create_dirs:
- # Create directory.
- createDirectory(module_path, options.dry_run)
- if options.create_programs:
- # Copy over module header.
- source_file = paths.pathToTemplate('module_template', 'module.h')
- target_file = header_path
- replacements = buildReplacements('module', name, seqan_path, target_file, options)
- res = configureFile(target_file, source_file, replacements, options.dry_run, options)
- if res: return res
- # Copy over header inside module.
- source_file = paths.pathToTemplate('module_template', 'header.h')
- target_file = os.path.join(module_path, '%s_base.h' % name)
- replacements = buildReplacements('module', name, seqan_path, target_file, options)
- res = configureFile(target_file, source_file, replacements, options.dry_run, options)
- if res: return res
- return 0
-
-def createTest(name, location, options):
- target_path = paths.pathToTest(location, name)
- print 'Creating test in %s' % target_path
- if options.create_dirs and not _checkTargetPaths(target_path, options):
- return 1
- print ' Target path is: %s' % target_path
- print ''
- if options.create_dirs:
- # Create directory.
- createDirectory(target_path, options.dry_run)
- if options.create_programs:
- # Copy over .cpp file for test and perform replacements.
- source_file = paths.pathToTemplate('test_template', 'test.cpp')
- target_file = os.path.join(target_path, 'test_%s.cpp' % name)
- replacements = buildReplacements('test', name, location, target_file, options)
- res = configureFile(target_file, source_file, replacements, options.dry_run, options)
- if res: return res
- # Copy over .h file for test and perform replacements.
- source_file = paths.pathToTemplate('test_template', 'test.h')
- target_file = os.path.join(target_path, 'test_%s.h' % name)
- replacements = buildReplacements('test', name, location, target_file, options)
- res = configureFile(target_file, source_file, replacements, options.dry_run, options)
- if res: return res
- if options.create_cmakelists:
- # Copy over CMakeLists.txt file for test and perform replacements.
- source_file = paths.pathToTemplate('test_template', 'CMakeLists.txt')
- target_file = os.path.join(target_path, 'CMakeLists.txt')
- replacements = buildReplacements('test', name, location, target_file, options)
- res = configureFile(target_file, source_file, replacements, options.dry_run, options)
- if res: return res
- return 0
-
-def createApp(name, location, options):
- target_path = paths.pathToApp(location, name)
- print 'Creating app in %s' % target_path
- if options.create_dirs and not _checkTargetPaths(target_path, options):
- return 1
- print ' Target path is: %s' % target_path
- print ''
- if options.create_programs:
- # Create directory.
- createDirectory(target_path, options.dry_run)
- # Copy over .cpp file for app and perform replacements.
- source_file = paths.pathToTemplate('app_template', 'app.cpp')
- target_file = os.path.join(target_path, '%s.cpp' % name)
- replacements = buildReplacements('app', name, location, target_file, options)
- res = configureFile(target_file, source_file, replacements, options.dry_run, options)
- if res: return res
- if options.create_cmakelists:
- # Copy over CMakeLists.txt file for app and perform replacements.
- source_file = paths.pathToTemplate('app_template', 'CMakeLists.txt')
- target_file = os.path.join(target_path, 'CMakeLists.txt')
- replacements = buildReplacements('app', name, location, target_file, options)
- res = configureFile(target_file, source_file, replacements, options.dry_run, options)
- if res: return res
- return 0
-
-def createDemo(name, location, options):
- target_path = paths.pathToDemo(location, name)
- print 'Creating demo in %s' % target_path
- if options.create_dirs and not _checkTargetPaths(target_path, options):
- return 1
- print ' Target path is: %s' % target_path
- print ''
- if options.create_programs:
- # Copy over .cpp file for app and perform replacements.
- source_file = paths.pathToTemplate('demo_template', 'demo.cpp')
- target_file = os.path.join(target_path)
- replacements = buildReplacements('demo', name, location, target_file, options)
- res = configureFile(target_file, source_file, replacements, options.dry_run, options)
- if res: return res
- return 0
-
-def createHeader(name, location, options):
- target_path = paths.pathToHeader(location, name)
- print 'Creating (non-library) header in %s' % target_path
- if not _checkTargetPaths(target_path, options):
- return 1
- print ' Target path is: %s' % target_path
- print ''
- # Copy over .h file for app and perform replacements.
- source_file = paths.pathToTemplate('header_template', 'header.h')
- target_file = os.path.join(target_path)
- replacements = buildReplacements('header', name, location, target_file, options)
- res = configureFile(target_file, source_file, replacements, options.dry_run, options)
- if res: return res
- print 'NOTE: Do not forget to add the header to the CMakeLists.txt file!'
- return 0
-
-def createLibraryHeader(name, location, options):
- target_path = paths.pathToHeader(location, name)
- print 'Creating library header in %s' % target_path
- if not _checkTargetPaths(target_path, options):
- return 1
- print ' Target path is: %s' % target_path
- print ''
- # Copy over .h file for app and perform replacements.
- source_file = paths.pathToTemplate('header_template', 'library_header.h')
- target_file = os.path.join(target_path)
- replacements = buildReplacements('library_header', name, location, target_file, options)
- res = configureFile(target_file, source_file, replacements, options.dry_run, options)
- if res: return res
- return 0
-
-def createRepository(location, options):
- print 'Creating module %s' % location
- target_path = paths.pathToRepository(location)
- if options.create_dirs and not _checkTargetPaths(target_path, options):
- return 1
- print ' Target path is: %s' % target_path
- print ''
- if options.create_dirs:
- # Create directories.
- createDirectory(target_path, options.dry_run)
- createDirectory(os.path.join(target_path, 'apps'), options.dry_run)
- createDirectory(os.path.join(target_path, 'demos'), options.dry_run)
- createDirectory(os.path.join(target_path, 'include'), options.dry_run)
- createDirectory(os.path.join(target_path, 'include', 'seqan'), options.dry_run)
- createDirectory(os.path.join(target_path, 'tests'), options.dry_run)
- if options.create_cmakelists:
- # Copy over file ${REPOSITORY}/CMakeLists.txt.
- target_file = os.path.join(target_path, 'CMakeLists.txt')
- source_file = paths.pathToTemplate('repository_template', 'CMakeLists.txt')
- replacements = buildReplacements('repository', location, target_path, target_file, options)
- configureFile(target_file, source_file, replacements, options.dry_run, options)
- # Copy over file ${REPOSITORY}/apps/CMakeLists.txt.
- target_file = os.path.join(target_path, 'apps', 'CMakeLists.txt')
- source_file = paths.pathToTemplate('repository_template', 'apps_CMakeLists.txt')
- replacements = buildReplacements('repository', location, target_path, target_file, options)
- configureFile(target_file, source_file, replacements, options.dry_run, options)
- # Copy over file ${REPOSITORY}/tests/CMakeLists.txt.
- target_file = os.path.join(target_path, 'tests', 'CMakeLists.txt')
- source_file = paths.pathToTemplate('repository_template', 'tests_CMakeLists.txt')
- replacements = buildReplacements('repository', location, target_path, target_file, options)
- configureFile(target_file, source_file, replacements, options.dry_run, options)
- # Copy over file ${REPOSITORY}/demos/CMakeLists.txt.
- target_file = os.path.join(target_path, 'demos', 'CMakeLists.txt')
- source_file = paths.pathToTemplate('repository_template', 'demos_CMakeLists.txt')
- replacements = buildReplacements('repository', location, target_path, target_file, options)
- configureFile(target_file, source_file, replacements, options.dry_run, options)
- return 0
-
-def createAppTests(location, options):
- print 'Creating app tests at %s' % location
- tests_location = os.path.join(location, 'tests')
- target_path = paths.pathToRepository(tests_location)
- if options.create_dirs and not _checkTargetPaths(target_path, options):
- return 1
- print ' Target path is: %s' % target_path
- print ''
-
- # Create directories.
- if options.create_dirs:
- createDirectory(target_path, options.dry_run)
-
- # Copy over file ${APP}/tests/generate_outputs.sh
- target_file = os.path.join(target_path, 'generate_outputs.sh')
- source_file = paths.pathToTemplate('app_tests_template', 'generate_outputs.sh')
- replacements = buildReplacements('app_tests', location, target_path, target_file, options)
- configureFile(target_file, source_file, replacements, options.dry_run, options)
- # Copy over file ${APP}/tests/run_tests.py
- target_file = os.path.join(target_path, 'run_tests.py')
- source_file = paths.pathToTemplate('app_tests_template', 'run_tests.py')
- replacements = buildReplacements('app_tests', location, target_path, target_file, options)
- configureFile(target_file, source_file, replacements, options.dry_run, options)
-
- print '=' * 80
- print 'Do not forget to add the tests in %s:' % os.path.join(location, 'CMakeLists.txt')
- print ''
- print '# Add app tests if Python interpreter could be found.'
- print 'if(PYTHONINTERP_FOUND)'
- print ' add_test(NAME app_test_%s COMMAND ${PYTHON_EXECUTABLE}' % os.path.split(location)[-1]
- print ' ${CMAKE_CURRENT_SOURCE_DIR}/tests/run_tests.py ${CMAKE_SOURCE_DIR}'
- print ' ${CMAKE_BINARY_DIR})'
- print 'endif(PYTHONINTERP_FOUND)'
- print '=' * 80
-
- return 0
-
-def main():
- # Parse arguments.
- parser = optparse.OptionParser(usage=USAGE, description=DESCRIPTION)
- parser.add_option('-s', '--skel-root', dest='skel_root',
- help=('Set path to the directory where the skeletons '
- 'live in. Taken from environment variable '
- 'SEQAN_SKELS if available.'),
- default=os.environ.get('SEQAN_SKELS',
- paths.pathToSkeletons()))
- parser.add_option('-a', '--author', dest='author',
- help=('Set author to use. Should have the format USER '
- '<EMAIL>. Taken from environment variable '
- 'SEQAN_AUTHOR if it exists.'),
- default=os.environ.get('SEQAN_AUTHOR', DEFAULT_AUTHOR))
- parser.add_option('-d', '--dry-run', dest='dry_run', action='store_true',
- help='Do not change anything, just simulate.',
- default=False)
- parser.add_option('-c', '--cmakelists-only', dest='cmakelists_only',
- action='store_true',
- help='Only create CMakeLists.txt files',
- default=False)
- parser.add_option('--force', dest='force', action='store_true',
- help='Overwrite existing files and directories.',
- default=False)
- options, args = parser.parse_args()
- options.create_cmakelists = True
- options.create_infos = True
- options.create_dirs = True
- options.create_programs = True
- if options.cmakelists_only:
- options.create_dirs = False
- options.create_programs = False
-
- if not args:
- parser.print_help(file=sys.stderr)
- return 1
- if len(args) < 2:
- print >>sys.stderr, 'Invalid argument count!'
- return 1
- if args[0] not in ['module', 'test', 'app', 'demo', 'repository',
- 'header', 'lheader', 'app_tests']:
- print >>sys.stderr, 'Invalid template "%s".' % args[0]
- return 1
- if args[0] in['repository', 'app_tests']:
- if len(args) != 2:
- print >>sys.stderr, 'Invalid argument count!'
- return 1
-
- if args[0] == 'repository':
- return createRepository(args[1], options)
- elif args[0] == 'app_tests':
- return createAppTests(args[1], options)
- elif len(args) != 3:
- print >>sys.stderr, 'Invalid argument count!'
- return 1
- create_methods = {
- 'module' : createModule,
- 'test': createTest,
- 'app': createApp,
- 'demo': createDemo,
- 'header': createHeader,
- 'lheader': createLibraryHeader,
- }
- return create_methods[args[0]](args[1], args[2], options)
-
-if __name__ == '__main__':
- sys.exit(main())
-
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/seqan2.git
More information about the debian-med-commit
mailing list