diff options
| author | Georg Brandl <georg@python.org> | 2011-01-07 19:04:53 +0100 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2011-01-07 19:04:53 +0100 |
| commit | 272025df2e6e392dba2f535127ae41bf3ead6562 (patch) | |
| tree | 64ab96a609f758025efa124c99ec4b63366676d0 /sphinx | |
| parent | 75ae889c2da945ae3478c003ba7b58526150013d (diff) | |
| parent | 554c7dd64f6aca38be6e1d26bb2cf4388f46083d (diff) | |
| download | sphinx-272025df2e6e392dba2f535127ae41bf3ead6562.tar.gz | |
merge with 1.0
Diffstat (limited to 'sphinx')
165 files changed, 12740 insertions, 4352 deletions
diff --git a/sphinx/__init__.py b/sphinx/__init__.py index 699bafee..468b3406 100644 --- a/sphinx/__init__.py +++ b/sphinx/__init__.py @@ -9,11 +9,14 @@ :license: BSD, see LICENSE for details. """ +# Keep this file executable as-is in Python 3! +# (Otherwise getting the version out of it from setup.py is impossible.) + import sys from os import path -__version__ = '1.0.6+' -__released__ = '1.0.6' # used when Sphinx builds its own docs +__version__ = '1.1pre' +__released__ = '1.1 (hg)' # used when Sphinx builds its own docs package_dir = path.abspath(path.dirname(__file__)) @@ -34,14 +37,16 @@ if '+' in __version__ or 'pre' in __version__: def main(argv=sys.argv): + """Sphinx build "main" command-line entry.""" if sys.version_info[:3] < (2, 4, 0): - print >>sys.stderr, \ - 'Error: Sphinx requires at least Python 2.4 to run.' + sys.stderr.write('Error: Sphinx requires at least ' + 'Python 2.4 to run.\n') return 1 try: from sphinx import cmdline - except ImportError, err: + except ImportError: + err = sys.exc_info()[1] errstr = str(err) if errstr.lower().startswith('no module named'): whichmod = errstr[16:] @@ -54,14 +59,14 @@ def main(argv=sys.argv): whichmod = 'roman module (which is distributed with Docutils)' hint = ('This can happen if you upgraded docutils using\n' 'easy_install without uninstalling the old version' - 'first.') + 'first.\n') else: whichmod += ' module' - print >>sys.stderr, ('Error: The %s cannot be found. ' - 'Did you install Sphinx and its dependencies ' - 'correctly?' % whichmod) + sys.stderr.write('Error: The %s cannot be found. ' + 'Did you install Sphinx and its dependencies ' + 'correctly?\n' % whichmod) if hint: - print >> sys.stderr, hint + sys.stderr.write(hint) return 1 raise return cmdline.main(argv) diff --git a/sphinx/addnodes.py b/sphinx/addnodes.py index 384b51e4..94f1d615 100644 --- a/sphinx/addnodes.py +++ b/sphinx/addnodes.py @@ -11,103 +11,171 @@ from docutils import nodes -# index markup -class index(nodes.Invisible, nodes.Inline, nodes.TextElement): pass + +class toctree(nodes.General, nodes.Element): + """Node for inserting a "TOC tree".""" + # domain-specific object descriptions (class, function etc.) -# parent node for signature and content -class desc(nodes.Admonition, nodes.Element): pass +class desc(nodes.Admonition, nodes.Element): + """Node for object descriptions. + + This node is similar to a "definition list" with one definition. It + contains one or more ``desc_signature`` and a ``desc_content``. + """ + +class desc_signature(nodes.Part, nodes.Inline, nodes.TextElement): + """Node for object signatures. -# additional name parts (module name, class name) -class desc_addname(nodes.Part, nodes.Inline, nodes.TextElement): pass + The "term" part of the custom Sphinx definition list. + """ + + +# nodes to use within a desc_signature + +class desc_addname(nodes.Part, nodes.Inline, nodes.TextElement): + """Node for additional name parts (module name, class name).""" # compatibility alias desc_classname = desc_addname -# return type (C); object type -class desc_type(nodes.Part, nodes.Inline, nodes.TextElement): pass -# -> annotation (Python) + +class desc_type(nodes.Part, nodes.Inline, nodes.TextElement): + """Node for return types or object type names.""" + class desc_returns(desc_type): + """Node for a "returns" annotation (a la -> in Python).""" def astext(self): return ' -> ' + nodes.TextElement.astext(self) -# main name of object -class desc_name(nodes.Part, nodes.Inline, nodes.TextElement): pass -# argument list -class desc_signature(nodes.Part, nodes.Inline, nodes.TextElement): pass + +class desc_name(nodes.Part, nodes.Inline, nodes.TextElement): + """Node for the main object name.""" + class desc_parameterlist(nodes.Part, nodes.Inline, nodes.TextElement): + """Node for a general parameter list.""" child_text_separator = ', ' -class desc_parameter(nodes.Part, nodes.Inline, nodes.TextElement): pass + +class desc_parameter(nodes.Part, nodes.Inline, nodes.TextElement): + """Node for a single parameter.""" + class desc_optional(nodes.Part, nodes.Inline, nodes.TextElement): + """Node for marking optional parts of the parameter list.""" child_text_separator = ', ' def astext(self): return '[' + nodes.TextElement.astext(self) + ']' -# annotation (not Python 3-style annotations) -class desc_annotation(nodes.Part, nodes.Inline, nodes.TextElement): pass -# node for content -class desc_content(nodes.General, nodes.Element): pass +class desc_annotation(nodes.Part, nodes.Inline, nodes.TextElement): + """Node for signature annotations (not Python 3-style annotations).""" + +class desc_content(nodes.General, nodes.Element): + """Node for object description content. + + This is the "definition" part of the custom Sphinx definition list. + """ + + +# new admonition-like constructs + +class versionmodified(nodes.Admonition, nodes.TextElement): + """Node for version change entries. + + Currently used for "versionadded", "versionchanged" and "deprecated" + directives. + """ + +class seealso(nodes.Admonition, nodes.Element): + """Custom "see also" admonition.""" + +class productionlist(nodes.Admonition, nodes.Element): + """Node for grammar production lists. + + Contains ``production`` nodes. + """ + +class production(nodes.Part, nodes.Inline, nodes.TextElement): + """Node for a single grammar production rule.""" + + +# other directive-level nodes + +class index(nodes.Invisible, nodes.Inline, nodes.TextElement): + """Node for index entries. + + This node is created by the ``index`` directive and has one attribute, + ``entries``. Its value is a list of 4-tuples of ``(entrytype, entryname, + target, ignored)``. + + *entrytype* is one of "single", "pair", "double", "triple". + """ + +class centered(nodes.Part, nodes.Element): + """Deprecated.""" + +class acks(nodes.Element): + """Special node for "acks" lists.""" + +class hlist(nodes.Element): + """Node for "horizontal lists", i.e. lists that should be compressed to + take up less vertical space. + """ + +class hlistcol(nodes.Element): + """Node for one column in a horizontal list.""" -# \versionadded, \versionchanged, \deprecated -class versionmodified(nodes.Admonition, nodes.TextElement): pass +class compact_paragraph(nodes.paragraph): + """Node for a compact paragraph (which never makes a <p> node).""" -# seealso -class seealso(nodes.Admonition, nodes.Element): pass +class glossary(nodes.Element): + """Node to insert a glossary.""" -# productionlist -class productionlist(nodes.Admonition, nodes.Element): pass -class production(nodes.Part, nodes.Inline, nodes.TextElement): pass +class only(nodes.Element): + """Node for "only" directives (conditional inclusion based on tags).""" -# toc tree -class toctree(nodes.General, nodes.Element): pass -# centered -class centered(nodes.Part, nodes.Element): pass +# meta-information nodes -# pending xref -class pending_xref(nodes.Inline, nodes.Element): pass +class start_of_file(nodes.Element): + """Node to mark start of a new file, used in the LaTeX builder only.""" -# compact paragraph -- never makes a <p> -class compact_paragraph(nodes.paragraph): pass +class highlightlang(nodes.Element): + """Inserted to set the highlight language and line number options for + subsequent code blocks. + """ -# reference to a file to download -class download_reference(nodes.reference): pass +class tabular_col_spec(nodes.Element): + """Node for specifying tabular columns, used for LaTeX output.""" -# for the ACKS list -class acks(nodes.Element): pass +class meta(nodes.Special, nodes.PreBibliographic, nodes.Element): + """Node for meta directive -- same as docutils' standard meta node, + but pickleable. + """ -# for horizontal lists -class hlist(nodes.Element): pass -class hlistcol(nodes.Element): pass -# sets the highlighting language for literal blocks -class highlightlang(nodes.Element): pass +# inline nodes -# like emphasis, but doesn't apply further text processors, e.g. smartypants -class literal_emphasis(nodes.emphasis): pass +class pending_xref(nodes.Inline, nodes.Element): + """Node for cross-references that cannot be resolved without complete + information about all documents. -# for abbreviations (with explanations) -class abbreviation(nodes.Inline, nodes.TextElement): pass + These nodes are resolved before writing output, in + BuildEnvironment.resolve_references. + """ -# glossary -class glossary(nodes.Element): pass +class download_reference(nodes.reference): + """Node for download references, similar to pending_xref.""" -# start of a file, used in the LaTeX builder only -class start_of_file(nodes.Element): pass +class literal_emphasis(nodes.emphasis): + """Node that behaves like `emphasis`, but further text processors are not + applied (e.g. smartypants for HTML output). + """ -# tabular column specification, used for the LaTeX writer -class tabular_col_spec(nodes.Element): pass +class abbreviation(nodes.Inline, nodes.TextElement): + """Node for abbreviations with explanations.""" -# only (in/exclusion based on tags) -class only(nodes.Element): pass +class termsep(nodes.Structural, nodes.Element): + """Separates two terms within a <term> node.""" -# meta directive -- same as docutils' standard meta node, but pickleable -class meta(nodes.Special, nodes.PreBibliographic, nodes.Element): pass -# make them known to docutils. this is needed, because the HTML writer -# will choke at some point if these are not added -nodes._add_node_class_names("""index desc desc_content desc_signature - desc_type desc_returns desc_addname desc_name desc_parameterlist - desc_parameter desc_optional download_reference hlist hlistcol - centered versionmodified seealso productionlist production toctree - pending_xref compact_paragraph highlightlang literal_emphasis - abbreviation glossary acks module start_of_file tabular_col_spec - meta""".split()) +# make the new nodes known to docutils; needed because the HTML writer will +# choke at some point if these are not added +nodes._add_node_class_names(k for k in globals().keys() + if k != 'nodes' and k[0] != '_') diff --git a/sphinx/apidoc.py b/sphinx/apidoc.py new file mode 100644 index 00000000..ca142098 --- /dev/null +++ b/sphinx/apidoc.py @@ -0,0 +1,263 @@ +# -*- coding: utf-8 -*- +""" + sphinx.apidoc + ~~~~~~~~~~~~~ + + Parses a directory tree looking for Python modules and packages and creates + ReST files appropriately to create code documentation with Sphinx. It also + creates a modules index (named modules.<suffix>). + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +import os +import sys +import optparse +from os import path + +# automodule options +OPTIONS = [ + 'members', + 'undoc-members', + # 'inherited-members', # disabled because there's a bug in sphinx + 'show-inheritance', +] + +INITPY = '__init__.py' + +def makename(package, module): + """Join package and module with a dot.""" + # Both package and module can be None/empty. + if package: + name = package + if module: + name += '.' + module + else: + name = module + return name + +def write_file(name, text, opts): + """Write the output file for module/package <name>.""" + fname = path.join(opts.destdir, "%s.%s" % (name, opts.suffix)) + if opts.dryrun: + print 'Would create file %s.' % fname + return + if not opts.force and path.isfile(fname): + print 'File %s already exists, skipping.' % fname + else: + print 'Creating file %s.' % fname + f = open(fname, 'w') + try: + f.write(text) + finally: + f.close() + +def format_heading(level, text): + """Create a heading of <level> [1, 2 or 3 supported].""" + underlining = ['=', '-', '~', ][level-1] * len(text) + return '%s\n%s\n\n' % (text, underlining) + +def format_directive(module, package=None): + """Create the automodule directive and add the options.""" + directive = '.. automodule:: %s\n' % makename(package, module) + for option in OPTIONS: + directive += ' :%s:\n' % option + return directive + +def create_module_file(package, module, opts): + """Build the text of the file and write the file.""" + text = format_heading(1, '%s Module' % module) + #text += format_heading(2, ':mod:`%s` Module' % module) + text += format_directive(module, package) + write_file(makename(package, module), text, opts) + +def create_package_file(root, master_package, subroot, py_files, opts, subs): + """Build the text of the file and write the file.""" + package = path.split(root)[-1] + text = format_heading(1, '%s Package' % package) + # add each module in the package + for py_file in py_files: + if shall_skip(path.join(root, py_file)): + continue + is_package = py_file == INITPY + py_file = path.splitext(py_file)[0] + py_path = makename(subroot, py_file) + if is_package: + heading = ':mod:`%s` Package' % package + else: + heading = ':mod:`%s` Module' % py_file + text += format_heading(2, heading) + text += format_directive(is_package and subroot or py_path, + master_package) + text += '\n' + + # build a list of directories that are packages (they contain an INITPY file) + subs = [sub for sub in subs if path.isfile(path.join(root, sub, INITPY))] + # if there are some package directories, add a TOC for theses subpackages + if subs: + text += format_heading(2, 'Subpackages') + text += '.. toctree::\n\n' + for sub in subs: + text += ' %s.%s\n' % (makename(master_package, subroot), sub) + text += '\n' + + write_file(makename(master_package, subroot), text, opts) + +def create_modules_toc_file(master_package, modules, opts, name='modules'): + """ + Create the module's index. + """ + text = format_heading(1, '%s Modules' % opts.header) + text += '.. toctree::\n' + text += ' :maxdepth: %s\n\n' % opts.maxdepth + + modules.sort() + prev_module = '' + for module in modules: + # look if the module is a subpackage and, if yes, ignore it + if module.startswith(prev_module + '.'): + continue + prev_module = module + text += ' %s\n' % module + + write_file(name, text, opts) + +def shall_skip(module): + """ + Check if we want to skip this module. + """ + # skip it, if there is nothing (or just \n or \r\n) in the file + return path.getsize(module) < 3 + +def recurse_tree(rootpath, excludes, opts): + """ + Look for every file in the directory tree and create the corresponding + ReST files. + """ + # check if the base directory is a package and get is name + if INITPY in os.listdir(rootpath): + package_name = path.abspath(rootpath).split(path.sep)[-1] + else: + package_name = None + + toc = [] + tree = os.walk(rootpath, False) + for root, subs, files in tree: + # keep only the Python script files + py_files = sorted([f for f in files if path.splitext(f)[1] == '.py']) + if INITPY in py_files: + py_files.remove(INITPY) + py_files.insert(0, INITPY) + # remove hidden ('.') and private ('_') directories + subs = sorted([sub for sub in subs if sub[0] not in ['.', '_']]) + # check if there are valid files to process + # TODO: could add check for windows hidden files + if "/." in root or "/_" in root \ + or not py_files \ + or is_excluded(root, excludes): + continue + if INITPY in py_files: + # we are in package ... + if (# ... with subpackage(s) + subs + or + # ... with some module(s) + len(py_files) > 1 + or + # ... with a not-to-be-skipped INITPY file + not shall_skip(path.join(root, INITPY)) + ): + subroot = root[len(rootpath):].lstrip(path.sep).\ + replace(path.sep, '.') + create_package_file(root, package_name, subroot, + py_files, opts, subs) + toc.append(makename(package_name, subroot)) + elif root == rootpath: + # if we are at the root level, we don't require it to be a package + for py_file in py_files: + if not shall_skip(path.join(rootpath, py_file)): + module = path.splitext(py_file)[0] + create_module_file(package_name, module, opts) + toc.append(makename(package_name, module)) + + # create the module's index + if not opts.notoc: + create_modules_toc_file(package_name, toc, opts) + +def normalize_excludes(rootpath, excludes): + """ + Normalize the excluded directory list: + * must be either an absolute path or start with rootpath, + * otherwise it is joined with rootpath + * with trailing slash + """ + sep = path.sep + f_excludes = [] + for exclude in excludes: + if not path.isabs(exclude) and not exclude.startswith(rootpath): + exclude = path.join(rootpath, exclude) + if not exclude.endswith(sep): + exclude += sep + f_excludes.append(exclude) + return f_excludes + +def is_excluded(root, excludes): + """ + Check if the directory is in the exclude list. + + Note: by having trailing slashes, we avoid common prefix issues, like + e.g. an exlude "foo" also accidentally excluding "foobar". + """ + sep = path.sep + if not root.endswith(sep): + root += sep + for exclude in excludes: + if root.startswith(exclude): + return True + return False + +def main(argv): + """ + Parse and check the command line arguments. + """ + parser = optparse.OptionParser( + usage="""\ +usage: %prog [options] -o <output_path> <module_path> [exclude_paths, ...] + +Look recursively in <module_path> for Python modules and packages and create +a reST file with automodule directives per package in the <output_path>. + +Note: By default this script will not overwrite already created files.""") + + parser.add_option('-o', '--output-dir', action='store', dest='destdir', + help='Directory to place all output', default='') + parser.add_option('-d', '--maxdepth', action='store', dest='maxdepth', + help='Maximum depth of submodules to show in the TOC ' + '(default: 4)', type='int', default=4) + parser.add_option('-f', '--force', action='store_true', dest='force', + help='Overwrite all the files') + parser.add_option('-n', '--dry-run', action='store_true', dest='dryrun', + help='Run the script without creating the files') + parser.add_option('-T', '--no-toc', action='store_true', dest='notoc', + help='Don\'t create the table of contents file') + parser.add_option('-H', '--doc-header', action='store', dest='header', + help='Documentation Header (default: Project)', + default='Project') + parser.add_option('-s', '--suffix', action='store', dest='suffix', + help='file suffix (default: rst)', default='rst') + + (opts, args) = parser.parse_args(argv[1:]) + + if not args: + parser.error('A package path is required.') + if not opts.destdir: + parser.error('An output directory is required.') + rootpath, excludes = args[0], args[1:] + if not path.isdir(rootpath): + print >>sys.stderr, '%s is not a directory.' % rootpath + sys.exit(1) + if not path.isdir(opts.destdir): + print '%s is not a valid output directory.' % opts.destdir + sys.exit(1) + excludes = normalize_excludes(rootpath, excludes) + recurse_tree(rootpath, excludes, opts) diff --git a/sphinx/application.py b/sphinx/application.py index 3f03ffa7..840fc46b 100644 --- a/sphinx/application.py +++ b/sphinx/application.py @@ -37,12 +37,10 @@ from sphinx.util.osutil import ENOENT from sphinx.util.console import bold -# Directive is either new-style or old-style -clstypes = (type, types.ClassType) - # List of all known core events. Maps name to arguments description. events = { 'builder-inited': '', + 'env-get-outdated': 'env, added, changed, removed', 'env-purge-doc': 'env, docname', 'source-read': 'docname, source text', 'doctree-read': 'the doctree before being pickled', @@ -136,9 +134,8 @@ class Sphinx(object): self._init_builder(buildername) def _init_i18n(self): - """ - Load translated strings from the configured localedirs if - enabled in the configuration. + """Load translated strings from the configured localedirs if enabled in + the configuration. """ if self.config.language is not None: self.info(bold('loading translations [%s]... ' % @@ -368,6 +365,9 @@ class Sphinx(object): elif key == 'man': from sphinx.writers.manpage import ManualPageTranslator \ as translator + elif key == 'texinfo': + from sphinx.writers.texinfo import TexinfoTranslator \ + as translator else: # ignore invalid keys for compatibility continue @@ -490,6 +490,11 @@ class Sphinx(object): from sphinx.ext import autodoc autodoc.AutoDirective._special_attrgetters[type] = getter + def add_search_language(self, cls): + from sphinx.search import languages, SearchLanguage + assert isinstance(cls, SearchLanguage) + languages[cls.lang] = cls + class TemplateBridge(object): """ @@ -498,8 +503,7 @@ class TemplateBridge(object): """ def init(self, builder, theme=None, dirs=None): - """ - Called by the builder to initialize the template system. + """Called by the builder to initialize the template system. *builder* is the builder object; you'll probably want to look at the value of ``builder.config.templates_path``. @@ -510,23 +514,20 @@ class TemplateBridge(object): raise NotImplementedError('must be implemented in subclasses') def newest_template_mtime(self): - """ - Called by the builder to determine if output files are outdated + """Called by the builder to determine if output files are outdated because of template changes. Return the mtime of the newest template file that was changed. The default implementation returns ``0``. """ return 0 def render(self, template, context): - """ - Called by the builder to render a template given as a filename with a - specified context (a Python dictionary). + """Called by the builder to render a template given as a filename with + a specified context (a Python dictionary). """ raise NotImplementedError('must be implemented in subclasses') def render_string(self, template, context): - """ - Called by the builder to render a template given as a string with a + """Called by the builder to render a template given as a string with a specified context (a Python dictionary). """ raise NotImplementedError('must be implemented in subclasses') diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py index 32db8659..33954033 100644 --- a/sphinx/builders/__init__.py +++ b/sphinx/builders/__init__.py @@ -55,16 +55,13 @@ class Builder(object): # helper methods def init(self): - """ - Load necessary templates and perform initialization. The default + """Load necessary templates and perform initialization. The default implementation does nothing. """ pass def create_template_bridge(self): - """ - Return the template bridge configured. - """ + """Return the template bridge configured.""" if self.config.template_bridge: self.templates = self.app.import_object( self.config.template_bridge, 'template_bridge setting')() @@ -73,23 +70,23 @@ class Builder(object): self.templates = BuiltinTemplateLoader() def get_target_uri(self, docname, typ=None): - """ - Return the target URI for a document name (*typ* can be used to qualify - the link characteristic for individual builders). + """Return the target URI for a document name. + + *typ* can be used to qualify the link characteristic for individual + builders. """ raise NotImplementedError def get_relative_uri(self, from_, to, typ=None): - """ - Return a relative URI between two source filenames. May raise - environment.NoUri if there's no way to return a sensible URI. + """Return a relative URI between two source filenames. + + May raise environment.NoUri if there's no way to return a sensible URI. """ return relative_uri(self.get_target_uri(from_), self.get_target_uri(to, typ)) def get_outdated_docs(self): - """ - Return an iterable of output files that are outdated, or a string + """Return an iterable of output files that are outdated, or a string describing what an update build will build. If the builder does not output individual files corresponding to @@ -129,9 +126,7 @@ class Builder(object): supported_image_types = [] def post_process_images(self, doctree): - """ - Pick the best candidate for all image URIs. - """ + """Pick the best candidate for all image URIs.""" for node in doctree.traverse(nodes.image): if '?' in node['candidates']: # don't rewrite nonlocal image URIs @@ -198,9 +193,9 @@ class Builder(object): 'out of date' % len(to_build)) def build(self, docnames, summary=None, method='update'): - """ - Main build method. First updates the environment, and then - calls :meth:`write`. + """Main build method. + + First updates the environment, and then calls :meth:`write`. """ if summary: self.info(bold('building [%s]: ' % self.name), nonl=1) @@ -303,15 +298,18 @@ class Builder(object): raise NotImplementedError def finish(self): - """ - Finish the building process. The default implementation does nothing. + """Finish the building process. + + The default implementation does nothing. """ pass def cleanup(self): + """Cleanup any resources. + + The default implementation does nothing. """ - Cleanup any resources. The default implementation does nothing. - """ + pass BUILTIN_BUILDERS = { @@ -328,6 +326,9 @@ BUILTIN_BUILDERS = { 'latex': ('latex', 'LaTeXBuilder'), 'text': ('text', 'TextBuilder'), 'man': ('manpage', 'ManualPageBuilder'), + 'texinfo': ('texinfo', 'TexinfoBuilder'), 'changes': ('changes', 'ChangesBuilder'), 'linkcheck': ('linkcheck', 'CheckExternalLinksBuilder'), + 'websupport': ('websupport', 'WebSupportBuilder'), + 'gettext': ('intl', 'MessageCatalogBuilder'), } diff --git a/sphinx/builders/changes.py b/sphinx/builders/changes.py index 6c19fd30..3e351e6c 100644 --- a/sphinx/builders/changes.py +++ b/sphinx/builders/changes.py @@ -30,7 +30,8 @@ class ChangesBuilder(Builder): def init(self): self.create_template_bridge() - Theme.init_themes(self) + Theme.init_themes(self.confdir, self.config.html_theme_path, + warn=self.warn) self.theme = Theme('default') self.templates.init(self, self.theme) diff --git a/sphinx/builders/devhelp.py b/sphinx/builders/devhelp.py index fca1602e..a1b41945 100644 --- a/sphinx/builders/devhelp.py +++ b/sphinx/builders/devhelp.py @@ -42,7 +42,6 @@ except ImportError: class DevhelpBuilder(StandaloneHTMLBuilder): """ Builder that also outputs GNOME Devhelp file. - """ name = 'devhelp' diff --git a/sphinx/builders/epub.py b/sphinx/builders/epub.py index 366587b6..ddc6fb5c 100644 --- a/sphinx/builders/epub.py +++ b/sphinx/builders/epub.py @@ -12,6 +12,7 @@ import os import re +import sys import time import codecs import zipfile @@ -97,6 +98,12 @@ _content_template = u'''\ </package> ''' +_cover_template = u'''\ + <meta name="cover" content="%(cover)s"/> +''' + +_coverpage_name = u'epub-cover.html' + _file_template = u'''\ <item id="%(id)s" href="%(href)s" @@ -132,7 +139,8 @@ _refuri_re = re.compile("([^#:]*#)(.*)") # The epub publisher class EpubBuilder(StandaloneHTMLBuilder): - """Builder that outputs epub files. + """ + Builder that outputs epub files. It creates the metainfo files container.opf, toc.ncx, mimetype, and META-INF/container.xml. Afterwards, all necessary files are zipped to an @@ -229,12 +237,12 @@ class EpubBuilder(StandaloneHTMLBuilder): }) def fix_fragment(self, prefix, fragment): - """Return a href/id attribute with colons replaced by hyphens. - """ + """Return a href/id attribute with colons replaced by hyphens.""" return prefix + fragment.replace(':', '-') def fix_ids(self, tree): """Replace colons with hyphens in href and id attributes. + Some readers crash because they interpret the part as a transport protocol specification. """ @@ -253,8 +261,7 @@ class EpubBuilder(StandaloneHTMLBuilder): node.attributes['ids'] = newids def add_visible_links(self, tree): - """Append visible link targets after external links. - """ + """Append visible link targets after external links.""" for node in tree.traverse(nodes.reference): uri = node.get('refuri', '') if (uri.startswith('http:') or uri.startswith('https:') or @@ -268,6 +275,7 @@ class EpubBuilder(StandaloneHTMLBuilder): def write_doc(self, docname, doctree): """Write one document file. + This method is overwritten in order to fix fragment identifiers and to add visible external links. """ @@ -276,28 +284,29 @@ class EpubBuilder(StandaloneHTMLBuilder): return StandaloneHTMLBuilder.write_doc(self, docname, doctree) def fix_genindex(self, tree): - """Fix href attributes for genindex pages. - """ + """Fix href attributes for genindex pages.""" # XXX: modifies tree inline # Logic modeled from themes/basic/genindex.html for key, columns in tree: for entryname, (links, subitems) in columns: - for (i, link) in enumerate(links): + for (i, (ismain, link)) in enumerate(links): m = _refuri_re.match(link) if m: - links[i] = self.fix_fragment(m.group(1), m.group(2)) + links[i] = (ismain, + self.fix_fragment(m.group(1), m.group(2))) for subentryname, subentrylinks in subitems: - for (i, link) in enumerate(subentrylinks): + for (i, (ismain, link)) in enumerate(subentrylinks): m = _refuri_re.match(link) if m: - subentrylinks[i] = \ - self.fix_fragment(m.group(1), m.group(2)) + subentrylinks[i] = (ismain, + self.fix_fragment(m.group(1), m.group(2))) def handle_page(self, pagename, addctx, templatename='page.html', outfilename=None, event_arg=None): """Create a rendered page. - This method is overwritten for genindex pages in order to fix - href link attributes. + + This method is overwritten for genindex pages in order to fix href link + attributes. """ if pagename.startswith('genindex'): self.fix_genindex(addctx['genindexentries']) @@ -388,7 +397,6 @@ class EpubBuilder(StandaloneHTMLBuilder): 'media_type': self.esc(_media_types[ext]) }) self.files.append(filename) - projectfiles = '\n'.join(projectfiles) # spine spine = [] @@ -400,12 +408,38 @@ class EpubBuilder(StandaloneHTMLBuilder): spine.append(_spine_template % { 'idref': self.esc(self.make_id(item['refuri'])) }) + + # add the optional cover + content_tmpl = _content_template + if self.config.epub_cover: + image, tmpl = self.config.epub_cover + mpos = content_tmpl.rfind('</metadata>') + cpos = content_tmpl.rfind('\n', 0 , mpos) + 1 + content_tmpl = content_tmpl[:cpos] + \ + _cover_template % {'cover': self.esc(self.make_id(image))} + \ + content_tmpl[cpos:] + if tmpl: + spine.insert(0, _spine_template % { + 'idref': self.esc(self.make_id(_coverpage_name))}) + if _coverpage_name not in self.files: + ext = path.splitext(_coverpage_name)[-1] + self.files.append(_coverpage_name) + projectfiles.append(_file_template % { + 'href': self.esc(_coverpage_name), + 'id': self.esc(self.make_id(_coverpage_name)), + 'media_type': self.esc(_media_types[ext]) + }) + ctx = {'image': self.esc(image), 'title': self.config.project} + self.handle_page( + os.path.splitext(_coverpage_name)[0], ctx, tmpl) + + projectfiles = '\n'.join(projectfiles) spine = '\n'.join(spine) # write the project file f = codecs.open(path.join(outdir, outname), 'w', 'utf-8') try: - f.write(_content_template % \ + f.write(content_tmpl % \ self.content_metadata(projectfiles, spine)) finally: f.close() @@ -422,6 +456,7 @@ class EpubBuilder(StandaloneHTMLBuilder): def insert_subnav(self, node, subnav): """Insert nested navpoints for given node. + The node and subnav are already rendered to text. """ nlist = node.rsplit('\n', 1) @@ -431,8 +466,8 @@ class EpubBuilder(StandaloneHTMLBuilder): def build_navpoints(self, nodes): """Create the toc navigation structure. - Subelements of a node are nested inside the navpoint. - For nested nodes the parent node is reinserted in the subnav. + Subelements of a node are nested inside the navpoint. For nested nodes + the parent node is reinserted in the subnav. """ navstack = [] navlist = [] @@ -472,8 +507,8 @@ class EpubBuilder(StandaloneHTMLBuilder): return '\n'.join(navlist) def toc_metadata(self, level, navpoints): - """Create a dictionary with all metadata for the toc.ncx - file properly escaped. + """Create a dictionary with all metadata for the toc.ncx file + properly escaped. """ metadata = {} metadata['uid'] = self.config.epub_uid @@ -498,8 +533,8 @@ class EpubBuilder(StandaloneHTMLBuilder): def build_epub(self, outdir, outname): """Write the epub file. - It is a zip file with the mimetype file stored uncompressed - as the first entry. + It is a zip file with the mimetype file stored uncompressed as the first + entry. """ self.info('writing %s file...' % outname) projectfiles = ['META-INF/container.xml', 'content.opf', 'toc.ncx'] \ @@ -509,7 +544,8 @@ class EpubBuilder(StandaloneHTMLBuilder): epub.write(path.join(outdir, 'mimetype'), 'mimetype', \ zipfile.ZIP_STORED) for file in projectfiles: - if isinstance(file, unicode): - file = file.encode('utf-8') - epub.write(path.join(outdir, file), file, zipfile.ZIP_DEFLATED) + fp = path.join(outdir, file) + if isinstance(fp, unicode): + fp = fp.encode(sys.getfilesystemencoding()) + epub.write(fp, file, zipfile.ZIP_DEFLATED) epub.close() diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index 8ff628c9..6aa4fda4 100644 --- a/sphinx/builders/html.py +++ b/sphinx/builders/html.py @@ -35,7 +35,7 @@ from sphinx.util.osutil import SEP, os_path, relative_uri, ensuredir, \ movefile, ustrftime, copyfile from sphinx.util.nodes import inline_all_toctrees from sphinx.util.matching import patmatch, compile_matchers -from sphinx.util.pycompat import any +from sphinx.util.pycompat import any, b from sphinx.errors import SphinxError from sphinx.locale import _ from sphinx.search import js_index @@ -63,6 +63,7 @@ class StandaloneHTMLBuilder(Builder): out_suffix = '.html' link_suffix = '.html' # defaults to matching out_suffix indexer_format = js_index + indexer_dumps_unicode = True supported_image_types = ['image/svg+xml', 'image/png', 'image/gif', 'image/jpeg'] searchindex_filename = 'searchindex.js' @@ -122,7 +123,8 @@ class StandaloneHTMLBuilder(Builder): return self.config.html_theme, self.config.html_theme_options def init_templates(self): - Theme.init_themes(self) + Theme.init_themes(self.confdir, self.config.html_theme_path, + warn=self.warn) themename, themeoptions = self.get_theme_config() self.theme = Theme(themename) self.theme_options = themeoptions.copy() @@ -154,8 +156,9 @@ class StandaloneHTMLBuilder(Builder): cfgdict = dict((name, self.config[name]) for (name, desc) in self.config.values.iteritems() if desc[1] == 'html') - self.config_hash = md5(str(cfgdict)).hexdigest() - self.tags_hash = md5(str(sorted(self.tags))).hexdigest() + self.config_hash = md5(unicode(cfgdict).encode('utf-8')).hexdigest() + self.tags_hash = md5(unicode(sorted(self.tags)).encode('utf-8')) \ + .hexdigest() old_config_hash = old_tags_hash = '' try: fp = open(path.join(self.outdir, '.buildinfo')) @@ -207,7 +210,7 @@ class StandaloneHTMLBuilder(Builder): """Utility: Render a lone doctree node.""" if node is None: return {'fragment': ''} - doc = new_document('<partial node>') + doc = new_document(b('<partial node>')) doc.append(node) if self._publisher is None: @@ -229,10 +232,15 @@ class StandaloneHTMLBuilder(Builder): return pub.writer.parts def prepare_writing(self, docnames): - from sphinx.search import IndexBuilder - - self.indexer = IndexBuilder(self.env) + # create the search indexer + from sphinx.search import IndexBuilder, languages + lang = self.config.html_search_language or self.config.language + if not lang or lang not in languages: + lang = 'en' + self.indexer = IndexBuilder(self.env, lang, + self.config.html_search_options) self.load_indexer(docnames) + self.docwriter = HTMLWriter(self) self.docsettings = OptionParser( defaults=self.env.settings, @@ -536,13 +544,18 @@ class StandaloneHTMLBuilder(Builder): if jsfile: copyfile(jsfile, path.join(self.outdir, '_static', 'translations.js')) + + # add context items for search function used in searchtools.js_t + ctx = self.globalcontext.copy() + ctx.update(self.indexer.context_for_searchtool()) + # then, copy over theme-supplied static files if self.theme: themeentries = [path.join(themepath, 'static') for themepath in self.theme.get_dirchain()[::-1]] for entry in themeentries: copy_static_entry(entry, path.join(self.outdir, '_static'), - self, self.globalcontext) + self, ctx) # then, copy over all user-supplied static files staticentries = [path.join(self.confdir, spath) for spath in self.config.html_static_path] @@ -555,7 +568,7 @@ class StandaloneHTMLBuilder(Builder): self.warn('html_static_path entry %r does not exist' % entry) continue copy_static_entry(entry, path.join(self.outdir, '_static'), self, - self.globalcontext, exclude_matchers=matchers) + ctx, exclude_matchers=matchers) # copy logo and favicon files if not already in static path if self.config.html_logo: logobase = path.basename(self.config.html_logo) @@ -589,8 +602,7 @@ class StandaloneHTMLBuilder(Builder): self.theme.cleanup() def post_process_images(self, doctree): - """ - Pick the best candidate for an image and link down-scaled images to + """Pick the best candidate for an image and link down-scaled images to their high res version. """ Builder.post_process_images(self, doctree) @@ -614,7 +626,11 @@ class StandaloneHTMLBuilder(Builder): def load_indexer(self, docnames): keep = set(self.env.all_docs) - set(docnames) try: - f = open(path.join(self.outdir, self.searchindex_filename), 'rb') + searchindexfn = path.join(self.outdir, self.searchindex_filename) + if self.indexer_dumps_unicode: + f = codecs.open(searchindexfn, 'r', encoding='utf-8') + else: + f = open(searchindexfn, 'rb') try: self.indexer.load(f, self.indexer_format) finally: @@ -737,10 +753,12 @@ class StandaloneHTMLBuilder(Builder): self.info(bold('dumping object inventory... '), nonl=True) f = open(path.join(self.outdir, INVENTORY_FILENAME), 'wb') try: - f.write('# Sphinx inventory version 2\n') - f.write('# Project: %s\n' % self.config.project.encode('utf-8')) - f.write('# Version: %s\n' % self.config.version.encode('utf-8')) - f.write('# The remainder of this file is compressed using zlib.\n') + f.write((u'# Sphinx inventory version 2\n' + u'# Project: %s\n' + u'# Version: %s\n' + u'# The remainder of this file is compressed using zlib.\n' + % (self.config.project, self.config.version) + ).encode('utf-8')) compressor = zlib.compressobj(9) for domainname, domain in self.env.domains.iteritems(): for name, dispname, type, docname, anchor, prio in \ @@ -752,11 +770,9 @@ class StandaloneHTMLBuilder(Builder): if dispname == name: dispname = u'-' f.write(compressor.compress( - '%s %s:%s %s %s %s\n' % (name.encode('utf-8'), - domainname.encode('utf-8'), - type.encode('utf-8'), prio, - uri.encode('utf-8'), - dispname.encode('utf-8')))) + (u'%s %s:%s %s %s %s\n' % (name, domainname, type, + prio, uri, dispname) + ).encode('utf-8'))) f.write(compressor.flush()) finally: f.close() @@ -768,7 +784,10 @@ class StandaloneHTMLBuilder(Builder): searchindexfn = path.join(self.outdir, self.searchindex_filename) # first write to a temporary file, so that if dumping fails, # the existing index won't be overwritten - f = open(searchindexfn + '.tmp', 'wb') + if self.indexer_dumps_unicode: + f = codecs.open(searchindexfn + '.tmp', 'w', encoding='utf-8') + else: + f = open(searchindexfn + '.tmp', 'wb') try: self.indexer.dump(f, self.indexer_format) finally: @@ -925,6 +944,9 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder): #: implements a `dump`, `load`, `dumps` and `loads` functions #: (pickle, simplejson etc.) implementation = None + implementation_dumps_unicode = False + #: additional arguments for dump() + additional_dump_args = () #: the filename for the global context file globalcontext_filename = None @@ -947,6 +969,16 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder): return docname[:-5] # up to sep return docname + SEP + def dump_context(self, context, filename): + if self.implementation_dumps_unicode: + f = codecs.open(filename, 'w', encoding='utf-8') + else: + f = open(filename, 'wb') + try: + self.implementation.dump(context, f, *self.additional_dump_args) + finally: + f.close() + def handle_page(self, pagename, ctx, templatename='page.html', outfilename=None, event_arg=None): ctx['current_page_name'] = pagename @@ -960,11 +992,7 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder): ctx, event_arg) ensuredir(path.dirname(outfilename)) - f = open(outfilename, 'wb') - try: - self.implementation.dump(ctx, f, 2) - finally: - f.close() + self.dump_context(ctx, outfilename) # if there is a source file, copy the source file for the # "show source" link @@ -977,11 +1005,7 @@ class SerializingHTMLBuilder(StandaloneHTMLBuilder): def handle_finish(self): # dump the global context outfilename = path.join(self.outdir, self.globalcontext_filename) - f = open(outfilename, 'wb') - try: - self.implementation.dump(self.globalcontext, f, 2) - finally: - f.close() + self.dump_context(self.globalcontext, outfilename) # super here to dump the search index StandaloneHTMLBuilder.handle_finish(self) @@ -1001,7 +1025,10 @@ class PickleHTMLBuilder(SerializingHTMLBuilder): A Builder that dumps the generated HTML into pickle files. """ implementation = pickle + implementation_dumps_unicode = False + additional_dump_args = (pickle.HIGHEST_PROTOCOL,) indexer_format = pickle + indexer_dumps_unicode = False name = 'pickle' out_suffix = '.fpickle' globalcontext_filename = 'globalcontext.pickle' @@ -1016,7 +1043,9 @@ class JSONHTMLBuilder(SerializingHTMLBuilder): A builder that dumps the generated HTML into JSON files. """ implementation = jsonimpl + implementation_dumps_unicode = True indexer_format = jsonimpl + indexer_dumps_unicode = True name = 'json' out_suffix = '.fjson' globalcontext_filename = 'globalcontext.json' diff --git a/sphinx/builders/htmlhelp.py b/sphinx/builders/htmlhelp.py index 2c9fe530..9227a6e6 100644 --- a/sphinx/builders/htmlhelp.py +++ b/sphinx/builders/htmlhelp.py @@ -258,7 +258,8 @@ class HTMLHelpBuilder(StandaloneHTMLBuilder): def write_index(title, refs, subitems): def write_param(name, value): item = ' <param name="%s" value="%s">\n' % (name, value) - f.write(item.encode(self.encoding, 'xmlcharrefreplace')) + f.write(item.encode(self.encoding, 'xmlcharrefreplace') + .decode(self.encoding)) title = cgi.escape(title) f.write('<LI> <OBJECT type="text/sitemap">\n') write_param('Keyword', title) diff --git a/sphinx/builders/intl.py b/sphinx/builders/intl.py new file mode 100644 index 00000000..447a20cf --- /dev/null +++ b/sphinx/builders/intl.py @@ -0,0 +1,110 @@ +# -*- coding: utf-8 -*- +""" + sphinx.builders.intl + ~~~~~~~~~~~~~~~~~~~~ + + The MessageCatalogBuilder class. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from os import path +from codecs import open +from datetime import datetime +from collections import defaultdict + +from docutils import nodes + +from sphinx.builders import Builder +from sphinx.builders.versioning import VersioningBuilderMixin +from sphinx.util.nodes import extract_messages +from sphinx.util.osutil import SEP, copyfile +from sphinx.util.console import darkgreen + +POHEADER = ur""" +# SOME DESCRIPTIVE TITLE. +# Copyright (C) %(copyright)s +# This file is distributed under the same license as the %(project)s package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: %(version)s\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: %(ctime)s\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +"""[1:] + + +class I18nBuilder(Builder, VersioningBuilderMixin): + """ + General i18n builder. + """ + name = 'i18n' + + def init(self): + Builder.init(self) + VersioningBuilderMixin.init(self) + self.catalogs = defaultdict(dict) + + def get_target_uri(self, docname, typ=None): + return '' + + def get_outdated_docs(self): + return self.env.found_docs + + def prepare_writing(self, docnames): + return + + def write_doc(self, docname, doctree): + catalog = self.catalogs[docname.split(SEP, 1)[0]] + + self.handle_versioning(docname, doctree, nodes.TextElement) + + for node, msg in extract_messages(doctree): + catalog.setdefault(node.uid, msg) + + def finish(self): + Builder.finish(self) + VersioningBuilderMixin.finish(self) + + +class MessageCatalogBuilder(I18nBuilder): + """ + Builds gettext-style message catalogs (.pot files). + """ + name = 'gettext' + + def finish(self): + I18nBuilder.finish(self) + data = dict( + version = self.config.version, + copyright = self.config.copyright, + project = self.config.project, + # XXX should supply tz + ctime = datetime.now().strftime('%Y-%m-%d %H:%M%z'), + ) + for section, messages in self.status_iterator( + self.catalogs.iteritems(), "writing message catalogs... ", + lambda (section, _):darkgreen(section), len(self.catalogs)): + + pofn = path.join(self.outdir, section + '.pot') + pofile = open(pofn, 'w', encoding='utf-8') + try: + pofile.write(POHEADER % data) + for uid, message in messages.iteritems(): + # message contains *one* line of text ready for translation + message = message.replace(u'\\', ur'\\'). \ + replace(u'"', ur'\"') + pomsg = u'#%s\nmsgid "%s"\nmsgstr ""\n\n' % (uid, message) + pofile.write(pomsg) + finally: + pofile.close() diff --git a/sphinx/builders/linkcheck.py b/sphinx/builders/linkcheck.py index ee114398..ad15b55d 100644 --- a/sphinx/builders/linkcheck.py +++ b/sphinx/builders/linkcheck.py @@ -9,9 +9,13 @@ :license: BSD, see LICENSE for details. """ +import re +import sys +import Queue import socket +import threading from os import path -from urllib2 import build_opener, HTTPError +from urllib2 import build_opener, Request from docutils import nodes @@ -23,6 +27,12 @@ opener = build_opener() opener.addheaders = [('User-agent', 'Mozilla/5.0')] +class HeadRequest(Request): + """Subclass of urllib2.Request that sends a HEAD request.""" + def get_method(self): + return 'HEAD' + + class CheckExternalLinksBuilder(Builder): """ Checks for broken external links. @@ -30,6 +40,7 @@ class CheckExternalLinksBuilder(Builder): name = 'linkcheck' def init(self): + self.to_ignore = map(re.compile, self.app.config.linkcheck_ignore) self.good = set() self.broken = {} self.redirected = {} @@ -38,6 +49,83 @@ class CheckExternalLinksBuilder(Builder): # create output file open(path.join(self.outdir, 'output.txt'), 'w').close() + # create queues and worker threads + self.wqueue = Queue.Queue() + self.rqueue = Queue.Queue() + self.workers = [] + for i in range(self.app.config.linkcheck_workers): + thread = threading.Thread(target=self.check_thread) + thread.setDaemon(True) + thread.start() + self.workers.append(thread) + + def check_thread(self): + kwargs = {} + if sys.version_info > (2, 5) and self.app.config.linkcheck_timeout: + kwargs['timeout'] = self.app.config.linkcheck_timeout + + def check(): + # check for various conditions without bothering the network + if len(uri) == 0 or uri[0:7] == 'mailto:' or uri[0:4] == 'ftp:': + return 'unchecked', '' + elif not (uri[0:5] == 'http:' or uri[0:6] == 'https:'): + return 'local', '' + elif uri in self.good: + return 'working', '' + elif uri in self.broken: + return 'broken', self.broken[uri] + elif uri in self.redirected: + return 'redirected', self.redirected[uri] + for rex in self.to_ignore: + if rex.match(uri): + return 'ignored', '' + + # need to actually check the URI + try: + f = opener.open(HeadRequest(uri), **kwargs) + f.close() + except Exception, err: + self.broken[uri] = str(err) + return 'broken', str(err) + if f.url.rstrip('/') == uri.rstrip('/'): + self.good.add(uri) + return 'working', 'new' + else: + self.redirected[uri] = f.url + return 'redirected', f.url + + while True: + uri, docname, lineno = self.wqueue.get() + if uri is None: + break + status, info = check() + self.rqueue.put((uri, docname, lineno, status, info)) + + def process_result(self, result): + uri, docname, lineno, status, info = result + if status == 'unchecked': + return + if status == 'working' and info != 'new': + return + if lineno: + self.info('(line %3d) ' % lineno, nonl=1) + if status == 'ignored': + self.info(uri + ' - ' + darkgray('ignored')) + elif status == 'local': + self.info(uri + ' - ' + darkgray('local')) + self.write_entry('local', docname, lineno, uri) + elif status == 'working': + self.info(uri + ' - ' + darkgreen('working')) + elif status == 'broken': + self.info(uri + ' - ' + red('broken: ') + info) + self.write_entry('broken', docname, lineno, uri + ': ' + info) + if self.app.quiet: + self.warn('broken link: %s' % uri, + '%s:%s' % (self.env.doc2path(docname), lineno)) + elif status == 'redirected': + self.info(uri + ' - ' + purple('redirected') + ' to ' + info) + self.write_entry('redirected', docname, lineno, uri + ' to ' + info) + def get_target_uri(self, docname, typ=None): return '' @@ -49,61 +137,25 @@ class CheckExternalLinksBuilder(Builder): def write_doc(self, docname, doctree): self.info() + n = 0 for node in doctree.traverse(nodes.reference): - try: - self.check(node, docname) - except KeyError: + if 'refuri' not in node: continue - - def check(self, node, docname): - uri = node['refuri'] - - if '#' in uri: - uri = uri.split('#')[0] - - if uri in self.good: - return - - lineno = None - while lineno is None: - node = node.parent - if node is None: - break - lineno = node.line - - if len(uri) == 0 or uri[0:7] == 'mailto:' or uri[0:4] == 'ftp:': - return - - if lineno: - self.info('(line %3d) ' % lineno, nonl=1) - if uri[0:5] == 'http:' or uri[0:6] == 'https:': - self.info(uri, nonl=1) - - if uri in self.broken: - (r, s) = self.broken[uri] - elif uri in self.redirected: - (r, s) = self.redirected[uri] - else: - (r, s) = self.resolve(uri) - - if r == 0: - self.info(' - ' + darkgreen('working')) - self.good.add(uri) - elif r == 2: - self.info(' - ' + red('broken: ') + s) - self.write_entry('broken', docname, lineno, uri + ': ' + s) - self.broken[uri] = (r, s) - if self.app.quiet: - self.warn('broken link: %s' % uri, - '%s:%s' % (self.env.doc2path(docname), lineno)) - else: - self.info(' - ' + purple('redirected') + ' to ' + s) - self.write_entry('redirected', docname, - lineno, uri + ' to ' + s) - self.redirected[uri] = (r, s) - else: - self.info(uri + ' - ' + darkgray('local')) - self.write_entry('local', docname, lineno, uri) + uri = node['refuri'] + if '#' in uri: + uri = uri.split('#')[0] + lineno = None + while lineno is None: + node = node.parent + if node is None: + break + lineno = node.line + self.wqueue.put((uri, docname, lineno), False) + n += 1 + done = 0 + while done < n: + self.process_result(self.rqueue.get()) + done += 1 if self.broken: self.app.statuscode = 1 @@ -114,21 +166,6 @@ class CheckExternalLinksBuilder(Builder): line, what, uri)) output.close() - def resolve(self, uri): - try: - f = opener.open(uri) - f.close() - except HTTPError, err: - #if err.code == 403 and uri.startswith('http://en.wikipedia.org/'): - # # Wikipedia blocks requests from urllib User-Agent - # return (0, 0) - return (2, str(err)) - except Exception, err: - return (2, str(err)) - if f.url.rstrip('/') == uri.rstrip('/'): - return (0, 0) - else: - return (1, f.url) - def finish(self): - return + for worker in self.workers: + self.wqueue.put((None, None, None), False) diff --git a/sphinx/builders/qthelp.py b/sphinx/builders/qthelp.py index bf536dba..5598aad2 100644 --- a/sphinx/builders/qthelp.py +++ b/sphinx/builders/qthelp.py @@ -130,8 +130,16 @@ class QtHelpBuilder(StandaloneHTMLBuilder): for indexname, indexcls, content, collapse in self.domain_indices: item = section_template % {'title': indexcls.localname, 'ref': '%s.html' % indexname} - sections.append(' '*4*4 + item) - sections = '\n'.join(sections) + sections.append((' ' * 4 * 4 + item).encode('utf-8')) + # sections may be unicode strings or byte strings, we have to make sure + # they are all byte strings before joining them + new_sections = [] + for section in sections: + if isinstance(section, unicode): + new_sections.append(section.encode('utf-8')) + else: + new_sections.append(section) + sections = u'\n'.encode('utf-8').join(new_sections) # keywords keywords = [] @@ -231,7 +239,7 @@ class QtHelpBuilder(StandaloneHTMLBuilder): link = node['refuri'] title = escape(node.astext()).replace('"','"') item = section_template % {'title': title, 'ref': link} - item = ' '*4*indentlevel + item.encode('ascii', 'xmlcharrefreplace') + item = u' ' * 4 * indentlevel + item parts.append(item.encode('ascii', 'xmlcharrefreplace')) elif isinstance(node, nodes.bullet_list): for subnode in node: diff --git a/sphinx/builders/texinfo.py b/sphinx/builders/texinfo.py new file mode 100644 index 00000000..52e32362 --- /dev/null +++ b/sphinx/builders/texinfo.py @@ -0,0 +1,239 @@ +# -*- coding: utf-8 -*- +""" + sphinx.builders.texinfo + ~~~~~~~~~~~~~~~~~~~~~~~ + + Texinfo builder. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from os import path + +from docutils import nodes +from docutils.io import FileOutput +from docutils.utils import new_document +from docutils.frontend import OptionParser + +from sphinx import addnodes +from sphinx.locale import _ +from sphinx.builders import Builder +from sphinx.environment import NoUri +from sphinx.util.nodes import inline_all_toctrees +from sphinx.util.osutil import SEP, copyfile +from sphinx.util.console import bold, darkgreen +from sphinx.writers.texinfo import TexinfoWriter + + +TEXINFO_MAKEFILE = '''\ +# Makefile for Sphinx Texinfo output + +infodir ?= /usr/share/info + +MAKEINFO = makeinfo --no-split +MAKEINFO_html = makeinfo --no-split --html +MAKEINFO_plaintext = makeinfo --no-split --plaintext +TEXI2PDF = texi2pdf --batch --expand +INSTALL_INFO = install-info + +ALLDOCS = $(basename $(wildcard *.texi)) + +all: info +info: $(addsuffix .info,$(ALLDOCS)) +plaintext: $(addsuffix .txt,$(ALLDOCS)) +html: $(addsuffix .html,$(ALLDOCS)) +pdf: $(addsuffix .pdf,$(ALLDOCS)) + +install-info: info +\tfor f in *.info; do \\ +\t cp -t $(infodir) "$$f" && \\ +\t $(INSTALL_INFO) --info-dir=$(infodir) "$$f" ; \\ +\tdone + +uninstall-info: info +\tfor f in *.info; do \\ +\t rm -f "$(infodir)/$$f" ; \\ +\t $(INSTALL_INFO) --delete --info-dir=$(infodir) "$$f" ; \\ +\tdone + +%.info: %.texi +\t$(MAKEINFO) -o '$@' '$<' + +%.txt: %.texi +\t$(MAKEINFO_plaintext) -o '$@' '$<' + +%.html: %.texi +\t$(MAKEINFO_html) -o '$@' '$<' + +%.pdf: %.texi +\t-$(TEXI2PDF) '$<' +\t-$(TEXI2PDF) '$<' +\t-$(TEXI2PDF) '$<' + +clean: +\t-rm -f *.info *.pdf *.txt *.html +\t-rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ky *.pg +\t-rm -f *.vr *.tp *.fn *.fns *.def *.defs *.cp *.cps *.ge *.ges *.mo + +.PHONY: all info plaintext html pdf install-info uninstall-info clean +''' + + +class TexinfoBuilder(Builder): + """ + Builds Texinfo output to create Info documentation. + """ + name = 'texinfo' + format = 'texinfo' + supported_image_types = ['application/pdf', 'image/png', + 'image/gif', 'image/jpeg'] + + def init(self): + self.docnames = [] + self.document_data = [] + + def get_outdated_docs(self): + return 'all documents' # for now + + def get_target_uri(self, docname, typ=None): + if docname not in self.docnames: + raise NoUri + else: + return '%' + docname + + def get_relative_uri(self, from_, to, typ=None): + # ignore source path + return self.get_target_uri(to, typ) + + def init_document_data(self): + preliminary_document_data = map(list, self.config.texinfo_documents) + if not preliminary_document_data: + self.warn('no "texinfo_documents" config value found; no documents ' + 'will be written') + return + # assign subdirs to titles + self.titles = [] + for entry in preliminary_document_data: + docname = entry[0] + if docname not in self.env.all_docs: + self.warn('"texinfo_documents" config value references unknown ' + 'document %s' % docname) + continue + self.document_data.append(entry) + if docname.endswith(SEP+'index'): + docname = docname[:-5] + self.titles.append((docname, entry[2])) + + def write(self, *ignored): + self.init_document_data() + for entry in self.document_data: + docname, targetname, title, author = entry[:4] + targetname += '.texi' + direntry = description = category = '' + if len(entry) > 6: + direntry, description, category = entry[4:7] + toctree_only = False + if len(entry) > 7: + toctree_only = entry[7] + destination = FileOutput( + destination_path=path.join(self.outdir, targetname), + encoding='utf-8') + self.info("processing " + targetname + "... ", nonl=1) + doctree = self.assemble_doctree(docname, toctree_only, + appendices=(self.config.texinfo_appendices or [])) + self.info("writing... ", nonl=1) + + # Add an Index section + if self.config.texinfo_domain_indices: + doctree.append( + nodes.section('', + nodes.title(_("Index"), + nodes.Text(_('Index'), + _('Index'))), + nodes.raw('@printindex ge\n', + nodes.Text('@printindex ge\n', + '@printindex ge\n'), + format="texinfo"))) + self.post_process_images(doctree) + docwriter = TexinfoWriter(self) + settings = OptionParser( + defaults=self.env.settings, + components=(docwriter,)).get_default_values() + settings.author = author + settings.title = title + settings.texinfo_filename = targetname[:-5] + '.info' + settings.texinfo_elements = self.config.texinfo_elements + settings.texinfo_dir_entry = direntry or '' + settings.texinfo_dir_category = category or '' + settings.texinfo_dir_description = description or '' + settings.docname = docname + doctree.settings = settings + docwriter.write(doctree, destination) + self.info("done") + + def assemble_doctree(self, indexfile, toctree_only, appendices): + self.docnames = set([indexfile] + appendices) + self.info(darkgreen(indexfile) + " ", nonl=1) + tree = self.env.get_doctree(indexfile) + tree['docname'] = indexfile + if toctree_only: + # extract toctree nodes from the tree and put them in a + # fresh document + new_tree = new_document('<texinfo output>') + new_sect = nodes.section() + new_sect += nodes.title(u'<Set title in conf.py>', + u'<Set title in conf.py>') + new_tree += new_sect + for node in tree.traverse(addnodes.toctree): + new_sect += node + tree = new_tree + largetree = inline_all_toctrees(self, self.docnames, indexfile, tree, + darkgreen) + largetree['docname'] = indexfile + for docname in appendices: + appendix = self.env.get_doctree(docname) + appendix['docname'] = docname + largetree.append(appendix) + self.info() + self.info("resolving references...") + self.env.resolve_references(largetree, indexfile, self) + # TODO: add support for external :ref:s + for pendingnode in largetree.traverse(addnodes.pending_xref): + docname = pendingnode['refdocname'] + sectname = pendingnode['refsectname'] + newnodes = [nodes.emphasis(sectname, sectname)] + for subdir, title in self.titles: + if docname.startswith(subdir): + newnodes.append(nodes.Text(_(' (in '), _(' (in '))) + newnodes.append(nodes.emphasis(title, title)) + newnodes.append(nodes.Text(')', ')')) + break + else: + pass + pendingnode.replace_self(newnodes) + return largetree + + def finish(self): + # copy image files + if self.images: + self.info(bold('copying images...'), nonl=1) + for src, dest in self.images.iteritems(): + self.info(' '+src, nonl=1) + copyfile(path.join(self.srcdir, src), + path.join(self.outdir, dest)) + self.info() + + self.info(bold('copying Texinfo support files... '), nonl=True) + # copy Makefile + fn = path.join(self.outdir, 'Makefile') + self.info(fn, nonl=1) + try: + mkfile = open(fn, 'w') + try: + mkfile.write(TEXINFO_MAKEFILE) + finally: + mkfile.close() + except (IOError, OSError), err: + self.warn("error writing file %s: %s" % (fn, err)) + self.info(' done') diff --git a/sphinx/builders/versioning.py b/sphinx/builders/versioning.py new file mode 100644 index 00000000..8c6438c7 --- /dev/null +++ b/sphinx/builders/versioning.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +""" + sphinx.builders.versioning + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +import os +import cPickle as pickle + +from docutils.utils import Reporter + +from sphinx.util.osutil import copyfile +from sphinx.environment import WarningStream +from sphinx.versioning import add_uids, merge_doctrees + + +class VersioningBuilderMixin(object): + def walk_doctree_files(self): + for root, dirs, files in os.walk(self.doctreedir): + for fn in files: + yield os.path.join(root, fn) + + def init(self): + for fp in self.walk_doctree_files(): + if fp.endswith('.doctree'): + copyfile(fp, fp + '.old') + + def get_old_doctree(self, docname): + fp = self.env.doc2path(docname, self.doctreedir, '.doctree.old') + try: + f = open(fp, 'rb') + try: + doctree = pickle.load(f) + finally: + f.close() + except IOError: + return None + doctree.settings.env = self.env + doctree.reporter = Reporter(self.env.doc2path(docname), 2, 5, + stream=WarningStream(self.env._warnfunc)) + return doctree + + def resave_doctree(self, docname, doctree): + reporter = doctree.reporter + doctree.reporter = None + doctree.settings.warning_stream = None + doctree.settings.env = None + doctree.settings.record_dependencies = None + + fp = self.env.doc2path(docname, self.doctreedir, '.doctree') + f = open(fp, 'wb') + try: + pickle.dump(doctree, f, pickle.HIGHEST_PROTOCOL) + finally: + f.close() + + doctree.reporter = reporter + + def handle_versioning(self, docname, doctree, condition): + old_doctree = self.get_old_doctree(docname) + if old_doctree: + list(merge_doctrees(old_doctree, doctree, condition)) + else: + list(add_uids(doctree, condition)) + self.resave_doctree(docname, doctree) + + def finish(self): + for fp in self.walk_doctree_files(): + if fp.endswith('.doctree.old'): + os.remove(fp) diff --git a/sphinx/builders/websupport.py b/sphinx/builders/websupport.py new file mode 100644 index 00000000..5165bc19 --- /dev/null +++ b/sphinx/builders/websupport.py @@ -0,0 +1,160 @@ +# -*- coding: utf-8 -*- +""" + sphinx.builders.websupport + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Builder for the web support package. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from os import path +import posixpath +import shutil + +from docutils.io import StringOutput + +from sphinx.jinja2glue import BuiltinTemplateLoader +from sphinx.util.osutil import os_path, relative_uri, ensuredir, copyfile +from sphinx.util.websupport import is_commentable +from sphinx.builders.html import PickleHTMLBuilder +from sphinx.builders.versioning import VersioningBuilderMixin +from sphinx.writers.websupport import WebSupportTranslator + + +class WebSupportBuilder(PickleHTMLBuilder, VersioningBuilderMixin): + """ + Builds documents for the web support package. + """ + name = 'websupport' + + def init(self): + PickleHTMLBuilder.init(self) + VersioningBuilderMixin.init(self) + # templates are needed for this builder, but the serializing + # builder does not initialize them + self.init_templates() + if not isinstance(self.templates, BuiltinTemplateLoader): + raise RuntimeError('websupport builder must be used with ' + 'the builtin templates') + # add our custom JS + self.script_files.append('_static/websupport.js') + + def set_webinfo(self, staticdir, virtual_staticdir, search, storage): + self.staticdir = staticdir + self.virtual_staticdir = virtual_staticdir + self.search = search + self.storage = storage + + def init_translator_class(self): + self.translator_class = WebSupportTranslator + + def prepare_writing(self, docnames): + PickleHTMLBuilder.prepare_writing(self, docnames) + self.globalcontext['no_search_suffix'] = True + + def write_doc(self, docname, doctree): + destination = StringOutput(encoding='utf-8') + doctree.settings = self.docsettings + + self.handle_versioning(docname, doctree, is_commentable) + + self.cur_docname = docname + self.secnumbers = self.env.toc_secnumbers.get(docname, {}) + self.imgpath = '/' + posixpath.join(self.virtual_staticdir, '_images') + self.post_process_images(doctree) + self.dlpath = '/' + posixpath.join(self.virtual_staticdir, '_downloads') + self.docwriter.write(doctree, destination) + self.docwriter.assemble_parts() + body = self.docwriter.parts['fragment'] + metatags = self.docwriter.clean_meta + + ctx = self.get_doc_context(docname, body, metatags) + self.index_page(docname, doctree, ctx.get('title', '')) + self.handle_page(docname, ctx, event_arg=doctree) + + def load_indexer(self, docnames): + self.indexer = self.search + self.indexer.init_indexing(changed=docnames) + + def _render_page(self, pagename, addctx, templatename, event_arg=None): + # This is mostly copied from StandaloneHTMLBuilder. However, instead + # of rendering the template and saving the html, create a context + # dict and pickle it. + ctx = self.globalcontext.copy() + ctx['pagename'] = pagename + + def pathto(otheruri, resource=False, + baseuri=self.get_target_uri(pagename)): + if resource and '://' in otheruri: + return otheruri + elif not resource: + otheruri = self.get_target_uri(otheruri) + return relative_uri(baseuri, otheruri) or '#' + else: + return '/' + posixpath.join(self.virtual_staticdir, otheruri) + ctx['pathto'] = pathto + ctx['hasdoc'] = lambda name: name in self.env.all_docs + ctx['encoding'] = self.config.html_output_encoding + ctx['toctree'] = lambda **kw: self._get_local_toctree(pagename, **kw) + self.add_sidebars(pagename, ctx) + ctx.update(addctx) + + self.app.emit('html-page-context', pagename, templatename, + ctx, event_arg) + + # create a dict that will be pickled and used by webapps + doc_ctx = { + 'body': ctx.get('body', ''), + 'title': ctx.get('title', ''), + } + # partially render the html template to get at interesting macros + template = self.templates.environment.get_template(templatename) + template_module = template.make_module(ctx) + for item in ['sidebar', 'relbar', 'script', 'css']: + if hasattr(template_module, item): + doc_ctx[item] = getattr(template_module, item)() + + return ctx, doc_ctx + + def handle_page(self, pagename, addctx, templatename='page.html', + outfilename=None, event_arg=None): + ctx, doc_ctx = self._render_page(pagename, addctx, + templatename, event_arg) + + if not outfilename: + outfilename = path.join(self.outdir, 'pickles', + os_path(pagename) + self.out_suffix) + ensuredir(path.dirname(outfilename)) + self.dump_context(doc_ctx, outfilename) + + # if there is a source file, copy the source file for the + # "show source" link + if ctx.get('sourcename'): + source_name = path.join(self.staticdir, + '_sources', os_path(ctx['sourcename'])) + ensuredir(path.dirname(source_name)) + copyfile(self.env.doc2path(pagename), source_name) + + def handle_finish(self): + # get global values for css and script files + _, doc_ctx = self._render_page('tmp', {}, 'page.html') + self.globalcontext['css'] = doc_ctx['css'] + self.globalcontext['script'] = doc_ctx['script'] + + PickleHTMLBuilder.handle_finish(self) + VersioningBuilderMixin.finish(self) + + # move static stuff over to separate directory + directories = ['_images', '_static'] + for directory in directories: + src = path.join(self.outdir, directory) + dst = path.join(self.staticdir, directory) + if path.isdir(src): + if path.isdir(dst): + shutil.rmtree(dst) + shutil.move(src, dst) + + def dump_search_index(self): + self.indexer.finish_indexing() diff --git a/sphinx/config.py b/sphinx/config.py index 19e29919..90c4b562 100644 --- a/sphinx/config.py +++ b/sphinx/config.py @@ -11,16 +11,23 @@ import os import re +import sys from os import path from sphinx.errors import ConfigError from sphinx.util.osutil import make_filename +from sphinx.util.pycompat import bytes, b, convert_with_2to3 -nonascii_re = re.compile(r'[\x80-\xff]') +nonascii_re = re.compile(b(r'[\x80-\xff]')) +CONFIG_SYNTAX_ERROR = "There is a syntax error in your configuration file: %s" +if sys.version_info >= (3, 0): + CONFIG_SYNTAX_ERROR += "\nDid you change the syntax from 2.x to 3.x?" class Config(object): - """Configuration file abstraction.""" + """ + Configuration file abstraction. + """ # the values are: (default, what needs to be rebuilt if changed) @@ -69,7 +76,7 @@ class Config(object): html_theme = ('default', 'html'), html_theme_path = ([], 'html'), html_theme_options = ({}, 'html'), - html_title = (lambda self: '%s v%s documentation' % + html_title = (lambda self: '%s %s documentation' % (self.project, self.release), 'html'), html_short_title = (lambda self: self.html_title, 'html'), @@ -85,7 +92,7 @@ class Config(object): html_additional_pages = ({}, 'html'), html_use_modindex = (True, 'html'), # deprecated html_domain_indices = (True, 'html'), - html_add_permalinks = (True, 'html'), + html_add_permalinks = (u'\u00B6', 'html'), html_use_index = (True, 'html'), html_split_index = (False, 'html'), html_copy_source = (True, 'html'), @@ -99,6 +106,8 @@ class Config(object): html_output_encoding = ('utf-8', 'html'), html_compact_lists = (True, 'html'), html_secnumber_suffix = ('. ', 'html'), + html_search_language = (None, 'html'), + html_search_options = ({}, 'html'), # HTML help only options htmlhelp_basename = (lambda self: make_filename(self.project), None), @@ -120,6 +129,7 @@ class Config(object): epub_identifier = ('unknown', 'html'), epub_scheme = ('unknown', 'html'), epub_uid = ('unknown', 'env'), + epub_cover = ((), 'env'), epub_pre_files = ([], 'env'), epub_post_files = ([], 'env'), epub_exclude_files = ([], 'env'), @@ -133,7 +143,7 @@ class Config(object): latex_use_parts = (False, None), latex_use_modindex = (True, None), # deprecated latex_domain_indices = (True, None), - latex_show_urls = (False, None), + latex_show_urls = ('no', None), latex_show_pagerefs = (False, None), # paper_size and font_size are still separate values # so that you can give them easily on the command line @@ -146,11 +156,23 @@ class Config(object): latex_preamble = ('', None), # text options - text_sectionchars = ('*=-~"+`', 'text'), - text_windows_newlines = (False, 'text'), + text_sectionchars = ('*=-~"+`', 'env'), + text_newlines = ('unix', 'env'), # manpage options man_pages = ([], None), + man_show_urls = (False, None), + + # Texinfo options + texinfo_documents = ([], None), + texinfo_appendices = ([], None), + texinfo_elements = ({}, None), + texinfo_domain_indices = (True, None), + + # linkcheck options + linkcheck_ignore = ([], None), + linkcheck_timeout = (None, None), + linkcheck_workers = (5, None), ) def __init__(self, dirname, filename, overrides, tags): @@ -163,12 +185,30 @@ class Config(object): config['tags'] = tags olddir = os.getcwd() try: + # we promise to have the config dir as current dir while the + # config file is executed + os.chdir(dirname) + # get config source + f = open(config_file, 'rb') + try: + source = f.read() + finally: + f.close() try: - os.chdir(dirname) - execfile(config['__file__'], config) + # compile to a code object, handle syntax errors + try: + code = compile(source, config_file, 'exec') + except SyntaxError: + if convert_with_2to3: + # maybe the file uses 2.x syntax; try to refactor to + # 3.x syntax using 2to3 + source = convert_with_2to3(config_file) + code = compile(source, config_file, 'exec') + else: + raise + exec code in config except SyntaxError, err: - raise ConfigError('There is a syntax error in your ' - 'configuration file: ' + str(err)) + raise ConfigError(CONFIG_SYNTAX_ERROR % err) finally: os.chdir(olddir) @@ -182,10 +222,11 @@ class Config(object): # check all string values for non-ASCII characters in bytestrings, # since that can result in UnicodeErrors all over the place for name, value in self._raw_config.iteritems(): - if isinstance(value, str) and nonascii_re.search(value): + if isinstance(value, bytes) and nonascii_re.search(value): warn('the config value %r is set to a string with non-ASCII ' 'characters; this can lead to Unicode errors occurring. ' - 'Please use Unicode strings, e.g. u"Content".' % name) + 'Please use Unicode strings, e.g. %r.' % (name, u'Content') + ) def init_values(self): config = self._raw_config diff --git a/sphinx/directives/code.py b/sphinx/directives/code.py index bfde48e5..99fb3502 100644 --- a/sphinx/directives/code.py +++ b/sphinx/directives/code.py @@ -7,10 +7,8 @@ :license: BSD, see LICENSE for details. """ -import os import sys import codecs -from os import path from docutils import nodes from docutils.parsers.rst import Directive, directives @@ -94,23 +92,11 @@ class LiteralInclude(Directive): def run(self): document = self.state.document - filename = self.arguments[0] if not document.settings.file_insertion_enabled: return [document.reporter.warning('File insertion disabled', line=self.lineno)] env = document.settings.env - if filename.startswith('/') or filename.startswith(os.sep): - rel_fn = filename[1:] - else: - docdir = path.dirname(env.doc2path(env.docname, base=None)) - rel_fn = path.join(docdir, filename) - try: - fn = path.join(env.srcdir, rel_fn) - except UnicodeDecodeError: - # the source directory is a bytestring with non-ASCII characters; - # let's try to encode the rel_fn in the file system encoding - rel_fn = rel_fn.encode(sys.getfilesystemencoding()) - fn = path.join(env.srcdir, rel_fn) + rel_filename, filename = env.relfn2path(self.arguments[0]) if 'pyobject' in self.options and 'lines' in self.options: return [document.reporter.warning( @@ -120,7 +106,7 @@ class LiteralInclude(Directive): encoding = self.options.get('encoding', env.config.source_encoding) codec_info = codecs.lookup(encoding) try: - f = codecs.StreamReaderWriter(open(fn, 'U'), + f = codecs.StreamReaderWriter(open(filename, 'rb'), codec_info[2], codec_info[3], 'strict') lines = f.readlines() f.close() @@ -137,7 +123,7 @@ class LiteralInclude(Directive): objectname = self.options.get('pyobject') if objectname is not None: from sphinx.pycode import ModuleAnalyzer - analyzer = ModuleAnalyzer.for_file(fn, '') + analyzer = ModuleAnalyzer.for_file(filename, '') tags = analyzer.find_tags() if objectname not in tags: return [document.reporter.warning( @@ -179,14 +165,14 @@ class LiteralInclude(Directive): text = ''.join(lines) if self.options.get('tab-width'): text = text.expandtabs(self.options['tab-width']) - retnode = nodes.literal_block(text, text, source=fn) + retnode = nodes.literal_block(text, text, source=filename) retnode.line = 1 retnode.attributes['line_number'] = self.lineno if self.options.get('language', ''): retnode['language'] = self.options['language'] if 'linenos' in self.options: retnode['linenos'] = True - document.settings.env.note_dependency(rel_fn) + env.note_dependency(rel_filename) return [retnode] diff --git a/sphinx/directives/other.py b/sphinx/directives/other.py index f59a29e1..246d6403 100644 --- a/sphinx/directives/other.py +++ b/sphinx/directives/other.py @@ -11,21 +11,28 @@ import os from docutils import nodes from docutils.parsers.rst import Directive, directives +from docutils.parsers.rst.directives.misc import Class +from docutils.parsers.rst.directives.misc import Include as BaseInclude from sphinx import addnodes -from sphinx.locale import pairindextypes, _ +from sphinx.locale import _ from sphinx.util import url_re, docname_join -from sphinx.util.nodes import explicit_title_re +from sphinx.util.nodes import explicit_title_re, process_index_entry from sphinx.util.compat import make_admonition from sphinx.util.matching import patfilter +def int_or_nothing(argument): + if not argument: + return 999 + return int(argument) + + class TocTree(Directive): """ Directive to notify Sphinx about the hierarchical structure of the docs, and to include a table-of-contents like tree in the current document. """ - has_content = True required_arguments = 0 optional_arguments = 0 @@ -34,7 +41,7 @@ class TocTree(Directive): 'maxdepth': int, 'glob': directives.flag, 'hidden': directives.flag, - 'numbered': directives.flag, + 'numbered': int_or_nothing, 'titlesonly': directives.flag, } @@ -99,7 +106,7 @@ class TocTree(Directive): subnode['maxdepth'] = self.options.get('maxdepth', -1) subnode['glob'] = glob subnode['hidden'] = 'hidden' in self.options - subnode['numbered'] = 'numbered' in self.options + subnode['numbered'] = self.options.get('numbered', 0) subnode['titlesonly'] = 'titlesonly' in self.options wrappernode = nodes.compound(classes=['toctree-wrapper']) wrappernode.append(subnode) @@ -112,7 +119,6 @@ class Author(Directive): Directive to give the name of the author of the current document or section. Shown in the output only if the show_authors option is on. """ - has_content = False required_arguments = 1 optional_arguments = 0 @@ -145,17 +151,12 @@ class Index(Directive): """ Directive to add entries to the index. """ - has_content = False required_arguments = 1 optional_arguments = 0 final_argument_whitespace = True option_spec = {} - indextypes = [ - 'single', 'pair', 'double', 'triple', - ] - def run(self): arguments = self.arguments[0].split('\n') env = self.state.document.settings.env @@ -166,28 +167,7 @@ class Index(Directive): indexnode['entries'] = ne = [] indexnode['inline'] = False for entry in arguments: - entry = entry.strip() - for type in pairindextypes: - if entry.startswith(type+':'): - value = entry[len(type)+1:].strip() - value = pairindextypes[type] + '; ' + value - ne.append(('pair', value, targetid, value)) - break - else: - for type in self.indextypes: - if entry.startswith(type+':'): - value = entry[len(type)+1:].strip() - if type == 'double': - type = 'pair' - ne.append((type, value, targetid, value)) - break - # shorthand notation for single entries - else: - for value in entry.split(','): - value = value.strip() - if not value: - continue - ne.append(('single', value, targetid, value)) + ne.extend(process_index_entry(entry, targetid)) return [indexnode, targetnode] @@ -195,7 +175,6 @@ class VersionChange(Directive): """ Directive to describe a change/addition/deprecation in a specific version. """ - has_content = True required_arguments = 1 optional_arguments = 1 @@ -225,7 +204,6 @@ class SeeAlso(Directive): """ An admonition mentioning things to look at as reference. """ - has_content = True required_arguments = 0 optional_arguments = 1 @@ -251,7 +229,6 @@ class TabularColumns(Directive): """ Directive to give an explicit tabulary column definition to LaTeX. """ - has_content = False required_arguments = 1 optional_arguments = 0 @@ -269,7 +246,6 @@ class Centered(Directive): """ Directive to create a centered line of bold text. """ - has_content = False required_arguments = 1 optional_arguments = 0 @@ -286,12 +262,10 @@ class Centered(Directive): return [subnode] + messages - class Acks(Directive): """ Directive for a list of names. """ - has_content = True required_arguments = 0 optional_arguments = 0 @@ -313,7 +287,6 @@ class HList(Directive): """ Directive for a list that gets compacted horizontally. """ - has_content = True required_arguments = 0 optional_arguments = 0 @@ -350,7 +323,6 @@ class Only(Directive): """ Directive to only include text if the given tag(s) are enabled. """ - has_content = True required_arguments = 1 optional_arguments = 0 @@ -367,19 +339,16 @@ class Only(Directive): return [node] -from docutils.parsers.rst.directives.misc import Include as BaseInclude - class Include(BaseInclude): """ Like the standard "Include" directive, but interprets absolute paths - correctly. + "correctly", i.e. relative to source directory. """ def run(self): - if self.arguments[0].startswith('/') or \ - self.arguments[0].startswith(os.sep): - env = self.state.document.settings.env - self.arguments[0] = os.path.join(env.srcdir, self.arguments[0][1:]) + env = self.state.document.settings.env + rel_filename, filename = env.relfn2path(self.arguments[0]) + self.arguments[0] = filename return BaseInclude.run(self) @@ -400,7 +369,6 @@ directives.register_directive('only', Only) directives.register_directive('include', Include) # register the standard rst class directive under a different name -from docutils.parsers.rst.directives.misc import Class # only for backwards compatibility now directives.register_directive('cssclass', Class) # new standard name when default-domain with "class" is in effect diff --git a/sphinx/domains/__init__.py b/sphinx/domains/__init__.py index b16e6109..d6faa127 100644 --- a/sphinx/domains/__init__.py +++ b/sphinx/domains/__init__.py @@ -66,9 +66,8 @@ class Index(object): self.domain = domain def generate(self, docnames=None): - """ - Return entries for the index given by *name*. If *docnames* is given, - restrict to entries referring to these docnames. + """Return entries for the index given by *name*. If *docnames* is + given, restrict to entries referring to these docnames. The return value is a tuple of ``(content, collapse)``, where *collapse* is a boolean that determines if sub-entries should start collapsed (for @@ -158,8 +157,7 @@ class Domain(object): self.objtypes_for_role = self._role2type.get def role(self, name): - """ - Return a role adapter function that always gives the registered + """Return a role adapter function that always gives the registered role its full name ('domain:name') as the first argument. """ if name in self._role_cache: @@ -175,8 +173,7 @@ class Domain(object): return role_adapter def directive(self, name): - """ - Return a directive adapter class that always gives the registered + """Return a directive adapter class that always gives the registered directive its full name ('domain:name') as ``self.name``. """ if name in self._directive_cache: @@ -195,21 +192,16 @@ class Domain(object): # methods that should be overwritten def clear_doc(self, docname): - """ - Remove traces of a document in the domain-specific inventories. - """ + """Remove traces of a document in the domain-specific inventories.""" pass def process_doc(self, env, docname, document): - """ - Process a document after it is read by the environment. - """ + """Process a document after it is read by the environment.""" pass def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode): - """ - Resolve the ``pending_xref`` *node* with the given *typ* and *target*. + """Resolve the pending_xref *node* with the given *typ* and *target*. This method should return a new node, to replace the xref node, containing the *contnode* which is the markup content of the @@ -225,8 +217,7 @@ class Domain(object): pass def get_objects(self): - """ - Return an iterable of "object descriptions", which are tuples with + """Return an iterable of "object descriptions", which are tuples with five items: * `name` -- fully qualified name @@ -245,9 +236,7 @@ class Domain(object): return [] def get_type_name(self, type, primary=False): - """ - Return full name for given ObjType. - """ + """Return full name for given ObjType.""" if primary: return type.lname return _('%s %s') % (self.label, type.lname) diff --git a/sphinx/domains/c.py b/sphinx/domains/c.py index 48fbb36f..b0dd332b 100644 --- a/sphinx/domains/c.py +++ b/sphinx/domains/c.py @@ -168,7 +168,7 @@ class CObject(ObjectDescription): indextext = self.get_index_text(name) if indextext: - self.indexnode['entries'].append(('single', indextext, name, name)) + self.indexnode['entries'].append(('single', indextext, name, '')) def before_content(self): self.typename_set = False diff --git a/sphinx/domains/cpp.py b/sphinx/domains/cpp.py index c7074fb8..4e40dde7 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -28,6 +28,7 @@ _whitespace_re = re.compile(r'\s+(?u)') _string_re = re.compile(r"[LuU8]?('([^'\\]*(?:\\.[^'\\]*)*)'" r'|"([^"\\]*(?:\\.[^"\\]*)*)")', re.S) _visibility_re = re.compile(r'\b(public|private|protected)\b') +_array_def_re = re.compile(r'\[\s*(.+?)?\s*\]') _operator_re = re.compile(r'''(?x) \[\s*\] | \(\s*\) @@ -109,7 +110,7 @@ class DefinitionError(Exception): return self.description def __str__(self): - return unicode(self.encode('utf-8')) + return unicode(self).encode('utf-8') class DefExpr(object): @@ -131,17 +132,21 @@ class DefExpr(object): def __ne__(self, other): return not self.__eq__(other) + __hash__ = None + def clone(self): - """Close a definition expression node""" + """Clone a definition expression node.""" return deepcopy(self) def get_id(self): - """Returns the id for the node""" + """Return the id for the node.""" return u'' def get_name(self): - """Returns the name. Returns either `None` or a node with - a name you might call :meth:`split_owner` on. + """Return the name. + + Returns either `None` or a node with a name you might call + :meth:`split_owner` on. """ return None @@ -154,7 +159,7 @@ class DefExpr(object): return None, self def prefix(self, prefix): - """Prefixes a name node (a node returned by :meth:`get_name`).""" + """Prefix a name node (a node returned by :meth:`get_name`).""" raise NotImplementedError() def __str__(self): @@ -269,6 +274,22 @@ class PtrDefExpr(WrappingDefExpr): return u'%s*' % self.typename +class ArrayDefExpr(WrappingDefExpr): + + def __init__(self, typename, size_hint=None): + WrappingDefExpr.__init__(self, typename) + self.size_hint = size_hint + + def get_id(self): + return self.typename.get_id() + u'A' + + def __unicode__(self): + return u'%s[%s]' % ( + self.typename, + self.size_hint is not None and unicode(self.size_hint) or u'' + ) + + class RefDefExpr(WrappingDefExpr): def get_id(self): @@ -558,6 +579,8 @@ class DefinitionParser(object): expr = ConstDefExpr(expr) elif self.skip_string('*'): expr = PtrDefExpr(expr) + elif self.match(_array_def_re): + expr = ArrayDefExpr(expr, self.last_match.group(1)) elif self.skip_string('&'): expr = RefDefExpr(expr) else: @@ -829,7 +852,7 @@ class CPPObject(ObjectDescription): indextext = self.get_index_text(name) if indextext: - self.indexnode['entries'].append(('single', indextext, theid, name)) + self.indexnode['entries'].append(('single', indextext, theid, '')) def before_content(self): lastname = self.names and self.names[-1] @@ -977,8 +1000,9 @@ class CPPFunctionObject(CPPObject): class CPPCurrentNamespace(Directive): - """This directive is just to tell Sphinx that we're documenting - stuff in namespace foo. + """ + This directive is just to tell Sphinx that we're documenting stuff in + namespace foo. """ has_content = False diff --git a/sphinx/domains/javascript.py b/sphinx/domains/javascript.py index 4ad84dd3..57cee8f9 100644 --- a/sphinx/domains/javascript.py +++ b/sphinx/domains/javascript.py @@ -96,7 +96,7 @@ class JSObject(ObjectDescription): indextext = self.get_index_text(objectname, name_obj) if indextext: self.indexnode['entries'].append(('single', indextext, - fullname, fullname)) + fullname, '')) def get_index_text(self, objectname, name_obj): name, obj = name_obj @@ -130,7 +130,7 @@ class JSCallable(JSObject): class JSConstructor(JSCallable): - """Like a callable but with a different prefix""" + """Like a callable but with a different prefix.""" display_prefix = 'class ' diff --git a/sphinx/domains/python.py b/sphinx/domains/python.py index d2242cdd..aa3375df 100644 --- a/sphinx/domains/python.py +++ b/sphinx/domains/python.py @@ -110,22 +110,21 @@ class PyObject(ObjectDescription): ] def get_signature_prefix(self, sig): - """ - May return a prefix to put before the object name in the signature. + """May return a prefix to put before the object name in the + signature. """ return '' def needs_arglist(self): - """ - May return true if an empty argument list is to be generated even if + """May return true if an empty argument list is to be generated even if the document contains none. """ return False def handle_signature(self, sig, signode): - """ - Transform a Python signature into RST nodes. - Returns (fully qualified name of the thing, classname if any). + """Transform a Python signature into RST nodes. + + Return (fully qualified name of the thing, classname if any). If inside a class, the current class name is handled intelligently: * it is stripped from the displayed name if present @@ -195,9 +194,7 @@ class PyObject(ObjectDescription): return fullname, name_prefix def get_index_text(self, modname, name): - """ - Return the text for the index entry of the object. - """ + """Return the text for the index entry of the object.""" raise NotImplementedError('must be implemented in subclasses') def add_target_and_index(self, name_cls, sig, signode): @@ -224,7 +221,7 @@ class PyObject(ObjectDescription): indextext = self.get_index_text(modname, name_cls) if indextext: self.indexnode['entries'].append(('single', indextext, - fullname, fullname)) + fullname, '')) def before_content(self): # needed for automatic qualification of members (reset in subclasses) @@ -402,7 +399,7 @@ class PyModule(Directive): if not noindex: indextext = _('%s (module)') % modname inode = addnodes.index(entries=[('single', indextext, - 'module-' + modname, modname)]) + 'module-' + modname, '')]) ret.append(inode) return ret @@ -576,9 +573,8 @@ class PythonDomain(Domain): del self.data['modules'][modname] def find_obj(self, env, modname, classname, name, type, searchmode=0): - """ - Find a Python object for "name", perhaps using the given module and/or - classname. Returns a list of (name, object entry) tuples. + """Find a Python object for "name", perhaps using the given module + and/or classname. Returns a list of (name, object entry) tuples. """ # skip parens if name[-2:] == '()': diff --git a/sphinx/domains/rst.py b/sphinx/domains/rst.py index 6b3e05ee..e67f827e 100644 --- a/sphinx/domains/rst.py +++ b/sphinx/domains/rst.py @@ -48,7 +48,7 @@ class ReSTMarkup(ObjectDescription): indextext = self.get_index_text(self.objtype, name) if indextext: self.indexnode['entries'].append(('single', indextext, - targetname, targetname)) + targetname, '')) def get_index_text(self, objectname, name): if self.objtype == 'directive': @@ -59,9 +59,10 @@ class ReSTMarkup(ObjectDescription): def parse_directive(d): - """ - Parses a directive signature. Returns (directive, arguments) string tuple. - if no arguments are given, returns (directive, ''). + """Parse a directive signature. + + Returns (directive, arguments) string tuple. If no arguments are given, + returns (directive, ''). """ dir = d.strip() if not dir.startswith('.'): diff --git a/sphinx/domains/std.py b/sphinx/domains/std.py index 0625a451..7dcec616 100644 --- a/sphinx/domains/std.py +++ b/sphinx/domains/std.py @@ -14,6 +14,7 @@ import unicodedata from docutils import nodes from docutils.parsers.rst import directives +from docutils.statemachine import ViewList from sphinx import addnodes from sphinx.roles import XRefRole @@ -60,7 +61,7 @@ class GenericObject(ObjectDescription): indextype = 'single' indexentry = self.indextemplate % (name,) self.indexnode['entries'].append((indextype, indexentry, - targetname, targetname)) + targetname, '')) self.env.domaindata['std']['objects'][self.objtype, name] = \ self.env.docname, targetname @@ -81,8 +82,8 @@ class EnvVarXRefRole(XRefRole): tgtid = 'index-%s' % env.new_serialno('index') indexnode = addnodes.index() indexnode['entries'] = [ - ('single', varname, tgtid, varname), - ('single', _('environment variable; %s') % varname, tgtid, varname) + ('single', varname, tgtid, ''), + ('single', _('environment variable; %s') % varname, tgtid, '') ] targetnode = nodes.target('', '', ids=[tgtid]) document.note_explicit_target(targetnode) @@ -117,7 +118,7 @@ class Target(Directive): indextype = indexentry[:colon].strip() indexentry = indexentry[colon+1:].strip() inode = addnodes.index(entries=[(indextype, indexentry, - targetname, targetname)]) + targetname, '')]) ret.insert(0, inode) name = self.name if ':' in self.name: @@ -160,7 +161,7 @@ class Cmdoption(ObjectDescription): self.indexnode['entries'].append( ('pair', _('%scommand line option; %s') % ((currprogram and currprogram + ' ' or ''), sig), - targetname, targetname)) + targetname, '')) self.env.domaindata['std']['progoptions'][currprogram, name] = \ self.env.docname, targetname @@ -206,8 +207,8 @@ class OptionXRefRole(XRefRole): class Glossary(Directive): """ - Directive to create a glossary with cross-reference targets - for :term: roles. + Directive to create a glossary with cross-reference targets for :term: + roles. """ has_content = True @@ -224,37 +225,100 @@ class Glossary(Directive): gloss_entries = env.temp_data.setdefault('gloss_entries', set()) node = addnodes.glossary() node.document = self.state.document - self.state.nested_parse(self.content, self.content_offset, node) - - # the content should be definition lists - dls = [child for child in node - if isinstance(child, nodes.definition_list)] - # now, extract definition terms to enable cross-reference creation - new_dl = nodes.definition_list() - new_dl['classes'].append('glossary') + + # This directive implements a custom format of the reST definition list + # that allows multiple lines of terms before the definition. This is + # easy to parse since we know that the contents of the glossary *must + # be* a definition list. + + # first, collect single entries + entries = [] + in_definition = True + was_empty = True + messages = [] + for (source, lineno, line) in self.content.xitems(): + # empty line -> add to last definition + if not line: + if in_definition and entries: + entries[-1][1].append('', source, lineno) + was_empty = True + continue + # unindented line -> a term + if line and not line[0].isspace(): + # first term of definition + if in_definition: + if not was_empty: + messages.append(self.state.reporter.system_message( + 2, 'glossary term must be preceded by empty line', + source=source, line=lineno)) + entries.append(([(line, source, lineno)], ViewList())) + in_definition = False + # second term and following + else: + if was_empty: + messages.append(self.state.reporter.system_message( + 2, 'glossary terms must not be separated by empty ' + 'lines', source=source, line=lineno)) + entries[-1][0].append((line, source, lineno)) + else: + if not in_definition: + # first line of definition, determines indentation + in_definition = True + indent_len = len(line) - len(line.lstrip()) + entries[-1][1].append(line[indent_len:], source, lineno) + was_empty = False + + # now, parse all the entries into a big definition list items = [] - for dl in dls: - for li in dl.children: - if not li.children or not isinstance(li[0], nodes.term): - continue - termtext = li.children[0].astext() + for terms, definition in entries: + termtexts = [] + termnodes = [] + system_messages = [] + ids = [] + for line, source, lineno in terms: + # parse the term with inline markup + res = self.state.inline_text(line, lineno) + system_messages.extend(res[1]) + + # get a text-only representation of the term and register it + # as a cross-reference target + tmp = nodes.paragraph('', '', *res[0]) + termtext = tmp.astext() new_id = 'term-' + nodes.make_id(termtext) if new_id in gloss_entries: new_id = 'term-' + str(len(gloss_entries)) gloss_entries.add(new_id) - li[0]['names'].append(new_id) - li[0]['ids'].append(new_id) + ids.append(new_id) objects['term', termtext.lower()] = env.docname, new_id + termtexts.append(termtext) # add an index entry too indexnode = addnodes.index() - indexnode['entries'] = [('single', termtext, new_id, termtext)] - li.insert(0, indexnode) - items.append((termtext, li)) + indexnode['entries'] = [('single', termtext, new_id, 'main')] + termnodes.append(indexnode) + termnodes.extend(res[0]) + termnodes.append(addnodes.termsep()) + # make a single "term" node with all the terms, separated by termsep + # nodes (remove the dangling trailing separator) + term = nodes.term('', '', *termnodes[:-1]) + term['ids'].extend(ids) + term['names'].extend(ids) + term += system_messages + + defnode = nodes.definition() + self.state.nested_parse(definition, definition.items[0][1], defnode) + + items.append((termtexts, + nodes.definition_list_item('', term, defnode))) + if 'sorted' in self.options: - items.sort(key=lambda x: unicodedata.normalize('NFD', x[0].lower())) - new_dl.extend(item[1] for item in items) - node.children = [new_dl] - return [node] + items.sort(key=lambda x: + unicodedata.normalize('NFD', x[0][0].lower())) + + dlist = nodes.definition_list() + dlist['classes'].append('glossary') + dlist.extend(item[1] for item in items) + node += dlist + return messages + [node] token_re = re.compile('`([a-z_][a-z0-9_]*)`') diff --git a/sphinx/environment.py b/sphinx/environment.py index 2c0dc99e..2236c53a 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -11,11 +11,13 @@ import re import os +import sys import time import types import codecs import imghdr import string +import posixpath import unicodedata import cPickle as pickle from os import path @@ -25,9 +27,9 @@ from itertools import izip, groupby from docutils import nodes from docutils.io import FileInput, NullOutput from docutils.core import Publisher -from docutils.utils import Reporter, relative_path +from docutils.utils import Reporter, relative_path, new_document from docutils.readers import standalone -from docutils.parsers.rst import roles, directives +from docutils.parsers.rst import roles, directives, Parser as RSTParser from docutils.parsers.rst.languages import en as english from docutils.parsers.rst.directives.html import MetaBody from docutils.writers import UnfilteredWriter @@ -35,15 +37,16 @@ from docutils.transforms import Transform from docutils.transforms.parts import ContentsFilter from sphinx import addnodes -from sphinx.util import url_re, get_matching_docs, docname_join, \ +from sphinx.util import url_re, get_matching_docs, docname_join, split_into, \ FilenameUniqDict -from sphinx.util.nodes import clean_astext, make_refnode +from sphinx.util.nodes import clean_astext, make_refnode, extract_messages from sphinx.util.osutil import movefile, SEP, ustrftime from sphinx.util.matching import compile_matchers -from sphinx.util.pycompat import all +from sphinx.util.pycompat import all, class_types from sphinx.errors import SphinxError, ExtensionError -from sphinx.locale import _ +from sphinx.locale import _, init as init_locale +fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding() orig_role_function = roles.role orig_directive_function = directives.directive @@ -81,7 +84,7 @@ class WarningStream(object): self.warnfunc = warnfunc def write(self, text): if text.strip(): - self.warnfunc(text, None, '') + self.warnfunc(text.strip(), None, '') class NoUri(Exception): @@ -183,12 +186,50 @@ class CitationReferences(Transform): citnode.parent.replace(citnode, refnode) +class Locale(Transform): + """ + Replace translatable nodes with their translated doctree. + """ + default_priority = 0 + def apply(self): + env = self.document.settings.env + settings, source = self.document.settings, self.document['source'] + # XXX check if this is reliable + assert source.startswith(env.srcdir) + docname = posixpath.splitext(source[len(env.srcdir):].lstrip('/'))[0] + section = docname.split(SEP, 1)[0] + + # fetch translations + dirs = [path.join(env.srcdir, x) + for x in env.config.locale_dirs] + catalog, has_catalog = init_locale(dirs, env.config.language, section) + if not has_catalog: + return + + parser = RSTParser() + + for node, msg in extract_messages(self.document): + patch = new_document(source, settings) + msgstr = catalog.gettext(msg) + # XXX add marker to untranslated parts + if not msgstr or msgstr == msg: # as-of-yet untranslated + continue + parser.parse(msgstr, patch) + patch = patch[0] + # XXX doctest and other block markup + if not isinstance(patch, nodes.paragraph): + continue # skip for now + for child in patch.children: # update leaves + child.parent = node + node.children = patch.children + + class SphinxStandaloneReader(standalone.Reader): """ Add our own transforms. """ - transforms = [CitationReferences, DefaultSubstitutions, MoveModuleTargets, - HandleCodeBlocks, SortIds] + transforms = [Locale, CitationReferences, DefaultSubstitutions, + MoveModuleTargets, HandleCodeBlocks, SortIds] def get_transforms(self): return standalone.Reader.get_transforms(self) + self.transforms @@ -252,7 +293,7 @@ class BuildEnvironment: if key.startswith('_') or \ isinstance(val, types.ModuleType) or \ isinstance(val, types.FunctionType) or \ - isinstance(val, (type, types.ClassType)): + isinstance(val, class_types): del self.config[key] try: pickle.dump(self, picklefile, pickle.HIGHEST_PROTOCOL) @@ -376,25 +417,46 @@ class BuildEnvironment: domain.clear_doc(docname) def doc2path(self, docname, base=True, suffix=None): + """Return the filename for the document name. + + If *base* is True, return absolute path under self.srcdir. + If *base* is None, return relative path to self.srcdir. + If *base* is a path string, return absolute path under that. + If *suffix* is not None, add it instead of config.source_suffix. """ - Return the filename for the document name. - If base is True, return absolute path under self.srcdir. - If base is None, return relative path to self.srcdir. - If base is a path string, return absolute path under that. - If suffix is not None, add it instead of config.source_suffix. - """ + docname = docname.replace(SEP, path.sep) suffix = suffix or self.config.source_suffix if base is True: - return path.join(self.srcdir, - docname.replace(SEP, path.sep)) + suffix + return path.join(self.srcdir, docname) + suffix elif base is None: - return docname.replace(SEP, path.sep) + suffix + return docname + suffix else: - return path.join(base, docname.replace(SEP, path.sep)) + suffix + return path.join(base, docname) + suffix - def find_files(self, config): + def relfn2path(self, filename, docname=None): + """Return paths to a file referenced from a document, relative to + documentation root and absolute. + + Absolute filenames are relative to the source dir, while relative + filenames are relative to the dir of the containing document. """ - Find all source files in the source dir and put them in self.found_docs. + if filename.startswith('/') or filename.startswith(os.sep): + rel_fn = filename[1:] + else: + docdir = path.dirname(self.doc2path(docname or self.docname, + base=None)) + rel_fn = path.join(docdir, filename) + try: + return rel_fn, path.join(self.srcdir, rel_fn) + except UnicodeDecodeError: + # the source directory is a bytestring with non-ASCII characters; + # let's try to encode the rel_fn in the file system encoding + enc_rel_fn = rel_fn.encode(sys.getfilesystemencoding()) + return rel_fn, path.join(self.srcdir, enc_rel_fn) + + def find_files(self, config): + """Find all source files in the source dir and put them in + self.found_docs. """ matchers = compile_matchers( config.exclude_patterns[:] + @@ -407,9 +469,7 @@ class BuildEnvironment: self.srcdir, config.source_suffix, exclude_matchers=matchers)) def get_outdated_files(self, config_changed): - """ - Return (added, changed, removed) sets. - """ + """Return (added, changed, removed) sets.""" # clear all files no longer present removed = set(self.all_docs) - self.found_docs @@ -459,12 +519,12 @@ class BuildEnvironment: return added, changed, removed def update(self, config, srcdir, doctreedir, app=None): - """ - (Re-)read all files new or changed since last update. Returns a - summary, the total count of documents to reread and an iterator that - yields docnames as it processes them. Store all environment docnames in - the canonical format (ie using SEP as a separator in place of - os.path.sep). + """(Re-)read all files new or changed since last update. + + Returns a summary, the total count of documents to reread and an + iterator that yields docnames as it processes them. Store all + environment docnames in the canonical format (ie using SEP as a + separator in place of os.path.sep). """ config_changed = False if self.config is None: @@ -495,6 +555,10 @@ class BuildEnvironment: added, changed, removed = self.get_outdated_files(config_changed) + # allow user intervention as well + for docs in app.emit('env-get-outdated', self, added, changed, removed): + changed.update(set(docs) & self.found_docs) + # if files were added or removed, all documents with globbed toctrees # must be reread if added or removed: @@ -595,8 +659,8 @@ class BuildEnvironment: roles.role = role def read_doc(self, docname, src_path=None, save_parsed=True, app=None): - """ - Parse a file and add/update inventory entries for the doctree. + """Parse a file and add/update inventory entries for the doctree. + If srcpath is given, read from a different source file. """ # remove all inventory entries for that file @@ -637,6 +701,8 @@ class BuildEnvironment: FileInput.__init__(self_, *args, **kwds) def decode(self_, data): + if isinstance(data, unicode): + return data return data.decode(self_.encoding, 'sphinx') def read(self_): @@ -658,7 +724,7 @@ class BuildEnvironment: destination_class=NullOutput) pub.set_components(None, 'restructuredtext', None) pub.process_programmatic_settings(None, self.settings, None) - pub.set_source(None, src_path) + pub.set_source(None, src_path.encode(fs_encoding)) pub.set_destination(None, None) try: pub.publish() @@ -754,18 +820,15 @@ class BuildEnvironment: # post-processing of read doctrees def filter_messages(self, doctree): - """ - Filter system messages from a doctree. - """ + """Filter system messages from a doctree.""" filterlevel = self.config.keep_warnings and 2 or 5 for node in doctree.traverse(nodes.system_message): if node['level'] < filterlevel: node.parent.remove(node) + def process_dependencies(self, docname, doctree): - """ - Process docutils-generated dependency info. - """ + """Process docutils-generated dependency info.""" cwd = os.getcwd() frompath = path.join(path.normpath(self.srcdir), 'dummy') deps = doctree.settings.record_dependencies @@ -779,30 +842,20 @@ class BuildEnvironment: self.dependencies.setdefault(docname, set()).add(relpath) def process_downloads(self, docname, doctree): - """ - Process downloadable file paths. - """ - docdir = path.dirname(self.doc2path(docname, base=None)) + """Process downloadable file paths. """ for node in doctree.traverse(addnodes.download_reference): targetname = node['reftarget'] - if targetname.startswith('/') or targetname.startswith(os.sep): - # absolute - filepath = targetname[1:] - else: - filepath = path.normpath(path.join(docdir, node['reftarget'])) - self.dependencies.setdefault(docname, set()).add(filepath) - if not os.access(path.join(self.srcdir, filepath), os.R_OK): - self.warn(docname, 'download file not readable: %s' % filepath, + rel_filename, filename = self.relfn2path(targetname, docname) + self.dependencies.setdefault(docname, set()).add(rel_filename) + if not os.access(filename, os.R_OK): + self.warn(docname, 'download file not readable: %s' % filename, getattr(node, 'line', None)) continue - uniquename = self.dlfiles.add_file(docname, filepath) + uniquename = self.dlfiles.add_file(docname, filename) node['filename'] = uniquename def process_images(self, docname, doctree): - """ - Process and rewrite image URIs. - """ - docdir = path.dirname(self.doc2path(docname, base=None)) + """Process and rewrite image URIs.""" for node in doctree.traverse(nodes.image): # Map the mimetype to the corresponding image. The writer may # choose the best image from these candidates. The special key * is @@ -815,16 +868,11 @@ class BuildEnvironment: node.line) candidates['?'] = imguri continue - # imgpath is the image path *from srcdir* - if imguri.startswith('/') or imguri.startswith(os.sep): - # absolute path (= relative to srcdir) - imgpath = path.normpath(imguri[1:]) - else: - imgpath = path.normpath(path.join(docdir, imguri)) + rel_imgpath, full_imgpath = self.relfn2path(imguri, docname) # set imgpath as default URI - node['uri'] = imgpath - if imgpath.endswith(os.extsep + '*'): - for filename in glob(path.join(self.srcdir, imgpath)): + node['uri'] = rel_imgpath + if rel_imgpath.endswith(os.extsep + '*'): + for filename in glob(full_imgpath): new_imgpath = relative_path(self.srcdir, filename) if filename.lower().endswith('.pdf'): candidates['application/pdf'] = new_imgpath @@ -844,7 +892,7 @@ class BuildEnvironment: if imgtype: candidates['image/' + imgtype] = new_imgpath else: - candidates['*'] = imgpath + candidates['*'] = rel_imgpath # map image paths to unique image names (so that they can be put # into a single directory) for imgpath in candidates.itervalues(): @@ -856,8 +904,8 @@ class BuildEnvironment: self.images.add_file(docname, imgpath) def process_metadata(self, docname, doctree): - """ - Process the docinfo part of the doctree as metadata. + """Process the docinfo part of the doctree as metadata. + Keep processing minimal -- just return what docutils says. """ self.metadata[docname] = md = {} @@ -942,8 +990,7 @@ class BuildEnvironment: item.replace(para, compact_para) def create_title_from(self, docname, document): - """ - Add a title node to the document (just copy the first section title), + """Add a title node to the document (just copy the first section title), and store that title in the environment. """ titlenode = nodes.title() @@ -981,7 +1028,8 @@ class BuildEnvironment: def note_toctree(self, docname, toctreenode): """Note a TOC tree directive in a document and gather information about - file relations from it.""" + file relations from it. + """ if toctreenode['glob']: self.glob_toctrees.add(docname) if toctreenode.get('numbered'): @@ -1087,7 +1135,9 @@ class BuildEnvironment: def get_domain(self, domainname): """Return the domain instance with the specified name. - Raises an ExtensionError if the domain is not registered.""" + + Raises an ExtensionError if the domain is not registered. + """ try: return self.domains[domainname] except KeyError: @@ -1112,7 +1162,8 @@ class BuildEnvironment: def get_and_resolve_doctree(self, docname, builder, doctree=None, prune_toctrees=True): """Read the doctree from the pickle, resolve cross-references and - toctrees and return it.""" + toctrees and return it. + """ if doctree is None: doctree = self.get_doctree(docname) @@ -1132,8 +1183,7 @@ class BuildEnvironment: def resolve_toctree(self, docname, builder, toctree, prune=True, maxdepth=0, titles_only=False, collapse=False, includehidden=False): - """ - Resolve a *toctree* node into individual bullet lists with titles + """Resolve a *toctree* node into individual bullet lists with titles as items, returning None (if no containing titles are found) or a new node. @@ -1395,46 +1445,54 @@ class BuildEnvironment: old_secnumbers = self.toc_secnumbers self.toc_secnumbers = {} - def _walk_toc(node, secnums, titlenode=None): + def _walk_toc(node, secnums, depth, titlenode=None): # titlenode is the title of the document, it will get assigned a # secnumber too, so that it shows up in next/prev/parent rellinks for subnode in node.children: if isinstance(subnode, nodes.bullet_list): numstack.append(0) - _walk_toc(subnode, secnums, titlenode) + _walk_toc(subnode, secnums, depth-1, titlenode) numstack.pop() titlenode = None elif isinstance(subnode, nodes.list_item): - _walk_toc(subnode, secnums, titlenode) + _walk_toc(subnode, secnums, depth, titlenode) titlenode = None elif isinstance(subnode, addnodes.compact_paragraph): numstack[-1] += 1 + if depth > 0: + number = tuple(numstack) + else: + number = None secnums[subnode[0]['anchorname']] = \ - subnode[0]['secnumber'] = tuple(numstack) + subnode[0]['secnumber'] = number if titlenode: - titlenode['secnumber'] = tuple(numstack) + titlenode['secnumber'] = number titlenode = None elif isinstance(subnode, addnodes.toctree): - _walk_toctree(subnode) + _walk_toctree(subnode, depth) - def _walk_toctree(toctreenode): + def _walk_toctree(toctreenode, depth): + if depth == 0: + return for (title, ref) in toctreenode['entries']: if url_re.match(ref) or ref == 'self': # don't mess with those continue if ref in self.tocs: secnums = self.toc_secnumbers[ref] = {} - _walk_toc(self.tocs[ref], secnums, self.titles.get(ref)) + _walk_toc(self.tocs[ref], secnums, depth, + self.titles.get(ref)) if secnums != old_secnumbers.get(ref): rewrite_needed.append(ref) for docname in self.numbered_toctrees: doctree = self.get_doctree(docname) for toctreenode in doctree.traverse(addnodes.toctree): - if toctreenode.get('numbered'): + depth = toctreenode.get('numbered', 0) + if depth: # every numbered toctree gets new numbering numstack = [0] - _walk_toctree(toctreenode) + _walk_toctree(toctreenode, depth) return rewrite_needed @@ -1443,56 +1501,50 @@ class BuildEnvironment: """Create the real index from the collected index entries.""" new = {} - def add_entry(word, subword, dic=new): + def add_entry(word, subword, link=True, dic=new): entry = dic.get(word) if not entry: dic[word] = entry = [[], {}] if subword: - add_entry(subword, '', dic=entry[1]) - else: + add_entry(subword, '', link=link, dic=entry[1]) + elif link: try: - entry[0].append(builder.get_relative_uri('genindex', fn) - + '#' + tid) + uri = builder.get_relative_uri('genindex', fn) + '#' + tid except NoUri: pass + else: + entry[0].append((main, uri)) for fn, entries in self.indexentries.iteritems(): # new entry types must be listed in directives/other.py! - for type, value, tid, alias in entries: - if type == 'single': - try: - entry, subentry = value.split(';', 1) - except ValueError: - entry, subentry = value, '' - if not entry: - self.warn(fn, 'invalid index entry %r' % value) - continue - add_entry(entry.strip(), subentry.strip()) - elif type == 'pair': - try: - first, second = map(lambda x: x.strip(), - value.split(';', 1)) - if not first or not second: - raise ValueError - except ValueError: - self.warn(fn, 'invalid pair index entry %r' % value) - continue - add_entry(first, second) - add_entry(second, first) - elif type == 'triple': - try: - first, second, third = map(lambda x: x.strip(), - value.split(';', 2)) - if not first or not second or not third: - raise ValueError - except ValueError: - self.warn(fn, 'invalid triple index entry %r' % value) - continue - add_entry(first, second+' '+third) - add_entry(second, third+', '+first) - add_entry(third, first+' '+second) - else: - self.warn(fn, 'unknown index entry type %r' % type) + for type, value, tid, main in entries: + try: + if type == 'single': + try: + entry, subentry = split_into(2, 'single', value) + except ValueError: + entry, = split_into(1, 'single', value) + subentry = '' + add_entry(entry, subentry) + elif type == 'pair': + first, second = split_into(2, 'pair', value) + add_entry(first, second) + add_entry(second, first) + elif type == 'triple': + first, second, third = split_into(3, 'triple', value) + add_entry(first, second+' '+third) + add_entry(second, third+', '+first) + add_entry(third, first+' '+second) + elif type == 'see': + first, second = split_into(2, 'see', value) + add_entry(first, _('see %s') % second, link=False) + elif type == 'seealso': + first, second = split_into(2, 'see', value) + add_entry(first, _('see also %s') % second, link=False) + else: + self.warn(fn, 'unknown index entry type %r' % type) + except ValueError, err: + self.warn(fn, str(err)) # sort the index entries; put all symbols at the front, even those # following the letters in ASCII, this is where the chr(127) comes from @@ -1535,8 +1587,9 @@ class BuildEnvironment: i += 1 # group the entries by letter - def keyfunc2((k, v), letters=string.ascii_uppercase + '_'): + def keyfunc2(item, letters=string.ascii_uppercase + '_'): # hack: mutating the subitems dicts to a list in the keyfunc + k, v = item v[1] = sorted((si, se) for (si, (se, void)) in v[1].iteritems()) # now calculate the key letter = unicodedata.normalize('NFD', k[0])[0].upper() @@ -1595,7 +1648,6 @@ class BuildEnvironment: def check_consistency(self): """Do consistency checks.""" - for docname in sorted(self.all_docs): if docname not in self.files_to_rebuild: if docname == self.config.master_doc: diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index d184342e..044a181f 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -15,7 +15,7 @@ import re import sys import inspect import traceback -from types import FunctionType, BuiltinFunctionType, MethodType, ClassType +from types import FunctionType, BuiltinFunctionType, MethodType from docutils import nodes from docutils.utils import assemble_option_dict @@ -28,15 +28,10 @@ from sphinx.application import ExtensionError from sphinx.util.nodes import nested_parse_with_titles from sphinx.util.compat import Directive from sphinx.util.inspect import isdescriptor, safe_getmembers, safe_getattr +from sphinx.util.pycompat import base_exception, class_types from sphinx.util.docstrings import prepare_docstring -try: - base_exception = BaseException -except NameError: - base_exception = Exception - - #: extended signature RE: with explicit module name separated by :: py_ext_sig_re = re.compile( r'''^ ([\w.]+::)? # explicit module name @@ -91,7 +86,8 @@ def members_set_option(arg): def bool_option(arg): """Used to convert flag options to auto directives. (Instead of - directives.flag(), which returns None.)""" + directives.flag(), which returns None). + """ return True @@ -139,8 +135,7 @@ class AutodocReporter(object): # Some useful event listener factories for autodoc-process-docstring. def cut_lines(pre, post=0, what=None): - """ - Return a listener that removes the first *pre* and last *post* + """Return a listener that removes the first *pre* and last *post* lines of every docstring. If *what* is a sequence of strings, only docstrings of a type in *what* will be processed. @@ -166,9 +161,8 @@ def cut_lines(pre, post=0, what=None): return process def between(marker, what=None, keepempty=False, exclude=False): - """ - Return a listener that either keeps, or if *exclude* is True excludes, lines - between lines that match the *marker* regular expression. If no line + """Return a listener that either keeps, or if *exclude* is True excludes, + lines between lines that match the *marker* regular expression. If no line matches, the resulting docstring would be empty, so no change will be made unless *keepempty* is true. @@ -270,8 +264,7 @@ class Documenter(object): self.directive.result.append(self.indent + line, source, *lineno) def resolve_name(self, modname, parents, path, base): - """ - Resolve the module and name of the object to document given by the + """Resolve the module and name of the object to document given by the arguments and the current module/class. Must return a pair of the module name and a chain of attributes; for @@ -281,8 +274,7 @@ class Documenter(object): raise NotImplementedError('must be implemented in subclasses') def parse_name(self): - """ - Determine what module to import and what attribute to document. + """Determine what module to import and what attribute to document. Returns True and sets *self.modname*, *self.objpath*, *self.fullname*, *self.args* and *self.retann* if parsing and resolving was successful. @@ -319,8 +311,7 @@ class Documenter(object): return True def import_object(self): - """ - Import the object given by *self.modname* and *self.objpath* and sets + """Import the object given by *self.modname* and *self.objpath* and set it as *self.object*. Returns True if successful, False if an error occurred. @@ -349,15 +340,15 @@ class Documenter(object): return False def get_real_modname(self): - """ - Get the real module name of an object to document. (It can differ - from the name of the module through which the object was imported.) + """Get the real module name of an object to document. + + It can differ from the name of the module through which the object was + imported. """ return self.get_attr(self.object, '__module__', None) or self.modname def check_module(self): - """ - Check if *self.object* is really defined in the module given by + """Check if *self.object* is really defined in the module given by *self.modname*. """ modname = self.get_attr(self.object, '__module__', None) @@ -366,25 +357,26 @@ class Documenter(object): return True def format_args(self): - """ - Format the argument signature of *self.object*. Should return None if - the object does not have a signature. + """Format the argument signature of *self.object*. + + Should return None if the object does not have a signature. """ return None def format_name(self): - """ - Format the name of *self.object*. This normally should be something - that can be parsed by the generated directive, but doesn't need to be - (Sphinx will display it unparsed then). + """Format the name of *self.object*. + + This normally should be something that can be parsed by the generated + directive, but doesn't need to be (Sphinx will display it unparsed + then). """ # normally the name doesn't contain the module (except for module # directives of course) return '.'.join(self.objpath) or self.modname def format_signature(self): - """ - Format the signature (arguments and return annotation) of the object. + """Format the signature (arguments and return annotation) of the object. + Let the user process it via the ``autodoc-process-signature`` event. """ if self.args is not None: @@ -426,13 +418,15 @@ class Documenter(object): # etc. don't support a prepended module name self.add_line(u' :module: %s' % self.modname, '<autodoc>') - def get_doc(self, encoding=None): + def get_doc(self, encoding=None, ignore=1): """Decode and return lines of the docstring(s) for the object.""" docstring = self.get_attr(self.object, '__doc__', None) - if docstring: - # make sure we have Unicode docstrings, then sanitize and split - # into lines - return [prepare_docstring(force_decode(docstring, encoding))] + # make sure we have Unicode docstrings, then sanitize and split + # into lines + if isinstance(docstring, unicode): + return [prepare_docstring(docstring, ignore)] + elif docstring: + return [prepare_docstring(force_decode(docstring, encoding), ignore)] return [] def process_doc(self, docstrings): @@ -451,8 +445,11 @@ class Documenter(object): # set sourcename and add content from attribute documentation if self.analyzer: # prevent encoding errors when the file name is non-ASCII - filename = unicode(self.analyzer.srcname, - sys.getfilesystemencoding(), 'replace') + if not isinstance(self.analyzer.srcname, unicode): + filename = unicode(self.analyzer.srcname, + sys.getfilesystemencoding(), 'replace') + else: + filename = self.analyzer.srcname sourcename = u'%s:docstring of %s' % (filename, self.fullname) attr_docs = self.analyzer.find_attr_docs() @@ -484,8 +481,7 @@ class Documenter(object): self.add_line(line, src[0], src[1]) def get_object_members(self, want_all): - """ - Return `(members_check_module, members)` where `members` is a + """Return `(members_check_module, members)` where `members` is a list of `(membername, member)` pairs of the members of *self.object*. If *want_all* is True, return all members. Else, only return those @@ -529,11 +525,15 @@ class Documenter(object): return False, sorted(members) def filter_members(self, members, want_all): - """ - Filter the given member list: members are skipped if + """Filter the given member list. - - they are private (except if given explicitly) - - they are undocumented (except if undoc-members is given) + Members are skipped if + + - they are private (except if given explicitly or the private-members + option is set) + - they are special methods (except if given explicitly or the + special-members option is set) + - they are undocumented (except if the undoc-members option is set) The user can override the skipping decision by connecting to the ``autodoc-skip-member`` event. @@ -553,9 +553,13 @@ class Documenter(object): # if isattr is True, the member is documented as an attribute isattr = False - if want_all and membername.startswith('_'): + if want_all and membername.startswith('__') and \ + membername.endswith('__') and len(membername) > 4: + # special __methods__ + skip = not self.options.special_members + elif want_all and membername.startswith('_'): # ignore members whose name starts with _ by default - skip = True + skip = not self.options.private_members elif (namespace, membername) in attr_docs: # keep documented attributes skip = False @@ -583,9 +587,10 @@ class Documenter(object): return ret def document_members(self, all_members=False): - """ - Generate reST for member documentation. If *all_members* is True, - do all members, else those given by *self.options.members*. + """Generate reST for member documentation. + + If *all_members* is True, do all members, else those given by + *self.options.members*. """ # set current namespace for finding members self.env.temp_data['autodoc:module'] = self.modname @@ -643,8 +648,8 @@ class Documenter(object): def generate(self, more_content=None, real_modname=None, check_module=False, all_members=False): - """ - Generate reST for the object given by *self.name*, and possibly members. + """Generate reST for the object given by *self.name*, and possibly for + its members. If *more_content* is given, include that content. If *real_modname* is given, use that module name to find attribute docs. If *check_module* is @@ -727,6 +732,7 @@ class ModuleDocumenter(Documenter): 'show-inheritance': bool_option, 'synopsis': identity, 'platform': identity, 'deprecated': bool_option, 'member-order': identity, 'exclude-members': members_set_option, + 'private-members': bool_option, 'special-members': bool_option, } @classmethod @@ -833,7 +839,53 @@ class ClassLevelDocumenter(Documenter): return modname, parents + [base] -class FunctionDocumenter(ModuleLevelDocumenter): +class DocstringSignatureMixin(object): + """ + Mixin for FunctionDocumenter and MethodDocumenter to provide the + feature of reading the signature from the docstring. + """ + + def _find_signature(self, encoding=None): + docstrings = Documenter.get_doc(self, encoding, 2) + if len(docstrings) != 1: + return + doclines = docstrings[0] + setattr(self, '__new_doclines', doclines) + if not doclines: + return + # match first line of docstring against signature RE + match = py_ext_sig_re.match(doclines[0]) + if not match: + return + exmod, path, base, args, retann = match.groups() + # the base name must match ours + if not self.objpath or base != self.objpath[-1]: + return + # ok, now jump over remaining empty lines and set the remaining + # lines as the new doclines + i = 1 + while i < len(doclines) and not doclines[i].strip(): + i += 1 + setattr(self, '__new_doclines', doclines[i:]) + return args, retann + + def get_doc(self, encoding=None, ignore=1): + lines = getattr(self, '__new_doclines', None) + if lines is not None: + return [lines] + return Documenter.get_doc(self, encoding, ignore) + + def format_signature(self): + if self.args is None and self.env.config.autodoc_docstring_signature: + # only act if a signature is not explicitly given already, and if + # the feature is enabled + result = self._find_signature() + if result is not None: + self.args, self.retann = result + return Documenter.format_signature(self) + + +class FunctionDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter): """ Specialized Documenter subclass for functions. """ @@ -847,8 +899,8 @@ class FunctionDocumenter(ModuleLevelDocumenter): def format_args(self): if inspect.isbuiltin(self.object) or \ inspect.ismethoddescriptor(self.object): - # can never get arguments of a C function or method - return None + # cannot introspect arguments of a C function or method + pass try: argspec = inspect.getargspec(self.object) except TypeError: @@ -881,11 +933,12 @@ class ClassDocumenter(ModuleLevelDocumenter): 'noindex': bool_option, 'inherited-members': bool_option, 'show-inheritance': bool_option, 'member-order': identity, 'exclude-members': members_set_option, + 'private-members': bool_option, 'special-members': bool_option, } @classmethod def can_document_member(cls, member, membername, isattr, parent): - return isinstance(member, (type, ClassType)) + return isinstance(member, class_types) def import_object(self): ret = ModuleLevelDocumenter.import_object(self) @@ -937,7 +990,7 @@ class ClassDocumenter(ModuleLevelDocumenter): self.add_line(_(u' Bases: %s') % ', '.join(bases), '<autodoc>') - def get_doc(self, encoding=None): + def get_doc(self, encoding=None, ignore=1): content = self.env.config.autoclass_content docstrings = [] @@ -958,9 +1011,12 @@ class ClassDocumenter(ModuleLevelDocumenter): docstrings = [initdocstring] else: docstrings.append(initdocstring) - - return [prepare_docstring(force_decode(docstring, encoding)) - for docstring in docstrings] + doc = [] + for docstring in docstrings: + if not isinstance(docstring, unicode): + docstring = force_decode(docstring, encoding) + doc.append(prepare_docstring(docstring)) + return doc def add_content(self, more_content, no_docstring=False): if self.doc_as_attr: @@ -991,7 +1047,7 @@ class ExceptionDocumenter(ClassDocumenter): @classmethod def can_document_member(cls, member, membername, isattr, parent): - return isinstance(member, (type, ClassType)) and \ + return isinstance(member, class_types) and \ issubclass(member, base_exception) @@ -1010,7 +1066,7 @@ class DataDocumenter(ModuleLevelDocumenter): pass -class MethodDocumenter(ClassLevelDocumenter): +class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): """ Specialized Documenter subclass for methods (normal, static and class). """ @@ -1023,24 +1079,38 @@ class MethodDocumenter(ClassLevelDocumenter): return inspect.isroutine(member) and \ not isinstance(parent, ModuleDocumenter) - def import_object(self): - ret = ClassLevelDocumenter.import_object(self) - if isinstance(self.object, classmethod) or \ - (isinstance(self.object, MethodType) and - self.object.im_self is not None): - self.directivetype = 'classmethod' - # document class and static members before ordinary ones - self.member_order = self.member_order - 1 - elif isinstance(self.object, FunctionType) or \ - (isinstance(self.object, BuiltinFunctionType) and - hasattr(self.object, '__self__') and - self.object.__self__ is not None): - self.directivetype = 'staticmethod' - # document class and static members before ordinary ones - self.member_order = self.member_order - 1 - else: - self.directivetype = 'method' - return ret + if sys.version_info >= (3, 0): + def import_object(self): + ret = ClassLevelDocumenter.import_object(self) + obj_from_parent = self.parent.__dict__.get(self.object_name) + if isinstance(obj_from_parent, classmethod): + self.directivetype = 'classmethod' + self.member_order = self.member_order - 1 + elif isinstance(obj_from_parent, staticmethod): + self.directivetype = 'staticmethod' + self.member_order = self.member_order - 1 + else: + self.directivetype = 'method' + return ret + else: + def import_object(self): + ret = ClassLevelDocumenter.import_object(self) + if isinstance(self.object, classmethod) or \ + (isinstance(self.object, MethodType) and + self.object.im_self is not None): + self.directivetype = 'classmethod' + # document class and static members before ordinary ones + self.member_order = self.member_order - 1 + elif isinstance(self.object, FunctionType) or \ + (isinstance(self.object, BuiltinFunctionType) and + hasattr(self.object, '__self__') and + self.object.__self__ is not None): + self.directivetype = 'staticmethod' + # document class and static members before ordinary ones + self.member_order = self.member_order - 1 + else: + self.directivetype = 'method' + return ret def format_args(self): if inspect.isbuiltin(self.object) or \ @@ -1134,8 +1204,10 @@ class AutoDirective(Directive): _special_attrgetters = {} # flags that can be given in autodoc_default_flags - _default_flags = set(['members', 'undoc-members', 'inherited-members', - 'show-inheritance']) + _default_flags = set([ + 'members', 'undoc-members', 'inherited-members', 'show-inheritance', + 'private-members', 'special-members', + ]) # standard docutils directive settings has_content = True @@ -1225,6 +1297,7 @@ def setup(app): app.add_config_value('autoclass_content', 'class', True) app.add_config_value('autodoc_member_order', 'alphabetic', True) app.add_config_value('autodoc_default_flags', [], True) + app.add_config_value('autodoc_docstring_signature', True, True) app.add_event('autodoc-process-docstring') app.add_event('autodoc-process-signature') app.add_event('autodoc-skip-member') diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py index f75307e0..e0271697 100644 --- a/sphinx/ext/autosummary/__init__.py +++ b/sphinx/ext/autosummary/__init__.py @@ -73,8 +73,7 @@ class autosummary_toc(nodes.comment): pass def process_autosummary_toc(app, doctree): - """ - Insert items described in autosummary:: to the TOC tree, but do + """Insert items described in autosummary:: to the TOC tree, but do not generate the toctree:: list. """ env = app.builder.env @@ -135,8 +134,8 @@ except AttributeError: isgetsetdescriptor = ismemberdescriptor def get_documenter(obj): - """ - Get an autodoc.Documenter class suitable for documenting the given object + """Get an autodoc.Documenter class suitable for documenting the given + object. """ import sphinx.ext.autodoc as autodoc @@ -218,8 +217,7 @@ class Autosummary(Directive): return self.warnings + nodes def get_items(self, names): - """ - Try to import the given names, and return a list of + """Try to import the given names, and return a list of ``[(name, signature, summary_string, real_name), ...]``. """ env = self.state.document.settings.env @@ -287,8 +285,7 @@ class Autosummary(Directive): return items def get_table(self, items): - """ - Generate a proper list of table nodes for autosummary:: directive. + """Generate a proper list of table nodes for autosummary:: directive. *items* is a list produced by :meth:`get_items`. """ @@ -351,8 +348,7 @@ def mangle_signature(sig, max_chars=30): return u"(%s)" % sig def limited_join(sep, items, max_chars=30, overflow_marker="..."): - """ - Join a number of strings to one, limiting the length to *max_chars*. + """Join a number of strings to one, limiting the length to *max_chars*. If the string overflows this limit, replace the last fitting item by *overflow_marker*. @@ -377,8 +373,7 @@ def limited_join(sep, items, max_chars=30, overflow_marker="..."): # -- Importing items ----------------------------------------------------------- def import_by_name(name, prefixes=[None]): - """ - Import a Python object that has the given *name*, under one of the + """Import a Python object that has the given *name*, under one of the *prefixes*. The first name that succeeds is used. """ tried = [] @@ -435,8 +430,7 @@ def _import_by_name(name): def autolink_role(typ, rawtext, etext, lineno, inliner, options={}, content=[]): - """ - Smart linking role. + """Smart linking role. Expands to ':obj:`text`' if `text` is an object that can be imported; otherwise expands to '*text*'. @@ -487,12 +481,14 @@ def setup(app): html=(autosummary_toc_visit_html, autosummary_noop), latex=(autosummary_noop, autosummary_noop), text=(autosummary_noop, autosummary_noop), - man=(autosummary_noop, autosummary_noop)) + man=(autosummary_noop, autosummary_noop), + texinfo=(autosummary_noop, autosummary_noop)) app.add_node(autosummary_table, html=(autosummary_table_visit_html, autosummary_noop), latex=(autosummary_noop, autosummary_noop), text=(autosummary_noop, autosummary_noop), - man=(autosummary_noop, autosummary_noop)) + man=(autosummary_noop, autosummary_noop), + texinfo=(autosummary_noop, autosummary_noop)) app.add_directive('autosummary', Autosummary) app.add_role('autolink', autolink_role) app.connect('doctree-read', process_autosummary_toc) diff --git a/sphinx/ext/autosummary/generate.py b/sphinx/ext/autosummary/generate.py index f8230216..389d55a5 100644 --- a/sphinx/ext/autosummary/generate.py +++ b/sphinx/ext/autosummary/generate.py @@ -12,11 +12,12 @@ Example Makefile rule:: generate: - sphinx-autogen source/*.rst source/generated + sphinx-autogen -o source/generated source/*.rst :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ + import os import re import sys @@ -193,8 +194,8 @@ def generate_autosummary_docs(sources, output_dir=None, suffix='.rst', # -- Finding documented entries in files --------------------------------------- def find_autosummary_in_files(filenames): - """ - Find out what items are documented in source/*.rst. + """Find out what items are documented in source/*.rst. + See `find_autosummary_in_lines`. """ documented = [] @@ -206,8 +207,8 @@ def find_autosummary_in_files(filenames): return documented def find_autosummary_in_docstring(name, module=None, filename=None): - """ - Find out what items are documented in the given object's docstring. + """Find out what items are documented in the given object's docstring. + See `find_autosummary_in_lines`. """ try: @@ -221,8 +222,8 @@ def find_autosummary_in_docstring(name, module=None, filename=None): return [] def find_autosummary_in_lines(lines, module=None, filename=None): - """ - Find out what items appear in autosummary:: directives in the given lines. + """Find out what items appear in autosummary:: directives in the + given lines. Returns a list of (name, toctree, template) where *name* is a name of an object and *toctree* the :toctree: path of the corresponding diff --git a/sphinx/ext/coverage.py b/sphinx/ext/coverage.py index 8d58b671..e3e3a65e 100644 --- a/sphinx/ext/coverage.py +++ b/sphinx/ext/coverage.py @@ -105,7 +105,8 @@ class CoverageBuilder(Builder): output_file = path.join(self.outdir, 'c.txt') op = open(output_file, 'w') try: - write_header(op, 'Undocumented C API elements', '=') + if self.config.coverage_write_headline: + write_header(op, 'Undocumented C API elements', '=') op.write('\n') for filename, undoc in self.c_undoc.iteritems(): @@ -120,6 +121,8 @@ class CoverageBuilder(Builder): objects = self.env.domaindata['py']['objects'] modules = self.env.domaindata['py']['modules'] + skip_undoc = self.config.coverage_skip_undoc_in_source + for mod_name in modules: ignore = False for exp in self.mod_ignorexps: @@ -160,6 +163,8 @@ class CoverageBuilder(Builder): if exp.match(name): break else: + if skip_undoc and not obj.__doc__: + continue funcs.append(name) elif inspect.isclass(obj): for exp in self.cls_ignorexps: @@ -167,17 +172,27 @@ class CoverageBuilder(Builder): break else: if full_name not in objects: + if skip_undoc and not obj.__doc__: + continue # not documented at all classes[name] = [] continue attrs = [] - for attr_name, attr in inspect.getmembers( - obj, inspect.ismethod): + for attr_name in dir(obj): + if attr_name not in obj.__dict__: + continue + attr = getattr(obj, attr_name) + if not (inspect.ismethod(attr) or + inspect.isfunction(attr)): + continue if attr_name[0] == '_': # starts with an underscore, ignore it continue + if skip_undoc and not attr.__doc__: + # skip methods without docstring if wished + continue full_attr_name = '%s.%s' % (full_name, attr_name) if full_attr_name not in objects: @@ -194,8 +209,8 @@ class CoverageBuilder(Builder): op = open(output_file, 'w') failed = [] try: - write_header(op, 'Undocumented Python objects', '=') - + if self.config.coverage_write_headline: + write_header(op, 'Undocumented Python objects', '=') keys = self.py_undoc.keys() keys.sort() for name in keys: @@ -245,3 +260,5 @@ def setup(app): app.add_config_value('coverage_c_path', [], False) app.add_config_value('coverage_c_regexes', {}, False) app.add_config_value('coverage_ignore_c_items', {}, False) + app.add_config_value('coverage_write_headline', True, False) + app.add_config_value('coverage_skip_undoc_in_source', False, False) diff --git a/sphinx/ext/doctest.py b/sphinx/ext/doctest.py index dcee09f5..5fd8d114 100644 --- a/sphinx/ext/doctest.py +++ b/sphinx/ext/doctest.py @@ -56,7 +56,7 @@ class TestDirective(Directive): test = code code = doctestopt_re.sub('', code) nodetype = nodes.literal_block - if self.name == 'testsetup' or 'hide' in self.options: + if self.name in ('testsetup', 'testcleanup') or 'hide' in self.options: nodetype = nodes.comment if self.arguments: groups = [x.strip() for x in self.arguments[0].split(',')] @@ -86,6 +86,9 @@ class TestDirective(Directive): class TestsetupDirective(TestDirective): option_spec = {} +class TestcleanupDirective(TestDirective): + option_spec = {} + class DoctestDirective(TestDirective): option_spec = { 'hide': directives.flag, @@ -113,6 +116,7 @@ class TestGroup(object): self.name = name self.setup = [] self.tests = [] + self.cleanup = [] def add_code(self, code, prepend=False): if code.type == 'testsetup': @@ -120,6 +124,8 @@ class TestGroup(object): self.setup.insert(0, code) else: self.setup.append(code) + elif code.type == 'testcleanup': + self.cleanup.append(code) elif code.type == 'doctest': self.tests.append([code]) elif code.type == 'testcode': @@ -131,8 +137,8 @@ class TestGroup(object): raise RuntimeError('invalid TestCode type') def __repr__(self): - return 'TestGroup(name=%r, setup=%r, tests=%r)' % ( - self.name, self.setup, self.tests) + return 'TestGroup(name=%r, setup=%r, cleanup=%r, tests=%r)' % ( + self.name, self.setup, self.cleanup, self.tests) class TestCode(object): @@ -149,14 +155,14 @@ class TestCode(object): class SphinxDocTestRunner(doctest.DocTestRunner): def summarize(self, out, verbose=None): - io = StringIO.StringIO() + string_io = StringIO.StringIO() old_stdout = sys.stdout - sys.stdout = io + sys.stdout = string_io try: res = doctest.DocTestRunner.summarize(self, verbose) finally: sys.stdout = old_stdout - out(io.getvalue()) + out(string_io.getvalue()) return res def _DocTestRunner__patched_linecache_getlines(self, filename, @@ -204,6 +210,8 @@ class DocTestBuilder(Builder): self.total_tries = 0 self.setup_failures = 0 self.setup_tries = 0 + self.cleanup_failures = 0 + self.cleanup_tries = 0 date = time.strftime('%Y-%m-%d %H:%M:%S') @@ -240,12 +248,14 @@ Doctest summary %5d test%s %5d failure%s in tests %5d failure%s in setup code +%5d failure%s in cleanup code ''' % (self.total_tries, s(self.total_tries), self.total_failures, s(self.total_failures), - self.setup_failures, s(self.setup_failures))) + self.setup_failures, s(self.setup_failures), + self.cleanup_failures, s(self.cleanup_failures))) self.outfile.close() - if self.total_failures or self.setup_failures: + if self.total_failures or self.setup_failures or self.cleanup_failures: self.app.statuscode = 1 def write(self, build_docnames, updated_docnames, method='update'): @@ -265,6 +275,12 @@ Doctest summary optionflags=self.opt) self.test_runner = SphinxDocTestRunner(verbose=False, optionflags=self.opt) + self.cleanup_runner = SphinxDocTestRunner(verbose=False, + optionflags=self.opt) + + self.test_runner._fakeout = self.setup_runner._fakeout + self.cleanup_runner._fakeout = self.setup_runner._fakeout + if self.config.doctest_test_doctest_blocks: def condition(node): return (isinstance(node, (nodes.literal_block, nodes.comment)) @@ -298,6 +314,11 @@ Doctest summary 'testsetup', lineno=0) for group in groups.itervalues(): group.add_code(code, prepend=True) + if self.config.doctest_global_cleanup: + code = TestCode(self.config.doctest_global_cleanup, + 'testcleanup', lineno=0) + for group in groups.itervalues(): + group.add_code(code) if not groups: return @@ -313,29 +334,42 @@ Doctest summary res_f, res_t = self.test_runner.summarize(self._out, verbose=True) self.total_failures += res_f self.total_tries += res_t + if self.cleanup_runner.tries: + res_f, res_t = self.cleanup_runner.summarize(self._out, verbose=True) + self.cleanup_failures += res_f + self.cleanup_tries += res_t def compile(self, code, name, type, flags, dont_inherit): return compile(code, name, self.type, flags, dont_inherit) def test_group(self, group, filename): ns = {} - setup_examples = [] - for setup in group.setup: - setup_examples.append(doctest.Example(setup.code, '', - lineno=setup.lineno)) - if setup_examples: - # simulate a doctest with the setup code - setup_doctest = doctest.DocTest(setup_examples, {}, - '%s (setup code)' % group.name, - filename, 0, None) - setup_doctest.globs = ns - old_f = self.setup_runner.failures - self.type = 'exec' # the snippet may contain multiple statements - self.setup_runner.run(setup_doctest, out=self._warn_out, - clear_globs=False) - if self.setup_runner.failures > old_f: - # don't run the group + + def run_setup_cleanup(runner, testcodes, what): + examples = [] + for testcode in testcodes: + examples.append(doctest.Example(testcode.code, '', + lineno=testcode.lineno)) + if not examples: return + # simulate a doctest with the code + sim_doctest = doctest.DocTest(examples, {}, + '%s (%s code)' % (group.name, what), + filename, 0, None) + sim_doctest.globs = ns + old_f = runner.failures + self.type = 'exec' # the snippet may contain multiple statements + runner.run(sim_doctest, out=self._warn_out, clear_globs=False) + if runner.failures > old_f: + return False + return True + + # run the setup code + if not run_setup_cleanup(self.setup_runner, group.setup, 'setup'): + # if setup failed, don't run the group + return + + # run the tests for code in group.tests: if len(code) == 1: # ordinary doctests (code/output interleaved) @@ -373,9 +407,13 @@ Doctest summary # also don't clear the globs namespace after running the doctest self.test_runner.run(test, out=self._warn_out, clear_globs=False) + # run the cleanup + run_setup_cleanup(self.cleanup_runner, group.cleanup, 'cleanup') + def setup(app): app.add_directive('testsetup', TestsetupDirective) + app.add_directive('testcleanup', TestcleanupDirective) app.add_directive('doctest', DoctestDirective) app.add_directive('testcode', TestcodeDirective) app.add_directive('testoutput', TestoutputDirective) @@ -384,3 +422,4 @@ def setup(app): app.add_config_value('doctest_path', [], False) app.add_config_value('doctest_test_doctest_blocks', 'default', False) app.add_config_value('doctest_global_setup', '', False) + app.add_config_value('doctest_global_cleanup', '', False) diff --git a/sphinx/ext/graphviz.py b/sphinx/ext/graphviz.py index c83eaa21..0b8e050b 100644 --- a/sphinx/ext/graphviz.py +++ b/sphinx/ext/graphviz.py @@ -11,6 +11,7 @@ """ import re +import codecs import posixpath from os import path from math import ceil @@ -46,23 +47,45 @@ class Graphviz(Directive): """ has_content = True required_arguments = 0 - optional_arguments = 0 + optional_arguments = 1 final_argument_whitespace = False option_spec = { 'alt': directives.unchanged, + 'inline': directives.flag, } def run(self): - dotcode = '\n'.join(self.content) - if not dotcode.strip(): - return [self.state_machine.reporter.warning( - 'Ignoring "graphviz" directive without content.', - line=self.lineno)] + if self.arguments: + document = self.state.document + if self.content: + return [document.reporter.warning( + 'Graphviz directive cannot have both content and ' + 'a filename argument', line=self.lineno)] + env = self.state.document.settings.env + rel_filename, filename = env.relfn2path(self.arguments[0]) + env.note_dependency(rel_filename) + try: + fp = codecs.open(filename, 'r', 'utf-8') + try: + dotcode = fp.read() + finally: + fp.close() + except (IOError, OSError): + return [document.reporter.warning( + 'External Graphviz file %r not found or reading ' + 'it failed' % filename, line=self.lineno)] + else: + dotcode = '\n'.join(self.content) + if not dotcode.strip(): + return [self.state_machine.reporter.warning( + 'Ignoring "graphviz" directive without content.', + line=self.lineno)] node = graphviz() node['code'] = dotcode node['options'] = [] if 'alt' in self.options: node['alt'] = self.options['alt'] + node['inline'] = 'inline' in self.options return [node] @@ -76,6 +99,7 @@ class GraphvizSimple(Directive): final_argument_whitespace = False option_spec = { 'alt': directives.unchanged, + 'inline': directives.flag, } def run(self): @@ -85,14 +109,14 @@ class GraphvizSimple(Directive): node['options'] = [] if 'alt' in self.options: node['alt'] = self.options['alt'] + node['inline'] = 'inline' in self.options return [node] def render_dot(self, code, options, format, prefix='graphviz'): - """ - Render graphviz code into a PNG or PDF output file. - """ + """Render graphviz code into a PNG or PDF output file.""" hashkey = code.encode('utf-8') + str(options) + \ + str(self.builder.config.graphviz_dot) + \ str(self.builder.config.graphviz_dot_args) fname = '%s-%s.%s' % (prefix, sha(hashkey).hexdigest(), format) if hasattr(self.builder, 'imgpath'): @@ -193,7 +217,12 @@ def render_dot_html(self, node, code, options, prefix='graphviz', self.builder.warn('dot code %r: ' % code + str(exc)) raise nodes.SkipNode - self.body.append(self.starttag(node, 'p', CLASS='graphviz')) + if node.get('inline', False): + wrapper = 'span' + else: + wrapper = 'p' + + self.body.append(self.starttag(node, wrapper, CLASS='graphviz')) if fname is None: self.body.append(self.encode(code)) else: @@ -220,7 +249,7 @@ def render_dot_html(self, node, code, options, prefix='graphviz', (fname, alt, mapname, imgcss)) self.body.extend(imgmap) - self.body.append('</p>\n') + self.body.append('</%s>\n' % wrapper) raise nodes.SkipNode @@ -235,8 +264,14 @@ def render_dot_latex(self, node, code, options, prefix='graphviz'): self.builder.warn('dot code %r: ' % code + str(exc)) raise nodes.SkipNode + if node.get('inline', False): + para_separator = '' + else: + para_separator = '\n' + if fname is not None: - self.body.append('\\includegraphics{%s}' % fname) + self.body.append('%s\\includegraphics{%s}%s' % (para_separator, fname, + para_separator)) raise nodes.SkipNode diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py index ad0c253a..231b3762 100644 --- a/sphinx/ext/inheritance_diagram.py +++ b/sphinx/ext/inheritance_diagram.py @@ -67,8 +67,7 @@ class InheritanceGraph(object): graphviz dot graph from them. """ def __init__(self, class_names, currmodule, show_builtins=False, parts=0): - """ - *class_names* is a list of child classes to show bases from. + """*class_names* is a list of child classes to show bases from. If *show_builtins* is True, then Python builtins will be shown in the graph. @@ -81,9 +80,7 @@ class InheritanceGraph(object): 'inheritance diagram') def _import_class_or_module(self, name, currmodule): - """ - Import a class using its fully-qualified *name*. - """ + """Import a class using its fully-qualified *name*.""" try: path, base = class_sig_re.match(name).groups() except ValueError: @@ -182,9 +179,7 @@ class InheritanceGraph(object): return '.'.join(name_parts[-parts:]) def get_all_class_names(self): - """ - Get all of the class names involved in the graph. - """ + """Get all of the class names involved in the graph.""" return [fullname for (_, fullname, _) in self.class_info] # These are the default attrs for graphviz @@ -213,9 +208,8 @@ class InheritanceGraph(object): def generate_dot(self, name, urls={}, env=None, graph_attrs={}, node_attrs={}, edge_attrs={}): - """ - Generate a graphviz dot graph from the classes that - were passed in to __init__. + """Generate a graphviz dot graph from the classes that were passed in + to __init__. *name* is the name of the graph. @@ -363,7 +357,8 @@ def setup(app): latex=(latex_visit_inheritance_diagram, None), html=(html_visit_inheritance_diagram, None), text=(skip, None), - man=(skip, None)) + man=(skip, None), + texinfo=(skip, None)) app.add_directive('inheritance-diagram', InheritanceDiagram) app.add_config_value('inheritance_graph_attrs', {}, False), app.add_config_value('inheritance_node_attrs', {}, False), diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py index 578dddee..709428a3 100644 --- a/sphinx/ext/intersphinx.py +++ b/sphinx/ext/intersphinx.py @@ -26,6 +26,7 @@ import time import zlib +import codecs import urllib2 import posixpath from os import path @@ -33,19 +34,26 @@ from os import path from docutils import nodes from sphinx.builders.html import INVENTORY_FILENAME +from sphinx.util.pycompat import b + handlers = [urllib2.ProxyHandler(), urllib2.HTTPRedirectHandler(), urllib2.HTTPHandler()] -if hasattr(urllib2, 'HTTPSHandler'): +try: handlers.append(urllib2.HTTPSHandler) +except NameError: + pass urllib2.install_opener(urllib2.build_opener(*handlers)) +UTF8StreamReader = codecs.lookup('utf-8')[2] + def read_inventory_v1(f, uri, join): + f = UTF8StreamReader(f) invdata = {} line = f.next() - projname = line.rstrip()[11:].decode('utf-8') + projname = line.rstrip()[11:] line = f.next() version = line.rstrip()[11:] for line in f: @@ -68,25 +76,25 @@ def read_inventory_v2(f, uri, join, bufsize=16*1024): projname = line.rstrip()[11:].decode('utf-8') line = f.readline() version = line.rstrip()[11:].decode('utf-8') - line = f.readline() + line = f.readline().decode('utf-8') if 'zlib' not in line: raise ValueError def read_chunks(): decompressor = zlib.decompressobj() - for chunk in iter(lambda: f.read(bufsize), ''): + for chunk in iter(lambda: f.read(bufsize), b('')): yield decompressor.decompress(chunk) yield decompressor.flush() def split_lines(iter): - buf = '' + buf = b('') for chunk in iter: buf += chunk - lineend = buf.find('\n') + lineend = buf.find(b('\n')) while lineend != -1: yield buf[:lineend].decode('utf-8') buf = buf[lineend+1:] - lineend = buf.find('\n') + lineend = buf.find(b('\n')) assert not buf for line in split_lines(read_chunks()): @@ -115,7 +123,7 @@ def fetch_inventory(app, uri, inv): '%s: %s' % (inv, err.__class__, err)) return try: - line = f.readline().rstrip() + line = f.readline().rstrip().decode('utf-8') try: if line == '# Sphinx inventory version 1': invdata = read_inventory_v1(f, uri, join) diff --git a/sphinx/ext/mathbase.py b/sphinx/ext/mathbase.py index e7258300..c9f993ae 100644 --- a/sphinx/ext/mathbase.py +++ b/sphinx/ext/mathbase.py @@ -12,6 +12,7 @@ from docutils import nodes, utils from docutils.parsers.rst import directives +from sphinx.writers import texinfo from sphinx.util.compat import Directive @@ -124,6 +125,20 @@ def man_visit_eqref(self, node): raise nodes.SkipNode +def texinfo_visit_math(self, node): + self.body.append('@math{' + texinfo.escape_arg(node['latex']) + '}') + raise nodes.SkipNode + +def texinfo_visit_displaymath(self, node): + self.visit_paragraph(node) +def texinfo_depart_displaymath(self, node): + self.depart_paragraph(node) + +def texinfo_visit_eqref(self, node): + self.body.append(node['target']) + raise nodes.SkipNode + + def html_visit_eqref(self, node): self.body.append('<a href="#equation-%s">' % node['target']) @@ -150,20 +165,23 @@ def number_equations(app, doctree, docname): def setup_math(app, htmlinlinevisitors, htmldisplayvisitors): app.add_node(math, - latex=(latex_visit_math, None), - text=(text_visit_math, None), - man=(man_visit_math, None), - html=htmlinlinevisitors) + latex=(latex_visit_math, None), + text=(text_visit_math, None), + man=(man_visit_math, None), + texinfo=(texinfo_visit_math, None), + html=htmlinlinevisitors) app.add_node(displaymath, - latex=(latex_visit_displaymath, None), - text=(text_visit_displaymath, None), - man=(man_visit_displaymath, man_depart_displaymath), - html=htmldisplayvisitors) + latex=(latex_visit_displaymath, None), + text=(text_visit_displaymath, None), + man=(man_visit_displaymath, man_depart_displaymath), + texinfo=(texinfo_visit_displaymath, texinfo_depart_displaymath), + html=htmldisplayvisitors) app.add_node(eqref, - latex=(latex_visit_eqref, None), - text=(text_visit_eqref, None), - man=(man_visit_eqref, None), - html=(html_visit_eqref, html_depart_eqref)) + latex=(latex_visit_eqref, None), + text=(text_visit_eqref, None), + man=(man_visit_eqref, None), + texinfo=(texinfo_visit_eqref, None), + html=(html_visit_eqref, html_depart_eqref)) app.add_role('math', math_role) app.add_role('eq', eq_role) app.add_directive('math', MathDirective) diff --git a/sphinx/ext/mathjax.py b/sphinx/ext/mathjax.py new file mode 100644 index 00000000..e8d2d485 --- /dev/null +++ b/sphinx/ext/mathjax.py @@ -0,0 +1,67 @@ +# -*- coding: utf-8 -*- +""" + sphinx.ext.mathjax + ~~~~~~~~~~~~~~~~~~ + + Allow `MathJax <http://mathjax.org/>`_ to be used to display math in + Sphinx's HTML writer -- requires the MathJax JavaScript library on your + webserver/computer. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from docutils import nodes + +from sphinx.application import ExtensionError +from sphinx.ext.mathbase import setup_math as mathbase_setup + + +def html_visit_math(self, node): + self.body.append(self.starttag(node, 'span', '', CLASS='math')) + self.body.append(self.builder.config.mathjax_inline[0] + + self.encode(node['latex']) + + self.builder.config.mathjax_inline[1] + '</span>') + raise nodes.SkipNode + +def html_visit_displaymath(self, node): + self.body.append(self.starttag(node, 'div', CLASS='math')) + if node['nowrap']: + self.body.append(self.builder.config.mathjax_display[0] + + node['latex'] + + self.builder.config.mathjax_display[1]) + self.body.append('</div>') + raise nodes.SkipNode + + parts = [prt for prt in node['latex'].split('\n\n') if prt.strip()] + for i, part in enumerate(parts): + part = self.encode(part) + if i == 0: + # necessary to e.g. set the id property correctly + if node['number']: + self.body.append('<span class="eqno">(%s)</span>' % + node['number']) + if '&' in part or '\\\\' in part: + self.body.append(self.builder.config.mathjax_display[0] + + '\\begin{split}' + part + '\\end{split}' + + self.builder.config.mathjax_display[1]) + else: + self.body.append(self.builder.config.mathjax_display[0] + part + + self.builder.config.mathjax_display[1]) + self.body.append('</div>\n') + raise nodes.SkipNode + +def builder_inited(app): + if not app.config.mathjax_path: + raise ExtensionError('mathjax_path config value must be set for the ' + 'mathjax extension to work') + app.add_javascript(app.config.mathjax_path) + + +def setup(app): + mathbase_setup(app, (html_visit_math, None), (html_visit_displaymath, None)) + app.add_config_value('mathjax_path', '', False) + app.add_config_value('mathjax_inline', [r'\(', r'\)'], 'html') + app.add_config_value('mathjax_display', [r'\[', r'\]'], 'html') + app.connect('builder-inited', builder_inited) + diff --git a/sphinx/ext/oldcmarkup.py b/sphinx/ext/oldcmarkup.py index 2bf9b65d..41969c36 100644 --- a/sphinx/ext/oldcmarkup.py +++ b/sphinx/ext/oldcmarkup.py @@ -18,6 +18,7 @@ WARNING_MSG = 'using old C markup; please migrate to new-style markup ' \ '(e.g. c:function instead of cfunction), see ' \ 'http://sphinx.pocoo.org/domains.html' + class OldCDirective(Directive): has_content = True required_arguments = 1 diff --git a/sphinx/ext/pngmath.py b/sphinx/ext/pngmath.py index 6fdfbfe7..015a4904 100644 --- a/sphinx/ext/pngmath.py +++ b/sphinx/ext/pngmath.py @@ -26,6 +26,7 @@ from docutils import nodes from sphinx.errors import SphinxError from sphinx.util.png import read_png_depth, write_png_depth from sphinx.util.osutil import ensuredir, ENOENT +from sphinx.util.pycompat import b from sphinx.ext.mathbase import setup_math as mathbase_setup, wrap_displaymath class MathExtError(SphinxError): @@ -58,11 +59,10 @@ DOC_BODY_PREVIEW = r''' \end{document} ''' -depth_re = re.compile(r'\[\d+ depth=(-?\d+)\]') +depth_re = re.compile(b(r'\[\d+ depth=(-?\d+)\]')) def render_math(self, math): - """ - Render the LaTeX math expression *math* using latex and dvipng. + """Render the LaTeX math expression *math* using latex and dvipng. Return the filename relative to the built document and the "depth", that is, the distance of image bottom and baseline in pixels, if the diff --git a/sphinx/ext/todo.py b/sphinx/ext/todo.py index 2ba9d5e1..6a44a9b4 100644 --- a/sphinx/ext/todo.py +++ b/sphinx/ext/todo.py @@ -159,7 +159,8 @@ def setup(app): html=(visit_todo_node, depart_todo_node), latex=(visit_todo_node, depart_todo_node), text=(visit_todo_node, depart_todo_node), - man=(visit_todo_node, depart_todo_node)) + man=(visit_todo_node, depart_todo_node), + texinfo=(visit_todo_node, depart_todo_node)) app.add_directive('todo', Todo) app.add_directive('todolist', TodoList) diff --git a/sphinx/ext/viewcode.py b/sphinx/ext/viewcode.py index 4994f125..020db697 100644 --- a/sphinx/ext/viewcode.py +++ b/sphinx/ext/viewcode.py @@ -31,7 +31,11 @@ def doctree_read(app, doctree): env._viewcode_modules[modname] = False return analyzer.find_tags() - entry = analyzer.code.decode(analyzer.encoding), analyzer.tags, {} + if not isinstance(analyzer.code, unicode): + code = analyzer.code.decode(analyzer.encoding) + else: + code = analyzer.code + entry = code, analyzer.tags, {} env._viewcode_modules[modname] = entry elif entry is False: return diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py index 8cbd647a..e84238e8 100644 --- a/sphinx/highlighting.py +++ b/sphinx/highlighting.py @@ -30,34 +30,14 @@ try: from pygments.lexers import get_lexer_by_name, guess_lexer from pygments.formatters import HtmlFormatter, LatexFormatter from pygments.filters import ErrorToken - from pygments.style import Style from pygments.styles import get_style_by_name - from pygments.styles.friendly import FriendlyStyle - from pygments.token import Generic, Comment, Number from pygments.util import ClassNotFound + from sphinx.pygments_styles import SphinxStyle, NoneStyle except ImportError: pygments = None lexers = None HtmlFormatter = LatexFormatter = None else: - class SphinxStyle(Style): - """ - Like friendly, but a bit darker to enhance contrast on the green - background. - """ - - background_color = '#eeffcc' - default_style = '' - - styles = FriendlyStyle.styles - styles.update({ - Generic.Output: '#333', - Comment: 'italic #408090', - Number: '#208050', - }) - - class NoneStyle(Style): - """Style without any styling.""" lexers = dict( none = TextLexer(), @@ -156,7 +136,7 @@ class PygmentsBridge(object): if sys.version_info >= (2, 5): src = 'from __future__ import with_statement\n' + src - if isinstance(src, unicode): + if sys.version_info < (3, 0) and isinstance(src, unicode): # Non-ASCII chars will only occur in string literals # and comments. If we wanted to give them to the parser # correctly, we'd have to find out the correct source @@ -175,7 +155,7 @@ class PygmentsBridge(object): return True def highlight_block(self, source, lang, linenos=False, warn=None): - if isinstance(source, str): + if not isinstance(source, unicode): source = source.decode() if not pygments: return self.unhighlighted(source) diff --git a/sphinx/jinja2glue.py b/sphinx/jinja2glue.py index f3639867..1c5390dc 100644 --- a/sphinx/jinja2glue.py +++ b/sphinx/jinja2glue.py @@ -37,8 +37,10 @@ def accesskey(context, key): class SphinxFileSystemLoader(FileSystemLoader): - """FileSystemLoader subclass that is not so strict about '..' - entries in template names.""" + """ + FileSystemLoader subclass that is not so strict about '..' entries in + template names. + """ def get_source(self, environment, template): for searchpath in self.searchpath: diff --git a/sphinx/locale/__init__.py b/sphinx/locale/__init__.py index e40a7eab..3aca780c 100644 --- a/sphinx/locale/__init__.py +++ b/sphinx/locale/__init__.py @@ -8,13 +8,16 @@ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ + +import sys import gettext import UserString class _TranslationProxy(UserString.UserString, object): - """Class for proxy strings from gettext translations. This is a helper - for the lazy_* functions from this module. + """ + Class for proxy strings from gettext translations. This is a helper for the + lazy_* functions from this module. The proxy implementation attempts to be as complete as possible, so that the lazy objects should mostly work as expected, for example for sorting. @@ -135,7 +138,8 @@ class _TranslationProxy(UserString.UserString, object): def mygettext(string): """Used instead of _ when creating TranslationProxies, because _ is - not bound yet at that time.""" + not bound yet at that time. + """ return _(string) def lazy_gettext(string): @@ -166,6 +170,7 @@ versionlabels = { 'deprecated': l_('Deprecated since version %s'), } +# XXX Python specific pairindextypes = { 'module': l_('module'), 'keyword': l_('keyword'), @@ -176,18 +181,32 @@ pairindextypes = { 'builtin': l_('built-in function'), } -translator = None +translators = {} -def _(message): - return translator.ugettext(message) +if sys.version_info >= (3, 0): + def _(message): + return translators['sphinx'].gettext(message) +else: + def _(message): + return translators['sphinx'].ugettext(message) -def init(locale_dirs, language): - global translator + +def init(locale_dirs, language, catalog='sphinx'): + """Look for message catalogs in `locale_dirs` and *ensure* that there is at + least a NullTranslations catalog set in `translators`. If called multiple + times or if several ``.mo`` files are found, their contents are merged + together (thus making ``init`` reentrable). + """ + global translators + translator = translators.get(catalog) + # ignore previously failed attempts to find message catalogs + if isinstance(translator, gettext.NullTranslations): + translator = None # the None entry is the system's default locale path has_translation = True for dir_ in locale_dirs: try: - trans = gettext.translation('sphinx', localedir=dir_, + trans = gettext.translation(catalog, localedir=dir_, languages=[language]) if translator is None: translator = trans @@ -196,7 +215,11 @@ def init(locale_dirs, language): except Exception: # Language couldn't be found in the specified path pass + # guarantee translations[catalog] exists if translator is None: translator = gettext.NullTranslations() has_translation = False + translators[catalog] = translator + if hasattr(translator, 'ugettext'): + translator.gettext = translator.ugettext return translator, has_translation diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.js b/sphinx/locale/bn/LC_MESSAGES/sphinx.js index 277cd3d0..6ffd0c0b 100644 --- a/sphinx/locale/bn/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/bn/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "bn", "plural_expr": "(n != 1)", "messages": {"Search Results": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09ab\u09b2\u09be\u09ab\u09b2", "Preparing search...": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09aa\u09cd\u09b0\u09b8\u09cd\u09a4\u09c1\u09a4\u09bf \u099a\u09b2\u099b\u09c7...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u0986\u09aa\u09a8\u09be\u09b0 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7 \u0995\u09c7\u09be\u09a8 \u09ab\u09b2\u09be\u09ab\u09b2 \u09aa\u09be\u0993\u09df\u09be \u09af\u09be\u09df\u09a8\u09bf\u0964 \u0986\u09aa\u09a8\u09be\u09b0 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09b6\u09ac\u09cd\u09a6\u0997\u09c1\u09b2\u09c7\u09be\u09b0 \u09b8\u09a0\u09bf\u0995 \u09ac\u09be\u09a8\u09be\u09a8 \u0993 \u09ac\u09bf\u09ad\u09be\u0997 \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8 \u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u0995\u09b0\u09c1\u09a8\u0964", "Search finished, found %s page(s) matching the search query.": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u09b6\u09c7\u09b7 \u09b9\u09df\u09c7\u099b\u09c7, \u09ab\u09b2\u09be\u09ab\u09b2\u09c7 %s-\u099f\u09bf \u09aa\u09be\u09a4\u09be \u09aa\u09be\u0993\u09df\u09be \u0997\u09c7\u099b\u09c7\u0964", ", in ": ", -", "Permalink to this headline": "\u098f\u0987 \u09b6\u09bf\u09b0\u09c7\u09be\u09a8\u09be\u09ae\u09c7\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "Searching": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u099a\u09b2\u099b\u09c7", "Permalink to this definition": "\u098f\u0987 \u09b8\u0982\u099c\u09cd\u099e\u09be\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "Hide Search Matches": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09ae\u09cd\u09af\u09be\u099a\u0997\u09c1\u09b2\u09c7\u09be \u09b2\u09c1\u0995\u09be\u09a8"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "bn", "plural_expr": "(n != 1)", "messages": {"Search Results": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09ab\u09b2\u09be\u09ab\u09b2", "Preparing search...": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09aa\u09cd\u09b0\u09b8\u09cd\u09a4\u09c1\u09a4\u09bf \u099a\u09b2\u099b\u09c7...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u0986\u09aa\u09a8\u09be\u09b0 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7 \u0995\u09c7\u09be\u09a8 \u09ab\u09b2\u09be\u09ab\u09b2 \u09aa\u09be\u0993\u09df\u09be \u09af\u09be\u09df\u09a8\u09bf\u0964 \u0986\u09aa\u09a8\u09be\u09b0 \u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09b6\u09ac\u09cd\u09a6\u0997\u09c1\u09b2\u09c7\u09be\u09b0 \u09b8\u09a0\u09bf\u0995 \u09ac\u09be\u09a8\u09be\u09a8 \u0993 \u09ac\u09bf\u09ad\u09be\u0997 \u09a8\u09bf\u09b0\u09cd\u09ac\u09be\u099a\u09a8 \u09a8\u09bf\u09b6\u09cd\u099a\u09bf\u09a4 \u0995\u09b0\u09c1\u09a8\u0964", "Search finished, found %s page(s) matching the search query.": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u09b6\u09c7\u09b7 \u09b9\u09df\u09c7\u099b\u09c7, \u09ab\u09b2\u09be\u09ab\u09b2\u09c7 %s-\u099f\u09bf \u09aa\u09be\u09a4\u09be \u09aa\u09be\u0993\u09df\u09be \u0997\u09c7\u099b\u09c7\u0964", ", in ": ", -", "Expand sidebar": "", "Permalink to this headline": "\u098f\u0987 \u09b6\u09bf\u09b0\u09c7\u09be\u09a8\u09be\u09ae\u09c7\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "Searching": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8 \u099a\u09b2\u099b\u09c7", "Collapse sidebar": "", "Permalink to this definition": "\u098f\u0987 \u09b8\u0982\u099c\u09cd\u099e\u09be\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "Hide Search Matches": "\u0985\u09a8\u09c1\u09b8\u09a8\u09cd\u09a7\u09be\u09a8\u09c7\u09b0 \u09ae\u09cd\u09af\u09be\u099a\u0997\u09c1\u09b2\u09c7\u09be \u09b2\u09c1\u0995\u09be\u09a8"}});
\ No newline at end of file diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.mo b/sphinx/locale/bn/LC_MESSAGES/sphinx.mo Binary files differindex 9b60397e..db568e1b 100644 --- a/sphinx/locale/bn/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/bn/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/bn/LC_MESSAGES/sphinx.po b/sphinx/locale/bn/LC_MESSAGES/sphinx.po index d5141c79..88aed5e4 100644 --- a/sphinx/locale/bn/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/bn/LC_MESSAGES/sphinx.po @@ -1,4 +1,4 @@ -# Translations template for Sphinx. +# Bengali translations for Sphinx. # Copyright (C) 2009 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # FIRST AUTHOR <EMAIL@ADDRESS>, 2009. @@ -8,573 +8,654 @@ msgstr "" "Project-Id-Version: Sphinx 1.0pre/[?1034h2e1ab15e035e\n" "Report-Msgid-Bugs-To: nasim.haque@gmail.com\n" "POT-Creation-Date: 2009-11-08 16:28+0100\n" -"PO-Revision-Date: 2009-11-10 13:42+0100\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Nasimul Haque <nasim.haque@gmail.com>\n" "Language-Team: Nasimul Haque <nasim.haque@gmail.com>\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:130 -#: sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 +#: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%B %d, %Y" -#: sphinx/environment.py:348 -#: sphinx/themes/basic/genindex-single.html:2 -#: sphinx/themes/basic/genindex-split.html:2 -#: sphinx/themes/basic/genindex-split.html:5 -#: sphinx/themes/basic/genindex.html:2 -#: sphinx/themes/basic/genindex.html:5 -#: sphinx/themes/basic/genindex.html:48 -#: sphinx/themes/basic/layout.html:134 -#: sphinx/writers/latex.py:190 -msgid "Index" -msgstr "ইনডেকà§à¦¸" - -#: sphinx/environment.py:349 -#: sphinx/writers/latex.py:189 -msgid "Module Index" -msgstr "মডিউল ইনডেকà§à¦¸" - -#: sphinx/environment.py:350 -#: sphinx/themes/basic/defindex.html:16 -msgid "Search Page" -msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ পাতা" - -#: sphinx/roles.py:167 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "পাইথন উনà§à¦¨à§Ÿà¦¨ পরামরà§à¦¶!PEP %s" -#: sphinx/builders/changes.py:70 +#: sphinx/builders/changes.py:72 msgid "Builtins" msgstr "বিলà§à¦Ÿà¦‡à¦¨ সমূহ" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:74 msgid "Module level" msgstr "মডিউল লেà¦à§‡à¦²" -#: sphinx/builders/html.py:224 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%b %d, %Y" -#: sphinx/builders/html.py:243 -#: sphinx/themes/basic/defindex.html:21 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "সাধারণ ইনডেকà§à¦¸" -#: sphinx/builders/html.py:243 +#: sphinx/builders/html.py:279 msgid "index" msgstr "ইনডেকà§à¦¸" -#: sphinx/builders/html.py:247 -#: sphinx/builders/htmlhelp.py:220 -#: sphinx/builders/qthelp.py:133 -#: sphinx/themes/basic/defindex.html:19 -#: sphinx/themes/basic/modindex.html:2 -#: sphinx/themes/basic/modindex.html:13 -#: sphinx/themes/scrolls/modindex.html:2 -#: sphinx/themes/scrolls/modindex.html:13 -msgid "Global Module Index" -msgstr "গà§à¦²à§‡à¦¾à¦¬à¦¾à¦² মডিউল ইনডেকà§à¦¸" - -#: sphinx/builders/html.py:248 -msgid "modules" -msgstr "মডিউল সমূহ" - -#: sphinx/builders/html.py:304 +#: sphinx/builders/html.py:339 msgid "next" msgstr "পরবরà§à¦¤à§€" -#: sphinx/builders/html.py:313 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€" -#: sphinx/builders/latex.py:162 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr "(-" -#: sphinx/directives/__init__.py:78 -#: sphinx/directives/__init__.py:79 -#: sphinx/directives/__init__.py:80 -#: sphinx/directives/__init__.py:81 -msgid "Raises" -msgstr "রেইজেস" - -#: sphinx/directives/__init__.py:82 -#: sphinx/directives/__init__.py:83 -#: sphinx/directives/__init__.py:84 -msgid "Variable" -msgstr "à¦à§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²" - -#: sphinx/directives/__init__.py:85 -#: sphinx/directives/__init__.py:86 -#: sphinx/directives/__init__.py:92 -#: sphinx/directives/__init__.py:93 -msgid "Returns" -msgstr "রিটারà§à¦¨à¦¸" - -#: sphinx/directives/__init__.py:94 -msgid "Return type" -msgstr "রিটারà§à¦¨ টাইপ" - -#: sphinx/directives/__init__.py:169 -msgid "Parameter" -msgstr "পà§à¦¯à¦¾à¦°à¦¾à¦®à¦¿à¦Ÿà¦¾à¦°" - -#: sphinx/directives/__init__.py:173 -msgid "Parameters" -msgstr "পà§à¦¯à¦¾à¦°à¦¾à¦®à¦¿à¦Ÿà¦¾à¦°" - -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "অনà§à¦šà§à¦›à§‡à¦¦ লেখক:" -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "মডিউল লেখক:" -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 +#, fuzzy +msgid "Code author: " +msgstr "মডিউল লেখক:" + +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "লেখক:" -#: sphinx/directives/other.py:233 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "আরও দেখà§à¦¨" -#: sphinx/domains/c.py:124 +#: sphinx/domains/__init__.py:242 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 +msgid "Parameters" +msgstr "পà§à¦¯à¦¾à¦°à¦¾à¦®à¦¿à¦Ÿà¦¾à¦°" + +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 +msgid "Returns" +msgstr "রিটারà§à¦¨à¦¸" + +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 +msgid "Return type" +msgstr "রিটারà§à¦¨ টাইপ" + +#: sphinx/domains/c.py:133 #, python-format msgid "%s (C function)" msgstr "%s (C ফাংশন)" -#: sphinx/domains/c.py:126 +#: sphinx/domains/c.py:135 #, python-format msgid "%s (C member)" msgstr "%s (C মেমà§à¦¬à¦¾à¦°)" -#: sphinx/domains/c.py:128 +#: sphinx/domains/c.py:137 #, python-format msgid "%s (C macro)" msgstr "%s (C মà§à¦¯à¦¾à¦•à§à¦°à§‡à¦¾)" -#: sphinx/domains/c.py:130 +#: sphinx/domains/c.py:139 #, python-format msgid "%s (C type)" msgstr "%s (C টাইপ)" -#: sphinx/domains/c.py:132 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C variable)" msgstr "%s (C à¦à§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²)" -#: sphinx/domains/c.py:162 -msgid "C function" -msgstr "C ফাংশন" +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 +msgid "function" +msgstr "ফাংশন" -#: sphinx/domains/c.py:163 -msgid "C member" +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 +#, fuzzy +msgid "member" msgstr "C মেমà§à¦¬à¦¾à¦°" -#: sphinx/domains/c.py:164 -msgid "C macro" +#: sphinx/domains/c.py:173 +#, fuzzy +msgid "macro" msgstr "C মà§à¦¯à¦¾à¦•à§à¦°à§‡à¦¾" -#: sphinx/domains/c.py:165 -msgid "C type" +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 +#, fuzzy +msgid "type" msgstr "C টাইপ" -#: sphinx/domains/c.py:166 -msgid "C variable" +#: sphinx/domains/c.py:175 +#, fuzzy +msgid "variable" msgstr "C à¦à§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²" -#: sphinx/domains/python.py:186 +#: sphinx/domains/cpp.py:883 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (C++ কà§à¦²à¦¾à¦¸à§‡)" + +#: sphinx/domains/cpp.py:898 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (C++ টাইপ)" + +#: sphinx/domains/cpp.py:917 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (C++ মেমà§à¦¬à¦¾à¦°)" + +#: sphinx/domains/cpp.py:969 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (C++ ফাংশন)" + +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 +msgid "class" +msgstr "কà§à¦²à¦¾à¦¸" + +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (বিলà§à¦Ÿ-ইন ফাংশন)" -#: sphinx/domains/python.py:187 -#: sphinx/domains/python.py:244 -#: sphinx/domains/python.py:256 -#: sphinx/domains/python.py:269 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (%s মেথড)" + +#: sphinx/domains/javascript.py:108 +#, python-format +msgid "%s() (class)" +msgstr "%s() (কà§à¦²à¦¾à¦¸à§‡)" + +#: sphinx/domains/javascript.py:110 +#, python-format +msgid "%s (global variable or constant)" +msgstr "" + +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (%s à¦à§à¦¯à¦Ÿà§à¦°à¦¿à¦¬à¦¿à¦‰à¦Ÿ)" + +#: sphinx/domains/javascript.py:121 +#, fuzzy +msgid "Arguments" +msgstr "পà§à¦¯à¦¾à¦°à¦¾à¦®à¦¿à¦Ÿà¦¾à¦°" + +#: sphinx/domains/javascript.py:124 +msgid "Throws" +msgstr "" + +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 +msgid "data" +msgstr "ডাটা" + +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 +msgid "attribute" +msgstr "à¦à§à¦¯à¦Ÿà§à¦°à¦¿à¦¬à¦¿à¦‰à¦Ÿ" + +#: sphinx/domains/python.py:98 +#, fuzzy +msgid "Variables" +msgstr "à¦à§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²" + +#: sphinx/domains/python.py:101 +msgid "Raises" +msgstr "রেইজেস" + +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s মডিউলে)" -#: sphinx/domains/python.py:190 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (বিলà§à¦Ÿ-ইন à¦à§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²)" -#: sphinx/domains/python.py:191 -#: sphinx/domains/python.py:282 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (%s মডিউলে)" -#: sphinx/domains/python.py:207 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (বিলà§à¦Ÿ-ইন কà§à¦²à¦¾à¦¸)" -#: sphinx/domains/python.py:208 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (%s কà§à¦²à¦¾à¦¸à§‡)" -#: sphinx/domains/python.py:248 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s (%s.%s মেথড)" -#: sphinx/domains/python.py:250 -#, python-format -msgid "%s() (%s method)" -msgstr "%s() (%s মেথড)" - -#: sphinx/domains/python.py:260 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s (%s.%s সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦¿à¦• মেথড)" -#: sphinx/domains/python.py:263 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦¿à¦• মেথড)" -#: sphinx/domains/python.py:273 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s কà§à¦²à¦¾à¦¸ মেথড)" -#: sphinx/domains/python.py:276 +#: sphinx/domains/python.py:334 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s কà§à¦²à¦¾à¦¸ মেথড)" -#: sphinx/domains/python.py:286 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s à¦à§à¦¯à¦Ÿà§à¦°à¦¿à¦¬à¦¿à¦‰à¦Ÿ)" -#: sphinx/domains/python.py:288 -#, python-format -msgid "%s (%s attribute)" -msgstr "%s (%s à¦à§à¦¯à¦Ÿà§à¦°à¦¿à¦¬à¦¿à¦‰à¦Ÿ)" - -#: sphinx/domains/python.py:334 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "পà§à¦²à¦¾à¦Ÿà¦«à¦°à¦®:" -#: sphinx/domains/python.py:340 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (মডিউল)" -#: sphinx/domains/python.py:396 -msgid "function" -msgstr "ফাংশন" +#: sphinx/domains/python.py:455 +#, fuzzy +msgid "Python Module Index" +msgstr "মডিউল ইনডেকà§à¦¸" -#: sphinx/domains/python.py:397 -msgid "data" -msgstr "ডাটা" +#: sphinx/domains/python.py:456 +msgid "modules" +msgstr "মডিউল সমূহ" -#: sphinx/domains/python.py:398 -msgid "class" -msgstr "কà§à¦²à¦¾à¦¸" +#: sphinx/domains/python.py:501 +msgid "Deprecated" +msgstr "ডেপà§à¦°à¦¿à¦•েটেড" -#: sphinx/domains/python.py:399 -#: sphinx/locale/__init__.py:161 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "à¦à¦•à§à¦¸à§‡à¦ªà¦¶à¦¨" -#: sphinx/domains/python.py:400 +#: sphinx/domains/python.py:527 msgid "method" msgstr "মেথড" -#: sphinx/domains/python.py:401 -msgid "attribute" -msgstr "à¦à§à¦¯à¦Ÿà§à¦°à¦¿à¦¬à¦¿à¦‰à¦Ÿ" +#: sphinx/domains/python.py:528 +msgid "class method" +msgstr "কà§à¦²à¦¾à¦¸ মেথড" -#: sphinx/domains/python.py:402 -#: sphinx/locale/__init__.py:157 +#: sphinx/domains/python.py:529 +msgid "static method" +msgstr "সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦¿à¦• মেথড" + +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "মডিউল" -#: sphinx/domains/std.py:67 -#: sphinx/domains/std.py:83 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "ডেপà§à¦°à¦¿à¦•েটেড" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "" + +#: sphinx/domains/rst.py:57 +#, fuzzy, python-format +msgid "%s (role)" +msgstr "%s (মডিউল)" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "" + +#: sphinx/domains/rst.py:107 +#, fuzzy +msgid "role" +msgstr "মডিউল" + +#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 #, python-format msgid "environment variable; %s" msgstr "à¦à¦¨à¦à¦¾à§Ÿà¦°à¦¨à¦®à§‡à¦¨à§à¦Ÿ à¦à§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²; %s" -#: sphinx/domains/std.py:156 +#: sphinx/domains/std.py:160 #, python-format msgid "%scommand line option; %s" msgstr "%sকমানà§à¦¡ লাইন অপশন; %s" -#: sphinx/domains/std.py:324 +#: sphinx/domains/std.py:328 msgid "glossary term" msgstr "শবà§à¦¦à¦•োষ" -#: sphinx/domains/std.py:325 +#: sphinx/domains/std.py:329 msgid "grammar token" msgstr "বà§à¦¯à¦•রণ টোকেন" -#: sphinx/domains/std.py:326 +#: sphinx/domains/std.py:330 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:331 msgid "environment variable" msgstr "à¦à¦¨à¦à¦¾à§Ÿà¦°à¦¨à¦®à§‡à¦¨à§à¦Ÿ à¦à§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²" -#: sphinx/domains/std.py:327 +#: sphinx/domains/std.py:332 msgid "program option" msgstr "পà§à¦°à§‡à¦¾à¦—à§à¦°à¦¾à¦® অপশন" -#: sphinx/ext/autodoc.py:892 +#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 +#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 +#: sphinx/writers/latex.py:174 +msgid "Index" +msgstr "ইনডেকà§à¦¸" + +#: sphinx/domains/std.py:361 +msgid "Module Index" +msgstr "মডিউল ইনডেকà§à¦¸" + +#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ পাতা" + +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr "বেস: %s" -#: sphinx/ext/autodoc.py:925 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr ":class:`%s` à¦à¦° উপনাম" -#: sphinx/ext/todo.py:40 +#: sphinx/ext/todo.py:41 msgid "Todo" msgstr "অসমাপà§à¦¤ কাজ" -#: sphinx/ext/todo.py:98 +#: sphinx/ext/todo.py:109 +#, fuzzy, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(%s, %d লাইনে মূল অনà§à¦¤à¦°à§à¦à§à¦•à§à¦¤à¦¿à¦Ÿà¦¿ রয়েছে.)" + +#: sphinx/ext/todo.py:117 +msgid "original entry" +msgstr "" + +#: sphinx/ext/viewcode.py:70 +msgid "[source]" +msgstr "" + +#: sphinx/ext/viewcode.py:117 +msgid "[docs]" +msgstr "" + +#: sphinx/ext/viewcode.py:131 +#, fuzzy +msgid "Module code" +msgstr "মডিউল" + +#: sphinx/ext/viewcode.py:137 #, python-format -msgid "(The original entry is located in %s, line %d and can be found " -msgstr "(%s, %d লাইনে মূল অনà§à¦¤à¦°à§à¦à§à¦•à§à¦¤à¦¿à¦Ÿà¦¿ রয়েছে, যা পাওয়া যাবে" +msgid "<h1>Source code for %s</h1>" +msgstr "" -#: sphinx/ext/todo.py:104 -msgid "here" -msgstr "à¦à¦–ানে" +#: sphinx/ext/viewcode.py:164 +msgid "Overview: module code" +msgstr "" -#: sphinx/locale/__init__.py:138 +#: sphinx/ext/viewcode.py:165 +msgid "<h1>All modules for which code is available</h1>" +msgstr "" + +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "দৃষà§à¦Ÿà¦¿ আকরà§à¦·à¦£" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "সতরà§à¦•ীকরণ" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "বিপজà§à¦œà¦¨à¦•" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "à¦à§à¦² (à¦à¦°à¦°)" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "আà¦à¦¾à¦¸" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "গà§à¦°à§à¦¤à§à¦¬à¦ªà§‚রà§à¦£" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "নোট" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "আরও দেখà§à¦¨" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "পরামরà§à¦¶" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "সতরà§à¦•তা" -#: sphinx/locale/__init__.py:151 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "%s à¦à¦¾à¦°à§à¦¸à¦¨à§‡ নতà§à¦¨" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "%s à¦à¦¾à¦°à§à¦¸à¦¨à§‡ পরিবরà§à¦¤à¦¿à¦¤" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "%s à¦à¦¾à¦°à§à¦¸à¦¨ থেকে ডেপà§à¦°à¦¿à¦•েটেড" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "কিওয়ারà§à¦¡" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "অপারেটর" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "অবজেকà§à¦Ÿ" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦®à§‡à¦¨à§à¦Ÿ" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "বিলà§à¦Ÿ-ইন ফাংশন" -#: sphinx/themes/basic/defindex.html:2 +#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 +msgid "Table Of Contents" +msgstr "সূচীপতà§à¦°" + +#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 +msgid "Search" +msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨" + +#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "যান" + +#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20 +msgid "Enter search terms or a module, class or function name." +msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§‡à¦° জনà§à¦¯ টারà§à¦®, মডিউল, কà§à¦²à¦¾à¦¸ অথবা ফাংশনের নাম দিন।" + +#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14 +msgid "Show Source" +msgstr "সোরà§à¦¸ দেখà§à¦¨" + +#: sphinx/themes/basic/defindex.html:11 msgid "Overview" msgstr "à¦à§à¦®à¦¿à¦•া" -#: sphinx/themes/basic/defindex.html:11 +#: sphinx/themes/basic/defindex.html:20 msgid "Indices and tables:" msgstr "ইনডেকà§à¦¸ ও টেবিল সমূহ:" -#: sphinx/themes/basic/defindex.html:14 +#: sphinx/themes/basic/defindex.html:23 msgid "Complete Table of Contents" msgstr "পূরà§à¦£à¦¾à¦™à§à¦— সূচীপতà§à¦°" -#: sphinx/themes/basic/defindex.html:15 +#: sphinx/themes/basic/defindex.html:24 msgid "lists all sections and subsections" msgstr "সকল অনà§à¦šà§à¦›à§‡à¦¦ সমূহের তালিকা" -#: sphinx/themes/basic/defindex.html:17 +#: sphinx/themes/basic/defindex.html:26 msgid "search this documentation" msgstr "à¦à¦‡ সহায়িকাতে অনà§à¦¸à¦¨à§à¦§à¦¾ করà§à¦¨" -#: sphinx/themes/basic/defindex.html:20 +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "গà§à¦²à§‡à¦¾à¦¬à¦¾à¦² মডিউল ইনডেকà§à¦¸" + +#: sphinx/themes/basic/defindex.html:29 msgid "quick access to all modules" msgstr "সকল মডিউলে দà§à¦°à§à¦¤ পà§à¦°à¦¬à§‡à¦¶" -#: sphinx/themes/basic/defindex.html:22 +#: sphinx/themes/basic/defindex.html:31 msgid "all functions, classes, terms" msgstr "সকল ফাংশন, কà§à¦²à¦¾à¦¸, টারà§à¦®" -#: sphinx/themes/basic/genindex-single.html:5 +#: sphinx/themes/basic/genindex-single.html:14 #, python-format msgid "Index – %(key)s" msgstr "ইনডেকà§à¦¸ – %(key)s" -#: sphinx/themes/basic/genindex-single.html:44 -#: sphinx/themes/basic/genindex-split.html:14 -#: sphinx/themes/basic/genindex-split.html:27 -#: sphinx/themes/basic/genindex.html:54 +#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:56 msgid "Full index on one page" msgstr "à¦à¦• পাতায় সমà§à¦ªà§‚রà§à¦£ ইনডেকà§à¦¸" -#: sphinx/themes/basic/genindex-split.html:7 +#: sphinx/themes/basic/genindex-split.html:16 msgid "Index pages by letter" msgstr "বরà§à¦£à¦¾à¦¨à§à¦¸à¦¾à¦°à§‡ ইনডেকà§à¦¸ পাতা" -#: sphinx/themes/basic/genindex-split.html:15 +#: sphinx/themes/basic/genindex-split.html:25 msgid "can be huge" msgstr "খà§à¦¬ বড় হতে পারে" -#: sphinx/themes/basic/layout.html:10 +#: sphinx/themes/basic/layout.html:23 msgid "Navigation" msgstr "নেà¦à¦¿à¦—েশন" -#: sphinx/themes/basic/layout.html:42 -msgid "Table Of Contents" -msgstr "সূচীপতà§à¦°" - -#: sphinx/themes/basic/layout.html:48 -msgid "Previous topic" -msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€ টপিক" - -#: sphinx/themes/basic/layout.html:50 -msgid "previous chapter" -msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€ অধà§à¦¯à¦¾à§Ÿ" - -#: sphinx/themes/basic/layout.html:53 -msgid "Next topic" -msgstr "পরবরà§à¦¤à§€ টপিক" - -#: sphinx/themes/basic/layout.html:55 -msgid "next chapter" -msgstr "পরবরà§à¦¤à§€ অধà§à¦¯à¦¾à§Ÿ" - -#: sphinx/themes/basic/layout.html:60 -msgid "This Page" -msgstr "à¦à¦‡ পাতা" - -#: sphinx/themes/basic/layout.html:63 -msgid "Show Source" -msgstr "সোরà§à¦¸ দেখà§à¦¨" - -#: sphinx/themes/basic/layout.html:73 -msgid "Quick search" -msgstr "দà§à¦°à§à¦¤ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨" - -#: sphinx/themes/basic/layout.html:76 -msgid "Go" -msgstr "যান" - -#: sphinx/themes/basic/layout.html:81 -msgid "Enter search terms or a module, class or function name." -msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§‡à¦° জনà§à¦¯ টারà§à¦®, মডিউল, কà§à¦²à¦¾à¦¸ অথবা ফাংশনের নাম দিন।" - -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:113 #, python-format msgid "Search within %(docstitle)s" msgstr "%(docstitle)s à¦à¦° মধà§à¦¯à§‡ খà§à¦à¦œà§à¦¨" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:122 msgid "About these documents" msgstr "à¦à¦‡ ডকà§à¦®à§‡à¦¨à§à¦Ÿ সমà§à¦ªà¦°à§à¦•ে" -#: sphinx/themes/basic/layout.html:137 -#: sphinx/themes/basic/search.html:2 -#: sphinx/themes/basic/search.html:5 -msgid "Search" -msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨" - -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:131 msgid "Copyright" msgstr "কপিরাইট" -#: sphinx/themes/basic/layout.html:187 -#: sphinx/themes/scrolls/layout.html:83 +#: sphinx/themes/basic/layout.html:180 #, python-format msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "© <a href=\"%(path)s\">কপিরাইট</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:189 -#: sphinx/themes/scrolls/layout.html:85 +#: sphinx/themes/basic/layout.html:182 #, python-format msgid "© Copyright %(copyright)s." msgstr "© কপিরাইট %(copyright)s." -#: sphinx/themes/basic/layout.html:193 -#: sphinx/themes/scrolls/layout.html:89 +#: sphinx/themes/basic/layout.html:186 #, python-format msgid "Last updated on %(last_updated)s." msgstr "%(last_updated)s সরà§à¦¬à¦¶à§‡à¦· পরিবরà§à¦¤à¦¨ করা হয়েছে।" -#: sphinx/themes/basic/layout.html:196 -#: sphinx/themes/scrolls/layout.html:92 +#: sphinx/themes/basic/layout.html:189 #, python-format -msgid "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s." -msgstr "<a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s দিয়ে তৈরী।" - -#: sphinx/themes/basic/modindex.html:36 -#: sphinx/themes/scrolls/modindex.html:37 -msgid "Deprecated" -msgstr "ডেপà§à¦°à¦¿à¦•েটেড" +msgid "" +"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" +"<a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s দিয়ে " +"তৈরী।" #: sphinx/themes/basic/opensearch.xml:4 #, python-format msgid "Search %(docstitle)s" msgstr "%(docstitle)s-ঠখà§à¦à¦œà§à¦¨" -#: sphinx/themes/basic/search.html:9 +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€ টপিক" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€ অধà§à¦¯à¦¾à§Ÿ" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "পরবরà§à¦¤à§€ টপিক" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "পরবরà§à¦¤à§€ অধà§à¦¯à¦¾à§Ÿ" + +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." @@ -582,7 +663,7 @@ msgstr "" "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করার জনà§à¦¯ অনà§à¦—à§à¦°à¦¹à¦ªà§‚রà§à¦¬à¦• জাà¦à¦¾à¦¸à§à¦•à§à¦°à¦¿à¦ªà§à¦Ÿ \n" " সকà§à¦°à¦¿à§Ÿ করà§à¦¨à¥¤" -#: sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -590,23 +671,33 @@ msgid "" " containing fewer words won't appear in the result list." msgstr "" "à¦à¦–ান থেকে à¦à¦‡ নথিগà§à¦²à§‡à¦¾à¦¤à§‡ আপনি অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করতে পারবেন। \n" -" আপনার কাঙà§à¦•à§à¦·à¦¿à¦¤ শবà§à¦¦à¦¸à¦®à§‚হ নিচের বাকà§à¦¸à§‡ লিখà§à¦¨ à¦à¦¬à¦‚ \"অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨\" বাটনে কà§à¦²à¦¿à¦• করà§à¦¨à¥¤\n" -" উলà§à¦²à§‡à¦–à§à¦¯, সকল শবà§à¦¦à¦¸à¦®à§‚হের উপসà§à¦¥à¦¿à¦¤à¦¿ নিয়ে অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করা হবে। যেসব পাতায় সকল\n" +" আপনার কাঙà§à¦•à§à¦·à¦¿à¦¤ শবà§à¦¦à¦¸à¦®à§‚হ নিচের বাকà§à¦¸à§‡ লিখà§à¦¨ à¦à¦¬à¦‚ \"অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨\" বাটনে " +"কà§à¦²à¦¿à¦• করà§à¦¨à¥¤\n" +" উলà§à¦²à§‡à¦–à§à¦¯, সকল শবà§à¦¦à¦¸à¦®à§‚হের উপসà§à¦¥à¦¿à¦¤à¦¿ নিয়ে অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ করা হবে। যেসব পাতায় " +"সকল\n" " শবà§à¦¦ নেই সেগà§à¦²à§‡à¦¾ বাদ দেয়া হবে।" -#: sphinx/themes/basic/search.html:21 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "খà§à¦à¦œà§à¦¨" -#: sphinx/themes/basic/search.html:25 -#: sphinx/themes/basic/static/searchtools.js:473 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§‡à¦° ফলাফল" -#: sphinx/themes/basic/search.html:27 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "আপনার অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§‡ কোন ফলাফল পাওয়া যায়নি।" +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "দà§à¦°à§à¦¤ অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨" + +#: sphinx/themes/basic/sourcelink.html:11 +msgid "This Page" +msgstr "à¦à¦‡ পাতা" + #: sphinx/themes/basic/changes/frameset.html:5 #: sphinx/themes/basic/changes/versionchanges.html:12 #, python-format @@ -635,64 +726,89 @@ msgstr "C API পরিবরà§à¦¤à¦¨" msgid "Other changes" msgstr "অনà§à¦¯à¦¾à¦¨à§à¦¯ পরিবরà§à¦¤à¦¨" -#: sphinx/themes/basic/static/doctools.js:138 -#: sphinx/writers/html.py:462 -#: sphinx/writers/html.py:467 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "à¦à¦‡ শিরোনামের পারà§à¦®à¦¾à¦²à¦¿à¦™à§à¦•" -#: sphinx/themes/basic/static/doctools.js:144 -#: sphinx/writers/html.py:80 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "à¦à¦‡ সংজà§à¦žà¦¾à¦° পারà§à¦®à¦¾à¦²à¦¿à¦™à§à¦•" -#: sphinx/themes/basic/static/doctools.js:173 +#: sphinx/themes/basic/static/doctools.js:189 msgid "Hide Search Matches" msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§‡à¦° মà§à¦¯à¦¾à¦šà¦—à§à¦²à§‡à¦¾ লà§à¦•ান" -#: sphinx/themes/basic/static/searchtools.js:274 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ চলছে" -#: sphinx/themes/basic/static/searchtools.js:279 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§‡à¦° পà§à¦°à¦¸à§à¦¤à§à¦¤à¦¿ চলছে..." -#: sphinx/themes/basic/static/searchtools.js:352 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", -" -#: sphinx/themes/basic/static/searchtools.js:475 -msgid "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." -msgstr "আপনার অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§‡ কোন ফলাফল পাওয়া যায়নি। আপনার অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§‡à¦° শবà§à¦¦à¦—à§à¦²à§‡à¦¾à¦° সঠিক বানান ও বিà¦à¦¾à¦— নিরà§à¦¬à¦¾à¦šà¦¨ নিশà§à¦šà¦¿à¦¤ করà§à¦¨à¥¤" +#: sphinx/themes/basic/static/searchtools.js:506 +msgid "" +"Your search did not match any documents. Please make sure that all words " +"are spelled correctly and that you've selected enough categories." +msgstr "" +"আপনার অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§‡ কোন ফলাফল পাওয়া যায়নি। আপনার অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨à§‡à¦° শবà§à¦¦à¦—à§à¦²à§‡à¦¾à¦° " +"সঠিক বানান ও বিà¦à¦¾à¦— নিরà§à¦¬à¦¾à¦šà¦¨ নিশà§à¦šà¦¿à¦¤ করà§à¦¨à¥¤" -#: sphinx/themes/basic/static/searchtools.js:477 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "অনà§à¦¸à¦¨à§à¦§à¦¾à¦¨ শেষ হয়েছে, ফলাফলে %s-টি পাতা পাওয়া গেছে।" -#: sphinx/writers/latex.py:187 +#: sphinx/themes/default/static/sidebar.js:66 +msgid "Expand sidebar" +msgstr "" + +#: sphinx/themes/default/static/sidebar.js:79 +#: sphinx/themes/default/static/sidebar.js:107 +msgid "Collapse sidebar" +msgstr "" + +#: sphinx/themes/haiku/layout.html:26 +msgid "Contents" +msgstr "" + +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "রিলিজ" -#: sphinx/writers/latex.py:579 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "পাদটীকা" -#: sphinx/writers/latex.py:647 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "পূরà§à¦¬à¦¬à¦°à§à¦¤à§€ পাতা হতে চলমান" -#: sphinx/writers/latex.py:652 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "পরবরà§à¦¤à§€ পাতাতে চলমান" -#: sphinx/writers/text.py:166 -#, python-format -msgid "Platform: %s" -msgstr "পà§à¦²à¦¾à¦Ÿà¦«à¦°à¦®: %s" - -#: sphinx/writers/text.py:428 +#: sphinx/writers/text.py:422 msgid "[image]" msgstr "[ছবি]" +#~ msgid "Variable" +#~ msgstr "à¦à§à¦¯à¦¾à¦°à¦¿à§Ÿà§‡à¦¬à¦²" + +#~ msgid "Parameter" +#~ msgstr "পà§à¦¯à¦¾à¦°à¦¾à¦®à¦¿à¦Ÿà¦¾à¦°" + +#~ msgid "C function" +#~ msgstr "C ফাংশন" + +#~ msgid "here" +#~ msgstr "à¦à¦–ানে" + +#~ msgid "Platform: %s" +#~ msgstr "পà§à¦²à¦¾à¦Ÿà¦«à¦°à¦®: %s" + diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.mo b/sphinx/locale/ca/LC_MESSAGES/sphinx.mo Binary files differindex 339c787f..c6343149 100644 --- a/sphinx/locale/ca/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/ca/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.po b/sphinx/locale/ca/LC_MESSAGES/sphinx.po index 7bfb6642..a5fd94f4 100644 --- a/sphinx/locale/ca/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ca/LC_MESSAGES/sphinx.po @@ -8,22 +8,22 @@ msgstr "" "Project-Id-Version: Sphinx 1.0\n" "Report-Msgid-Bugs-To: pau.fernandez@upc.edu\n" "POT-Creation-Date: 2009-05-22 18:51+0200\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Pau Fernández <pau.fernandez@upc.edu>\n" "Language-Team: ca <LL@li.org>\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d de %B de %Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -36,67 +36,67 @@ msgstr "Mòduls Interns" msgid "Module level" msgstr "Nivell de mòdul" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d %b, %Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Ãndex General" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "Ãndex" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "següent" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "anterior" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (a " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Autor de la secció:" -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Autor del mòdul: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "Autor del mòdul: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Autor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Vegeu també" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parà metres" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Retorna" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Tipus de retorn" @@ -125,12 +125,12 @@ msgstr "%s (tipus de C)" msgid "%s (C variable)" msgstr "%s (variable de C)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "funció" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "membre" @@ -138,7 +138,7 @@ msgstr "membre" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "tipus" @@ -147,190 +147,201 @@ msgstr "tipus" msgid "variable" msgstr "Variable" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (class de C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (tipus de C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (membre de C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (funció de C++)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "class" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (funció interna)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (mètode %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (class de C++)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (atribut %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "Parà metres" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "Variable" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Llença" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (al mòdul %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (variable interna)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (al mòdul %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (classe interna)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (class a %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (mètode %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (mètode està tic %s.%s)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (mètode està tic %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (mètode %s.%s)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (mètode %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atribut %s.%s)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Plataformes: " -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (mòdul)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "Ãndex de Mòduls" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "mòduls" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Obsolet" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "excepció" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (mètode %s)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "mètode està tic" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "mòdul" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Obsolet" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (mòdul)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "mòdul" @@ -370,7 +381,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Ãndex" @@ -382,12 +393,12 @@ msgstr "Ãndex de Mòduls" msgid "Search Page" msgstr "Pà gina de Cerca" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " Bases: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "à lies de :class:`%s`" @@ -405,104 +416,104 @@ msgstr "(La <<entrada original>> està a %s, lÃnia %d i.)" msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "mòdul" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Atenció" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Compte" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Perill" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Error" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Suggerència" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Important" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Nota" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Vegeu També" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Truc" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "AvÃs" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Novetat de la versió %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Canviat a la versió %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Obsolet desde la versió %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "paraula clau" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "operador" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "objecte" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "sentència" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "funció interna" @@ -512,7 +523,7 @@ msgid "Table Of Contents" msgstr "Taula de Contingut" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Cerca" @@ -642,7 +653,7 @@ msgstr "Tema següent" msgid "next chapter" msgstr "capÃtol següent" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." @@ -650,7 +661,7 @@ msgstr "" "Activa JavaScript per utilitzar la funcionalitat\n" "de cerca." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -662,16 +673,16 @@ msgstr "" "que la cerca inclourà totes les paraules que posis. Les pà gines que no\n" "tenen totes les paraules no sortirà n." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "cerca" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Resultats de la Cerca" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "La teva cerca no té resultats." @@ -711,12 +722,12 @@ msgstr "Canvis a la API de C" msgid "Other changes" msgstr "Altres canvis" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Link permanent a aquest tÃtol" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Link permanent a aquesta definició" @@ -724,19 +735,19 @@ msgstr "Link permanent a aquesta definició" msgid "Hide Search Matches" msgstr "Oculta Resultats de Cerca" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Cercant" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Preparant la cerca..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", a " -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." @@ -744,7 +755,7 @@ msgstr "" "La teva cerca no ha donat resultats. Assegura't que totes les paraules " "estan ben escrites i que has seleccionat prou categories." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Cerca finalitzada, s'han trobat %s pà gin(a/es) de resultats." @@ -754,7 +765,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -762,22 +773,23 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Versió" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "ve de la pà gina anterior" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "Continua a la pà gina següent" #: sphinx/writers/text.py:422 msgid "[image]" msgstr "[imatge]" + diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.mo b/sphinx/locale/cs/LC_MESSAGES/sphinx.mo Binary files differindex 8092a992..99db2eeb 100644 --- a/sphinx/locale/cs/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/cs/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.po b/sphinx/locale/cs/LC_MESSAGES/sphinx.po index 535d4b9f..eda1e9ab 100644 --- a/sphinx/locale/cs/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/cs/LC_MESSAGES/sphinx.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Sphinx 0.5\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2008-11-27 18:39+0100\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Pavel Kosina <pavel.kosina@gmail.com>\n" "Language-Team: Pavel Kosina <pavel.kosina@gmail.com>\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " @@ -16,15 +16,15 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d.%m.%Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -37,67 +37,67 @@ msgstr "VestavÄ›né funkce " msgid "Module level" msgstr "Úroveň modulů" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d.%m.%Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "RejstÅ™Ãk indexů" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "index" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "dalÅ¡Ã" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "pÅ™edchozÃ" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr "(v" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Autor sekce: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Autor modulu: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "Autor modulu: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Autor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Viz také" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parametry" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "VracÃ" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Typ navrácené hodnoty" @@ -126,12 +126,12 @@ msgstr "%s (C typ)" msgid "%s (C variable)" msgstr "%s (C promÄ›nná)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "funkce" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "Älen" @@ -139,7 +139,7 @@ msgstr "Älen" msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "typ" @@ -148,190 +148,201 @@ msgstr "typ" msgid "variable" msgstr "PromÄ›nná" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ tÅ™Ãda)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ typ)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (Älen C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkce)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "tÅ™Ãda" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (vestavÄ›ná funkce)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (metoda %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (C++ tÅ™Ãda)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s() (atribut %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "Parametry" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "PromÄ›nná" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Vyvolá" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (v modulu %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s() (vestavÄ›ná promÄ›nná)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s() (v modulu %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s () (vestavÄ›ná promÄ›nná)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s() (tÅ™Ãda v %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (metoda %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (statická metoda %s.%s)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (statická metoda %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (metoda %s.%s)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (metoda %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s() (atribut %s.%s)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Platformy: " -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (module)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "RejstÅ™Ãk modulů " -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "moduly" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Zastaralé" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "výjimka" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (metoda %s)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "statická metoda" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "modul" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Zastaralé" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (module)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "modul" @@ -371,7 +382,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Index" @@ -383,12 +394,12 @@ msgstr "RejstÅ™Ãk modulů " msgid "Search Page" msgstr "Vyhledávacà stránka" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -406,104 +417,104 @@ msgstr "(Původnà záznam je v %s, řádka %d a lze jej nalézt" msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "modul" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Výstraha" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "UpozornÄ›nÃ" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "NebezpeÄÃ" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Chyba" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Rada" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Důležité" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Poznámka" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Viz také" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Tip" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "VarovánÃ" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Nové ve verzi %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "ZmÄ›nÄ›no ve verzi %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Zastaralé od verze %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "klÃÄové slovo" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "operátor" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "pÅ™Ãkaz" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "vestavÄ›ná funkce" @@ -513,7 +524,7 @@ msgid "Table Of Contents" msgstr "Obsah" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "HledánÃ" @@ -644,13 +655,13 @@ msgstr "Dalšà téma" msgid "next chapter" msgstr "dalšà kapitola" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "" -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -662,16 +673,16 @@ msgstr "" "Vyhledávánà hledá automaticky vÅ¡echna slova. Nebudou tedy nalezeny " "stránky, obsahujÃcà ménÄ› slov." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "hledej" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Výsledky hledánÃ" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Nic jsme nenaÅ¡li." @@ -711,12 +722,12 @@ msgstr "ZmÄ›ny API" msgid "Other changes" msgstr "Ostatnà zmÄ›ny" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Trvalý odkaz na tento nadpis" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Trvalý odkaz na tuto definici" @@ -724,19 +735,19 @@ msgstr "Trvalý odkaz na tuto definici" msgid "Hide Search Matches" msgstr "Skrýt výsledky vyhledávánÃ" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Hledám" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "PÅ™ipravuji vyhledávánÃ...." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", v" -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." @@ -744,7 +755,7 @@ msgstr "" "Nenalezli jsme žádný dokument. UjistÄ›te se prosÃm, že vÅ¡echna slova jsou " "správnÄ› a že jste vybral dostatek kategoriÃ." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Vyhledávánà skonÄilo, nalezeno %s stran." @@ -754,7 +765,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -762,19 +773,19 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "VydánÃ" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 #, fuzzy msgid "Continued on next page" msgstr "Plný index na jedné stránce" @@ -782,3 +793,4 @@ msgstr "Plný index na jedné stránce" #: sphinx/writers/text.py:422 msgid "[image]" msgstr "[obrázek]" + diff --git a/sphinx/locale/da/LC_MESSAGES/sphinx.js b/sphinx/locale/da/LC_MESSAGES/sphinx.js index d17efc47..9bb070cd 100644 --- a/sphinx/locale/da/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/da/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "da", "plural_expr": "(n != 1)", "messages": {"Search Results": "S\u00f8geresultater", "Preparing search...": "Forbereder s\u00f8gning...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Din s\u00f8gning gav ingen resultater. Kontroll\u00e9r venligst at alle ord er stavet korrekt, og at du har valgt nok kategorier.", "Search finished, found %s page(s) matching the search query.": "S\u00f8gningen fuldf\u00f8rt - fandt %s sider for denne s\u00f8gning.", ", in ": ", i ", "Permalink to this headline": "Permalink til denne overskrift", "Searching": "S\u00f8ger", "Permalink to this definition": "Permalink til denne definition", "Hide Search Matches": "Skjul s\u00f8geresultater"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "da", "plural_expr": "(n != 1)", "messages": {"Search Results": "S\u00f8geresultater", "Preparing search...": "Forbereder s\u00f8gning...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Din s\u00f8gning gav ingen resultater. Kontroll\u00e9r venligst at alle ord er stavet korrekt, og at du har valgt nok kategorier.", "Search finished, found %s page(s) matching the search query.": "S\u00f8gningen fuldf\u00f8rt - fandt %s sider for denne s\u00f8gning.", ", in ": ", i ", "Expand sidebar": "", "Permalink to this headline": "Permalink til denne overskrift", "Searching": "S\u00f8ger", "Collapse sidebar": "", "Permalink to this definition": "Permalink til denne definition", "Hide Search Matches": "Skjul s\u00f8geresultater"}});
\ No newline at end of file diff --git a/sphinx/locale/da/LC_MESSAGES/sphinx.mo b/sphinx/locale/da/LC_MESSAGES/sphinx.mo Binary files differindex a47f10de..bc95a44f 100644 --- a/sphinx/locale/da/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/da/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/da/LC_MESSAGES/sphinx.po b/sphinx/locale/da/LC_MESSAGES/sphinx.po index c975e747..f83c7c04 100644 --- a/sphinx/locale/da/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/da/LC_MESSAGES/sphinx.po @@ -1,4 +1,4 @@ -# Translations template for Sphinx. +# Danish translations for Sphinx. # Copyright (C) 2009 The Sphinx Team # This file is distributed under the same license as the Sphinx project. # @@ -8,553 +8,649 @@ msgstr "" "Project-Id-Version: Sphinx 1.0pre/[?1034h2e1ab15e035e\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2009-11-08 16:28+0100\n" -"PO-Revision-Date: 2010-06-03 23:47+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -# 21. april, 2010 -#: sphinx/environment.py:130 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 +#: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d. %B, %Y" -#: sphinx/environment.py:348 sphinx/themes/basic/genindex-single.html:2 -#: sphinx/themes/basic/genindex-split.html:2 -#: sphinx/themes/basic/genindex-split.html:5 -#: sphinx/themes/basic/genindex.html:2 sphinx/themes/basic/genindex.html:5 -#: sphinx/themes/basic/genindex.html:48 sphinx/themes/basic/layout.html:134 -#: sphinx/writers/latex.py:190 -msgid "Index" -msgstr "Indeks" - -#: sphinx/environment.py:349 sphinx/writers/latex.py:189 -msgid "Module Index" -msgstr "Modulindeks" - -# Ikke 'Søg pÃ¥ side' -#: sphinx/environment.py:350 sphinx/themes/basic/defindex.html:16 -msgid "Search Page" -msgstr "Søgeside" - -#: sphinx/roles.py:167 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" -#: sphinx/builders/changes.py:70 +#: sphinx/builders/changes.py:72 msgid "Builtins" msgstr "Indbyggede" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:74 msgid "Module level" msgstr "Modulniveau" -# Apr 21, 2010 -#: sphinx/builders/html.py:224 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d. %b, %Y" -#: sphinx/builders/html.py:243 sphinx/themes/basic/defindex.html:21 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Generelt indeks" -#: sphinx/builders/html.py:243 +#: sphinx/builders/html.py:279 msgid "index" msgstr "indeks" -#: sphinx/builders/html.py:247 sphinx/builders/htmlhelp.py:220 -#: sphinx/builders/qthelp.py:133 sphinx/themes/basic/defindex.html:19 -#: sphinx/themes/basic/modindex.html:2 sphinx/themes/basic/modindex.html:13 -#: sphinx/themes/scrolls/modindex.html:2 sphinx/themes/scrolls/modindex.html:13 -msgid "Global Module Index" -msgstr "Globalt modulindeks" - -#: sphinx/builders/html.py:248 -msgid "modules" -msgstr "moduler" - -#: sphinx/builders/html.py:304 +#: sphinx/builders/html.py:339 msgid "next" msgstr "næste" -#: sphinx/builders/html.py:313 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "forrige" -#: sphinx/builders/latex.py:162 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (i " -#: sphinx/directives/__init__.py:78 sphinx/directives/__init__.py:79 -#: sphinx/directives/__init__.py:80 sphinx/directives/__init__.py:81 -msgid "Raises" -msgstr "Rejser" - -#: sphinx/directives/__init__.py:82 sphinx/directives/__init__.py:83 -#: sphinx/directives/__init__.py:84 -msgid "Variable" -msgstr "Variabel" - -#: sphinx/directives/__init__.py:85 sphinx/directives/__init__.py:86 -#: sphinx/directives/__init__.py:92 sphinx/directives/__init__.py:93 -msgid "Returns" -msgstr "Returnerer" - -#: sphinx/directives/__init__.py:94 -msgid "Return type" -msgstr "Returtype" - -#: sphinx/directives/__init__.py:169 -msgid "Parameter" -msgstr "Parameter" - -#: sphinx/directives/__init__.py:173 -msgid "Parameters" -msgstr "Parametre" - -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Afsnitsforfatter: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Modulforfatter: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 +#, fuzzy +msgid "Code author: " +msgstr "Modulforfatter: " + +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Forfatter: " -#: sphinx/directives/other.py:233 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Se ogsÃ¥" -#: sphinx/domains/c.py:124 +#: sphinx/domains/__init__.py:242 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 +msgid "Parameters" +msgstr "Parametre" + +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 +msgid "Returns" +msgstr "Returnerer" + +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 +msgid "Return type" +msgstr "Returtype" + +#: sphinx/domains/c.py:133 #, python-format msgid "%s (C function)" msgstr "%s (C-funktion)" -#: sphinx/domains/c.py:126 +#: sphinx/domains/c.py:135 #, python-format msgid "%s (C member)" msgstr "%s (C-medlem)" -#: sphinx/domains/c.py:128 +#: sphinx/domains/c.py:137 #, python-format msgid "%s (C macro)" msgstr "%s (C-makro)" -#: sphinx/domains/c.py:130 +#: sphinx/domains/c.py:139 #, python-format msgid "%s (C type)" msgstr "%s (C-type)" -#: sphinx/domains/c.py:132 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C variable)" msgstr "%s (C-variabel)" -#: sphinx/domains/c.py:162 -msgid "C function" -msgstr "C-funktion" +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 +msgid "function" +msgstr "funktion" + +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 +msgid "member" +msgstr "medlem" -#: sphinx/domains/c.py:163 -msgid "C member" -msgstr "C-medlem" +#: sphinx/domains/c.py:173 +msgid "macro" +msgstr "makro" -#: sphinx/domains/c.py:164 -msgid "C macro" -msgstr "C-makro" +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 +msgid "type" +msgstr "type" -#: sphinx/domains/c.py:165 -msgid "C type" -msgstr "C-type" +#: sphinx/domains/c.py:175 +msgid "variable" +msgstr "variabel" -#: sphinx/domains/c.py:166 -msgid "C variable" -msgstr "C-variabel" +#: sphinx/domains/cpp.py:883 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (C++-klasse)" + +#: sphinx/domains/cpp.py:898 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (C++-type)" + +#: sphinx/domains/cpp.py:917 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (C++-medlem)" + +#: sphinx/domains/cpp.py:969 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (C++-funktion)" + +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 +msgid "class" +msgstr "klasse" -#: sphinx/domains/python.py:186 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (indbygget funktion)" -#: sphinx/domains/python.py:187 sphinx/domains/python.py:244 -#: sphinx/domains/python.py:256 sphinx/domains/python.py:269 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (metode i %s)" + +#: sphinx/domains/javascript.py:108 +#, python-format +msgid "%s() (class)" +msgstr "%s() (klasse)" + +#: sphinx/domains/javascript.py:110 +#, python-format +msgid "%s (global variable or constant)" +msgstr "" + +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (attribut i %s)" + +#: sphinx/domains/javascript.py:121 +#, fuzzy +msgid "Arguments" +msgstr "Parametre" + +#: sphinx/domains/javascript.py:124 +msgid "Throws" +msgstr "" + +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 +msgid "data" +msgstr "data" + +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 +msgid "attribute" +msgstr "attribut" + +#: sphinx/domains/python.py:98 +#, fuzzy +msgid "Variables" +msgstr "Variabel" + +#: sphinx/domains/python.py:101 +msgid "Raises" +msgstr "Rejser" + +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (i modulet %s)" -#: sphinx/domains/python.py:190 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (indbygget variabel)" -#: sphinx/domains/python.py:191 sphinx/domains/python.py:282 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (i modulet %s)" -#: sphinx/domains/python.py:207 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (indbygget klasse)" -#: sphinx/domains/python.py:208 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (klasse i %s)" -#: sphinx/domains/python.py:248 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (metode i %s.%s)" -#: sphinx/domains/python.py:250 -#, python-format -msgid "%s() (%s method)" -msgstr "%s() (metode i %s)" - -#: sphinx/domains/python.py:260 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (statisk metode i %s.%s)" -#: sphinx/domains/python.py:263 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (statisk metode i %s)" -#: sphinx/domains/python.py:273 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (klassemetode i %s.%s)" -#: sphinx/domains/python.py:276 +#: sphinx/domains/python.py:334 #, python-format msgid "%s() (%s class method)" msgstr "%s() (klassemetode i %s)" -#: sphinx/domains/python.py:286 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (attribut i %s.%s)" -#: sphinx/domains/python.py:288 -#, python-format -msgid "%s (%s attribute)" -msgstr "%s (attribut i %s)" - -#: sphinx/domains/python.py:334 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Platforme: " -#: sphinx/domains/python.py:340 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:396 -msgid "function" -msgstr "funktion" +#: sphinx/domains/python.py:455 +#, fuzzy +msgid "Python Module Index" +msgstr "Modulindeks" -#: sphinx/domains/python.py:397 -msgid "data" -msgstr "data" +#: sphinx/domains/python.py:456 +msgid "modules" +msgstr "moduler" -#: sphinx/domains/python.py:398 -msgid "class" -msgstr "klasse" +#: sphinx/domains/python.py:501 +msgid "Deprecated" +msgstr "Deprecieret" -#: sphinx/domains/python.py:399 sphinx/locale/__init__.py:161 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "undtagelse" -#: sphinx/domains/python.py:400 +#: sphinx/domains/python.py:527 msgid "method" msgstr "metode" -#: sphinx/domains/python.py:401 -msgid "attribute" -msgstr "attribut" +#: sphinx/domains/python.py:528 +msgid "class method" +msgstr "klassemetode" + +#: sphinx/domains/python.py:529 +msgid "static method" +msgstr "statisk metode" -#: sphinx/domains/python.py:402 sphinx/locale/__init__.py:157 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "modul" -#: sphinx/domains/std.py:67 sphinx/domains/std.py:83 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr " (deprecieret)" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "" + +#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 #, python-format msgid "environment variable; %s" msgstr "miljøvariabel; %s" -#: sphinx/domains/std.py:156 +#: sphinx/domains/std.py:160 #, python-format msgid "%scommand line option; %s" msgstr "%skommandolinjetilvalg; %s" -#: sphinx/domains/std.py:324 +#: sphinx/domains/std.py:328 msgid "glossary term" msgstr "begreb i ordliste" -#: sphinx/domains/std.py:325 +#: sphinx/domains/std.py:329 msgid "grammar token" msgstr "grammatisk element" -#: sphinx/domains/std.py:326 +#: sphinx/domains/std.py:330 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:331 msgid "environment variable" msgstr "miljøvariabel" -#: sphinx/domains/std.py:327 +#: sphinx/domains/std.py:332 msgid "program option" msgstr "programtilvalg" -#: sphinx/ext/autodoc.py:892 +#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 +#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 +#: sphinx/writers/latex.py:174 +msgid "Index" +msgstr "Indeks" + +#: sphinx/domains/std.py:361 +msgid "Module Index" +msgstr "Modulindeks" + +#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "Søgeside" + +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " Baser: %s" -#: sphinx/ext/autodoc.py:925 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "alias for :class:`%s`" -#: sphinx/ext/todo.py:40 +#: sphinx/ext/todo.py:41 msgid "Todo" msgstr "Todo" -#: sphinx/ext/todo.py:98 +#: sphinx/ext/todo.py:109 +#, fuzzy, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(Det <<oprindelige punkt>> befinder sig i %s, linje %d.)" + +#: sphinx/ext/todo.py:117 +msgid "original entry" +msgstr "" + +#: sphinx/ext/viewcode.py:70 +msgid "[source]" +msgstr "" + +#: sphinx/ext/viewcode.py:117 +msgid "[docs]" +msgstr "" + +#: sphinx/ext/viewcode.py:131 +#, fuzzy +msgid "Module code" +msgstr "modul" + +#: sphinx/ext/viewcode.py:137 #, python-format -msgid "(The original entry is located in %s, line %d and can be found " -msgstr "(Det oprindelige punkt befinder sig i %s, linje %d, og kan findes " +msgid "<h1>Source code for %s</h1>" +msgstr "" + +#: sphinx/ext/viewcode.py:164 +msgid "Overview: module code" +msgstr "" -#: sphinx/ext/todo.py:104 -msgid "here" -msgstr "her" +#: sphinx/ext/viewcode.py:165 +msgid "<h1>All modules for which code is available</h1>" +msgstr "" -#: sphinx/locale/__init__.py:138 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Vær opmærksom" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Forsigtig" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Fare" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Fejl" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Fif" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Vigtigt" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Bemærk" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Se ogsÃ¥" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Tip" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Advarsel" -#: sphinx/locale/__init__.py:151 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Ny i version %s" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Ændret i version %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Deprecieret siden version %s" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "nøgleord" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "erklæring" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "indbygget funktion" -#: sphinx/themes/basic/defindex.html:2 +#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 +msgid "Table Of Contents" +msgstr "Indholdsfortegnelse" + +#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 +msgid "Search" +msgstr "Søg" + +#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "Søg" + +#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20 +msgid "Enter search terms or a module, class or function name." +msgstr "Indtast søgeord eller navnet pÃ¥ et modul, en klasse eller en funktion." + +#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14 +msgid "Show Source" +msgstr "Vis kilde" + +#: sphinx/themes/basic/defindex.html:11 msgid "Overview" msgstr "Oversigt" -#: sphinx/themes/basic/defindex.html:11 +#: sphinx/themes/basic/defindex.html:20 msgid "Indices and tables:" msgstr "Indeks og tabeller:" -#: sphinx/themes/basic/defindex.html:14 +#: sphinx/themes/basic/defindex.html:23 msgid "Complete Table of Contents" msgstr "Fuldstændig indholdsfortegnelse" -#: sphinx/themes/basic/defindex.html:15 +#: sphinx/themes/basic/defindex.html:24 msgid "lists all sections and subsections" msgstr "viser alle afsnit og underafsnit" -#: sphinx/themes/basic/defindex.html:17 +#: sphinx/themes/basic/defindex.html:26 msgid "search this documentation" msgstr "søg i denne dokumentation" -#: sphinx/themes/basic/defindex.html:20 +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "Globalt modulindeks" + +#: sphinx/themes/basic/defindex.html:29 msgid "quick access to all modules" msgstr "hurtig adgang til alle moduler" -#: sphinx/themes/basic/defindex.html:22 +#: sphinx/themes/basic/defindex.html:31 msgid "all functions, classes, terms" msgstr "alle funktioner, klasser, begreber" -#: sphinx/themes/basic/genindex-single.html:5 +#: sphinx/themes/basic/genindex-single.html:14 #, python-format msgid "Index – %(key)s" msgstr "Indeks – %(key)s" -#: sphinx/themes/basic/genindex-single.html:44 -#: sphinx/themes/basic/genindex-split.html:14 -#: sphinx/themes/basic/genindex-split.html:27 -#: sphinx/themes/basic/genindex.html:54 +#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:56 msgid "Full index on one page" msgstr "Fuldt indeks pÃ¥ én side" -#: sphinx/themes/basic/genindex-split.html:7 +#: sphinx/themes/basic/genindex-split.html:16 msgid "Index pages by letter" msgstr "Indeksér sider efter bogstav" -# refererer til indeks -#: sphinx/themes/basic/genindex-split.html:15 +#: sphinx/themes/basic/genindex-split.html:25 msgid "can be huge" msgstr "kan være enormt" -#: sphinx/themes/basic/layout.html:10 +#: sphinx/themes/basic/layout.html:23 msgid "Navigation" msgstr "Navigation" -#: sphinx/themes/basic/layout.html:42 -msgid "Table Of Contents" -msgstr "Indholdsfortegnelse" - -#: sphinx/themes/basic/layout.html:48 -msgid "Previous topic" -msgstr "Forrige emne" - -#: sphinx/themes/basic/layout.html:50 -msgid "previous chapter" -msgstr "forrige kapitel" - -#: sphinx/themes/basic/layout.html:53 -msgid "Next topic" -msgstr "Næste emne" - -#: sphinx/themes/basic/layout.html:55 -msgid "next chapter" -msgstr "næste kapitel" - -#: sphinx/themes/basic/layout.html:60 -msgid "This Page" -msgstr "Denne side" - -#: sphinx/themes/basic/layout.html:63 -msgid "Show Source" -msgstr "Vis kilde" - -#: sphinx/themes/basic/layout.html:73 -msgid "Quick search" -msgstr "Hurtig søgning" - -# Referencen fra layout.html:76 er til en søgeknap -#: sphinx/themes/basic/layout.html:76 -msgid "Go" -msgstr "Søg" - -#: sphinx/themes/basic/layout.html:81 -msgid "Enter search terms or a module, class or function name." -msgstr "Indtast søgeord eller navnet pÃ¥ et modul, en klasse eller en funktion." - -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:113 #, python-format msgid "Search within %(docstitle)s" msgstr "Søg i %(docstitle)s" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:122 msgid "About these documents" msgstr "Om disse dokumenter" -#: sphinx/themes/basic/layout.html:137 sphinx/themes/basic/search.html:2 -#: sphinx/themes/basic/search.html:5 -msgid "Search" -msgstr "Søg" - -#: sphinx/themes/basic/layout.html:140 +#: sphinx/themes/basic/layout.html:131 msgid "Copyright" msgstr "Ophavsret" -#: sphinx/themes/basic/layout.html:187 sphinx/themes/scrolls/layout.html:83 +#: sphinx/themes/basic/layout.html:180 #, python-format msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "© <a href=\"%(path)s\">Ophavsret</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:189 sphinx/themes/scrolls/layout.html:85 +#: sphinx/themes/basic/layout.html:182 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Ophavsret %(copyright)s." -# datoformatet passer ikke med "den %(last_updated)s" -#: sphinx/themes/basic/layout.html:193 sphinx/themes/scrolls/layout.html:89 +#: sphinx/themes/basic/layout.html:186 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Sidst opdateret %(last_updated)s." -#: sphinx/themes/basic/layout.html:196 sphinx/themes/scrolls/layout.html:92 +#: sphinx/themes/basic/layout.html:189 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " "%(sphinx_version)s." -msgstr "Bygget med <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s." - -#: sphinx/themes/basic/modindex.html:36 sphinx/themes/scrolls/modindex.html:37 -msgid "Deprecated" -msgstr "Deprecieret" +msgstr "" +"Bygget med <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " +"%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 #, python-format msgid "Search %(docstitle)s" msgstr "Søg i %(docstitle)s" -#: sphinx/themes/basic/search.html:9 +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "Forrige emne" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "forrige kapitel" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "Næste emne" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "næste kapitel" + +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." @@ -562,7 +658,7 @@ msgstr "" "Aktivér venligst JavaScript for at aktivere\n" " søgefunktionalitet." -#: sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -574,19 +670,27 @@ msgstr "" " automatisk vil søge pÃ¥ alle ordene. Sider, der indeholder\n" " færre ord, vil ikke indgÃ¥ i resultaterne." -#: sphinx/themes/basic/search.html:21 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "søg" -#: sphinx/themes/basic/search.html:25 -#: sphinx/themes/basic/static/searchtools.js:473 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Søgeresultater" -#: sphinx/themes/basic/search.html:27 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Din søgning gav ingen resultater." +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "Hurtig søgning" + +#: sphinx/themes/basic/sourcelink.html:11 +msgid "This Page" +msgstr "Denne side" + #: sphinx/themes/basic/changes/frameset.html:5 #: sphinx/themes/basic/changes/versionchanges.html:12 #, python-format @@ -615,64 +719,89 @@ msgstr "Ændringer i C-API" msgid "Other changes" msgstr "Andre ændringer" -#: sphinx/themes/basic/static/doctools.js:138 sphinx/writers/html.py:462 -#: sphinx/writers/html.py:467 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Permalink til denne overskrift" -#: sphinx/themes/basic/static/doctools.js:144 sphinx/writers/html.py:80 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Permalink til denne definition" -#: sphinx/themes/basic/static/doctools.js:173 +#: sphinx/themes/basic/static/doctools.js:189 msgid "Hide Search Matches" msgstr "Skjul søgeresultater" -#: sphinx/themes/basic/static/searchtools.js:274 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Søger" -#: sphinx/themes/basic/static/searchtools.js:279 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Forbereder søgning..." -#: sphinx/themes/basic/static/searchtools.js:352 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", i " -#: sphinx/themes/basic/static/searchtools.js:475 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." -msgstr "Din søgning gav ingen resultater. Kontrollér venligst at alle ord er stavet korrekt, og at du har valgt nok kategorier." +msgstr "" +"Din søgning gav ingen resultater. Kontrollér venligst at alle ord er " +"stavet korrekt, og at du har valgt nok kategorier." -#: sphinx/themes/basic/static/searchtools.js:477 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Søgningen fuldført - fandt %s sider for denne søgning." -#: sphinx/writers/latex.py:187 +#: sphinx/themes/default/static/sidebar.js:66 +msgid "Expand sidebar" +msgstr "" + +#: sphinx/themes/default/static/sidebar.js:79 +#: sphinx/themes/default/static/sidebar.js:107 +msgid "Collapse sidebar" +msgstr "" + +#: sphinx/themes/haiku/layout.html:26 +msgid "Contents" +msgstr "" + +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Udgave" -#: sphinx/writers/latex.py:579 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "Fodnoter" -#: sphinx/writers/latex.py:647 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "fortsat fra forrige side" -#: sphinx/writers/latex.py:652 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "Fortsættes pÃ¥ næste side" -#: sphinx/writers/text.py:166 -#, python-format -msgid "Platform: %s" -msgstr "Platform: %s" - -#: sphinx/writers/text.py:428 +#: sphinx/writers/text.py:422 msgid "[image]" msgstr "[billede]" +#~ msgid "Variable" +#~ msgstr "Variabel" + +#~ msgid "Parameter" +#~ msgstr "Parameter" + +#~ msgid "C function" +#~ msgstr "C-funktion" + +#~ msgid "here" +#~ msgstr "her" + +#~ msgid "Platform: %s" +#~ msgstr "Platform: %s" + diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.mo b/sphinx/locale/de/LC_MESSAGES/sphinx.mo Binary files differindex 5657b0ab..de6b4082 100644 --- a/sphinx/locale/de/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/de/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.po b/sphinx/locale/de/LC_MESSAGES/sphinx.po index f92ba23c..4d2aebc7 100644 --- a/sphinx/locale/de/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/de/LC_MESSAGES/sphinx.po @@ -7,22 +7,22 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2008-08-07 21:40+0200\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Georg Brandl <georg@python.org>\n" "Language-Team: de <LL@li.org>\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d. %m. %Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -35,66 +35,66 @@ msgstr "Builtins" msgid "Module level" msgstr "Modulebene" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d. %m. %Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Allgemeiner Index" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "Index" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "weiter" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "zurück" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (in " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Autor des Abschnitts: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Autor des Moduls: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 msgid "Code author: " msgstr "Autor des Quellcode: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Autor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Siehe auch" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "%s-%s" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parameter" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Rückgabe" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Rückgabetyp" @@ -123,12 +123,12 @@ msgstr "%s (C-Typ)" msgid "%s (C variable)" msgstr "%s (C-Variable)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "Funktion" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "Member" @@ -136,7 +136,7 @@ msgstr "Member" msgid "macro" msgstr "Makro" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "Typ" @@ -144,188 +144,197 @@ msgstr "Typ" msgid "variable" msgstr "Variable" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (C++-Klasse)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (C++-Typ)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (C++-Member)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (C++-Funktion)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "Klasse" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (Standard-Funktion)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (Methode von %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (C++-Klasse)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "%s (globale Variable oder Konstante)" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (Attribut von %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 msgid "Arguments" msgstr "Parameter" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "Wirft" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "Daten" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 -#, python-format +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "Attribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 msgid "Variables" msgstr "Variablen" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Verursacht" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (in Modul %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (Standard-Variable)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (in Modul %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (Standard-Klasse)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (Klasse in %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (Methode von %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (statische Methode von %s.%s)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (statische Methode von %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (Klassenmethode von %s.%s)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, python-format msgid "%s() (%s class method)" msgstr "%s() (Klassenmethode von %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (Attribut von %s.%s)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Plattformen: " -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (Modul)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 msgid "Python Module Index" msgstr "Python-Modulindex" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "Module" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Veraltet" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "Exception" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "Methode" -#: sphinx/domains/python.py:502 -#, python-format +#: sphinx/domains/python.py:528 msgid "class method" msgstr "Klassenmethode" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "statische Methode" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "Module" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Veraltet" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "%s (Direktive)" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, python-format msgid "%s (role)" msgstr "%s (Rolle)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "Direktive" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 msgid "role" msgstr "Rolle" @@ -352,7 +361,6 @@ msgid "reference label" msgstr "Referenz-Label" #: sphinx/domains/std.py:331 -#, python-format msgid "environment variable" msgstr "Umgebungsvariable" @@ -365,7 +373,7 @@ msgstr "Programmoption" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Stichwortverzeichnis" @@ -377,12 +385,12 @@ msgstr "Modulindex" msgid "Search Page" msgstr "Suche" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " Basisklassen: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "Alias von :class:`%s`" @@ -400,103 +408,103 @@ msgstr "(Der <<ursprüngliche Eintrag>> steht in %s, Zeile %d.)" msgid "original entry" msgstr "ursprüngliche Eintrag" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "[Quelle]" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "[Doku]" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 msgid "Module code" msgstr "Modul-Quellcode" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Quellcode für %s</h1>" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "Überblick: Modul-Quellcode" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Alle Module, für die Quellcode verfügbar ist</h1>" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Achtung" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Vorsicht" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Gefahr" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Fehler" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Hinweis" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Wichtig" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Bemerkung" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Siehe auch" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Tipp" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Warnung" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Neu in Version %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Geändert in Version %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Veraltet ab Version %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "Schlüsselwort" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "Operator" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "Objekt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "Anweisung" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "Standard-Funktion" @@ -506,7 +514,7 @@ msgid "Table Of Contents" msgstr "Inhalt" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Suche" @@ -638,13 +646,13 @@ msgstr "Nächstes Thema" msgid "next chapter" msgstr "nächstes Kapitel" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "Bitte aktivieren Sie JavaScript, wenn Sie die Suchfunktion nutzen wollen." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -657,16 +665,16 @@ msgstr "" "all diesen Worten suchen wird. Seiten, die nicht alle Worte enthalten, " "werden nicht in der Ergebnisliste erscheinen." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "suchen" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Suchergebnisse" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Deine Suche ergab leider keine Treffer." @@ -706,12 +714,12 @@ msgstr "C API-Änderungen" msgid "Other changes" msgstr "Andere Änderungen" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Permalink zu dieser Überschrift" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Permalink zu dieser Definition" @@ -719,19 +727,19 @@ msgstr "Permalink zu dieser Definition" msgid "Hide Search Matches" msgstr "Suchergebnisse ausblenden" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Suche..." -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Suche wird vorbereitet..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", in " -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." @@ -739,7 +747,7 @@ msgstr "" "Es wurden keine zutreffenden Dokumente gefunden. Haben Sie alle " "Suchbegriffe richtig geschrieben und genügend Kategorien ausgewählt?" -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Suche beendet, %s zutreffende Seite(n) gefunden." @@ -749,7 +757,7 @@ msgid "Expand sidebar" msgstr "Sidebar ausklappen" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "Sidebar einklappen" @@ -757,19 +765,19 @@ msgstr "Sidebar einklappen" msgid "Contents" msgstr "Inhalt" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Release" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "Fußnoten" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "Fortsetzung der vorherigen Seite" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "Fortsetzung auf der nächsten Seite" diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.mo b/sphinx/locale/es/LC_MESSAGES/sphinx.mo Binary files differindex c1ee0bfe..6115878f 100644 --- a/sphinx/locale/es/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/es/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.po b/sphinx/locale/es/LC_MESSAGES/sphinx.po index a380a416..b9698c9b 100644 --- a/sphinx/locale/es/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/es/LC_MESSAGES/sphinx.po @@ -8,22 +8,22 @@ msgstr "" "Project-Id-Version: Sphinx 0.5\n" "Report-Msgid-Bugs-To: guillem@torroja.dmt.upm.es\n" "POT-Creation-Date: 2008-09-11 23:58+0200\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Guillem Borrell <guillem@torroja.dmt.upm.es>\n" "Language-Team: es <LL@li.org>\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, fuzzy, python-format msgid "%B %d, %Y" msgstr "%d de %B de %Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -38,67 +38,67 @@ msgstr "Funciones de base" msgid "Module level" msgstr "Módulos" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d %b, %Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Ãndice General" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "Ãndice" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "siguiente" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "anterior" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Autor de la sección: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Autor del módulo: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "Autor del módulo: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Autor:" -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Ver también" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parámetros" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Devuelve" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 #, fuzzy msgid "Return type" msgstr "Tipo del argumento devuelto" @@ -128,12 +128,12 @@ msgstr "%s (tipo C)" msgid "%s (C variable)" msgstr "%s (variable C)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "función" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "miembro" @@ -141,7 +141,7 @@ msgstr "miembro" msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "tipo" @@ -150,190 +150,201 @@ msgstr "tipo" msgid "variable" msgstr "Variable" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (clase C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (tipo C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, fuzzy, python-format msgid "%s (C++ member)" msgstr "%s (miembro C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, fuzzy, python-format msgid "%s (C++ function)" msgstr "%s (función C++)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "clase" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, fuzzy, python-format msgid "%s() (built-in function)" msgstr "%s() (función de base)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s método)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (clase C++)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atributo)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "Parámetros" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "atributo" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "Variable" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Muestra" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (en el módulo %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, fuzzy, python-format msgid "%s (built-in variable)" msgstr "%s (variable de base)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (en el módulo %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, fuzzy, python-format msgid "%s (built-in class)" msgstr "%s (variable de base)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (clase en %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s método)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s método estático)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s método estático)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s método)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s método)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atributo)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Plataformas:" -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (módulo)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "Ãndice de Módulos" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "módulos" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Obsoleto" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "excepción" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (%s método)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "método estático" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "módulo" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Obsoleto" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (módulo)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "módulo" @@ -373,7 +384,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Ãndice" @@ -385,12 +396,12 @@ msgstr "Ãndice de Módulos" msgid "Search Page" msgstr "Página de Búsqueda" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -408,104 +419,104 @@ msgstr "" msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "módulo" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Atención" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Prudencia" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Peligro" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Error" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Consejo" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Importante" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Nota" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Ver También" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Truco" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Advertencia" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Nuevo en la versión %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Distinto en la versión %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Obsoleto desde la versión %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "palabra clave" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "operador" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "objeto" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "sentencia" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 #, fuzzy msgid "built-in function" msgstr "función de base" @@ -516,7 +527,7 @@ msgid "Table Of Contents" msgstr "Contenidos" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Búsqueda" @@ -647,13 +658,13 @@ msgstr "Próximo tema" msgid "next chapter" msgstr "Próximo capÃtulo" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "" -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 #, fuzzy msgid "" "From here you can search these documents. Enter your search\n" @@ -666,16 +677,16 @@ msgstr "" " las palabras. Las páginas que contengan menos palabras no aparecerán en" " la lista de resultados." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "buscar" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Resultados de la búsqueda" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Tu consulta no obtuvo ningún resultado" @@ -715,12 +726,12 @@ msgstr "Cambios en la API C" msgid "Other changes" msgstr "Otros cambios" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Enlazar permanentemente con este tÃtulo" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Enlazar permanentemente con esta definición" @@ -729,19 +740,19 @@ msgstr "Enlazar permanentemente con esta definición" msgid "Hide Search Matches" msgstr "Coincidencias de la búsqueda" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Buscando" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Preparando la búsqueda" -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr "" -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." @@ -750,7 +761,7 @@ msgstr "" "todas las palabras correctamente y que ha seleccionado suficientes " "categorÃas" -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" @@ -762,7 +773,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -770,20 +781,20 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 #, fuzzy msgid "Release" msgstr "Versión" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 #, fuzzy msgid "Continued on next page" msgstr "Ãndice completo en una página" @@ -791,3 +802,4 @@ msgstr "Ãndice completo en una página" #: sphinx/writers/text.py:422 msgid "[image]" msgstr "[imagen]" + diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.js b/sphinx/locale/fa/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000..c268479a --- /dev/null +++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "fa", "plural_expr": "(n > 1)", "messages": {"module, in ": "\u0645\u0627\u0698\u0648\u0644, \u062f\u0631", "Preparing search...": "...\u0622\u0645\u0627\u062f\u0647 \u062c\u0633\u062a\u062c\u0648", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": ". \u0647\u06cc\u0686 \u0633\u0646\u062f\u06cc \u0628\u0631\u0627\u06cc \u062c\u0633\u062a\u062c\u0648\u06cc \u0634\u0645\u0627 \u06cc\u0627\u0641\u062a \u0646\u0634\u062f\u060c \u0644\u0637\u0641\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0646\u0645\u0627\u0626\u06cc\u062f \u06a9\u0647 \u0627\u0645\u0644\u0627\u06cc \u062a\u0645\u0627\u0645\u06cc \u06a9\u0644\u0645\u0627\u062a \u0635\u062d\u06cc\u062d \u0645\u06cc \u0628\u0627\u0634\u062f \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639\u0627\u062a \u06a9\u0627\u0641\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u062c\u0633\u062a\u062c\u0648 \u0627\u0646\u062a\u062e\u0627\u0628 \u0646\u0645\u0648\u062f\u0647 \u0627\u06cc\u062f", "Search finished, found %s page(s) matching the search query.": "\u062c\u0633\u062a\u062c\u0648 \u0627\u0646\u062c\u0627\u0645 \u0634\u062f \u060c %s \u0635\u0641\u062d\u0647 \u0645\u0637\u0627\u0628\u0642 \u0628\u0627 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u067e\u06cc\u062f\u0627 \u0634\u062f", ", in ": ", \u062f\u0631", "Permalink to this headline": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0631 \u0645\u0642\u0627\u0644\u0647", "Searching": "\u062f\u0631 \u062d\u0627\u0644 \u062c\u0633\u062a\u062c\u0648", "Permalink to this definition": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0639\u0631\u06cc\u0641", "Hide Search Matches": "\u0639\u062f\u0645 \u0646\u0645\u0627\u06cc\u0634 \u0646\u062a\u0627\u06cc\u062c \u06cc\u0627\u0641\u062a \u0634\u062f\u0647", "Search Results": "\u0646\u062a\u0627\u06cc\u062c \u062c\u0633\u062a\u062c\u0648"}});
\ No newline at end of file diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.mo b/sphinx/locale/fa/LC_MESSAGES/sphinx.mo Binary files differnew file mode 100644 index 00000000..c988b75c --- /dev/null +++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.po b/sphinx/locale/fa/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..fe75951e --- /dev/null +++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.po @@ -0,0 +1,596 @@ +msgid "" +msgstr "" +"Project-Id-Version: Sphinx 1.0.3\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2008-11-09 19:46+0100\n" +"PO-Revision-Date: \n" +"Last-Translator: Omid Raha <omidraha.com@gmail.com>\n" +"Language-Team: Omid Raha <omidraha.com@gmail.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"X-Poedit-Language: Persian\n" +"X-Poedit-Country: IRAN, ISLAMIC REPUBLIC OF\n" + +#: sphinx/builder.py:408 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builder.py:427 +#: sphinx/templates/defindex.html:21 +msgid "General Index" +msgstr "Ùهرست Ú©Ù„ÛŒ" + +#: sphinx/builder.py:427 +msgid "index" +msgstr "Ùهرست" + +#: sphinx/builder.py:429 +#: sphinx/htmlhelp.py:155 +#: sphinx/templates/defindex.html:19 +#: sphinx/templates/modindex.html:2 +#: sphinx/templates/modindex.html:13 +msgid "Global Module Index" +msgstr "Ùهرست Ú©Ù„ÛŒ ماژول ها" + +#: sphinx/builder.py:429 +msgid "modules" +msgstr "ماژول ها" + +#: sphinx/builder.py:466 +msgid "next" +msgstr "بعدی" + +#: sphinx/builder.py:473 +msgid "previous" +msgstr "قبلی" + +#: sphinx/builder.py:1054 +msgid " (in " +msgstr "" + +#: sphinx/builder.py:1129 +msgid "Builtins" +msgstr "درونی سازی" + +#: sphinx/builder.py:1131 +msgid "Module level" +msgstr "در Ø³Ø·Ø Ù…Ø§Ú˜ÙˆÙ„" + +#: sphinx/environment.py:102 +#: sphinx/latexwriter.py:164 +#, python-format +msgid "%B %d, %Y" +msgstr "" + +#: sphinx/environment.py:290 +#: sphinx/latexwriter.py:170 +#: sphinx/templates/genindex-single.html:2 +#: sphinx/templates/genindex-split.html:2 +#: sphinx/templates/genindex-split.html:5 +#: sphinx/templates/genindex.html:2 +#: sphinx/templates/genindex.html:5 +#: sphinx/templates/genindex.html:48 +#: sphinx/templates/layout.html:130 +msgid "Index" +msgstr "Ùهرست" + +#: sphinx/environment.py:291 +#: sphinx/latexwriter.py:169 +msgid "Module Index" +msgstr "Ùهرست ماژول ها" + +#: sphinx/environment.py:292 +#: sphinx/templates/defindex.html:16 +msgid "Search Page" +msgstr "ØµÙØÙ‡ جستجو" + +#: sphinx/htmlwriter.py:79 +#: sphinx/static/doctools.js:145 +msgid "Permalink to this definition" +msgstr "لینک ثابت به این تعریÙ" + +#: sphinx/htmlwriter.py:402 +#: sphinx/static/doctools.js:139 +msgid "Permalink to this headline" +msgstr "لینک ثابت به این سر مقاله" + +#: sphinx/latexwriter.py:167 +msgid "Release" +msgstr "انتشار" + +#: sphinx/roles.py:53 +#: sphinx/directives/desc.py:525 +#, python-format +msgid "environment variable; %s" +msgstr "%s متغیرهای عمومی؛" + +#: sphinx/roles.py:60 +#, python-format +msgid "Python Enhancement Proposals!PEP %s" +msgstr "" + +#: sphinx/textwriter.py:166 +#, python-format +msgid "Platform: %s" +msgstr "%s:Ù¾Ù„ØªÙØ±Ù…" + +#: sphinx/textwriter.py:422 +msgid "[image]" +msgstr "" + +#: sphinx/directives/desc.py:25 +#, python-format +msgid "%s() (built-in function)" +msgstr "%s() (توابع درونی)" + +#: sphinx/directives/desc.py:26 +#: sphinx/directives/desc.py:42 +#: sphinx/directives/desc.py:54 +#, python-format +msgid "%s() (in module %s)" +msgstr "%s() (در ماژول %s)" + +#: sphinx/directives/desc.py:29 +#, python-format +msgid "%s (built-in variable)" +msgstr "%s (متغیر درونی)" + +#: sphinx/directives/desc.py:30 +#: sphinx/directives/desc.py:66 +#, python-format +msgid "%s (in module %s)" +msgstr "%s (در ماژول %s)" + +#: sphinx/directives/desc.py:33 +#, python-format +msgid "%s (built-in class)" +msgstr "%s (کلاس درونی)" + +#: sphinx/directives/desc.py:34 +#, python-format +msgid "%s (class in %s)" +msgstr "%s (کلاس در %s)" + +#: sphinx/directives/desc.py:46 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "%s() (%s.%s متد)" + +#: sphinx/directives/desc.py:48 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (%s متد)" + +#: sphinx/directives/desc.py:58 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "%s() (%s.%s متد استاتیک)" + +#: sphinx/directives/desc.py:60 +#, python-format +msgid "%s() (%s static method)" +msgstr "%s() (%s متد استاتیک)" + +#: sphinx/directives/desc.py:70 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "%s (%s.%s مشخصه)" + +#: sphinx/directives/desc.py:72 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (%s مشخصه)" + +#: sphinx/directives/desc.py:74 +#, python-format +msgid "%s (C function)" +msgstr "%s (C تابع)" + +#: sphinx/directives/desc.py:76 +#, python-format +msgid "%s (C member)" +msgstr "%s (C عضو)" + +#: sphinx/directives/desc.py:78 +#, python-format +msgid "%s (C macro)" +msgstr "%s (C ماکرو)" + +#: sphinx/directives/desc.py:80 +#, python-format +msgid "%s (C type)" +msgstr "%s (C نوع)" + +#: sphinx/directives/desc.py:82 +#, python-format +msgid "%s (C variable)" +msgstr "%s (C متغیر)" + +#: sphinx/directives/desc.py:100 +msgid "Raises" +msgstr "برانگیختن" + +#: sphinx/directives/desc.py:104 +msgid "Variable" +msgstr "متغیر" + +#: sphinx/directives/desc.py:107 +msgid "Returns" +msgstr "" + +#: sphinx/directives/desc.py:114 +msgid "Return type" +msgstr "نوع برگشتی" + +#: sphinx/directives/desc.py:141 +msgid "Parameters" +msgstr "پارامترها" + +#: sphinx/directives/desc.py:411 +#, python-format +msgid "%scommand line option; %s" +msgstr "%sگزینه خط ÙØ±Ù…ان; %s" + +#: sphinx/directives/other.py:101 +msgid "Platforms: " +msgstr ":Ù¾Ù„ØªÙØ±Ù… ها" + +#: sphinx/directives/other.py:106 +#, python-format +msgid "%s (module)" +msgstr "%s (ماژول)" + +#: sphinx/directives/other.py:146 +msgid "Section author: " +msgstr ":نویسنده این بخش" + +#: sphinx/directives/other.py:148 +msgid "Module author: " +msgstr "نویسنده این ماژول:" + +#: sphinx/directives/other.py:150 +msgid "Author: " +msgstr ":نویسنده" + +#: sphinx/directives/other.py:246 +msgid "See also" +msgstr "همچنین Ù…Ù„Ø§ØØ¸Ù‡ نمائید" + +#: sphinx/ext/todo.py:32 +msgid "Todo" +msgstr "در دست انجام" + +#: sphinx/ext/todo.py:78 +#, python-format +msgid "(The original entry is located in %s, line %d and can be found " +msgstr "( ورودی اصلی در %s ØŒ در خط %d واقع شده است Ùˆ Ù…ÛŒ تواند ÛŒØ§ÙØª بشود" + +#: sphinx/ext/todo.py:84 +msgid "here" +msgstr "اینجا" + +#: sphinx/locale/__init__.py:15 +msgid "Attention" +msgstr "دقت" + +#: sphinx/locale/__init__.py:16 +msgid "Caution" +msgstr "Ù…Ù„Ø§ØØ¸Ù‡" + +#: sphinx/locale/__init__.py:17 +msgid "Danger" +msgstr "خطر" + +#: sphinx/locale/__init__.py:18 +msgid "Error" +msgstr "خطا" + +#: sphinx/locale/__init__.py:19 +msgid "Hint" +msgstr "تذکر" + +#: sphinx/locale/__init__.py:20 +msgid "Important" +msgstr "مهم" + +#: sphinx/locale/__init__.py:21 +msgid "Note" +msgstr "توجه" + +#: sphinx/locale/__init__.py:22 +msgid "See Also" +msgstr "همچنین Ù…Ù„Ø§ØØ¸Ù‡ نمائید" + +#: sphinx/locale/__init__.py:23 +msgid "Tip" +msgstr "نکته" + +#: sphinx/locale/__init__.py:24 +msgid "Warning" +msgstr "هشدار" + +#: sphinx/locale/__init__.py:28 +#, python-format +msgid "New in version %s" +msgstr "جدید در نسخه %s" + +#: sphinx/locale/__init__.py:29 +#, python-format +msgid "Changed in version %s" +msgstr "تغییر داده شده در نسخه %s" + +#: sphinx/locale/__init__.py:30 +#, python-format +msgid "Deprecated since version %s" +msgstr "منسوخ شده از نسخه %s" + +#: sphinx/locale/__init__.py:34 +msgid "module" +msgstr "ماژول" + +#: sphinx/locale/__init__.py:35 +msgid "keyword" +msgstr "کلمه کلیدی" + +#: sphinx/locale/__init__.py:36 +msgid "operator" +msgstr "عملگر" + +#: sphinx/locale/__init__.py:37 +msgid "object" +msgstr "شیء" + +#: sphinx/locale/__init__.py:38 +msgid "exception" +msgstr "استثناء" + +#: sphinx/locale/__init__.py:39 +msgid "statement" +msgstr "گذاره" + +#: sphinx/locale/__init__.py:40 +msgid "built-in function" +msgstr "توابع درونی" + +#: sphinx/static/doctools.js:174 +msgid "Hide Search Matches" +msgstr "عدم نمایش نتایج ÛŒØ§ÙØª شده" + +#: sphinx/static/searchtools.js:274 +msgid "Searching" +msgstr "در ØØ§Ù„ جستجو" + +#: sphinx/static/searchtools.js:279 +msgid "Preparing search..." +msgstr "...آماده جستجو" + +#: sphinx/static/searchtools.js:338 +msgid "module, in " +msgstr "ماژول, در" + +#: sphinx/static/searchtools.js:347 +msgid ", in " +msgstr ", در" + +#: sphinx/static/searchtools.js:447 +#: sphinx/templates/search.html:18 +msgid "Search Results" +msgstr "نتایج جستجو" + +#: sphinx/static/searchtools.js:449 +msgid "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." +msgstr ". هیچ سندی برای جستجوی شما ÛŒØ§ÙØª نشد، Ù„Ø·ÙØ§ اطمینان ØØ§ØµÙ„ نمائید Ú©Ù‡ املای تمامی کلمات صØÛŒØ Ù…ÛŒ باشد Ùˆ همچنین موضوعات کاÙÛŒ را برای این جستجو انتخاب نموده اید" + +#: sphinx/static/searchtools.js:451 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "جستجو انجام شد ØŒ %s ØµÙØÙ‡ مطابق با پرس Ùˆ جو پیدا شد" + +#: sphinx/templates/defindex.html:2 +msgid "Overview" +msgstr "بررسی اجمالی" + +#: sphinx/templates/defindex.html:11 +msgid "Indices and tables:" +msgstr "ایندکس ها Ùˆ جداول:" + +#: sphinx/templates/defindex.html:14 +msgid "Complete Table of Contents" +msgstr "Ùهرست کامل مطالب" + +#: sphinx/templates/defindex.html:15 +msgid "lists all sections and subsections" +msgstr "Ùهرست تمامی بخش ها Ùˆ زیر مجموعه ها" + +#: sphinx/templates/defindex.html:17 +msgid "search this documentation" +msgstr "جستجو در این اسناد" + +#: sphinx/templates/defindex.html:20 +msgid "quick access to all modules" +msgstr "دسترسی سریع به تمامی متدها" + +#: sphinx/templates/defindex.html:22 +msgid "all functions, classes, terms" +msgstr "تمامی توابع ØŒ کلاس ها ØŒ Ø§ØµØ·Ù„Ø§ØØ§Øª" + +#: sphinx/templates/genindex-single.html:5 +#, python-format +msgid "Index – %(key)s" +msgstr "Ùهرست – %(key)s" + +#: sphinx/templates/genindex-single.html:44 +#: sphinx/templates/genindex-split.html:14 +#: sphinx/templates/genindex-split.html:27 +#: sphinx/templates/genindex.html:54 +msgid "Full index on one page" +msgstr "Ùهرست کامل در یک ØµÙØÙ‡" + +#: sphinx/templates/genindex-split.html:7 +msgid "Index pages by letter" +msgstr "Ùهرست ØµÙØØ§Øª بر اساس ØØ±ÙˆÙ" + +#: sphinx/templates/genindex-split.html:15 +msgid "can be huge" +msgstr "" + +#: sphinx/templates/layout.html:9 +msgid "Navigation" +msgstr "ناوبری" + +#: sphinx/templates/layout.html:40 +msgid "Table Of Contents" +msgstr "Ùهرست عناوین" + +#: sphinx/templates/layout.html:46 +msgid "Previous topic" +msgstr "موضوع قبلی" + +#: sphinx/templates/layout.html:47 +msgid "previous chapter" +msgstr "ÙØµÙ„ قبلی" + +#: sphinx/templates/layout.html:50 +msgid "Next topic" +msgstr "موضوع بعدی" + +#: sphinx/templates/layout.html:51 +msgid "next chapter" +msgstr "ÙØµÙ„ بعدی" + +#: sphinx/templates/layout.html:55 +msgid "This Page" +msgstr "ØµÙØÙ‡ ÙØ¹Ù„ÛŒ" + +#: sphinx/templates/layout.html:59 +msgid "Suggest Change" +msgstr "" + +#: sphinx/templates/layout.html:60 +#: sphinx/templates/layout.html:62 +msgid "Show Source" +msgstr "نمایش سورس" + +#: sphinx/templates/layout.html:71 +msgid "Quick search" +msgstr "جستجو سریع" + +#: sphinx/templates/layout.html:71 +msgid "Keyword search" +msgstr "جستجو کلید واژه" + +#: sphinx/templates/layout.html:73 +msgid "Go" +msgstr "برو" + +#: sphinx/templates/layout.html:78 +msgid "Enter a module, class or function name." +msgstr "نام یک ماژول ØŒ کلاس Ùˆ یا تابع را وارد نمائید" + +#: sphinx/templates/layout.html:119 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "جستجو در %(docstitle)s" + +#: sphinx/templates/layout.html:128 +msgid "About these documents" +msgstr "درباره این مستندات" + +#: sphinx/templates/layout.html:131 +#: sphinx/templates/search.html:2 +#: sphinx/templates/search.html:5 +msgid "Search" +msgstr "جستجو" + +#: sphinx/templates/layout.html:133 +msgid "Copyright" +msgstr "Ú©Ù¾ÛŒ رایت" + +#: sphinx/templates/layout.html:178 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/templates/layout.html:180 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/templates/layout.html:183 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr ". %(last_updated)s آخرین بروز رسانی در" + +#: sphinx/templates/layout.html:186 +#, python-format +msgid "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s." +msgstr ". <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s ایجاد شده با" + +#: sphinx/templates/modindex.html:15 +msgid "Most popular modules:" +msgstr "متداول ترین ماژول ها:" + +#: sphinx/templates/modindex.html:24 +msgid "Show modules only available on these platforms" +msgstr "تنها ماژول هایی Ú©Ù‡ در این Ù¾Ù„ØªÙØ±Ù… در دسترس هستند را نشان بده" + +#: sphinx/templates/modindex.html:56 +msgid "Deprecated" +msgstr "منسوخ شده" + +#: sphinx/templates/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "جستجو %(docstitle)s" + +#: sphinx/templates/page.html:8 +msgid "<strong>Note:</strong> You requested an out-of-date URL from this server. We've tried to redirect you to the new location of this page, but it may not be the right one." +msgstr "" + +#: sphinx/templates/search.html:7 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" function will automatically search for all of the words. Pages\n" +" containing less words won't appear in the result list." +msgstr "در اینجا شما Ù…ÛŒ توانید مستندات را جستجو نمائید ØŒ کلماتی را در کادر جستجو وارد کنید Ùˆ سپس بر روی دکمه جستجو کلیک نمائید ØŒ توجه کنید Ú©Ù‡ تابع جستجو گر امر جستجو را بطور خودکار برای تمامی کلمات دنبال خواهد کرد .ØµÙØØ§ØªÛŒ Ú©Ù‡ شامل کلمات کمتری هستند ØŒ در لیست جستجو نمایش داده نخواهند شد." + +#: sphinx/templates/search.html:14 +msgid "search" +msgstr "جستجو" + +#: sphinx/templates/search.html:20 +msgid "Your search did not match any results." +msgstr ".جستجوی شما نتیجه ایی در بر نداشت" + +#: sphinx/templates/changes/frameset.html:5 +#: sphinx/templates/changes/versionchanges.html:12 +#, python-format +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "تغییرات در نسخه %(version)s — %(docstitle)s" + +#: sphinx/templates/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/templates/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "لیست تولید شده خودکار از تغییرات در نسخه %(version)s" + +#: sphinx/templates/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "تغییرات کتابخانه ایی" + +#: sphinx/templates/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "C API تغییرات" + +#: sphinx/templates/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "دگر تغییرات" + diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.mo b/sphinx/locale/fi/LC_MESSAGES/sphinx.mo Binary files differindex 7c300006..0195b3dd 100644 --- a/sphinx/locale/fi/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.po b/sphinx/locale/fi/LC_MESSAGES/sphinx.po index 04839bba..8b649a26 100644 --- a/sphinx/locale/fi/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.po @@ -8,22 +8,22 @@ msgstr "" "Project-Id-Version: Sphinx 0.6\n" "Report-Msgid-Bugs-To: sphinx@awot.fi\n" "POT-Creation-Date: 2009-01-24 18:39+0000\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Jukka Inkeri <sphinx@awot.fi>\n" "Language-Team: fi <sphinx@awot.fi>\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d.%m.%Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "" @@ -36,67 +36,67 @@ msgstr "" msgid "Module level" msgstr "Moduulitaso" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d.%m.%Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Yleinen sisällysluettelo" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "hakemisto" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr ">" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "<" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Luvun kirjoittaja: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Moduulin kirjoittaja: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "Moduulin kirjoittaja: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Tekijä: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Katso myös" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "" @@ -125,13 +125,13 @@ msgstr "" msgid "%s (C variable)" msgstr "" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 #, fuzzy msgid "function" msgstr "Varoitus" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "" @@ -139,7 +139,7 @@ msgstr "" msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "" @@ -147,187 +147,198 @@ msgstr "" msgid "variable" msgstr "" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, python-format +msgid "%s() (class)" +msgstr "" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Ympäristö" -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (moduuli)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "Moduuli sisällysluettelo" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "moduulit" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Poistettu" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 +#: sphinx/domains/python.py:528 msgid "class method" msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "moduuli" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Poistettu" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (moduuli)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "moduuli" @@ -367,7 +378,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Sisällysluettelo" @@ -379,12 +390,12 @@ msgstr "Moduuli sisällysluettelo" msgid "Search Page" msgstr "Etsi sivu" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -402,104 +413,104 @@ msgstr "" msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "moduuli" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Huom" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Varoitus" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Vaara" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Virhe" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Vihje" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Tärkeä" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Muista" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Katso myös" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Vihje" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Varoitus" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Uusi versiossa %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Muutettu versiossa %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Poistettu versiosta %s alkaen" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "" @@ -509,7 +520,7 @@ msgid "Table Of Contents" msgstr "Sisällysluettelo" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Etsi" @@ -637,13 +648,13 @@ msgstr ">>" msgid "next chapter" msgstr ">>" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "Javascript pitää olla sallittu, jotta etsintä toimii." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -651,16 +662,16 @@ msgid "" " containing fewer words won't appear in the result list." msgstr "Anna hakusanat kokonaan, osasanoilla ei haeta." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "etsi" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Etsinnän tulos" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Ei löytynyt ko. ehdoilla yhtään." @@ -700,12 +711,12 @@ msgstr "" msgid "Other changes" msgstr "" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "" @@ -713,25 +724,25 @@ msgstr "" msgid "Hide Search Matches" msgstr "Piilota löydetyt" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Etsitään" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Valmistellaan etsintää..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr "" -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." msgstr "Ei löytynyt yhtään. Tarkista hakuehdot, sanahaku, ei sen osia" -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Etsintä tehty, löydetty %s sivu(a)." @@ -741,7 +752,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -749,19 +760,19 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 #, fuzzy msgid "Continued on next page" msgstr "" diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.mo b/sphinx/locale/fr/LC_MESSAGES/sphinx.mo Binary files differindex bfa97b19..e17b5c78 100644 --- a/sphinx/locale/fr/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.po b/sphinx/locale/fr/LC_MESSAGES/sphinx.po index 8afcf435..24da5c39 100644 --- a/sphinx/locale/fr/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.po @@ -11,22 +11,22 @@ msgstr "" "Project-Id-Version: Sphinx 0.5\n" "Report-Msgid-Bugs-To: larlet@gmail.com\n" "POT-Creation-Date: 2008-08-08 12:39+0000\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Sébastien Douche <sdouche@gmail.com>\n" "Language-Team: French Translation Team <sphinx-dev@googlegroups.com>\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d %B %Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -39,67 +39,67 @@ msgstr "Fonctions de base" msgid "Module level" msgstr "Module" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d %b %Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Index général" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "index" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "suivant" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "précédent" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr "(dans" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Auteur de la section : " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Auteur du module : " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "Auteur du module : " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Auteur : " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Voir aussi" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Paramètres" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Retourne" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Type retourné" @@ -128,12 +128,12 @@ msgstr "%s (type C)" msgid "%s (C variable)" msgstr "%s (variable C)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "fonction" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "membre" @@ -141,7 +141,7 @@ msgstr "membre" msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "type" @@ -150,190 +150,201 @@ msgstr "type" msgid "variable" msgstr "Variable" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (classe C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (type C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (membre C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (fonction C++)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "classe" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (fonction de base)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (méthode %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (classe C++)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "%s (variable globale ou constante)" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (attribut %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "Paramètres" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "Lance" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "données" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "attribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "Variable" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Lève" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (dans le module %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (variable de base)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (dans le module %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (classe de base)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (classe dans %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (méthode %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (méthode statique %s.%s)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (méthode statique %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (méthode %s.%s)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (méthode %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (attribut %s.%s)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Plateformes : " -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (module)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "Index du module" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "modules" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Obsolète" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "exception" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "méthode" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (méthode %s)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "méthode statique" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "module" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Obsolète" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (module)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "module" @@ -373,7 +384,7 @@ msgstr "option du programme" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Index" @@ -385,12 +396,12 @@ msgstr "Index du module" msgid "Search Page" msgstr "Page de recherche" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "alias de :class:`%s`" @@ -408,104 +419,104 @@ msgstr "(L'<<entrée orginale>> se trouve dans %s, à la ligne %d.)" msgid "original entry" msgstr "entrée orginale" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "module" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Code source de %s</h1>" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "Vue d'ensemble : code du module" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Modules pour lesquels le code est disponible</h1>" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Attention" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Prudence" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Danger" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Erreur" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Indice" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Important" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Note" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Voir aussi" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Astuce" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Warning" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Introduit dans la version %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Modifié dans la version %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Obsolète depuis la version %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "mot-clé" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "opérateur" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "objet" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "état" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "fonction de base" @@ -515,7 +526,7 @@ msgid "Table Of Contents" msgstr "Table des matières" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Recherche" @@ -646,13 +657,13 @@ msgstr "Sujet suivant" msgid "next chapter" msgstr "Chapitre suivant" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "Activez le JavaScript pour que la recherche fonctionne\n" -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 #, fuzzy msgid "" "From here you can search these documents. Enter your search\n" @@ -668,16 +679,16 @@ msgstr "" " contenant moins de mots n'apparaîtront pas dans la liste des " "résultats." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "rechercher" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Résultats de la recherche" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Votre recherche n'a retourné aucun résultat" @@ -717,12 +728,12 @@ msgstr "Modifications de l'API C" msgid "Other changes" msgstr "Autres modifications" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Lien permanent vers ce titre" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Lien permanent vers cette définition" @@ -730,19 +741,19 @@ msgstr "Lien permanent vers cette définition" msgid "Hide Search Matches" msgstr "Cacher les résultats de la recherche" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "En cours de recherche" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Préparation de la recherche..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", dans" -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." @@ -751,7 +762,7 @@ msgstr "" "des termes de recherche et que vous avez sélectionné suffisamment de " "catégories." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "La recherche est terminée, %s page(s) correspond(ent) à la requête." @@ -761,7 +772,7 @@ msgid "Expand sidebar" msgstr "Agrandir le menu" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "Réduire le menu" @@ -769,19 +780,19 @@ msgstr "Réduire le menu" msgid "Contents" msgstr "Contenu" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Version" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "Notes de bas de page" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "Suite de la page précédente" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 #, fuzzy msgid "Continued on next page" msgstr "Suite sur la page suivante" @@ -790,15 +801,3 @@ msgstr "Suite sur la page suivante" msgid "[image]" msgstr "[image]" -#~ msgid "Parameter" -#~ msgstr "Paramètres" - -#~ msgid "here" -#~ msgstr "ici" - -#~ msgid "module, in " -#~ msgstr "module, dans" - -#~ msgid "Platform: %s" -#~ msgstr "Plateforme : %s" - diff --git a/sphinx/locale/hr/LC_MESSAGES/sphinx.mo b/sphinx/locale/hr/LC_MESSAGES/sphinx.mo Binary files differindex e032adeb..c6b1b384 100644 --- a/sphinx/locale/hr/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/hr/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/hr/LC_MESSAGES/sphinx.po b/sphinx/locale/hr/LC_MESSAGES/sphinx.po index ddcf2299..1b9f9c80 100644 --- a/sphinx/locale/hr/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/hr/LC_MESSAGES/sphinx.po @@ -4,22 +4,22 @@ msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2010-09-11 23:58+0200\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Bojan MihelaÄ <bmihelac@mihelac.org>\n" "Language-Team: Bojan MihelaÄ <bmihelac@mihelac.org>\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d %B, %Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -32,67 +32,67 @@ msgstr "UgraÄ‘eni dijelovi" msgid "Module level" msgstr "Nivo modula" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d %b, %Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Opceniti abecedni indeks" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "abecedni indeks" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "naprijed" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "nazad" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (u " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Autor sekcije:" -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Autor modula:" -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "Autor modula:" -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Autor:" -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Pogledaj i" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parametri" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Vraća" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Vraća tip" @@ -121,12 +121,12 @@ msgstr "%s (C tip)" msgid "%s (C variable)" msgstr "%s (C varijabla)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "funkcija" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "Älan" @@ -134,7 +134,7 @@ msgstr "Älan" msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "tip" @@ -143,191 +143,202 @@ msgstr "tip" msgid "variable" msgstr "Varijabla" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ razred)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tip)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ Älan)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkcija)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 #, fuzzy msgid "class" msgstr "razred" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (ugraÄ‘ene funkcije)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metoda)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (C++ razred)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atribut)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "Parametri" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "Varijabla" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Podiže" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (u modulu %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (ugraÄ‘ene variable)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (u modulu %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (ugraÄ‘en razred)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (razred u %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statiÄna metoda)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statiÄna metoda)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s metoda)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atribut)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Platforme:" -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "Popis modula" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "Moduli" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Zastarjelo" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "izuzetak" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (%s metoda)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "statiÄna metoda" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "modul" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Zastarjelo" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (modul)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "modul" @@ -367,7 +378,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Abecedni popis" @@ -379,12 +390,12 @@ msgstr "Popis modula" msgid "Search Page" msgstr "Tražilica" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " Osnove: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "nadimak za :class:`%s`" @@ -402,104 +413,104 @@ msgstr "(Originalan unos se nalazi u %s, u retku %d, i može biti pronaÄ‘en " msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "modul" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Pozor" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Pažnja" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Opasnost" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "GreÅ¡ka" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Savjet" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Važno" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Napomena" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Pogledaj i" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Savjet" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Upozorenje" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Novo u verziji %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Promijenjeno u verziji %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Zastarijelo od verzije %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "kljuÄna rijeÄ" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "izjava" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "ugraÄ‘en funkcije" @@ -509,7 +520,7 @@ msgid "Table Of Contents" msgstr "Pregled sadržaja" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Traži" @@ -639,7 +650,7 @@ msgstr "Slijedeća tema" msgid "next chapter" msgstr "slijedeće poglavje" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." @@ -647,7 +658,7 @@ msgstr "" "Molimo omogućite JavaScript\n" " za djelovanje tražilice." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -659,16 +670,16 @@ msgstr "" " function will automatically search for all of the words. Pages\n" " containing fewer words won't appear in the result list." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "traži" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Rezultati pretrage" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Your search did not match any results." @@ -708,12 +719,12 @@ msgstr "C API changes" msgid "Other changes" msgstr "Ostale promjene" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Link na taj naslov" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Link na tu definiciju" @@ -721,19 +732,19 @@ msgstr "Link na tu definiciju" msgid "Hide Search Matches" msgstr "Sakrij rezultate pretrage" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Tražim" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Pripremam pretraživanje..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", u " -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." @@ -741,7 +752,7 @@ msgstr "" "Za vaÅ¡u pretragu nema rezultata. Molimo pregledajte da li so sve rijeÄi " "ispravno napisane i da li ste izbrali dovoljno kategorija." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" @@ -753,7 +764,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -761,19 +772,19 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Distribucija" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "nastavak sa prethodne stranice" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "nastavak na slijedećoj stranici" @@ -781,15 +792,3 @@ msgstr "nastavak na slijedećoj stranici" msgid "[image]" msgstr "[slika]" -#~ msgid "Parameter" -#~ msgstr "Parametar" - -#~ msgid "here" -#~ msgstr "ovdje" - -#~ msgid "module, in " -#~ msgstr "modul, u " - -#~ msgid "Platform: %s" -#~ msgstr "Platforma: %s" - diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.mo b/sphinx/locale/it/LC_MESSAGES/sphinx.mo Binary files differindex 10ca29a5..c07af572 100644 --- a/sphinx/locale/it/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/it/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.po b/sphinx/locale/it/LC_MESSAGES/sphinx.po index 40a2ca2a..590c5c86 100644 --- a/sphinx/locale/it/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/it/LC_MESSAGES/sphinx.po @@ -7,22 +7,22 @@ msgstr "" "Project-Id-Version: Sphinx 0.5\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2008-11-27 18:39+0100\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Sandro Dentella <sandro@e-den.it>\n" "Language-Team: <sphinx-dev@googlegroups.com>\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d %B %Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -35,67 +35,67 @@ msgstr "Builtin" msgid "Module level" msgstr "Modulo" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d/%b/%Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Indice generale" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "indice" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "successivo" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "precedente" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (in " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Autore della sezione: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Autore del modulo: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "Autore del modulo: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Autore: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Vedi anche" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parametri" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Ritorna" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Tipo di ritorno" @@ -124,12 +124,12 @@ msgstr "%s (tipo C)" msgid "%s (C variable)" msgstr "%s (variabile C)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "funzione" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "membro" @@ -137,7 +137,7 @@ msgstr "membro" msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "tipo" @@ -146,190 +146,201 @@ msgstr "tipo" msgid "variable" msgstr "Variabile" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (classe C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (tipo C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (membro C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (funzione C++)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (funzione built-in)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metodo)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (classe C++)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s attributo)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "Parametri" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "attributo" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "Variabile" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Solleva" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (nel modulo %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (variabile built-in)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (nel modulo %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (classe built-in)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (classe in %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metodo)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s metodo statico)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s metodo statico)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s metodo)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s metodo)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s attributo)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Piattaforme:" -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (modulo)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "Indice dei Moduli" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "moduli" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Deprecato" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "eccezione" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (%s metodo)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "metodo statico" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "modulo" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Deprecato" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (modulo)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "modulo" @@ -369,7 +380,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Indice" @@ -381,12 +392,12 @@ msgstr "Indice dei Moduli" msgid "Search Page" msgstr "Cerca" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "alias per :class:`%s`" @@ -404,104 +415,104 @@ msgstr "(La <<riga originale>> si trova in %s, linea %d.)" msgid "original entry" msgstr "riga originale" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "modulo" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Attenzione" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Attenzione" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Pericolo" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Errore" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Consiglio" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Importante" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Nota" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Vedi anche" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Suggerimento" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Avvertimento" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Nuovo nella versione %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Cambiato nella versione %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Deprecato dalla versione %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "keyword" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "operatore" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "oggetto" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "statement" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "funzione built-in" @@ -511,7 +522,7 @@ msgid "Table Of Contents" msgstr "Tabella dei contenuti" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Cerca" @@ -641,13 +652,13 @@ msgstr "Argomento successivo" msgid "next chapter" msgstr "capitolo successivo" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "" -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -661,16 +672,16 @@ msgstr "" " di ricerca cerca automaticamente per tutte le parole. Le pagine\n" " che contendono meno parole non compariranno nei risultati di ricerca." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "cerca" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Risultati della ricerca" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "La tua ricerca non ha ottenuto risultati" @@ -710,12 +721,12 @@ msgstr "Modifiche nelle API C" msgid "Other changes" msgstr "Altre modifiche" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "link permanente per questa intestazione" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "link permanente per questa definizione" @@ -723,19 +734,19 @@ msgstr "link permanente per questa definizione" msgid "Hide Search Matches" msgstr "Nascondi i risultati della ricerca" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Ricerca in corso" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Preparazione della ricerca" -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", in " -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." @@ -744,7 +755,7 @@ msgstr "" "dei termini di ricerca e di avere selezionato un numero sufficiente di " "categorie" -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Ricerca terminata, trovate %s pagine corrispondenti alla ricerca." @@ -754,7 +765,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -762,19 +773,19 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Release" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 #, fuzzy msgid "Continued on next page" msgstr "Indice completo in una pagina" @@ -782,3 +793,4 @@ msgstr "Indice completo in una pagina" #: sphinx/writers/text.py:422 msgid "[image]" msgstr "[immagine]" + diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.js b/sphinx/locale/ja/LC_MESSAGES/sphinx.js index 6b63245e..0a135540 100644 --- a/sphinx/locale/ja/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "ja", "plural_expr": "0", "messages": {"Search Results": "\u691c\u7d22\u7d50\u679c", "Preparing search...": "\u691c\u7d22\u306e\u6e96\u5099\u4e2d...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u691c\u7d22\u6761\u4ef6\u306b\u4e00\u81f4\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u691c\u7d22\u3057\u305f\u3044\u8a00\u8449\u3092\u6b63\u3057\u3044\u3064\u3065\u308a\u3067\u5165\u529b\u3057\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001\u6b63\u3057\u3044\u30ab\u30c6\u30b4\u30ea\u306e\u691c\u7d22\u3092\u884c\u3063\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002", "Search finished, found %s page(s) matching the search query.": "\u691c\u7d22\u304c\u7d42\u4e86\u3057\u3001\u6761\u4ef6\u306b\u4e00\u81f4\u3059\u308b\u30da\u30fc\u30b8\u304c %s \u500b\u307f\u3064\u304b\u308a\u307e\u3057\u305f\u3002", ", in ": "", "Expand sidebar": "", "Permalink to this headline": "\u3053\u306e\u30d8\u30c3\u30c9\u30e9\u30a4\u30f3\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "Searching": "\u691c\u7d22\u4e2d", "Collapse sidebar": "", "Permalink to this definition": "\u3053\u306e\u5b9a\u7fa9\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "Hide Search Matches": "\u691c\u7d22\u7d50\u679c\u3092\u96a0\u3059"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "ja", "plural_expr": "0", "messages": {"Search Results": "\u691c\u7d22\u7d50\u679c", "Preparing search...": "\u691c\u7d22\u306e\u6e96\u5099\u4e2d...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u691c\u7d22\u6761\u4ef6\u306b\u4e00\u81f4\u3059\u308b\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u691c\u7d22\u3057\u305f\u3044\u8a00\u8449\u3092\u6b63\u3057\u3044\u3064\u3065\u308a\u3067\u5165\u529b\u3057\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001\u6b63\u3057\u3044\u30ab\u30c6\u30b4\u30ea\u306e\u691c\u7d22\u3092\u884c\u3063\u3066\u3044\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002", "Search finished, found %s page(s) matching the search query.": "\u691c\u7d22\u304c\u7d42\u4e86\u3057\u3001\u6761\u4ef6\u306b\u4e00\u81f4\u3059\u308b\u30da\u30fc\u30b8\u304c %s \u500b\u307f\u3064\u304b\u308a\u307e\u3057\u305f\u3002", ", in ": "", "Expand sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u5c55\u958b", "Permalink to this headline": "\u3053\u306e\u30d8\u30c3\u30c9\u30e9\u30a4\u30f3\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "Searching": "\u691c\u7d22\u4e2d", "Collapse sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u305f\u305f\u3080", "Permalink to this definition": "\u3053\u306e\u5b9a\u7fa9\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "Hide Search Matches": "\u691c\u7d22\u7d50\u679c\u3092\u96a0\u3059"}});
\ No newline at end of file diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.mo b/sphinx/locale/ja/LC_MESSAGES/sphinx.mo Binary files differindex b0284f91..d77e83a4 100644 --- a/sphinx/locale/ja/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.po b/sphinx/locale/ja/LC_MESSAGES/sphinx.po index 5f65a6c3..03e7123d 100644 --- a/sphinx/locale/ja/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.po @@ -8,22 +8,22 @@ msgstr "" "Project-Id-Version: Sphinx 0.5\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2008-09-11 23:58+0200\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Yasushi MASUDA <whosaysni@gmail.com>\n" "Language-Team: ja <LL@li.org>\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%Y å¹´ %m 月 %d æ—¥" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -36,67 +36,67 @@ msgstr "組ã¿è¾¼ã¿" msgid "Module level" msgstr "モジュールレベル" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%Y å¹´ %m 月 %d æ—¥" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "ç·åˆç´¢å¼•" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "索引" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "次ã¸" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "å‰ã¸" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "ã“ã®ç¯€ã®ä½œè€…: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "モジュールã®ä½œè€…: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "モジュールã®ä½œè€…: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "作者: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "å‚考" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "パラメタ" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "戻り値" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "戻り値ã®åž‹" @@ -125,12 +125,12 @@ msgstr "%s (C ã®ãƒ‡ãƒ¼ã‚¿åž‹)" msgid "%s (C variable)" msgstr "%s (C ã®å¤‰æ•°)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "ã®é–¢æ•°" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "ã®ãƒ¡ãƒ³ãƒå¤‰æ•°" @@ -138,7 +138,7 @@ msgstr "ã®ãƒ¡ãƒ³ãƒå¤‰æ•°" msgid "macro" msgstr "ã®ãƒžã‚¯ãƒ" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "ã®ãƒ‡ãƒ¼ã‚¿åž‹" @@ -147,193 +147,204 @@ msgstr "ã®ãƒ‡ãƒ¼ã‚¿åž‹" msgid "variable" msgstr "変数" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, fuzzy, python-format msgid "%s (C++ class)" msgstr "%s (ã®ã‚¯ãƒ©ã‚¹)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ ã®ãƒ‡ãƒ¼ã‚¿åž‹)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ ã®ãƒ¡ãƒ³ãƒå¤‰æ•°)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ ã®é–¢æ•°)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" -msgstr "" +msgstr "クラス" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (組ã¿è¾¼ã¿é–¢æ•°)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s ã®ãƒ¡ã‚½ãƒƒãƒ‰)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (ã®ã‚¯ãƒ©ã‚¹)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" -msgstr "" +msgstr "%s (ã‚°ãƒãƒ¼ãƒãƒ«å¤‰æ•°ã¾ãŸã¯å®šæ•°)" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s ã®å±žæ€§)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "パラメタ" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" -msgstr "" +msgstr "例外" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" -msgstr "" +msgstr "データ" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "ã®å±žæ€§" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "変数" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "例外" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s モジュール)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (組ã¿è¾¼ã¿å¤‰æ•°)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (%s モジュール)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (組ã¿è¾¼ã¿å¤‰æ•°)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (%s ã®ã‚¯ãƒ©ã‚¹)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s ã®ãƒ¡ã‚½ãƒƒãƒ‰)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s ã®é™çš„メソッド)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s ã®é™çš„メソッド)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s ã®ãƒ¡ã‚½ãƒƒãƒ‰)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s ã®ãƒ¡ã‚½ãƒƒãƒ‰)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s ã®å±žæ€§)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "プラットフォーム: " -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (モジュール)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "モジュール索引" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "モジュール" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "撤廃" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "例外" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" -msgstr "" +msgstr "メソッド" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (%s ã®ãƒ¡ã‚½ãƒƒãƒ‰)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "ã®é™çš„メソッド" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "モジュール" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "撤廃" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" -msgstr "" +msgstr "%s (ディレクティブ)" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (モジュール)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" -msgstr "" +msgstr "ディレクティブ" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" -msgstr "モジュール" +msgstr "ãƒãƒ¼ãƒ«" #: sphinx/domains/std.py:68 sphinx/domains/std.py:84 #, python-format @@ -347,15 +358,15 @@ msgstr "%sコマンドラインオプション; %s" #: sphinx/domains/std.py:328 msgid "glossary term" -msgstr "" +msgstr "用語集ã®é …ç›®" #: sphinx/domains/std.py:329 msgid "grammar token" -msgstr "" +msgstr "文法トークン" #: sphinx/domains/std.py:330 msgid "reference label" -msgstr "" +msgstr "å‚照ラベル" #: sphinx/domains/std.py:331 msgid "environment variable" @@ -363,14 +374,14 @@ msgstr "環境変数" #: sphinx/domains/std.py:332 msgid "program option" -msgstr "" +msgstr "プãƒã‚°ãƒ©ãƒ オプション" #: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "索引" @@ -382,12 +393,12 @@ msgstr "モジュール索引" msgid "Search Page" msgstr "検索ページ" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " ベースクラス: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr ":class:`%s` ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹" @@ -399,110 +410,110 @@ msgstr "課題" #: sphinx/ext/todo.py:109 #, python-format msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "" +msgstr "(<<å…ƒã®ã‚¨ãƒ³ãƒˆãƒª>> ã¯ã€ %s ã® %d 行目ã§ã™)" #: sphinx/ext/todo.py:117 msgid "original entry" -msgstr "" +msgstr "å…ƒã®ã‚¨ãƒ³ãƒˆãƒª" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" -msgstr "" +msgstr "[ソース]" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" -msgstr "" +msgstr "[ドã‚ュメント]" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" -msgstr "モジュール" +msgstr "モジュールコード" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" -msgstr "" +msgstr "<h1>%s ã®ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰</h1>" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" -msgstr "" +msgstr "概è¦: モジュールコード" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" -msgstr "" +msgstr "<h1>全モジュールã®ã†ã¡ã€ã‚³ãƒ¼ãƒ‰ã‚’èªã‚ã‚‹ã‚‚ã®</h1>" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "注æ„" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "ã”用心" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "å±é™º" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "エラー" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "ヒント" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "é‡è¦" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "ノート" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "å‚考" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "ã¡ãªã¿ã«" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "è¦å‘Š" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s ã§è¿½åŠ " -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s ã§å¤‰æ›´" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³ %s ã§æ’¤å»ƒ" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "ã‚ーワード" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "演算å" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "オブジェクト" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "æ–‡" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "組ã¿è¾¼ã¿é–¢æ•°" @@ -512,7 +523,7 @@ msgid "Table Of Contents" msgstr "目次" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "検索" @@ -642,13 +653,13 @@ msgstr "次ã®ãƒˆãƒ”ックã¸" msgid "next chapter" msgstr "次ã®ç« ã¸" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "検索機能を使ã†ã«ã¯ JavaScript を有効ã«ã—ã¦ãã ã•ã„。" -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -656,16 +667,16 @@ msgid "" " containing fewer words won't appear in the result list." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ãƒ‰ã‚ュメントを検索ã§ãã¾ã™ã€‚ã‚ーワードを下ã®ãƒœãƒƒã‚¯ã‚¹ã«å…¥åŠ›ã—ã¦ã€ã€Œæ¤œç´¢ã€ã‚’クリックã—ã¦ãã ã•ã„。入力ã•れãŸå…¨ã¦ã®ã‚ーワードをå«ã‚€ãƒšãƒ¼ã‚¸ãŒæ¤œç´¢ã•れã¾ã™ã€‚一部ã®ã‚ーワードã—ã‹å«ã¾ãªã„ãƒšãƒ¼ã‚¸ã¯æ¤œç´¢çµæžœã«è¡¨ç¤ºã•れãªã„ã®ã§æ³¨æ„ã—ã¦ãã ã•ã„。" -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "検索" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "æ¤œç´¢çµæžœ" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "検索æ¡ä»¶ã«ä¸€è‡´ã™ã‚‹é …ç›®ãŒã‚りã¾ã›ã‚“ã§ã—ãŸã€‚" @@ -705,12 +716,12 @@ msgstr "C API ã«é–¢ã™ã‚‹å¤‰æ›´" msgid "Other changes" msgstr "ãã®å¤šã®å¤‰æ›´" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "ã“ã®ãƒ˜ãƒƒãƒ‰ãƒ©ã‚¤ãƒ³ã¸ã®ãƒ‘ーマリンク" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "ã“ã®å®šç¾©ã¸ã®ãƒ‘ーマリンク" @@ -718,58 +729,59 @@ msgstr "ã“ã®å®šç¾©ã¸ã®ãƒ‘ーマリンク" msgid "Hide Search Matches" msgstr "æ¤œç´¢çµæžœã‚’éš ã™" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "検索ä¸" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "æ¤œç´¢ã®æº–å‚™ä¸..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr "" -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." msgstr "検索æ¡ä»¶ã«ä¸€è‡´ã™ã‚‹ãƒ‰ã‚ュメントã¯ã‚りã¾ã›ã‚“ã§ã—ãŸã€‚検索ã—ãŸã„言葉をæ£ã—ã„ã¤ã¥ã‚Šã§å…¥åŠ›ã—ã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。ã¾ãŸã€æ£ã—ã„ã‚«ãƒ†ã‚´ãƒªã®æ¤œç´¢ã‚’行ã£ã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。" -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "検索ãŒçµ‚了ã—ã€æ¡ä»¶ã«ä¸€è‡´ã™ã‚‹ãƒšãƒ¼ã‚¸ãŒ %s 個ã¿ã¤ã‹ã‚Šã¾ã—ãŸã€‚" #: sphinx/themes/default/static/sidebar.js:66 msgid "Expand sidebar" -msgstr "" +msgstr "サイドãƒãƒ¼ã‚’展開" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" -msgstr "" +msgstr "サイドãƒãƒ¼ã‚’ãŸãŸã‚€" #: sphinx/themes/haiku/layout.html:26 msgid "Contents" -msgstr "" +msgstr "コンテンツ" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "リリース" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "注記" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "å‰ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ã®ç¶šã" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "ç·ç´¢å¼•" #: sphinx/writers/text.py:422 msgid "[image]" msgstr "[ç”»åƒ]" + diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.mo b/sphinx/locale/lt/LC_MESSAGES/sphinx.mo Binary files differindex 794ae655..1ed94be5 100644 --- a/sphinx/locale/lt/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.po b/sphinx/locale/lt/LC_MESSAGES/sphinx.po index 48618e30..081c4994 100644 --- a/sphinx/locale/lt/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.po @@ -7,8 +7,9 @@ msgstr "" "Project-Id-Version: Sphinx 1.0pre/8b971dbc7d36\n" "Report-Msgid-Bugs-To: dalius@sandbox.lt\n" "POT-Creation-Date: 2010-05-24 23:53+0200\n" -"PO-Revision-Date: 2010-06-19 12:02+0300\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Dalius Dobravolskas <dalius@sandbox.lt>\n" +"Language-Team: lt <LL@li.org>\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "(n%100<10 || n%100>=20) ? 1 : 2)\n" "MIME-Version: 1.0\n" @@ -16,13 +17,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%Y-%m-%d" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "" @@ -35,66 +36,66 @@ msgstr "Ä®taisytieji" msgid "Module level" msgstr "Modulio lygis" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%Y-%m-%d" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Bendras indeksas" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "indeksas" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "kitas" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "praeitas" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (kuris yra " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Skyriaus autorius: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Modulio autorius: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 msgid "Code author: " msgstr "Kodo autorius: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Autorius: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Taip pat žiÅ«rÄ—kite" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parametrai" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Grąžinamos reikÅ¡mÄ—s" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Grąžinamos reikÅ¡mÄ—s tipas" @@ -123,12 +124,12 @@ msgstr "%s (C tipas)" msgid "%s (C variable)" msgstr "%s (C kintamasis)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "funkcija" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "narys" @@ -136,7 +137,7 @@ msgstr "narys" msgid "macro" msgstr "makrokomanda" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "tipas" @@ -144,186 +145,197 @@ msgstr "tipas" msgid "variable" msgstr "kintamasis" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tipas)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ narys)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkcija)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "klasÄ—" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (itaisytoji funkcija)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metodas)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, python-format +msgid "%s() (class)" +msgstr "%s() (klasÄ—)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "%s (globalus kintamasis arba konstanta)" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atributas)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 msgid "Arguments" msgstr "Argumentais" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "IÅ¡meta" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "duomenys" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "atribudas" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 msgid "Variables" msgstr "Kintamieji" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Sukelia" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (modulyje %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (įtaisytasis kintamasis)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (modulje %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (įtaisytoji klasÄ—)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (klasÄ— iÅ¡ %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metodas)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statinis metodas)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statinis metodas)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s klasÄ—s metodas)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s klasÄ—s metodas)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atributas)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Platformos: " -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (modulis)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "moduliai" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Atmestas" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "iÅ¡imtis" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "metodas" -#: sphinx/domains/python.py:502 +#: sphinx/domains/python.py:528 msgid "class method" msgstr "klasÄ—s metodas" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "statinis metodas" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "modulis" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Atmestas" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "%s (direktyva)" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, python-format msgid "%s (role)" msgstr "%s (rolÄ—)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "direktyva" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 msgid "role" msgstr "rolÄ—" @@ -362,7 +374,7 @@ msgstr "programos parinktis" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Indeksas" @@ -374,12 +386,12 @@ msgstr "Modulio indeksas" msgid "Search Page" msgstr "PaieÅ¡kos puslapis" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " BazÄ—s: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr ":class:`%s` alternatyvus vardas" @@ -397,103 +409,103 @@ msgstr "(<<original entry>> galima rasti %s, eilutÄ—je %d.)" msgid "original entry" msgstr "originalus įraÅ¡as" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "[Å¡altinis]" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "[dokumentai]" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 msgid "Module code" msgstr "Modulio kodas" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Kodas %s</h1>" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "Apžvalga: modulio kodas" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Visi moduliai turintys kodÄ…</h1>" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "DÄ—mesio" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Atsargiai" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Pavojinga" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Klaida" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Patarimas" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Svarbu" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Pastaba" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Taip pat žiÅ«rÄ—kite" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Patarimas" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Ä®spÄ—jimas" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Nauja %s versijoje" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Pakeista %s versijoje" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Nebepalaikoma nuo %s versijos" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "bazinis žodis" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "operatorius" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "objektas" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "sakinis" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "įtaisytoji funkcija" @@ -503,7 +515,7 @@ msgid "Table Of Contents" msgstr "Turinys" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "PaieÅ¡ka" @@ -633,7 +645,7 @@ msgstr "Kita tema" msgid "next chapter" msgstr "kita dalis" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." @@ -641,25 +653,29 @@ msgstr "" "PraÅ¡ome aktyvuoti JavaScript, kad veiktų paieÅ¡kos\n" " funkcionalumas." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" " function will automatically search for all of the words. Pages\n" " containing fewer words won't appear in the result list." msgstr "" -"ÄŒia jÅ«s galite ieÅ¡koti Å¡iuose dokumentuose. Ä®veskite savo paieÅ¡kos\n žodžius į laukÄ… apaÄioje ir paspauskite \"ieÅ¡koti\". PastebÄ—sime, kad paieÅ¡kos\n funkcija automatiÅ¡kai ieÅ¡kos visų žodžių. Puslapiai,\n kuriuose yra mažiau žodžių nepasirodys tarp paieÅ¡kos rezultatų." +"ÄŒia jÅ«s galite ieÅ¡koti Å¡iuose dokumentuose. Ä®veskite savo paieÅ¡kos\n" +" žodžius į laukÄ… apaÄioje ir paspauskite \"ieÅ¡koti\". PastebÄ—sime, kad" +" paieÅ¡kos\n" +" funkcija automatiÅ¡kai ieÅ¡kos visų žodžių. Puslapiai,\n" +" kuriuose yra mažiau žodžių nepasirodys tarp paieÅ¡kos rezultatų." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "ieÅ¡koti" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "PaieÅ¡kos rezultatai" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "JÅ«sų paieÅ¡ka neatitiko jokių rezultatų" @@ -699,12 +715,12 @@ msgstr "C API pakeitimai" msgid "Other changes" msgstr "Kiti pakeitimai" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Nuoroda į Å¡iÄ… antraÅ¡tÄ™" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Nuoroda į šį apibrėžimÄ…" @@ -712,25 +728,27 @@ msgstr "Nuoroda į šį apibrėžimÄ…" msgid "Hide Search Matches" msgstr "PaslÄ—pti paieÅ¡kos rezultatus" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "IeÅ¡koma" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "RuoÅ¡iama paieÅ¡ka..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", kuris yra " -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." -msgstr "JÅ«sų paieÅ¡ka neatitiko jokių dokumentų. PraÅ¡om patikrinti ar visi žodžiai teisingai įvesti ir ar pasirinkote pakankamai kategorijų." +msgstr "" +"JÅ«sų paieÅ¡ka neatitiko jokių dokumentų. PraÅ¡om patikrinti ar visi žodžiai" +" teisingai įvesti ir ar pasirinkote pakankamai kategorijų." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "PaieÅ¡ka baigta, paieÅ¡kos rezultatus atitiko %s puslapis(-iai,-ių)" @@ -740,7 +758,7 @@ msgid "Expand sidebar" msgstr "IÅ¡plÄ—sti Å¡oninÄ™ juostÄ…" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "PaslÄ—pti Å¡oninÄ™ juostÄ…" @@ -748,19 +766,19 @@ msgstr "PaslÄ—pti Å¡oninÄ™ juostÄ…" msgid "Contents" msgstr "Turinys" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Leidimas" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "IÅ¡naÅ¡os" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "tÄ™sinys iÅ¡ praeito puslapio" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "TÄ™sinys kitame puslapyje" diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.mo b/sphinx/locale/nl/LC_MESSAGES/sphinx.mo Binary files differindex 2002607f..39f46af0 100644 --- a/sphinx/locale/nl/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/nl/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.po b/sphinx/locale/nl/LC_MESSAGES/sphinx.po index 8683db4f..1e321591 100644 --- a/sphinx/locale/nl/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/nl/LC_MESSAGES/sphinx.po @@ -7,23 +7,22 @@ msgstr "" "Project-Id-Version: Sphinx 0.5\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2009-08-06 23:04+0200\n" -"PO-Revision-Date: 2010-05-29 16:22+0100\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Marijn van der Zee <marijn.vanderzee@gmail.com>\n" "Language-Team: nl <LL@li.org>\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 -#: sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d. %B %Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -36,71 +35,67 @@ msgstr "Builtins" msgid "Module level" msgstr "Moduleniveau" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d.%b.%Y" -#: sphinx/builders/html.py:285 -#: sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Algemene index" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "Index" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "volgende" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "vorige" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Auteur van deze sectie: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Auteur van deze module: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "Auteur van deze module: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Auteur: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Zie ook" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 -#: sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parameters" -#: sphinx/domains/c.py:54 -#: sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Returns" -#: sphinx/domains/c.py:56 -#: sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Return type" @@ -129,15 +124,12 @@ msgstr "%s (C type)" msgid "%s (C variable)" msgstr "%s (C-variabele)" -#: sphinx/domains/c.py:171 -#: sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 -#: sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "functie" -#: sphinx/domains/c.py:172 -#: sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "member" @@ -145,8 +137,7 @@ msgstr "member" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:174 -#: sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "type" @@ -155,207 +146,206 @@ msgstr "type" msgid "variable" msgstr "variabele" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ klasse)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ type)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ member)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ functie)" -#: sphinx/domains/cpp.py:1030 -#: sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "klasse" -#: sphinx/domains/javascript.py:117 -#: sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (geïntegreerde functie)" -#: sphinx/domains/javascript.py:118 -#: sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s methode)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (C++ klasse)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "%s (globale variabele of constante)" -#: sphinx/domains/javascript.py:122 -#: sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s attribuut)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "Parameters" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 -#: sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 -#: sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "attribuut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "Variabele" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Veroorzaakt" -#: sphinx/domains/python.py:222 -#: sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 -#: sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (in module %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (geïntegreerde variabele)" -#: sphinx/domains/python.py:226 -#: sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (in module %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (geïntegreerde klasse)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (klasse in %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s methode)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statische methode)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statische methode)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s methode)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s methode)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s attribuut)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Platformen: " -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (module)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "Module-index" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "modules" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Verouderd" -#: sphinx/domains/python.py:500 -#: sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "exceptie" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (%s methode)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "statische methode" -#: sphinx/domains/python.py:505 -#: sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "module" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Verouderd" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (module)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "module" -#: sphinx/domains/std.py:68 -#: sphinx/domains/std.py:84 +#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 #, python-format msgid "environment variable; %s" msgstr "omgevingsvariabele; %s" @@ -385,15 +375,12 @@ msgstr "omgevingsvariabele" msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 -#: sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: sphinx/themes/basic/genindex.html:11 -#: sphinx/themes/basic/genindex.html:14 -#: sphinx/themes/basic/genindex.html:50 -#: sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 +#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Index" @@ -401,17 +388,16 @@ msgstr "Index" msgid "Module Index" msgstr "Module-index" -#: sphinx/domains/std.py:362 -#: sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Zoekpagina" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -429,132 +415,126 @@ msgstr "(Het <<originele item>> is te vinden in %s, regel %d.)" msgid "original entry" msgstr "originele item" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "module" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Let op" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Pas op" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Gevaar" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Fout" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Hint" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Belangrijk" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Notitie" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Zie ook" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Tip" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Waarschuwing" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Nieuw in versie %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Veranderd in versie %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Verouderd sinds versie %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "trefwoord" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "object" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "statement" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "ingebouwde functie" -#: sphinx/themes/agogo/layout.html:45 -#: sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10 #: sphinx/themes/basic/localtoc.html:11 msgid "Table Of Contents" msgstr "Inhoudsopgave" -#: sphinx/themes/agogo/layout.html:49 -#: sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 -#: sphinx/themes/basic/search.html:14 +#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Zoeken" -#: sphinx/themes/agogo/layout.html:52 -#: sphinx/themes/basic/searchbox.html:15 +#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15 msgid "Go" msgstr "Ga" -#: sphinx/themes/agogo/layout.html:57 -#: sphinx/themes/basic/searchbox.html:20 +#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20 msgid "Enter search terms or a module, class or function name." msgstr "Geef zoekterm of de naam van een module, klasse of functie." -#: sphinx/themes/agogo/layout.html:78 -#: sphinx/themes/basic/sourcelink.html:14 +#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14 msgid "Show Source" msgstr "Broncode weergeven" @@ -644,8 +624,12 @@ msgstr "Laatste aanpassing op %(last_updated)s." #: sphinx/themes/basic/layout.html:189 #, python-format -msgid "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s." -msgstr "Aangemaakt met <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s." +msgid "" +"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" +"Aangemaakt met <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " +"%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 #, python-format @@ -668,13 +652,13 @@ msgstr "Volgend onderwerp" msgid "next chapter" msgstr "volgend hoofdstuk" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "Activeer JavaSscript om de zoekfunctionaliteit in te schakelen." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -682,20 +666,22 @@ msgid "" " containing fewer words won't appear in the result list." msgstr "" "Hier kan u de documenten doorzoeken. Geef enkele trefwoorden\n" -" in het veld hieronder en klik \"zoeken\". Merk op dat de zoekfunctie\n" -" steeds naar alle woorden zoekt. Pagina's die minder woorden bevatten\n" +" in het veld hieronder en klik \"zoeken\". Merk op dat de zoekfunctie" +"\n" +" steeds naar alle woorden zoekt. Pagina's die minder woorden bevatten" +"\n" " zullen niet tussen de resultaten verschijnen." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "zoeken" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Zoekresultaten" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Uw zoekopdracht leverde geen resultaten op." @@ -735,14 +721,12 @@ msgstr "Veranderingen in de C-API" msgid "Other changes" msgstr "Andere veranderingen" -#: sphinx/themes/basic/static/doctools.js:154 -#: sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Permalink naar deze titel" -#: sphinx/themes/basic/static/doctools.js:160 -#: sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Permalink naar deze definitie" @@ -750,23 +734,27 @@ msgstr "Permalink naar deze definitie" msgid "Hide Search Matches" msgstr "Zoekresultaten verbergen" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Zoeken" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Het zoeken wordt voorbereid..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", in " -#: sphinx/themes/basic/static/searchtools.js:491 -msgid "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." -msgstr "Uw zoekopdracht leverde geen resultaten op. Controleer of alle woorden correct gespeld zijn en dat u genoeg categoriën hebt geselecteerd." +#: sphinx/themes/basic/static/searchtools.js:506 +msgid "" +"Your search did not match any documents. Please make sure that all words " +"are spelled correctly and that you've selected enough categories." +msgstr "" +"Uw zoekopdracht leverde geen resultaten op. Controleer of alle woorden " +"correct gespeld zijn en dat u genoeg categoriën hebt geselecteerd." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Zoeken voltooid, %s pagina(s) gevonden." @@ -776,7 +764,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -784,20 +772,19 @@ msgstr "" msgid "Contents" msgstr "Inhoud" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Release" -#: sphinx/writers/latex.py:572 -#: sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "Voetnoten" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "Vervolgd van vorige pagina" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "Vervolgd op volgende pagina" @@ -805,12 +792,3 @@ msgstr "Vervolgd op volgende pagina" msgid "[image]" msgstr "[afbeelding]" -#~ msgid "Parameter" -#~ msgstr "Parameter" -#~ msgid "here" -#~ msgstr "hier" -#~ msgid "module, in " -#~ msgstr "module, in" -#~ msgid "Platform: %s" -#~ msgstr "Platform: %s" - diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.mo b/sphinx/locale/pl/LC_MESSAGES/sphinx.mo Binary files differindex 3c6105cd..132e7da3 100644 --- a/sphinx/locale/pl/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.po b/sphinx/locale/pl/LC_MESSAGES/sphinx.po index 6044e8ee..f5260f9e 100644 --- a/sphinx/locale/pl/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.po @@ -4,23 +4,23 @@ msgstr "" "Project-Id-Version: Sphinx 0.5\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2008-08-10 11:43+0000\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" -"Last-Translator: MichaÅ‚ Kandulski <Michal.Kandulski@poczta.onet.pl>\n" +"PO-Revision-Date: 2010-12-17 13:36+0100\n" +"Last-Translator: MichaÅ‚ Kandulski <michal.kandulski@gmail.com>\n" "Language-Team: \n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && " "(n%100<10 || n%100>=20) ? 1 : 2)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%B %d %Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -33,67 +33,67 @@ msgstr "Wbudowane" msgid "Module level" msgstr "Poziom moduÅ‚u" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%b %d %Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Indeks ogólny" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "indeks" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "dalej" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "wstecz" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (w " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Autor rozdziaÅ‚u: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Autor moduÅ‚u: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " -msgstr "Autor moduÅ‚u: " +msgstr "Autor kodu: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Autor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Zobacz także" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" -msgstr "" +msgstr "%s %s" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parametry" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Zwraca" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Typ zwracany" @@ -122,215 +122,226 @@ msgstr "%s (typ C)" msgid "%s (C variable)" msgstr "%s (zmienna C)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "funkcja" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "pole" #: sphinx/domains/c.py:173 msgid "macro" -msgstr "" +msgstr "makro" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "typ" #: sphinx/domains/c.py:175 #, fuzzy msgid "variable" -msgstr "Zmienna" +msgstr "zmienna" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" -msgstr "%s (klasie C++)" +msgstr "%s (klasa C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (typ C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (pole C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (funkcja C++)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" -msgstr "klasie" +msgstr "klasa" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (funkcja wbudowana)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metoda)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s() (klasa)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" -msgstr "" +msgstr "%s (zmienna lub staÅ‚a globalna)" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atrybut)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" -msgstr "Parametry" +msgstr "Argumenty" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" -msgstr "" +msgstr "Wyrzuca" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" -msgstr "" +msgstr "dane" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "atrybut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" -msgstr "Zmienna" +msgstr "Zmienne" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Wyrzuca" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (w module %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (zmienna wbudowana)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (w module %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (klasa wbudowana)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" -msgstr "%s (w klasie %s)" +msgstr "%s (klasa w module %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" -msgstr "%s() (%s.%s statyczna metoda)" +msgstr "%s() (%s.%s metoda statyczna)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" -msgstr "%s() (%s statyczna metoda)" +msgstr "%s() (%s metoda statyczna)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" -msgstr "%s() (%s.%s metoda)" +msgstr "%s() (%s.%s metoda klasy)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" -msgstr "%s() (%s metoda)" +msgstr "%s() (%s metoda klasy)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" -msgstr "%s (%s.%s atrybut)" +msgstr "%s (atrybut %s.%s)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Platformy: " -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (moduÅ‚)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" -msgstr "Indeks modułów" +msgstr "Indeks modułów pythona" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "moduÅ‚y" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Niezalecane" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "wyjÄ…tek" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" -msgstr "" +msgstr "metoda" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" -msgstr "%s() (%s metoda)" +msgstr "metoda klasy" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "statyczna metoda" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "moduÅ‚" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr " (niezalecane)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" -msgstr "" +msgstr "%s (dyrektywa)" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" -msgstr "%s (moduÅ‚)" +msgstr "%s (rola)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" -msgstr "" +msgstr "dyrektywa" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" -msgstr "moduÅ‚" +msgstr "rola" #: sphinx/domains/std.py:68 sphinx/domains/std.py:84 #, python-format @@ -344,15 +355,15 @@ msgstr "%sopcja linii komend; %s" #: sphinx/domains/std.py:328 msgid "glossary term" -msgstr "" +msgstr "termin glosariusza" #: sphinx/domains/std.py:329 msgid "grammar token" -msgstr "" +msgstr "symbol gramatyki" #: sphinx/domains/std.py:330 msgid "reference label" -msgstr "" +msgstr "etykieta odsyÅ‚acza" #: sphinx/domains/std.py:331 msgid "environment variable" @@ -360,14 +371,14 @@ msgstr "zmienna Å›rodowiskowa" #: sphinx/domains/std.py:332 msgid "program option" -msgstr "" +msgstr "opcja programu" #: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Indeks" @@ -379,129 +390,127 @@ msgstr "Indeks modułów" msgid "Search Page" msgstr "Wyszukiwanie" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " Klasy bazowe: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "alias klasy :class:`%s`" #: sphinx/ext/todo.py:41 msgid "Todo" -msgstr "Do zrobienia" +msgstr "Todo" #: sphinx/ext/todo.py:109 #, fuzzy, python-format msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "" -"(Oryginalny wpis znajduje siÄ™ w pliku %s, w linii %d i może być " -"odnaleziony " +msgstr "(<<Oryginalny wpis>> znajduje siÄ™ w pliku %s, w linii %d.)" #: sphinx/ext/todo.py:117 msgid "original entry" -msgstr "" +msgstr "oryginalny wpis" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" -msgstr "" +msgstr "[źródÅ‚o]" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" -msgstr "" +msgstr "[dokumenty]" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" -msgstr "moduÅ‚" +msgstr "Kod moduÅ‚u" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" -msgstr "" +msgstr "<h1>Kod źródÅ‚owy moduÅ‚u %s</h1>" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" -msgstr "" +msgstr "PrzeglÄ…danie: kod moduÅ‚u" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" -msgstr "" +msgstr "<h1>Wszystkie moduÅ‚y, dla których jest dostÄ™pny kod</h1>" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Uwaga" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Ostrożnie" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "NiebezpieczeÅ„stwo" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Błąd" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Podpowiedź" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Ważne" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Uwaga" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Zobacz także" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Wskazówka" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Ostrzeżenie" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Nowe w wersji %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Zmienione w wersji %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Niezalecane od wersji %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "sÅ‚owo kluczowe" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "obiekt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "instrukcja" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "funkcja wbudowana" @@ -511,7 +520,7 @@ msgid "Table Of Contents" msgstr "Spis treÅ›ci" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Szukaj" @@ -541,15 +550,15 @@ msgstr "Kompletny spis treÅ›ci" #: sphinx/themes/basic/defindex.html:24 msgid "lists all sections and subsections" -msgstr "wymieÅ„ wszystkie rozdziaÅ‚y i podrozdziaÅ‚y" +msgstr "wszystkie rozdziaÅ‚y i podrozdziaÅ‚y" #: sphinx/themes/basic/defindex.html:26 msgid "search this documentation" -msgstr "wyszukaj w dokumentacji" +msgstr "przyszukaj tÄ™ dokumentacjÄ™" #: sphinx/themes/basic/defindex.html:28 msgid "Global Module Index" -msgstr "Indeks modułów" +msgstr "Globalny indeks modułów" #: sphinx/themes/basic/defindex.html:29 msgid "quick access to all modules" @@ -641,13 +650,13 @@ msgstr "NastÄ™pny temat" msgid "next chapter" msgstr "nastÄ™pny rozdziaÅ‚" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "Aby umożliwić wuszukiwanie, proszÄ™ włączyć JavaScript." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -661,16 +670,16 @@ msgstr "" " nie zawierajÄ…ce wszystkich wpisanych słów nie znajdÄ… siÄ™ na wynikowej" " liÅ›cie." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" -msgstr "Szukaj" +msgstr "szukaj" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Wyniki wyszukiwania" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Nie znaleziono żadnych pasujÄ…cych stron." @@ -710,12 +719,12 @@ msgstr "Zmiany w C API" msgid "Other changes" msgstr "Inne zmiany" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "StaÅ‚y odnoÅ›nik do tego nagłówka" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "StaÅ‚y odnoÅ›nik do tej definicji" @@ -723,73 +732,61 @@ msgstr "StaÅ‚y odnoÅ›nik do tej definicji" msgid "Hide Search Matches" msgstr "Ukryj wyniki wyszukiwania" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Wyszukiwanie" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Przygotowanie wyszukiwania..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", w " -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." msgstr "" "Nie znaleziono żadnych pasujÄ…cych dokumentów. Upewnij siÄ™, że wszystkie " -"sÅ‚owa sÄ… poprawnie wpisane i że wybraÅ‚eÅ› wystarczajÄ…cÄ…liczbÄ™ kategorii." +"sÅ‚owa sÄ… poprawnie wpisane i że wybraÅ‚eÅ› wystarczajÄ…cÄ… liczbÄ™ kategorii." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Przeszukiwanie zakoÅ„czone, znaleziono %s pasujÄ…cych stron." #: sphinx/themes/default/static/sidebar.js:66 msgid "Expand sidebar" -msgstr "" +msgstr "RozwiÅ„ pasek boczny" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" -msgstr "" +msgstr "ZwiÅ„ pasek boczny" #: sphinx/themes/haiku/layout.html:26 msgid "Contents" -msgstr "" +msgstr "Treść" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Wydanie" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "Przypisy" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "kontynuacja poprzedniej strony" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "Kontynuacja na nastÄ™pnej stronie" #: sphinx/writers/text.py:422 msgid "[image]" -msgstr "[obrazek]" - -#~ msgid "Parameter" -#~ msgstr "Parametr" - -#~ msgid "here" -#~ msgstr "tutaj" - -#~ msgid "module, in " -#~ msgstr "moduÅ‚, w " - -#~ msgid "Platform: %s" -#~ msgstr "Platforma: %s" +msgstr "[obraz]" diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo Binary files differindex 67c1ce54..31558971 100644 --- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po index 7df9013e..75770ee9 100644 --- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po @@ -8,23 +8,22 @@ msgstr "" "Project-Id-Version: Sphinx 0.5\n" "Report-Msgid-Bugs-To: roger.demetrescu@gmail.com\n" "POT-Creation-Date: 2008-11-09 19:46+0100\n" -"PO-Revision-Date: 2010-06-20 18:34-0300\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Roger Demetrescu <roger.demetrescu@gmail.com>\n" "Language-Team: pt_BR <roger.demetrescu@gmail.com>\n" "Plural-Forms: nplurals=2; plural=(n > 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 -#: sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d/%m/%Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -37,70 +36,66 @@ msgstr "Internos" msgid "Module level" msgstr "Módulo" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d/%m/%Y" -#: sphinx/builders/html.py:285 -#: sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Ãndice Geral" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "Ãndice" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "próximo" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "anterior" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (em " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Autor da seção: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Autor do módulo: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 msgid "Code author: " msgstr "Autor do código: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Autor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Veja também" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:51 -#: sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parâmetros" -#: sphinx/domains/c.py:54 -#: sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Retorna" -#: sphinx/domains/c.py:56 -#: sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Tipo de retorno" @@ -129,15 +124,12 @@ msgstr "%s (tipo C)" msgid "%s (C variable)" msgstr "%s (variável C)" -#: sphinx/domains/c.py:171 -#: sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 -#: sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "função" -#: sphinx/domains/c.py:172 -#: sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "membro" @@ -145,8 +137,7 @@ msgstr "membro" msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:174 -#: sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "tipo" @@ -154,203 +145,201 @@ msgstr "tipo" msgid "variable" msgstr "variável" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (classe C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (tipo C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (membro C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (função C++)" -#: sphinx/domains/cpp.py:1030 -#: sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "classe" -#: sphinx/domains/javascript.py:117 -#: sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (função interna)" -#: sphinx/domains/javascript.py:118 -#: sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (método %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (classe C++)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "%s (variável global ou constante)" -#: sphinx/domains/javascript.py:122 -#: sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (atributo %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 msgid "Arguments" msgstr "Parâmetros" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "Gera" -#: sphinx/domains/javascript.py:167 -#: sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "dado" -#: sphinx/domains/javascript.py:168 -#: sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "atributo" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 msgid "Variables" msgstr "Variáveis" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Levanta" -#: sphinx/domains/python.py:222 -#: sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 -#: sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (no módulo %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (variável interna)" -#: sphinx/domains/python.py:226 -#: sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (no módulo %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (classe interna)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (classe em %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (método %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (método estático %s.%s)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (método estático %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (método de classe %s.%s)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, python-format msgid "%s() (%s class method)" msgstr "%s() (método de classe %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atributo %s.%s)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Plataformas: " -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (módulo)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 msgid "Python Module Index" msgstr "Ãndice de Módulos do Python" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "módulos" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Obsoleto" -#: sphinx/domains/python.py:500 -#: sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "exceção" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "método" -#: sphinx/domains/python.py:502 -#, python-format +#: sphinx/domains/python.py:528 msgid "class method" msgstr "método de classe" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "método estático" -#: sphinx/domains/python.py:505 -#: sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "módulo" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Obsoleto" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "%s (diretiva)" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, python-format msgid "%s (role)" msgstr "%s (papel)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "diretiva" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 msgid "role" msgstr "papel" -#: sphinx/domains/std.py:68 -#: sphinx/domains/std.py:84 +#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 #, python-format msgid "environment variable; %s" msgstr "váriavel de ambiente; %s" @@ -380,15 +369,12 @@ msgstr "váriavel de ambiente" msgid "program option" msgstr "opção de programa" -#: sphinx/domains/std.py:360 -#: sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: sphinx/themes/basic/genindex.html:11 -#: sphinx/themes/basic/genindex.html:14 -#: sphinx/themes/basic/genindex.html:50 -#: sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 +#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Ãndice" @@ -396,17 +382,16 @@ msgstr "Ãndice" msgid "Module Index" msgstr "Ãndice do Módulo" -#: sphinx/domains/std.py:362 -#: sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Página de Pesquisa" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " Bases: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "apelido de :class:`%s`" @@ -424,131 +409,125 @@ msgstr "(A <<entrada original>> está localizada em %s, linha %d.)" msgid "original entry" msgstr "entrada original" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "[código fonte]" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "[documentos]" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 msgid "Module code" msgstr "Código do módulo" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>Código fonte de %s</h1>" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "Visão geral: código do módulo" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Todos os módulos onde este código está disponÃvel</h1>" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Atenção" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Cuidado" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Perigo" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Erro" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Dica" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Importante" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Nota" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Veja Também" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Dica" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Aviso" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Novo na versão %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Alterado na versão %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Obsoleto desde a versão %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "palavra-chave" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "operador" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "objeto" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "comando" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "função interna" -#: sphinx/themes/agogo/layout.html:45 -#: sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10 #: sphinx/themes/basic/localtoc.html:11 msgid "Table Of Contents" msgstr "Tabela de Conteúdo" -#: sphinx/themes/agogo/layout.html:49 -#: sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 -#: sphinx/themes/basic/search.html:14 +#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Pesquisar" -#: sphinx/themes/agogo/layout.html:52 -#: sphinx/themes/basic/searchbox.html:15 +#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15 msgid "Go" msgstr "Ir" -#: sphinx/themes/agogo/layout.html:57 -#: sphinx/themes/basic/searchbox.html:20 +#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20 msgid "Enter search terms or a module, class or function name." msgstr "Digite os termos da busca ou o nome de um módulo, classe ou função." -#: sphinx/themes/agogo/layout.html:78 -#: sphinx/themes/basic/sourcelink.html:14 +#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14 msgid "Show Source" msgstr "Exibir Fonte" @@ -638,8 +617,12 @@ msgstr "Última atualização em %(last_updated)s." #: sphinx/themes/basic/layout.html:189 #, python-format -msgid "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s." -msgstr "Criado com <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s." +msgid "" +"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" +"Criado com <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " +"%(sphinx_version)s." #: sphinx/themes/basic/opensearch.xml:4 #, python-format @@ -662,13 +645,13 @@ msgstr "Próximo tópico" msgid "next chapter" msgstr "próximo capÃtulo" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "Por favor ative o JavaScript para habilitar a funcionalidade de pesquisa." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -676,20 +659,22 @@ msgid "" " containing fewer words won't appear in the result list." msgstr "" "A partir daqui você pode pesquisar estes documentos. Preencha suas \n" -" palavras de pesquisa na caixa abaixo e clique em \"pesquisar\". Observe que a função de pesquisa\n" +" palavras de pesquisa na caixa abaixo e clique em \"pesquisar\". " +"Observe que a função de pesquisa\n" " irá pesquisar automaticamente por todas as palavras.\n" -" Páginas contendo menos palavras não irão aparecer na lista de resultado." +" Páginas contendo menos palavras não irão aparecer na lista de " +"resultado." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "pesquisar" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Resultados da Pesquisa" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Sua pesquisa não encontrou nenhum resultado." @@ -729,14 +714,12 @@ msgstr "Alterações na API C" msgid "Other changes" msgstr "Outras alterações" -#: sphinx/themes/basic/static/doctools.js:154 -#: sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Link permanente para este tÃtulo" -#: sphinx/themes/basic/static/doctools.js:160 -#: sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Link permanente para esta definição" @@ -744,33 +727,40 @@ msgstr "Link permanente para esta definição" msgid "Hide Search Matches" msgstr "Esconder Resultados da Pesquisa" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Pesquisando" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Preparando pesquisa..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", em " -#: sphinx/themes/basic/static/searchtools.js:491 -msgid "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." -msgstr "Sua pesquisa não encontrou nenhum documento. Por favor assegure-se de que todas as palavras foram digitadas corretamente e de que você tenha selecionado o mÃnimo de categorias." +#: sphinx/themes/basic/static/searchtools.js:506 +msgid "" +"Your search did not match any documents. Please make sure that all words " +"are spelled correctly and that you've selected enough categories." +msgstr "" +"Sua pesquisa não encontrou nenhum documento. Por favor assegure-se de que" +" todas as palavras foram digitadas corretamente e de que você tenha " +"selecionado o mÃnimo de categorias." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." -msgstr "Pesquisa finalizada, foram encontrada(s) %s página(s) que conferem com o critério de pesquisa." +msgstr "" +"Pesquisa finalizada, foram encontrada(s) %s página(s) que conferem com o " +"critério de pesquisa." #: sphinx/themes/default/static/sidebar.js:66 msgid "Expand sidebar" msgstr "Expandir painel lateral" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "Recolher painel lateral" @@ -778,20 +768,19 @@ msgstr "Recolher painel lateral" msgid "Contents" msgstr "Conteúdo" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Versão" -#: sphinx/writers/latex.py:572 -#: sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "Notas de rodapé" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "continuação da página anterior" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "Continua na próxima página" diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo Binary files differindex ecdc6860..a7d7b641 100644 --- a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.po b/sphinx/locale/ru/LC_MESSAGES/sphinx.po index e2b1e3a1..acd409a4 100644 --- a/sphinx/locale/ru/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: Sphinx 0.6b1\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2009-01-24 18:39+0000\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: alexander smishlajev <alex@tycobka.lv>\n" "Language-Team: ru <LL@li.org>\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " @@ -15,15 +15,15 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d %B %Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -36,67 +36,67 @@ msgstr "Ð’Ñтроенные функции" msgid "Module level" msgstr "Модуль" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d %b %Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Словарь-указатель" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "Ñловарь" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "Ñледующий" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "предыдущий" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (в " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Ðвтор Ñекции: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Ðвтор модулÑ: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "Ðвтор модулÑ: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Ðвтор: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "См.также" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Параметры" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Результат" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Тип результата" @@ -125,12 +125,12 @@ msgstr "%s (тип C)" msgid "%s (C variable)" msgstr "%s (Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ C)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "функциÑ" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "поле" @@ -138,7 +138,7 @@ msgstr "поле" msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "тип" @@ -147,190 +147,201 @@ msgstr "тип" msgid "variable" msgstr "ПеременнаÑ" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (клаÑÑ C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (тип C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (поле C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ C++)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "клаÑÑ" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (вÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (метод %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (клаÑÑ C++)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (атрибут %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "Параметры" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "атрибут" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "ПеременнаÑ" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "ИÑключение" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (в модуле %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (вÑÑ‚Ñ€Ð¾ÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð°Ñ)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (в модуле %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (вÑтроенный клаÑÑ)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (клаÑÑ Ð² %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (метод %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (ÑтатичеÑкий метод %s.%s)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (ÑтатичеÑкий метод %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (метод %s.%s)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (метод %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (атрибут %s.%s)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Платформы: " -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (модуль)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "СоÑтав модулÑ" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "модули" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Ðе рекомендуетÑÑ" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "иÑключение" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (метод %s)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "ÑтатичеÑкий метод" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "модуль" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Ðе рекомендуетÑÑ" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (модуль)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "модуль" @@ -370,7 +381,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Ðлфавитный указатель" @@ -382,12 +393,12 @@ msgstr "СоÑтав модулÑ" msgid "Search Page" msgstr "ПоиÑк" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " Базовые клаÑÑÑ‹: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "пÑевдоним клаÑÑа :class:`%s`" @@ -405,104 +416,104 @@ msgstr "(ИÑходный Ñлемент находитÑÑ Ð² %s, в Ñтрок msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "модуль" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Внимание" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "ОÑторожно" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "ОпаÑно" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Ошибка" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "ПодÑказка" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Важно" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Примечание" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "См.также" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Совет" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Предупреждение" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Добавлено в верÑии %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Изменено в верÑии %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Ðе рекомендуетÑÑ, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñ Ð²ÐµÑ€Ñии %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "ключевое Ñлово" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "оператор" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "объект" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "команда" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "Ð±Ð°Ð·Ð¾Ð²Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ" @@ -512,7 +523,7 @@ msgid "Table Of Contents" msgstr "Содержание" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "ПоиÑк" @@ -642,13 +653,13 @@ msgstr "Следующий раздел" msgid "next chapter" msgstr "ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð³Ð»Ð°Ð²Ð°" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "Ð”Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð¸Ñка необходима поддержка JavaScript в браузере." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -661,16 +672,16 @@ msgstr "" "упомÑнуты вÑе указанные Ñлова. Страницы, в которых вÑтречаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ " "чаÑть Ñтих Ñлов, отобраны не будут." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "иÑкать" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Результаты поиÑка" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Результатов по вашему запроÑу не найдено." @@ -710,12 +721,12 @@ msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² C API" msgid "Other changes" msgstr "Другие изменениÑ" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "СÑылка на Ñтот заголовок" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "СÑылка на Ñто определение" @@ -723,19 +734,19 @@ msgstr "СÑылка на Ñто определение" msgid "Hide Search Matches" msgstr "СнÑть выделение" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "ПоиÑк" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Подготовка к поиÑку..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", в " -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." @@ -743,7 +754,7 @@ msgstr "" "Ðет документов, ÑоответÑтвующих вашему запроÑу. Проверьте, правильно ли " "выбраны категории и нет ли опечаток в запроÑе." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "ПоиÑк окончен, найдено Ñтраниц: %s." @@ -753,7 +764,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -761,19 +772,19 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "ВыпуÑк" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 #, fuzzy msgid "Continued on next page" msgstr "Полный алфавитный указатель на одной Ñтранице" @@ -781,3 +792,4 @@ msgstr "Полный алфавитный указатель на одной ÑÑ #: sphinx/writers/text.py:422 msgid "[image]" msgstr "[риÑунок]" + diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.mo b/sphinx/locale/sl/LC_MESSAGES/sphinx.mo Binary files differindex 21e64ffd..ad2b8aa8 100644 --- a/sphinx/locale/sl/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.po b/sphinx/locale/sl/LC_MESSAGES/sphinx.po index 6028c35c..f47aa3d3 100644 --- a/sphinx/locale/sl/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.po @@ -4,22 +4,22 @@ msgstr "" "Project-Id-Version: Sphinx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2008-09-11 23:58+0200\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Luka Marinko <luka.marinko@simt.si>\n" "Language-Team: Rok Garbas <rok.garbas@gmail.com>\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d %B, %Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -32,67 +32,67 @@ msgstr "Vgrajeni deli" msgid "Module level" msgstr "Nivo modula" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d %b, %Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "SploÅ¡ni abecedni seznam" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "abecedni seznam" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "naprej" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "nazaj" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (v " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Avtor sekcije: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Avtor modula: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "Avtor modula: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Avtor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Poglej Tudi" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parametri" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Vrne" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Vrne tip" @@ -121,12 +121,12 @@ msgstr "%s (C tip)" msgid "%s (C variable)" msgstr "%s (C spremenljivka)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "funkcija" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "Älan" @@ -134,7 +134,7 @@ msgstr "Älan" msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "tip" @@ -143,190 +143,201 @@ msgstr "tip" msgid "variable" msgstr "Spremenljivka" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ razred)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tip)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ Älan)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkcija)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "razred" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (vgrajene funkcije)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metoda)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (C++ razred)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atribut)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "Parametri" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "Spremenljivka" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Sproži izjemo" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (v modulu %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (vgrajene spremenljivke)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (v modulu %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (vgrajen razred)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (razred v %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statiÄna metoda)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statiÄna metoda)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s metoda)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atribut)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Platforme:" -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "Seznam modulov" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "Moduli" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Zastarelo" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "izjema" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (%s metoda)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "statiÄna metoda" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "modul" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Zastarelo" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (modul)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "modul" @@ -366,7 +377,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Abecedni seznam" @@ -378,12 +389,12 @@ msgstr "Seznam modulov" msgid "Search Page" msgstr "Iskalnik" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " Baza: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "vzdevek za :class:`%s`" @@ -401,104 +412,104 @@ msgstr "(Originalen vnos se nahaja v %s, v vrstici %d, in ga je moÄ poiskati " msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "modul" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Pozor" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Previdno" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Nevarno" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Napaka" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Nasvet" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Pomembno" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Opomba" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Poglej Tudi" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Nasvet" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Opozorilo" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Novo v verziji %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Spremenjeno v verziji %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "Zastarelo od verzije %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "kljuÄna beseda" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "izjava" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "vgrajene funkcije" @@ -508,7 +519,7 @@ msgid "Table Of Contents" msgstr "Seznam Vsebine" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "IÅ¡Äi" @@ -638,7 +649,7 @@ msgstr "Naslednja tema" msgid "next chapter" msgstr "naslednje poglavje" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." @@ -646,7 +657,7 @@ msgstr "" "Za pravilno delovanje Iskanja morete vklopiti\n" " JavaScript." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -658,16 +669,16 @@ msgstr "" " bo iskalo po vseh besedah v iskalnem nizu. Strani, ki ne\n" " vsebujejo vseh besed ne bodo prikazane na seznamu rezultatov." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "iÅ¡Äi" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Rezultati Iskanja" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "VaÅ¡e iskanje ni imelo nobenega zadetka." @@ -707,12 +718,12 @@ msgstr "C API spremembe" msgid "Other changes" msgstr "Ostale spremembe" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Povezava na naslov" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Povezava na to definicijo" @@ -720,19 +731,19 @@ msgstr "Povezava na to definicijo" msgid "Hide Search Matches" msgstr "Skrij resultate iskanja" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "IÅ¡Äem" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Pripravljam iskanje..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", v " -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." @@ -740,7 +751,7 @@ msgstr "" "Za vaÅ¡e iskanje ni rezultatov. Prosimo preglejte ali so vse besede " "pravilno Ärkovane in ali ste izbrali dovolj kategorij." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Iskanje konÄano, najdeno %s strani, ki ustrezajo iskalnemu nizu." @@ -750,7 +761,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -758,22 +769,23 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Izdaja" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "Opombe" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "nadaljevanje iz prejÅ¡nje strani" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "Nadaljevanje na naslednji strani" #: sphinx/writers/text.py:422 msgid "[image]" msgstr "[slika]" + diff --git a/sphinx/locale/sphinx.pot b/sphinx/locale/sphinx.pot index 955663aa..5d60cd4e 100644 --- a/sphinx/locale/sphinx.pot +++ b/sphinx/locale/sphinx.pot @@ -6,24 +6,24 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Sphinx 1.0pre/8b971dbc7d36\n" +"Project-Id-Version: Sphinx 1.1pre/dd630cbbda23\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2010-05-24 23:53+0200\n" +"POT-Creation-Date: 2010-08-26 11:44+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "" @@ -36,66 +36,66 @@ msgstr "" msgid "Module level" msgstr "" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "" -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "" -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 msgid "Code author: " msgstr "" -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "" -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "" @@ -124,12 +124,12 @@ msgstr "" msgid "%s (C variable)" msgstr "" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "" @@ -137,7 +137,7 @@ msgstr "" msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "" @@ -145,186 +145,196 @@ msgstr "" msgid "variable" msgstr "" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, python-format +msgid "%s() (class)" +msgstr "" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "" -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 +#: sphinx/domains/python.py:528 msgid "class method" msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +msgid " (deprecated)" +msgstr "" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, python-format msgid "%s (role)" msgstr "" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 msgid "role" msgstr "" @@ -363,7 +373,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "" @@ -375,12 +385,12 @@ msgstr "" msgid "Search Page" msgstr "" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -398,103 +408,103 @@ msgstr "" msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 msgid "Module code" msgstr "" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "" @@ -504,7 +514,7 @@ msgid "Table Of Contents" msgstr "" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "" @@ -632,13 +642,13 @@ msgstr "" msgid "next chapter" msgstr "" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "" -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -646,16 +656,16 @@ msgid "" " containing fewer words won't appear in the result list." msgstr "" -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "" @@ -695,12 +705,12 @@ msgstr "" msgid "Other changes" msgstr "" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "" @@ -708,25 +718,25 @@ msgstr "" msgid "Hide Search Matches" msgstr "" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "" -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr "" -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." msgstr "" -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" @@ -736,7 +746,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -744,19 +754,19 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "" diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.js b/sphinx/locale/sv/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000..0cedfb45 --- /dev/null +++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "sv", "plural_expr": "(n != 1)", "messages": {"Search Results": "S\u00f6kresultat", "Preparing search...": "F\u00f6rbereder s\u00f6kning...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Din s\u00f6kning gav inga resultat. Kolla stavning och att du valt tillr\u00e4ckligt med kategorier.", "Search finished, found %s page(s) matching the search query.": "S\u00f6kning f\u00e4rdig, hittade %s tr\u00e4ffar.", ", in ": ", i ", "Expand sidebar": "Expandera sidolist", "Permalink to this headline": "Permalink till denna rubrik", "Searching": "S\u00f6ker", "Collapse sidebar": "D\u00f6lj sidolist", "Permalink to this definition": "Permalink till denna definition", "Hide Search Matches": "D\u00f6lj S\u00f6kresultat"}});
\ No newline at end of file diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.mo b/sphinx/locale/sv/LC_MESSAGES/sphinx.mo Binary files differnew file mode 100644 index 00000000..40e059e2 --- /dev/null +++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/sv/LC_MESSAGES/sphinx.po b/sphinx/locale/sv/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..33127180 --- /dev/null +++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.po @@ -0,0 +1,780 @@ + +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2010-05-24 23:53+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" +"Last-Translator: Henrik Holmboe <henrik@holmboe.se>\n" +"Language-Team: \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.5\n" + +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 +#: sphinx/writers/manpage.py:67 +#, python-format +msgid "%B %d, %Y" +msgstr "%B %d, %Y" + +#: sphinx/roles.py:173 +#, python-format +msgid "Python Enhancement Proposals!PEP %s" +msgstr "Python Enhancement Proposals!PEP %s" + +#: sphinx/builders/changes.py:72 +msgid "Builtins" +msgstr "Inbyggda" + +#: sphinx/builders/changes.py:74 +msgid "Module level" +msgstr "ModulnivÃ¥" + +#: sphinx/builders/html.py:260 +#, python-format +msgid "%b %d, %Y" +msgstr "%b %d, %Y" + +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "Huvudindex" + +#: sphinx/builders/html.py:279 +msgid "index" +msgstr "index" + +#: sphinx/builders/html.py:339 +msgid "next" +msgstr "nästa" + +#: sphinx/builders/html.py:348 +msgid "previous" +msgstr "föregÃ¥ende" + +#: sphinx/builders/latex.py:145 +msgid " (in " +msgstr "(i " + +#: sphinx/directives/other.py:135 +msgid "Section author: " +msgstr "Sektionsförfattare" + +#: sphinx/directives/other.py:137 +msgid "Module author: " +msgstr "Modulförfattare" + +#: sphinx/directives/other.py:139 +msgid "Code author: " +msgstr "Källkodsförfattare" + +#: sphinx/directives/other.py:141 +msgid "Author: " +msgstr "Upphovsman:" + +#: sphinx/directives/other.py:213 +msgid "See also" +msgstr "Se även" + +#: sphinx/domains/__init__.py:242 +#, python-format +msgid "%s %s" +msgstr "%s %s" + +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 +msgid "Parameters" +msgstr "Parametrar" + +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 +msgid "Returns" +msgstr "Returnerar" + +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 +msgid "Return type" +msgstr "Returtyp" + +#: sphinx/domains/c.py:133 +#, python-format +msgid "%s (C function)" +msgstr "%s (C-funktion)" + +#: sphinx/domains/c.py:135 +#, python-format +msgid "%s (C member)" +msgstr "%s (C-medlem)" + +#: sphinx/domains/c.py:137 +#, python-format +msgid "%s (C macro)" +msgstr "%s (C-makro)" + +#: sphinx/domains/c.py:139 +#, python-format +msgid "%s (C type)" +msgstr "%s (C-typ)" + +#: sphinx/domains/c.py:141 +#, python-format +msgid "%s (C variable)" +msgstr "%s (C-variabel)" + +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 +msgid "function" +msgstr "funktion" + +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 +msgid "member" +msgstr "medlem" + +#: sphinx/domains/c.py:173 +msgid "macro" +msgstr "makro" + +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 +msgid "type" +msgstr "typ" + +#: sphinx/domains/c.py:175 +msgid "variable" +msgstr "variabel" + +#: sphinx/domains/cpp.py:883 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (C++-klass)" + +#: sphinx/domains/cpp.py:898 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (C++-typ)" + +#: sphinx/domains/cpp.py:917 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (C++-medlem)" + +#: sphinx/domains/cpp.py:969 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (C++-funktion)" + +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 +msgid "class" +msgstr "klass" + +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 +#, python-format +msgid "%s() (built-in function)" +msgstr "%s() (inbyggd funktion)" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (%s metod)" + +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (C++-klass)" + +#: sphinx/domains/javascript.py:110 +#, python-format +msgid "%s (global variable or constant)" +msgstr "%s (global variabel eller konstant)" + +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (%s attribut)" + +#: sphinx/domains/javascript.py:121 +msgid "Arguments" +msgstr "Argument" + +#: sphinx/domains/javascript.py:124 +msgid "Throws" +msgstr "Kastar" + +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 +msgid "data" +msgstr "data" + +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 +msgid "attribute" +msgstr "attribut" + +#: sphinx/domains/python.py:98 +msgid "Variables" +msgstr "Variabler" + +#: sphinx/domains/python.py:101 +msgid "Raises" +msgstr "Väcker" + +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 +#, python-format +msgid "%s() (in module %s)" +msgstr "%s() (i modul %s)" + +#: sphinx/domains/python.py:248 +#, python-format +msgid "%s (built-in variable)" +msgstr "%s (inbyggd variabel)" + +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 +#, python-format +msgid "%s (in module %s)" +msgstr "%s (i modul %s)" + +#: sphinx/domains/python.py:265 +#, python-format +msgid "%s (built-in class)" +msgstr "%s (inbyggd klass)" + +#: sphinx/domains/python.py:266 +#, python-format +msgid "%s (class in %s)" +msgstr "%s (klass i %s)" + +#: sphinx/domains/python.py:306 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "%s() (%s.%s metod)" + +#: sphinx/domains/python.py:318 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "%s() (%s.%s statisk metod)" + +#: sphinx/domains/python.py:321 +#, python-format +msgid "%s() (%s static method)" +msgstr "%s() (%s statisk metod)" + +#: sphinx/domains/python.py:331 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "%s() (%s.%s klassmetod)" + +#: sphinx/domains/python.py:334 +#, python-format +msgid "%s() (%s class method)" +msgstr "%s() (%s klassmetod)" + +#: sphinx/domains/python.py:344 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "%s (%s.%s attribut)" + +#: sphinx/domains/python.py:392 +msgid "Platforms: " +msgstr "Plattformar:" + +#: sphinx/domains/python.py:398 +#, python-format +msgid "%s (module)" +msgstr "%s (modul)" + +#: sphinx/domains/python.py:455 +msgid "Python Module Index" +msgstr "Python Modulindex" + +#: sphinx/domains/python.py:456 +msgid "modules" +msgstr "moduler" + +#: sphinx/domains/python.py:501 +msgid "Deprecated" +msgstr "Ersatt" + +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 +msgid "exception" +msgstr "undantag" + +#: sphinx/domains/python.py:527 +msgid "method" +msgstr "metod" + +#: sphinx/domains/python.py:528 +msgid "class method" +msgstr "klassmetod" + +#: sphinx/domains/python.py:529 +msgid "static method" +msgstr "statisk metod" + +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 +msgid "module" +msgstr "modul" + +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Ersatt" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "%s (direktiv)" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "%s (roll)" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "direktiv" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "roll" + +#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#, python-format +msgid "environment variable; %s" +msgstr "miljövariabel; %s" + +#: sphinx/domains/std.py:160 +#, python-format +msgid "%scommand line option; %s" +msgstr "%skommandorad växel; %s" + +#: sphinx/domains/std.py:328 +msgid "glossary term" +msgstr "ordlista" + +#: sphinx/domains/std.py:329 +msgid "grammar token" +msgstr "grammatisk token" + +#: sphinx/domains/std.py:330 +msgid "reference label" +msgstr "referensetikett" + +#: sphinx/domains/std.py:331 +msgid "environment variable" +msgstr "miljövariabel" + +#: sphinx/domains/std.py:332 +msgid "program option" +msgstr "programväxel" + +#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 +#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 +#: sphinx/writers/latex.py:174 +msgid "Index" +msgstr "Index" + +#: sphinx/domains/std.py:361 +msgid "Module Index" +msgstr "Modulindex" + +#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "Söksida" + +#: sphinx/ext/autodoc.py:923 +#, python-format +msgid " Bases: %s" +msgstr " Baserad: %s" + +#: sphinx/ext/autodoc.py:959 +#, python-format +msgid "alias of :class:`%s`" +msgstr "alias för :class:`%s`" + +#: sphinx/ext/todo.py:41 +msgid "Todo" +msgstr "Att göra" + +#: sphinx/ext/todo.py:109 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(<<Ursprunget>> finns i %s, pÃ¥ rad %d.)" + +#: sphinx/ext/todo.py:117 +msgid "original entry" +msgstr "ursprungsvärde" + +#: sphinx/ext/viewcode.py:70 +msgid "[source]" +msgstr "[source]" + +#: sphinx/ext/viewcode.py:117 +msgid "[docs]" +msgstr "[docs]" + +#: sphinx/ext/viewcode.py:131 +msgid "Module code" +msgstr "Modulkällkod" + +#: sphinx/ext/viewcode.py:137 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "<h1>Källkod för %s</h1>" + +#: sphinx/ext/viewcode.py:164 +msgid "Overview: module code" +msgstr "Översikt: modulkällkod" + +#: sphinx/ext/viewcode.py:165 +msgid "<h1>All modules for which code is available</h1>" +msgstr "<h1>Alla moduler där källkod finns</h1>" + +#: sphinx/locale/__init__.py:155 +msgid "Attention" +msgstr "Uppmärksamma" + +#: sphinx/locale/__init__.py:156 +msgid "Caution" +msgstr "Varning" + +#: sphinx/locale/__init__.py:157 +msgid "Danger" +msgstr "Risk" + +#: sphinx/locale/__init__.py:158 +msgid "Error" +msgstr "Fel" + +#: sphinx/locale/__init__.py:159 +msgid "Hint" +msgstr "RÃ¥d" + +#: sphinx/locale/__init__.py:160 +msgid "Important" +msgstr "Viktigt" + +#: sphinx/locale/__init__.py:161 +msgid "Note" +msgstr "Observera" + +#: sphinx/locale/__init__.py:162 +msgid "See Also" +msgstr "Se även" + +#: sphinx/locale/__init__.py:163 +msgid "Tip" +msgstr "Tips" + +#: sphinx/locale/__init__.py:164 +msgid "Warning" +msgstr "Varning" + +#: sphinx/locale/__init__.py:168 +#, python-format +msgid "New in version %s" +msgstr "Nyheter i version %s" + +#: sphinx/locale/__init__.py:169 +#, python-format +msgid "Changed in version %s" +msgstr "Förändrat i version %s" + +#: sphinx/locale/__init__.py:170 +#, python-format +msgid "Deprecated since version %s" +msgstr "Ersatt sedan version %s" + +#: sphinx/locale/__init__.py:175 +msgid "keyword" +msgstr "nyckelord" + +#: sphinx/locale/__init__.py:176 +msgid "operator" +msgstr "operator" + +#: sphinx/locale/__init__.py:177 +msgid "object" +msgstr "objekt" + +#: sphinx/locale/__init__.py:179 +msgid "statement" +msgstr "uttryck" + +#: sphinx/locale/__init__.py:180 +msgid "built-in function" +msgstr "inbyggda funktioner" + +#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 +msgid "Table Of Contents" +msgstr "InnehÃ¥llsförteckning" + +#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 +msgid "Search" +msgstr "Sök" + +#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "GÃ¥" + +#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20 +msgid "Enter search terms or a module, class or function name." +msgstr "Ange sökord eller modul-, klass- eller funktionsnamn." + +#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14 +msgid "Show Source" +msgstr "Visa källfil" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "Översikt" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "Index och tabeller" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "Komplett InnehÃ¥llsförteckning" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "lista över alla paragrafer och underparagrafer" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "sök i det här dokumentet" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "Global Modulindex" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "genväg till alla moduler" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "alla funktioner, klasser, villkor" + +#: sphinx/themes/basic/genindex-single.html:14 +#, python-format +msgid "Index – %(key)s" +msgstr "Index – %(key)s" + +#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:56 +msgid "Full index on one page" +msgstr "Hela innehÃ¥llsförteckningen pÃ¥ en sida" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "InnehÃ¥llsförteckning per inledande bokstav" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "kan bli stort" + +#: sphinx/themes/basic/layout.html:23 +msgid "Navigation" +msgstr "Navigation" + +#: sphinx/themes/basic/layout.html:113 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Sök bland %(docstitle)s" + +#: sphinx/themes/basic/layout.html:122 +msgid "About these documents" +msgstr "Om dessa dokument" + +#: sphinx/themes/basic/layout.html:131 +msgid "Copyright" +msgstr "Copyright" + +#: sphinx/themes/basic/layout.html:180 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." + +#: sphinx/themes/basic/layout.html:182 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." + +#: sphinx/themes/basic/layout.html:186 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Senast uppdaterad %(last_updated)s." + +#: sphinx/themes/basic/layout.html:189 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" +"Skapad med <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " +"%(sphinx_version)s." + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "Sök %(docstitle)s" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "FöregÃ¥ende titel" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "FöregÃ¥ende kapitel" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "Nästa titel" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "Nästa kapitel" + +#: sphinx/themes/basic/search.html:24 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "Var god aktivera JavaScript för sökfunktionalitet." + +#: sphinx/themes/basic/search.html:29 +msgid "" +"From here you can search these documents. Enter your search\n" +" words into the box below and click \"search\". Note that the search\n" +" function will automatically search for all of the words. Pages\n" +" containing fewer words won't appear in the result list." +msgstr "" +"Här kan du söka bland dessa dokument. Ange sökord nedan och klicka " +"\"sök\".\n" +" Sökningen mÃ¥ste träffa pÃ¥ samtliga angivna sökord." + +#: sphinx/themes/basic/search.html:36 +msgid "search" +msgstr "sök" + +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 +msgid "Search Results" +msgstr "Sökresultat" + +#: sphinx/themes/basic/search.html:42 +msgid "Your search did not match any results." +msgstr "Din sökning gav inga resultat." + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "Snabbsök" + +#: sphinx/themes/basic/sourcelink.html:11 +msgid "This Page" +msgstr "Denna Sida" + +#: sphinx/themes/basic/changes/frameset.html:5 +#: sphinx/themes/basic/changes/versionchanges.html:12 +#, python-format +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "Förändringar i Version %(version)s — %(docstitle)s" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "%(filename)s — %(docstitle)s" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "Automatiskt genererad lista över förändringar i version %(version)s" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "Förändringar i bibliotek" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "Förändringar i C-API" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "Övriga förändringar" + +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 +msgid "Permalink to this headline" +msgstr "Permalink till denna rubrik" + +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 +msgid "Permalink to this definition" +msgstr "Permalink till denna definition" + +#: sphinx/themes/basic/static/doctools.js:189 +msgid "Hide Search Matches" +msgstr "Dölj Sökresultat" + +#: sphinx/themes/basic/static/searchtools.js:287 +msgid "Searching" +msgstr "Söker" + +#: sphinx/themes/basic/static/searchtools.js:292 +msgid "Preparing search..." +msgstr "Förbereder sökning..." + +#: sphinx/themes/basic/static/searchtools.js:366 +msgid ", in " +msgstr ", i " + +#: sphinx/themes/basic/static/searchtools.js:506 +msgid "" +"Your search did not match any documents. Please make sure that all words " +"are spelled correctly and that you've selected enough categories." +msgstr "" +"Din sökning gav inga resultat. Kolla stavning och att du valt " +"tillräckligt med kategorier." + +#: sphinx/themes/basic/static/searchtools.js:508 +#, python-format +msgid "Search finished, found %s page(s) matching the search query." +msgstr "Sökning färdig, hittade %s träffar." + +#: sphinx/themes/default/static/sidebar.js:66 +msgid "Expand sidebar" +msgstr "Expandera sidolist" + +#: sphinx/themes/default/static/sidebar.js:79 +#: sphinx/themes/default/static/sidebar.js:107 +msgid "Collapse sidebar" +msgstr "Dölj sidolist" + +#: sphinx/themes/haiku/layout.html:26 +msgid "Contents" +msgstr "InnehÃ¥ll" + +#: sphinx/writers/latex.py:172 +msgid "Release" +msgstr "UtgÃ¥va" + +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 +msgid "Footnotes" +msgstr "Fotnoter" + +#: sphinx/writers/latex.py:649 +msgid "continued from previous page" +msgstr "fortsättning frÃ¥n föregÃ¥ende sida" + +#: sphinx/writers/latex.py:654 +msgid "Continued on next page" +msgstr "Fortsätter pÃ¥ nästa sida" + +#: sphinx/writers/text.py:422 +msgid "[image]" +msgstr "[image]" + diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.mo b/sphinx/locale/tr/LC_MESSAGES/sphinx.mo Binary files differindex 5054199c..746669eb 100644 --- a/sphinx/locale/tr/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.po b/sphinx/locale/tr/LC_MESSAGES/sphinx.po index e1e5c173..030097bf 100644 --- a/sphinx/locale/tr/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.po @@ -8,23 +8,22 @@ msgstr "" "Project-Id-Version: Sphinx 0.6.2+/6b02a19ccf31\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2009-08-06 22:48+0200\n" -"PO-Revision-Date: 2010-05-28 10:18+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Firat Ozgul <ozgulfirat@gmail.com>\n" "Language-Team: Turkish <kistihza@yahoo.com>\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 -#: sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%d %B %Y" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python'u İyileÅŸtirme Önerileri!PEP %s" @@ -37,70 +36,66 @@ msgstr "Gömülüler" msgid "Module level" msgstr "Modül düzeyi" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%d %b %Y" -#: sphinx/builders/html.py:285 -#: sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Genel Dizin" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "dizin" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "sonraki" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "önceki" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (ÅŸunun içinde: " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Bölümü yazan: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Modülü yazan: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 msgid "Code author: " msgstr "Kodu yazan: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Yazan: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "Ayrıca bkz." -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "%s %s" -#: sphinx/domains/c.py:51 -#: sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Parametreler" -#: sphinx/domains/c.py:54 -#: sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Åžunu döndürür:" -#: sphinx/domains/c.py:56 -#: sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Dönüş tipi" @@ -129,15 +124,12 @@ msgstr "%s (C tipi)" msgid "%s (C variable)" msgstr "%s (C deÄŸiÅŸkeni)" -#: sphinx/domains/c.py:171 -#: sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 -#: sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "fonksiyonu" -#: sphinx/domains/c.py:172 -#: sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "öğesi" @@ -145,8 +137,7 @@ msgstr "öğesi" msgid "macro" msgstr "makrosu" -#: sphinx/domains/c.py:174 -#: sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "tipi" @@ -154,203 +145,201 @@ msgstr "tipi" msgid "variable" msgstr "deÄŸiÅŸkeni" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ sınıfı)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tipi)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ öğesi)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ fonksiyonu)" -#: sphinx/domains/cpp.py:1030 -#: sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "sınıfı" -#: sphinx/domains/javascript.py:117 -#: sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (gömülü fonksiyon)" -#: sphinx/domains/javascript.py:118 -#: sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metodu)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (C++ sınıfı)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "%s (global deÄŸiÅŸken veya sabit)" -#: sphinx/domains/javascript.py:122 -#: sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s niteliÄŸi)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 msgid "Arguments" msgstr "Argümanlar" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "Åžunu verir: " -#: sphinx/domains/javascript.py:167 -#: sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "verisi" -#: sphinx/domains/javascript.py:168 -#: sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "niteliÄŸi" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 msgid "Variables" msgstr "DeÄŸiÅŸkenler" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Åžunu üretir:" -#: sphinx/domains/python.py:222 -#: sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 -#: sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s modülü içinde)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (gömülü deÄŸiÅŸken)" -#: sphinx/domains/python.py:226 -#: sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (%s modülü içinde)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (gömülü sınıf)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (%s içinde bir sınıf)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metodu)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statik metodu)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statik metodu)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s sınıf metodu)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s sınıf metodu)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s niteliÄŸi)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Platformlar:" -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (modül)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 msgid "Python Module Index" msgstr "Python Modül Dizini" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "modüller" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "Önerilmiyor" -#: sphinx/domains/python.py:500 -#: sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "istisnası" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "metodu" -#: sphinx/domains/python.py:502 -#, python-format +#: sphinx/domains/python.py:528 msgid "class method" msgstr "sınıf metodu" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "statik metodu" -#: sphinx/domains/python.py:505 -#: sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "modülü" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "Önerilmiyor" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "%s (yönerge)" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, python-format msgid "%s (role)" msgstr "%s (rol)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "yönergesi" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 msgid "role" msgstr "rolü" -#: sphinx/domains/std.py:68 -#: sphinx/domains/std.py:84 +#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 #, python-format msgid "environment variable; %s" msgstr "çevre deÄŸiÅŸkeni; %s" @@ -380,15 +369,12 @@ msgstr "çevre deÄŸiÅŸkeni" msgid "program option" msgstr "program seçeneÄŸi" -#: sphinx/domains/std.py:360 -#: sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 #: sphinx/themes/basic/genindex-split.html:11 #: sphinx/themes/basic/genindex-split.html:14 -#: sphinx/themes/basic/genindex.html:11 -#: sphinx/themes/basic/genindex.html:14 -#: sphinx/themes/basic/genindex.html:50 -#: sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 +#: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "Dizin" @@ -396,17 +382,16 @@ msgstr "Dizin" msgid "Module Index" msgstr "Modül Dizini" -#: sphinx/domains/std.py:362 -#: sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Arama Sayfası" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " Taban: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "ÅŸunun takma adı: :class:`%s`" @@ -424,131 +409,125 @@ msgstr "(<<özgün girdi>> %s içinde ve %d satırında bulunuyor.)" msgid "original entry" msgstr "özgün girdi" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "[kaynak]" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "[belgeler]" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 msgid "Module code" msgstr "Modül kodu" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "<h1>%s öğesinin kaynak kodu</h1>" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "Genel bakış: modül kodu" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "<h1>Kodları mevcut bütün modüller</h1>" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Dikkat" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "Uyarı" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Tehlike" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Hata" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "İpucu" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Önemli" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Not" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "Ayrıca bkz." -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Tüyo" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "Uyarı" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "%s sürümüyle geldi" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "%s sürümünde deÄŸiÅŸti" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "%s sürümünden beri önerilmiyor" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "anahtar kelime" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "iÅŸleç" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "nesne" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "deyim" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "gömülü fonksiyon" -#: sphinx/themes/agogo/layout.html:45 -#: sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10 #: sphinx/themes/basic/localtoc.html:11 msgid "Table Of Contents" msgstr "İçindekiler Tablosu" -#: sphinx/themes/agogo/layout.html:49 -#: sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 -#: sphinx/themes/basic/search.html:14 +#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Ara" -#: sphinx/themes/agogo/layout.html:52 -#: sphinx/themes/basic/searchbox.html:15 +#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15 msgid "Go" msgstr "Git" -#: sphinx/themes/agogo/layout.html:57 -#: sphinx/themes/basic/searchbox.html:20 +#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20 msgid "Enter search terms or a module, class or function name." msgstr "Aranacak terimleri veya modül, sınıf ya da fonksiyon adını yazınız" -#: sphinx/themes/agogo/layout.html:78 -#: sphinx/themes/basic/sourcelink.html:14 +#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14 msgid "Show Source" msgstr "Kaynağı Göster" @@ -638,8 +617,12 @@ msgstr "Son güncelleme: %(last_updated)s." #: sphinx/themes/basic/layout.html:189 #, python-format -msgid "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s." -msgstr "<a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s ile oluÅŸturulmuÅŸtur." +msgid "" +"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" +"<a href=\"http://sphinx.pocoo.org/\">Sphinx</a> %(sphinx_version)s ile " +"oluÅŸturulmuÅŸtur." #: sphinx/themes/basic/opensearch.xml:4 #, python-format @@ -662,7 +645,7 @@ msgstr "Sonraki konu" msgid "next chapter" msgstr "sonraki bölüm" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." @@ -670,7 +653,7 @@ msgstr "" "Arama iÅŸlevini kullanabilmek için lütfen JavaScript'i\n" " etkinleÅŸtirin." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -682,16 +665,16 @@ msgstr "" "otomatik olarak bütün kelimeleri arayacaktır. Eksik kelime içeren \n" "sayfalar sonuç listesinde görünmez." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "ara" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Arama Sonuçları" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Arama sonucunda herhangi bir belge bulunamadı." @@ -731,14 +714,12 @@ msgstr "C API'sindeki deÄŸiÅŸiklikler" msgid "Other changes" msgstr "DiÄŸer deÄŸiÅŸiklikler" -#: sphinx/themes/basic/static/doctools.js:154 -#: sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "Bu baÅŸlığın kalıcı baÄŸlantısı" -#: sphinx/themes/basic/static/doctools.js:160 -#: sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "Bu tanımın kalıcı baÄŸlantısı" @@ -746,23 +727,27 @@ msgstr "Bu tanımın kalıcı baÄŸlantısı" msgid "Hide Search Matches" msgstr "Arama Sonuçlarını Gizle" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Arıyor" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Aramaya hazırlanıyor..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", ÅŸunun içinde: " -#: sphinx/themes/basic/static/searchtools.js:491 -msgid "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." -msgstr "Arama sonucunda hiçbir belge bulunamadı. Bütün kelimeleri doÄŸru yazdığınızdan ve gereken kategorileri seçtiÄŸinizden emin olun." +#: sphinx/themes/basic/static/searchtools.js:506 +msgid "" +"Your search did not match any documents. Please make sure that all words " +"are spelled correctly and that you've selected enough categories." +msgstr "" +"Arama sonucunda hiçbir belge bulunamadı. Bütün kelimeleri doÄŸru " +"yazdığınızdan ve gereken kategorileri seçtiÄŸinizden emin olun." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Arama sonuçlandı, aramayla eÅŸleÅŸen %s sayfa bulundu." @@ -772,7 +757,7 @@ msgid "Expand sidebar" msgstr "Yan çubuÄŸu geniÅŸlet" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "Yan çubuÄŸu daralt" @@ -780,20 +765,19 @@ msgstr "Yan çubuÄŸu daralt" msgid "Contents" msgstr "İçindekiler" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Sürüm" -#: sphinx/writers/latex.py:572 -#: sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "Dipnotları" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "önceki sayfadan devam" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "Devamı sonraki sayfada" diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo Binary files differindex cfa0b8e0..18f4d8d6 100644 --- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po index a85eaebe..81c21d78 100644 --- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: Sphinx 0.6\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2008-12-28 23:40+0100\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Petro Sasnyk <petro@sasnyk.name>\n" "Language-Team: uk_UA <LL@li.org>\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " @@ -16,15 +16,15 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python Enhancement Proposals!PEP %s" @@ -37,67 +37,67 @@ msgstr "Вбудовані елементи" msgid "Module level" msgstr "Рівень модулÑ" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%b %d, %Y" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Загальний індекÑ" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "індекÑ" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "наÑтупний" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "попередній" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr " (в " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Ðвтор Ñекції: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "Ðвтор модулÑ: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "Ðвтор модулÑ: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "Ðвтор: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "ДивиÑÑŒ також" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "Параметри" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "Повертає" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "Тип поверненнÑ" @@ -126,12 +126,12 @@ msgstr "%s (C тип)" msgid "%s (C variable)" msgstr "%s (C змінна)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "функціÑ" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "член" @@ -139,7 +139,7 @@ msgstr "член" msgid "macro" msgstr "макроÑ" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "тип" @@ -148,191 +148,201 @@ msgstr "тип" msgid "variable" msgstr "Змінна" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ клаÑ)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ тип)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ член)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ функціÑ)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "клаÑ" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (вбудована функціÑ)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s метод)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (C++ клаÑ)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s атрибут)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "Параметри" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 -#, python-format +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "атрибут" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "Змінна" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "Викликає" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (в модулі %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (вбудована змінна)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s (в модулі %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (вбудований клаÑ)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "%s (ÐºÐ»Ð°Ñ Ð² %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s метод)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s Ñтатичний метод)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s Ñтатичний метод)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s метод)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s метод)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s атрибут)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "Платформи: " -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (модуль)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "Ð†Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "модулі" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "ЗаÑтарілий" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "винÑткова ÑитуаціÑ" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (%s метод)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "Ñтатичний метод" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "модуль" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "ЗаÑтарілий" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (модуль)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "модуль" @@ -372,7 +382,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "ІндекÑ" @@ -384,12 +394,12 @@ msgstr "Ð†Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð´ÑƒÐ»Ñ–Ð²" msgid "Search Page" msgstr "Сторінка пошуку" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr " Базовий: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "Ñинонім :class:`%s`" @@ -407,104 +417,104 @@ msgstr "(Початкове Ð²Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÑŒÑÑ Ð² %s, Ñ€Ñ msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "модуль" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "Увага" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "ЗаÑтереженнÑ" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "Ðебезпека" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "Помилка" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "Підказка" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "Важливо" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "Примітка" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "ДивиÑÑŒ також" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "Порада" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "ПопередженнÑ" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "Ðове в верÑÑ–Ñ— %s" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "Змінено в верÑÑ–Ñ— %s" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "ЗаÑтаріло починаючи з верÑÑ–Ñ— %s" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "ключове Ñлово" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "оператор" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "об'єкт" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "вираз" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "вбудована функціÑ" @@ -514,7 +524,7 @@ msgid "Table Of Contents" msgstr "ЗміÑÑ‚" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Пошук" @@ -644,7 +654,7 @@ msgstr "ÐаÑтупна тема" msgid "next chapter" msgstr "наÑтупний розділ" -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." @@ -653,7 +663,7 @@ msgstr "" "\"\n" "\" пошук." -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -665,16 +675,16 @@ msgstr "" " пошуку автоматично шукатиме за вÑіма Ñловами. Сторінки\n" " що міÑÑ‚Ñть менше Ñлів не з'ÑвлÑтьÑÑ Ð² результуючому ÑпиÑку." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "пошук" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "Результати пошуку" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "Ваш пошук не виÑвив жодних Ñпівпадінь." @@ -714,12 +724,12 @@ msgstr "зміни C API" msgid "Other changes" msgstr "Інші зміни" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "ПоÑтійне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° цей заголовок" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "ПоÑтійне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° це визначеннÑ" @@ -727,19 +737,19 @@ msgstr "ПоÑтійне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° це визначеннÑ" msgid "Hide Search Matches" msgstr "Приховати ÑÐ¿Ñ–Ð²Ð¿Ð°Ð´Ñ–Ð½Ð½Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "Шукаю" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "Підготовка до пошуку..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", в " -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." @@ -747,7 +757,7 @@ msgstr "" "Ваш пошук не виÑвив жодного ÑпівпадіннÑ. Будь-лаÑка переконайтеÑÑ Ñ‰Ð¾ вÑÑ– " "Ñлова набрані правильно Ñ– ви обрали доÑтатньо категорій." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "Пошук закінчено, знайдено %s Ñторінок Ñкі Ñпівпали з пошуковим запитом." @@ -757,7 +767,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -765,19 +775,19 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "Реліз" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 #, fuzzy msgid "Continued on next page" msgstr "Повний Ñ–Ð½Ð´ÐµÐºÑ Ð½Ð° одній Ñторінці" @@ -785,3 +795,4 @@ msgstr "Повний Ñ–Ð½Ð´ÐµÐºÑ Ð½Ð° одній Ñторінці" #: sphinx/writers/text.py:422 msgid "[image]" msgstr "" + diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo Binary files differindex b62c4c5b..11818de5 100644 --- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po index c1762043..b9dce085 100644 --- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po @@ -9,22 +9,22 @@ msgstr "" "Project-Id-Version: Sphinx 0.6\n" "Report-Msgid-Bugs-To: zhutao.iscas@gmail.com\n" "POT-Creation-Date: 2009-03-09 19:46+0120\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Tower Joo<zhutao.iscas@gmail.com>\n" "Language-Team: cn <LL@li.org>\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%Y å¹´ %m 月 %d æ—¥" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python 建议文件!PEP %s" @@ -37,67 +37,67 @@ msgstr "内置" msgid "Module level" msgstr "模å—级别" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%Y å¹´ %m 月 %d æ—¥" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "总目录" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "索引" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "下一页" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "上一页" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Section 作者:" -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "模å—作者:" -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "模å—作者:" -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "作者:" -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "也å¯ä»¥å‚考" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "傿•°" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "返回" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "返回类型" @@ -126,12 +126,12 @@ msgstr "%s (C 类型)" msgid "%s (C variable)" msgstr "%s (C å˜é‡)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "函数" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "æˆå‘˜" @@ -139,7 +139,7 @@ msgstr "æˆå‘˜" msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "" @@ -148,190 +148,201 @@ msgstr "" msgid "variable" msgstr "å˜é‡" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, fuzzy, python-format msgid "%s (C++ class)" msgstr "%s (內置类)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ 类型)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ æˆå‘˜)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ 函数)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (內置函数)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s 方法)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (內置类)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s 属性)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "傿•°" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "属性" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "å˜é‡" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "引å‘" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (在 %s 模å—ä¸)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (å…§ç½®å˜é‡)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s() (在 %s 模å—ä¸)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (內置类)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s 方法)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s 陿€æ–¹æ³•)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s 陿€æ–¹æ³•)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s 方法)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s 方法)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s 属性)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "å¹³å°" -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (模å—)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "模å—索引" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "模å—" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "已移除" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "例外" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (%s 方法)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:529 msgid "static method" msgstr "陿€æ–¹æ³•" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "模å—" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "已移除" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (模å—)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "模å—" @@ -371,7 +382,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "索引" @@ -383,12 +394,12 @@ msgstr "模å—索引" msgid "Search Page" msgstr "æœç´¢é¡µé¢" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -406,104 +417,104 @@ msgstr "(最åˆçš„å…¥å£ä½äºŽ%s 的第%d行" msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "模å—" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "注æ„" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "è¦å‘Š" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "å±é™©" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "错误" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "æç¤º" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "é‡è¦" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "注解" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "也å¯ä»¥å‚考" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "尿Ѐ巧" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "è¦å‘Š" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "%s 新版功能" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "在 %s 版更改" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "%s 版åŽå·²ç§»é™¤" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "关键å—" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "æ“作数" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "对象" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "è¯å¥" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "內置函数" @@ -513,7 +524,7 @@ msgid "Table Of Contents" msgstr "內容目录" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "æœç´¢" @@ -641,13 +652,13 @@ msgstr "下一个主题" msgid "next chapter" msgstr "ä¸‹ä¸€ç« " -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "" -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -655,16 +666,16 @@ msgid "" " containing fewer words won't appear in the result list." msgstr "åœ¨è¿™å„¿ï¼Œä½ å¯ä»¥å¯¹è¿™äº›æ–‡æ¡£è¿›è¡Œæœç´¢ã€‚呿œç´¢æ¡†ä¸è¾“å…¥ä½ æ‰€è¦æœç´¢çš„关键å—并点击\"æœç´¢\"。注æ„:æœç´¢å¼•擎会自动æœç´¢æ‰€æœ‰çš„关键å—。将ä¸ä¼šæœç´¢åˆ°éƒ¨åˆ†å…³é”®å—的页é¢." -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "æœç´¢" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "æœç´¢ç»“æžœ" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "ä½ çš„æœç´¢æ²¡æœ‰æ‰¾åˆ°ä»»ä½•的结果." @@ -704,12 +715,12 @@ msgstr "C API 更改" msgid "Other changes" msgstr "其他更改" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "æ°¸ä¹…é“¾æŽ¥è‡³æ ‡é¢˜" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "æ°¸ä¹…é“¾æŽ¥è‡³ç›®æ ‡" @@ -717,25 +728,25 @@ msgstr "æ°¸ä¹…é“¾æŽ¥è‡³ç›®æ ‡" msgid "Hide Search Matches" msgstr "éšè—æœç´¢ç»“æžœ" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "æœç´¢ä¸" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "准备æœç´¢..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr ", ä½äºŽ" -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." msgstr "ä½ çš„æœç´¢æ²¡æœ‰åŒ¹é…åˆ°ä»»ä½•æ–‡æ¡£ã€‚è¯·ç¡®è®¤ä½ æ‰€æœç´¢çš„关键å—." -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "æœç´¢å®Œæˆï¼Œ 找到了 %s é¡µåŒ¹é…æ‰€æœç´¢çš„关键å—" @@ -745,7 +756,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -753,19 +764,19 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "å‘布" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 #, fuzzy msgid "Continued on next page" msgstr "一页的全部索引" @@ -773,3 +784,4 @@ msgstr "一页的全部索引" #: sphinx/writers/text.py:422 msgid "[image]" msgstr "[图片]" + diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo Binary files differindex 008ecec0..d58c16ff 100644 --- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo +++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po index 33dff8ca..cb2646ce 100644 --- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po @@ -8,22 +8,22 @@ msgstr "" "Project-Id-Version: Sphinx 0.5\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2008-11-09 19:46+0100\n" -"PO-Revision-Date: 2010-05-24 23:54+0200\n" +"PO-Revision-Date: 2010-08-26 11:45+0000\n" "Last-Translator: Fred Lin <gasolin@gmail.com>\n" "Language-Team: tw <LL@li.org>\n" "Plural-Forms: nplurals=1; plural=0\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.4\n" +"Generated-By: Babel 0.9.5\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 +#: sphinx/environment.py:111 sphinx/writers/latex.py:185 #: sphinx/writers/manpage.py:67 #, python-format msgid "%B %d, %Y" msgstr "%Y å¹´ %m 月 %d æ—¥" -#: sphinx/roles.py:174 +#: sphinx/roles.py:173 #, python-format msgid "Python Enhancement Proposals!PEP %s" msgstr "Python å»ºè°æ–‡ä»¶!PEP %s" @@ -36,67 +36,67 @@ msgstr "" msgid "Module level" msgstr "" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:260 #, python-format msgid "%b %d, %Y" msgstr "%Y å¹´ %m 月 %d æ—¥" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:279 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "總索引" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:279 msgid "index" msgstr "索引" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:339 msgid "next" msgstr "下一é " -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:348 msgid "previous" msgstr "上一é " -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:145 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:135 msgid "Section author: " msgstr "Section 作者:" -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:137 msgid "Module author: " msgstr "模組作者:" -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:139 #, fuzzy msgid "Code author: " msgstr "模組作者:" -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:141 msgid "Author: " msgstr "作者:" -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:213 msgid "See also" msgstr "" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:242 #, python-format msgid "%s %s" msgstr "" -#: sphinx/domains/c.py:51 sphinx/domains/python.py:49 +#: sphinx/domains/c.py:51 sphinx/domains/python.py:94 msgid "Parameters" msgstr "åƒæ•¸" -#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:137 -#: sphinx/domains/python.py:59 +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:127 +#: sphinx/domains/python.py:104 msgid "Returns" msgstr "返回" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:106 msgid "Return type" msgstr "返回類別" @@ -125,13 +125,12 @@ msgstr "%s (C 類別)" msgid "%s (C variable)" msgstr "%s (C 變數)" -#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1031 -#: sphinx/domains/javascript.py:166 sphinx/domains/python.py:497 -#, python-format +#: sphinx/domains/c.py:171 sphinx/domains/cpp.py:1039 +#: sphinx/domains/javascript.py:161 sphinx/domains/python.py:523 msgid "function" msgstr "函å¼" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1040 msgid "member" msgstr "æˆå“¡" @@ -139,7 +138,7 @@ msgstr "æˆå“¡" msgid "macro" msgstr "巨集" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1041 msgid "type" msgstr "類別" @@ -148,192 +147,201 @@ msgstr "類別" msgid "variable" msgstr "變數" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:883 #, fuzzy, python-format msgid "%s (C++ class)" msgstr "%s (內建類別)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:898 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ 類別)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:917 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ æˆå“¡)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:969 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ 函å¼)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1038 sphinx/domains/javascript.py:162 +#: sphinx/domains/python.py:525 msgid "class" msgstr "" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:105 sphinx/domains/python.py:244 #, python-format msgid "%s() (built-in function)" msgstr "%s() (內建函å¼)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:308 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s 方法)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:108 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (內建類別)" + +#: sphinx/domains/javascript.py:110 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:112 sphinx/domains/python.py:346 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s 屬性)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:121 #, fuzzy msgid "Arguments" msgstr "åƒæ•¸" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:124 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:163 sphinx/domains/python.py:524 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 -#, python-format +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:530 msgid "attribute" msgstr "屬性" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:98 #, fuzzy msgid "Variables" msgstr "變數" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:101 msgid "Raises" msgstr "" -#: sphinx/domains/python.py:222 sphinx/domains/python.py:279 -#: sphinx/domains/python.py:291 sphinx/domains/python.py:304 +#: sphinx/domains/python.py:245 sphinx/domains/python.py:302 +#: sphinx/domains/python.py:314 sphinx/domains/python.py:327 #, python-format msgid "%s() (in module %s)" msgstr "%s() (在 %s 模組ä¸)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:248 #, python-format msgid "%s (built-in variable)" msgstr "%s (內建變數)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:249 sphinx/domains/python.py:340 #, python-format msgid "%s (in module %s)" msgstr "%s() (在 %s 模組ä¸)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:265 #, python-format msgid "%s (built-in class)" msgstr "%s (內建類別)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:266 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:306 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s 方法)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:318 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s éœæ…‹æ–¹æ³•)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:321 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s éœæ…‹æ–¹æ³•)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:331 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s 方法)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:334 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s 方法)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:344 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s 屬性)" -#: sphinx/domains/python.py:366 +#: sphinx/domains/python.py:392 msgid "Platforms: " msgstr "å¹³å°" -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:398 #, python-format msgid "%s (module)" msgstr "%s (模組)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:455 #, fuzzy msgid "Python Module Index" msgstr "模組索引" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:456 msgid "modules" msgstr "模組" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:501 msgid "Deprecated" msgstr "已移除" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:526 sphinx/locale/__init__.py:178 msgid "exception" msgstr "例外" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:527 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:528 +#, fuzzy msgid "class method" msgstr "%s() (%s 方法)" -#: sphinx/domains/python.py:503 -#, python-format +#: sphinx/domains/python.py:529 msgid "static method" msgstr "éœæ…‹æ–¹æ³•" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:531 sphinx/locale/__init__.py:174 msgid "module" msgstr "模組" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:657 +#, fuzzy +msgid " (deprecated)" +msgstr "已移除" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 +#: sphinx/domains/rst.py:57 #, fuzzy, python-format msgid "%s (role)" msgstr "%s (模組)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 +#: sphinx/domains/rst.py:107 #, fuzzy msgid "role" msgstr "模組" @@ -373,7 +381,7 @@ msgstr "" #: sphinx/themes/basic/genindex-split.html:14 #: sphinx/themes/basic/genindex.html:11 sphinx/themes/basic/genindex.html:14 #: sphinx/themes/basic/genindex.html:50 sphinx/themes/basic/layout.html:125 -#: sphinx/writers/latex.py:173 +#: sphinx/writers/latex.py:174 msgid "Index" msgstr "索引" @@ -385,12 +393,12 @@ msgstr "模組索引" msgid "Search Page" msgstr "æœå°‹é é¢" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:923 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:959 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -408,104 +416,104 @@ msgstr "" msgid "original entry" msgstr "" -#: sphinx/ext/viewcode.py:66 +#: sphinx/ext/viewcode.py:70 msgid "[source]" msgstr "" -#: sphinx/ext/viewcode.py:109 +#: sphinx/ext/viewcode.py:117 msgid "[docs]" msgstr "" -#: sphinx/ext/viewcode.py:123 +#: sphinx/ext/viewcode.py:131 #, fuzzy msgid "Module code" msgstr "模組" -#: sphinx/ext/viewcode.py:129 +#: sphinx/ext/viewcode.py:137 #, python-format msgid "<h1>Source code for %s</h1>" msgstr "" -#: sphinx/ext/viewcode.py:156 +#: sphinx/ext/viewcode.py:164 msgid "Overview: module code" msgstr "" -#: sphinx/ext/viewcode.py:157 +#: sphinx/ext/viewcode.py:165 msgid "<h1>All modules for which code is available</h1>" msgstr "" -#: sphinx/locale/__init__.py:139 +#: sphinx/locale/__init__.py:155 msgid "Attention" msgstr "注æ„" -#: sphinx/locale/__init__.py:140 +#: sphinx/locale/__init__.py:156 msgid "Caution" msgstr "è¦ç¤º" -#: sphinx/locale/__init__.py:141 +#: sphinx/locale/__init__.py:157 msgid "Danger" msgstr "å±éšª" -#: sphinx/locale/__init__.py:142 +#: sphinx/locale/__init__.py:158 msgid "Error" msgstr "錯誤" -#: sphinx/locale/__init__.py:143 +#: sphinx/locale/__init__.py:159 msgid "Hint" msgstr "æç¤º" -#: sphinx/locale/__init__.py:144 +#: sphinx/locale/__init__.py:160 msgid "Important" msgstr "é‡è¦" -#: sphinx/locale/__init__.py:145 +#: sphinx/locale/__init__.py:161 msgid "Note" msgstr "註解" -#: sphinx/locale/__init__.py:146 +#: sphinx/locale/__init__.py:162 msgid "See Also" msgstr "" -#: sphinx/locale/__init__.py:147 +#: sphinx/locale/__init__.py:163 msgid "Tip" msgstr "尿Ѐ巧" -#: sphinx/locale/__init__.py:148 +#: sphinx/locale/__init__.py:164 msgid "Warning" msgstr "è¦å‘Š" -#: sphinx/locale/__init__.py:152 +#: sphinx/locale/__init__.py:168 #, python-format msgid "New in version %s" msgstr "%s 版新功能" -#: sphinx/locale/__init__.py:153 +#: sphinx/locale/__init__.py:169 #, python-format msgid "Changed in version %s" msgstr "在 %s 版改變" -#: sphinx/locale/__init__.py:154 +#: sphinx/locale/__init__.py:170 #, python-format msgid "Deprecated since version %s" msgstr "%s 版後已移除" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:175 msgid "keyword" msgstr "é—œéµå—" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:176 msgid "operator" msgstr "é‹ç®—å" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:177 msgid "object" msgstr "物件" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:179 msgid "statement" msgstr "" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:180 msgid "built-in function" msgstr "內建函å¼" @@ -515,7 +523,7 @@ msgid "Table Of Contents" msgstr "內容目錄" #: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:128 -#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:14 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "æœå°‹" @@ -644,13 +652,13 @@ msgstr "下一個主題" msgid "next chapter" msgstr "ä¸‹ä¸€ç« " -#: sphinx/themes/basic/search.html:18 +#: sphinx/themes/basic/search.html:24 msgid "" "Please activate JavaScript to enable the search\n" " functionality." msgstr "" -#: sphinx/themes/basic/search.html:23 +#: sphinx/themes/basic/search.html:29 msgid "" "From here you can search these documents. Enter your search\n" " words into the box below and click \"search\". Note that the search\n" @@ -658,16 +666,16 @@ msgid "" " containing fewer words won't appear in the result list." msgstr "" -#: sphinx/themes/basic/search.html:30 +#: sphinx/themes/basic/search.html:36 msgid "search" msgstr "æœå°‹" -#: sphinx/themes/basic/search.html:34 -#: sphinx/themes/basic/static/searchtools.js:489 +#: sphinx/themes/basic/search.html:40 +#: sphinx/themes/basic/static/searchtools.js:504 msgid "Search Results" msgstr "æœå°‹çµæžœ" -#: sphinx/themes/basic/search.html:36 +#: sphinx/themes/basic/search.html:42 msgid "Your search did not match any results." msgstr "" @@ -707,12 +715,12 @@ msgstr "C API 改變" msgid "Other changes" msgstr "其他改變:" -#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:482 -#: sphinx/writers/html.py:487 +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:491 +#: sphinx/writers/html.py:496 msgid "Permalink to this headline" msgstr "" -#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:87 +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:88 msgid "Permalink to this definition" msgstr "" @@ -720,25 +728,25 @@ msgstr "" msgid "Hide Search Matches" msgstr "" -#: sphinx/themes/basic/static/searchtools.js:285 +#: sphinx/themes/basic/static/searchtools.js:287 msgid "Searching" msgstr "æœå°‹ä¸" -#: sphinx/themes/basic/static/searchtools.js:290 +#: sphinx/themes/basic/static/searchtools.js:292 msgid "Preparing search..." msgstr "準備æœå°‹..." -#: sphinx/themes/basic/static/searchtools.js:364 +#: sphinx/themes/basic/static/searchtools.js:366 msgid ", in " msgstr "" -#: sphinx/themes/basic/static/searchtools.js:491 +#: sphinx/themes/basic/static/searchtools.js:506 msgid "" "Your search did not match any documents. Please make sure that all words " "are spelled correctly and that you've selected enough categories." msgstr "" -#: sphinx/themes/basic/static/searchtools.js:493 +#: sphinx/themes/basic/static/searchtools.js:508 #, python-format msgid "Search finished, found %s page(s) matching the search query." msgstr "" @@ -748,7 +756,7 @@ msgid "Expand sidebar" msgstr "" #: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:107 msgid "Collapse sidebar" msgstr "" @@ -756,22 +764,23 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:172 msgid "Release" msgstr "釋出" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:576 sphinx/writers/manpage.py:178 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:649 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:654 msgid "Continued on next page" msgstr "" #: sphinx/writers/text.py:422 msgid "[image]" msgstr "[圖片]" + diff --git a/sphinx/pycode/__init__.py b/sphinx/pycode/__init__.py index 2d58ffd2..e4758835 100644 --- a/sphinx/pycode/__init__.py +++ b/sphinx/pycode/__init__.py @@ -18,6 +18,7 @@ from sphinx.errors import PycodeError from sphinx.pycode import nodes from sphinx.pycode.pgen2 import driver, token, tokenize, parse, literals from sphinx.util import get_module_source +from sphinx.util.pycompat import next from sphinx.util.docstrings import prepare_docstring, prepare_commentdoc @@ -98,7 +99,8 @@ class AttrDocVisitor(nodes.NodeVisitor): if not pnode or pnode.type not in (token.INDENT, token.DEDENT): break prefix = pnode.get_prefix() - prefix = prefix.decode(self.encoding) + if not isinstance(prefix, unicode): + prefix = prefix.decode(self.encoding) docstring = prepare_commentdoc(prefix) self.add_docstring(node, docstring) @@ -278,7 +280,7 @@ class ModuleAnalyzer(object): result[fullname] = (dtype, startline, endline) expect_indent = False if tok in ('def', 'class'): - name = tokeniter.next()[1] + name = next(tokeniter)[1] namespace.append(name) fullname = '.'.join(namespace) stack.append((tok, fullname, spos[0], indent)) diff --git a/sphinx/pycode/nodes.py b/sphinx/pycode/nodes.py index 14388f37..7adacc1d 100644 --- a/sphinx/pycode/nodes.py +++ b/sphinx/pycode/nodes.py @@ -29,6 +29,8 @@ class BaseNode(object): return NotImplemented return not self._eq(other) + __hash__ = None + def get_prev_sibling(self): """Return previous child in parent's children, or None.""" if self.parent is None: diff --git a/sphinx/pycode/pgen2/literals.py b/sphinx/pycode/pgen2/literals.py index 31900291..d4893702 100644 --- a/sphinx/pycode/pgen2/literals.py +++ b/sphinx/pycode/pgen2/literals.py @@ -66,7 +66,7 @@ uni_escape_re = re.compile(r"\\(\'|\"|\\|[abfnrtv]|x.{0,2}|[0-7]{1,3}|" def evalString(s, encoding=None): regex = escape_re repl = escape - if encoding: + if encoding and not isinstance(s, unicode): s = s.decode(encoding) if s.startswith('u') or s.startswith('U'): regex = uni_escape_re diff --git a/sphinx/pycode/pgen2/tokenize.py b/sphinx/pycode/pgen2/tokenize.py index 4489db89..7ad9f012 100644 --- a/sphinx/pycode/pgen2/tokenize.py +++ b/sphinx/pycode/pgen2/tokenize.py @@ -143,7 +143,9 @@ class TokenError(Exception): pass class StopTokenizing(Exception): pass -def printtoken(type, token, (srow, scol), (erow, ecol), line): # for testing +def printtoken(type, token, scell, ecell, line): # for testing + srow, scol = scell + erow, ecol = ecell print "%d,%d-%d,%d:\t%s\t%s" % \ (srow, scol, erow, ecol, tok_name[type], repr(token)) diff --git a/sphinx/pygments_styles.py b/sphinx/pygments_styles.py new file mode 100644 index 00000000..44740b31 --- /dev/null +++ b/sphinx/pygments_styles.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +""" + sphinx.pygments_styles + ~~~~~~~~~~~~~~~~~~~~~~ + + Sphinx theme specific highlighting styles. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from pygments.style import Style +from pygments.styles.friendly import FriendlyStyle +from pygments.token import Generic, Comment, Number, Whitespace, Keyword, \ + Operator, Name, String, Error + + +class NoneStyle(Style): + """Style without any styling.""" + + +class SphinxStyle(Style): + """ + Like friendly, but a bit darker to enhance contrast on the green + background. + """ + + background_color = '#eeffcc' + default_style = '' + + styles = FriendlyStyle.styles + styles.update({ + Generic.Output: '#333', + Comment: 'italic #408090', + Number: '#208050', + }) + + +class PyramidStyle(Style): + """ + Pylons/pyramid pygments style based on friendly style, by Blaise Laflamme. + """ + + # work in progress... + + background_color = "#f8f8f8" + default_style = "" + + styles = { + Whitespace: "#bbbbbb", + Comment: "italic #60a0b0", + Comment.Preproc: "noitalic #007020", + Comment.Special: "noitalic bg:#fff0f0", + + Keyword: "bold #007020", + Keyword.Pseudo: "nobold", + Keyword.Type: "nobold #902000", + + Operator: "#666666", + Operator.Word: "bold #007020", + + Name.Builtin: "#007020", + Name.Function: "#06287e", + Name.Class: "bold #0e84b5", + Name.Namespace: "bold #0e84b5", + Name.Exception: "#007020", + Name.Variable: "#bb60d5", + Name.Constant: "#60add5", + Name.Label: "bold #002070", + Name.Entity: "bold #d55537", + Name.Attribute: "#0e84b5", + Name.Tag: "bold #062873", + Name.Decorator: "bold #555555", + + String: "#4070a0", + String.Doc: "italic", + String.Interpol: "italic #70a0d0", + String.Escape: "bold #4070a0", + String.Regex: "#235388", + String.Symbol: "#517918", + String.Other: "#c65d09", + Number: "#40a070", + + Generic.Heading: "bold #000080", + Generic.Subheading: "bold #800080", + Generic.Deleted: "#A00000", + Generic.Inserted: "#00A000", + Generic.Error: "#FF0000", + Generic.Emph: "italic", + Generic.Strong: "bold", + Generic.Prompt: "bold #c65d09", + Generic.Output: "#888", + Generic.Traceback: "#04D", + + Error: "#a40000 bg:#fbe3e4" + } diff --git a/sphinx/quickstart.py b/sphinx/quickstart.py index c825e9be..4d7e2db3 100644 --- a/sphinx/quickstart.py +++ b/sphinx/quickstart.py @@ -9,8 +9,9 @@ :license: BSD, see LICENSE for details. """ -import sys, os, time +import sys, os, time, re from os import path +from codecs import open TERM_ENCODING = getattr(sys.stdin, 'encoding', None) @@ -20,10 +21,23 @@ from sphinx.util.console import purple, bold, red, turquoise, \ nocolor, color_terminal from sphinx.util import texescape +# function to get input from terminal -- overridden by the test suite +try: + # this raw_input is not converted by 2to3 + term_input = raw_input +except NameError: + term_input = input + PROMPT_PREFIX = '> ' -QUICKSTART_CONF = '''\ +if sys.version_info >= (3, 0): + # prevents that the file is checked for being written in Python 2.x syntax + QUICKSTART_CONF = '#!/usr/bin/env python3\n' +else: + QUICKSTART_CONF = '' + +QUICKSTART_CONF += '''\ # -*- coding: utf-8 -*- # # %(project)s documentation build configuration file, created by @@ -240,6 +254,22 @@ man_pages = [ ('%(master_str)s', '%(project_manpage)s', u'%(project_doc)s', [u'%(author_str)s'], 1) ] + +# If true, show URL addresses after external links. +#man_show_urls = False + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('%(master_str)s', '%(project_fn)s', u'%(project_doc)s', u'%(author_str)s', + '%(project_fn)s', 'One line description of project.', 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +texinfo_appendices = [] ''' EPUB_CONFIG = ''' @@ -266,6 +296,9 @@ epub_copyright = u'%(copyright_str)s' # A unique identification for the text. #epub_uid = '' +# A tuple containing the cover image and cover page html template filenames. +#epub_cover = () + # HTML files that should be inserted before the pages created by sphinx. # The format is a list of tuples containing the path and title. #epub_pre_files = [] @@ -330,7 +363,7 @@ ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) \ $(SPHINXOPTS) %(rsrcdir)s .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp \ -epub latex latexpdf text man changes linkcheck doctest +epub latex latexpdf text man changes linkcheck doctest gettext help: \t@echo "Please use \\`make <target>' where <target> is one of" @@ -347,6 +380,9 @@ help: \t@echo " latexpdf to make LaTeX files and run them through pdflatex" \t@echo " text to make text files" \t@echo " man to make manual pages" +\t@echo " texinfo to make Texinfo files" +\t@echo " info to make Texinfo files and run them through makeinfo" +\t@echo " gettext to make PO message catalogs" \t@echo " changes to make an overview of all changed/added/deprecated items" \t@echo " linkcheck to check all external links for integrity" \t@echo " doctest to run all doctests embedded in the documentation \ @@ -433,6 +469,24 @@ man: \t@echo \t@echo "Build finished. The manual pages are in $(BUILDDIR)/man." +texinfo: +\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo +\t@echo +\t@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." +\t@echo "Run \\`make' in that directory to run these through makeinfo" \\ +\t "(use \\`make info' here to do that automatically)." + +info: +\t$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo +\t@echo "Running Texinfo files through makeinfo..." +\tmake -C $(BUILDDIR)/texinfo info +\t@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: +\t$(SPHINXBUILD) -b gettext $(ALLSPHINXOPTS) $(BUILDDIR)/locale +\t@echo +\t@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + changes: \t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes \t@echo @@ -481,6 +535,8 @@ if "%%1" == "help" ( \techo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter \techo. text to make text files \techo. man to make manual pages +\techo. texinfo to make Texinfo files +\techo. gettext to make PO message catalogs \techo. changes to make an overview over all changed/added/deprecated items \techo. linkcheck to check all external links for integrity \techo. doctest to run all doctests embedded in the documentation if enabled @@ -594,6 +650,22 @@ if "%%1" == "man" ( \tgoto end ) +if "%%1" == "texinfo" ( +\t%%SPHINXBUILD%% -b texinfo %%ALLSPHINXOPTS%% %%BUILDDIR%%/texinfo +\tif errorlevel 1 exit /b 1 +\techo. +\techo.Build finished. The Texinfo files are in %%BUILDDIR%%/texinfo. +\tgoto end +) + +if "%%1" == "gettext" ( +\t%%SPHINXBUILD%% -b gettext %%ALLSPHINXOPTS%% %%BUILDDIR%%/locale +\tif errorlevel 1 exit /b 1 +\techo. +\techo.Build finished. The message catalogs are in %%BUILDDIR%%/locale. +\tgoto end +) + if "%%1" == "changes" ( \t%%SPHINXBUILD%% -b changes %%ALLSPHINXOPTS%% %%BUILDDIR%%/changes \tif errorlevel 1 exit /b 1 @@ -671,20 +743,22 @@ def do_prompt(d, key, text, default=None, validator=nonempty): prompt = purple(PROMPT_PREFIX + '%s [%s]: ' % (text, default)) else: prompt = purple(PROMPT_PREFIX + text + ': ') - x = raw_input(prompt) + x = term_input(prompt) if default and not x: x = default - if x.decode('ascii', 'replace').encode('ascii', 'replace') != x: - if TERM_ENCODING: - x = x.decode(TERM_ENCODING) - else: - print turquoise('* Note: non-ASCII characters entered ' - 'and terminal encoding unknown -- assuming ' - 'UTF-8 or Latin-1.') - try: - x = x.decode('utf-8') - except UnicodeDecodeError: - x = x.decode('latin1') + if not isinstance(x, unicode): + # for Python 2.x, try to get a Unicode string out of it + if x.decode('ascii', 'replace').encode('ascii', 'replace') != x: + if TERM_ENCODING: + x = x.decode(TERM_ENCODING) + else: + print turquoise('* Note: non-ASCII characters entered ' + 'and terminal encoding unknown -- assuming ' + 'UTF-8 or Latin-1.') + try: + x = x.decode('utf-8') + except UnicodeDecodeError: + x = x.decode('latin1') try: x = validator(x) except ValidationError, err: @@ -694,6 +768,18 @@ def do_prompt(d, key, text, default=None, validator=nonempty): d[key] = x +if sys.version_info >= (3, 0): + # remove Unicode literal prefixes + _unicode_string_re = re.compile(r"[uU]('.*?')") + def _convert_python_source(source): + return _unicode_string_re.sub('\\1', source) + + for f in ['QUICKSTART_CONF', 'EPUB_CONFIG', 'INTERSPHINX_CONFIG']: + globals()[f] = _convert_python_source(globals()[f]) + + del _unicode_string_re, _convert_python_source + + def inner_main(args): d = {} texescape.init() @@ -701,14 +787,24 @@ def inner_main(args): if not color_terminal(): nocolor() + if len(args) > 3: + print 'Usage: sphinx-quickstart [root]' + sys.exit(1) + elif len(args) == 2: + d['path'] = args[1] + print bold('Welcome to the Sphinx %s quickstart utility.') % __version__ print ''' Please enter values for the following settings (just press Enter to accept a default value, if one is given in brackets).''' - print ''' + if 'path' in d: + print bold(''' +Selected root path: %s''' % d['path']) + else: + print ''' Enter the root path for documentation.''' - do_prompt(d, 'path', 'Root path for the documentation', '.', is_path) + do_prompt(d, 'path', 'Root path for the documentation', '.', is_path) while path.isfile(path.join(d['path'], 'conf.py')) or \ path.isfile(path.join(d['path'], 'source', 'conf.py')): @@ -849,28 +945,28 @@ directly.''' if d['ext_intersphinx']: conf_text += INTERSPHINX_CONFIG - f = open(path.join(srcdir, 'conf.py'), 'w') - f.write(conf_text.encode('utf-8')) + f = open(path.join(srcdir, 'conf.py'), 'w', encoding='utf-8') + f.write(conf_text) f.close() masterfile = path.join(srcdir, d['master'] + d['suffix']) - f = open(masterfile, 'w') - f.write((MASTER_FILE % d).encode('utf-8')) + f = open(masterfile, 'w', encoding='utf-8') + f.write(MASTER_FILE % d) f.close() if d['makefile']: d['rsrcdir'] = d['sep'] and 'source' or '.' d['rbuilddir'] = d['sep'] and 'build' or d['dot'] + 'build' # use binary mode, to avoid writing \r\n on Windows - f = open(path.join(d['path'], 'Makefile'), 'wb') - f.write((MAKEFILE % d).encode('utf-8')) + f = open(path.join(d['path'], 'Makefile'), 'wb', encoding='utf-8') + f.write(MAKEFILE % d) f.close() if d['batchfile']: d['rsrcdir'] = d['sep'] and 'source' or '.' d['rbuilddir'] = d['sep'] and 'build' or d['dot'] + 'build' - f = open(path.join(d['path'], 'make.bat'), 'w') - f.write((BATCHFILE % d).encode('utf-8')) + f = open(path.join(d['path'], 'make.bat'), 'w', encoding='utf-8') + f.write(BATCHFILE % d) f.close() print diff --git a/sphinx/roles.py b/sphinx/roles.py index fd3da416..1d791f6d 100644 --- a/sphinx/roles.py +++ b/sphinx/roles.py @@ -18,7 +18,7 @@ from docutils.parsers.rst import roles from sphinx import addnodes from sphinx.locale import _ from sphinx.util import ws_re -from sphinx.util.nodes import split_explicit_title +from sphinx.util.nodes import split_explicit_title, process_index_entry generic_docroles = { @@ -139,16 +139,15 @@ class XRefRole(object): # methods that can be overwritten def process_link(self, env, refnode, has_explicit_title, title, target): - """ - Called after parsing title and target text, and creating the reference - node (given in *refnode*). This method can alter the reference node and - must return a new (or the same) ``(title, target)`` tuple. + """Called after parsing title and target text, and creating the + reference node (given in *refnode*). This method can alter the + reference node and must return a new (or the same) ``(title, target)`` + tuple. """ return title, ws_re.sub(' ', target) def result_nodes(self, document, env, node, is_ref): - """ - Called before returning the finished nodes. *node* is the reference + """Called before returning the finished nodes. *node* is the reference node if one was created (*is_ref* is then true), else the content node. This method can add other nodes and must return a ``(nodes, messages)`` tuple (the usual return value of a role function). @@ -171,8 +170,8 @@ def indexmarkup_role(typ, rawtext, etext, lineno, inliner, inliner.document.note_explicit_target(targetnode) if typ == 'pep': indexnode['entries'] = [ - ('single', _('Python Enhancement Proposals!PEP %s') % text, - targetid, 'PEP %s' % text)] + ('single', _('Python Enhancement Proposals; PEP %s') % text, + targetid, '')] anchor = '' anchorindex = text.find('#') if anchorindex > 0: @@ -191,8 +190,7 @@ def indexmarkup_role(typ, rawtext, etext, lineno, inliner, rn += sn return [indexnode, targetnode, rn], [] elif typ == 'rfc': - indexnode['entries'] = [('single', 'RFC; RFC %s' % text, - targetid, 'RFC %s' % text)] + indexnode['entries'] = [('single', 'RFC; RFC %s' % text, targetid, '')] anchor = '' anchorindex = text.find('#') if anchorindex > 0: @@ -269,6 +267,33 @@ def abbr_role(typ, rawtext, text, lineno, inliner, options={}, content=[]): return [addnodes.abbreviation(abbr, abbr, explanation=expl)], [] +def index_role(typ, rawtext, text, lineno, inliner, options={}, content=[]): + # create new reference target + env = inliner.document.settings.env + targetid = 'index-%s' % env.new_serialno('index') + targetnode = nodes.target('', '', ids=[targetid]) + # split text and target in role content + has_explicit_title, title, target = split_explicit_title(text) + title = utils.unescape(title) + target = utils.unescape(target) + # if an explicit target is given, we can process it as a full entry + if has_explicit_title: + entries = process_index_entry(target, targetid) + # otherwise we just create a "single" entry + else: + # but allow giving main entry + main = '' + if target.startswith('!'): + target = target[1:] + title = title[1:] + main = 'main' + entries = [('single', target, targetid, main)] + indexnode = addnodes.index() + indexnode['entries'] = entries + textnode = nodes.Text(title, title) + return [indexnode, targetnode, textnode], [] + + specific_docroles = { # links to download references 'download': XRefRole(nodeclass=addnodes.download_reference), @@ -282,6 +307,7 @@ specific_docroles = { 'file': emph_literal_role, 'samp': emph_literal_role, 'abbr': abbr_role, + 'index': index_role, } for rolename, func in specific_docroles.iteritems(): diff --git a/sphinx/search.py b/sphinx/search/__init__.py index 51f997c2..645ebfc8 100644 --- a/sphinx/search.py +++ b/sphinx/search/__init__.py @@ -3,7 +3,7 @@ sphinx.search ~~~~~~~~~~~~~ - Create a search index for offline search. + Create a full-text search index for offline search. :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. @@ -14,28 +14,90 @@ import cPickle as pickle from docutils.nodes import comment, Text, NodeVisitor, SkipNode from sphinx.util import jsdump, rpartition -try: - # http://bitbucket.org/methane/porterstemmer/ - from porterstemmer import Stemmer as CStemmer - CSTEMMER = True -except ImportError: - from sphinx.util.stemmer import PorterStemmer - CSTEMMER = False - - -word_re = re.compile(r'\w+(?u)') - -stopwords = set(""" -a and are as at -be but by -for -if in into is it -near no not -of on or -such -that the their then there these they this to -was will with -""".split()) + + +class SearchLanguage(object): + """ + This class is the base class for search natural language preprocessors. If + you want to add support for a new language, you should override the methods + of this class. + + You should override `lang` class property too (e.g. 'en', 'fr' and so on). + + .. attribute:: stopwords + + This is a set of stop words of the target language. Default `stopwords` + is empty. This word is used for building index and embedded in JS. + + .. attribute:: js_stemmer_code + + Return stemmer class of JavaScript version. This class' name should be + ``Stemmer`` and this class must have ``stemWord`` method. This string is + embedded as-is in searchtools.js. + + This class is used to preprocess search word which Sphinx HTML readers + type, before searching index. Default implementation does nothing. + """ + lang = None + stopwords = set() + js_stemmer_code = """ +/** + * Dummy stemmer for languages without stemming rules. + */ +var Stemmer = function() { + this.stemWord = function(w) { + return w; + } +} +""" + + _word_re = re.compile(r'\w+(?u)') + + def __init__(self, options): + self.options = options + self.init(options) + + def init(self, options): + """ + Initialize the class with the options the user has given. + """ + + def split(self, input): + """ + This method splits a sentence into words. Default splitter splits input + at white spaces, which should be enough for most languages except CJK + languages. + """ + return self._word_re.findall(input) + + def stem(self, word): + """ + This method implements stemming algorithm of the Python version. + + Default implementation does nothing. You should implement this if the + language has any stemming rules. + + This class is used to preprocess search words before registering them in + the search index. The stemming of the Python version and the JS version + (given in the js_stemmer_code attribute) must be compatible. + """ + return word + + def word_filter(self, word): + """ + Return true if the target word should be registered in the search index. + This method is called after stemming. + """ + return not (((len(word) < 3) and (12353 < ord(word[0]) < 12436)) or + (ord(word[0]) < 256 and (len(word) < 3 or word in self.stopwords or + word.isdigit()))) + +from sphinx.search import en, ja + +languages = { + 'en': en.SearchEnglish, + 'ja': ja.SearchJapanese, +} class _JavaScriptIndex(object): @@ -67,39 +129,21 @@ class _JavaScriptIndex(object): js_index = _JavaScriptIndex() -if CSTEMMER: - class Stemmer(CStemmer): - - def stem(self, word): - return self(word.lower()) - -else: - class Stemmer(PorterStemmer): - """ - All those porter stemmer implementations look hideous. - make at least the stem method nicer. - """ - - def stem(self, word): - word = word.lower() - return PorterStemmer.stem(self, word, 0, len(word) - 1) - - - class WordCollector(NodeVisitor): """ A special visitor that collects words for the `IndexBuilder`. """ - def __init__(self, document): + def __init__(self, document, lang): NodeVisitor.__init__(self, document) self.found_words = [] + self.lang = lang def dispatch_visit(self, node): if node.__class__ is comment: raise SkipNode if node.__class__ is Text: - self.found_words.extend(word_re.findall(node.astext())) + self.found_words.extend(self.lang.split(node.astext())) class IndexBuilder(object): @@ -112,9 +156,8 @@ class IndexBuilder(object): 'pickle': pickle } - def __init__(self, env): + def __init__(self, env, lang, options): self.env = env - self._stemmer = Stemmer() # filename -> title self._titles = {} # stemmed word -> set(filenames) @@ -123,6 +166,8 @@ class IndexBuilder(object): self._objtypes = {} # objtype index -> objname (localized) self._objnames = {} + # add language-specific SearchLanguage instance + self.lang = languages[lang](options) def load(self, stream, format): """Reconstruct from frozen data.""" @@ -215,17 +260,22 @@ class IndexBuilder(object): """Feed a doctree to the index.""" self._titles[filename] = title - visitor = WordCollector(doctree) + visitor = WordCollector(doctree, self.lang) doctree.walk(visitor) - def add_term(word, stem=self._stemmer.stem): + def add_term(word, stem=self.lang.stem): word = stem(word) - if len(word) < 3 or word in stopwords or word.isdigit(): - return - self._mapping.setdefault(word, set()).add(filename) + if self.lang.word_filter(word): + self._mapping.setdefault(word, set()).add(filename) - for word in word_re.findall(title): + for word in self.lang.split(title): add_term(word) for word in visitor.found_words: add_term(word) + + def context_for_searchtool(self): + return dict( + search_language_stemming_code = self.lang.js_stemmer_code, + search_language_stop_words = jsdump.dumps(self.lang.stopwords), + ) diff --git a/sphinx/search/en.py b/sphinx/search/en.py new file mode 100644 index 00000000..16e93e89 --- /dev/null +++ b/sphinx/search/en.py @@ -0,0 +1,242 @@ +# -*- coding: utf-8 -*- +""" + sphinx.search_languages.en + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + + English search language: includes the JS porter stemmer. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from sphinx.search import SearchLanguage + +try: + # http://bitbucket.org/methane/porterstemmer/ + from porterstemmer import Stemmer as CStemmer + CSTEMMER = True +except ImportError: + from sphinx.util.stemmer import PorterStemmer + CSTEMMER = False + + +english_stopwords = set(""" +a and are as at +be but by +for +if in into is it +near no not +of on or +such +that the their then there these they this to +was will with +""".split()) + +js_porter_stemmer = """ +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} +""" + + +class SearchEnglish(SearchLanguage): + lang = 'en' + js_stemmer_code = js_porter_stemmer + stopwords = english_stopwords + + def init(self, options): + if CSTEMMER: + class Stemmer(CStemmer): + def stem(self, word): + return self(word.lower()) + else: + class Stemmer(PorterStemmer): + """All those porter stemmer implementations look hideous; + make at least the stem method nicer. + """ + def stem(self, word): + word = word.lower() + return PorterStemmer.stem(self, word, 0, len(word) - 1) + + self.stemmer = Stemmer() + + def stem(self, word): + return self.stemmer.stem(word) diff --git a/sphinx/search/ja.py b/sphinx/search/ja.py new file mode 100644 index 00000000..18d21bf0 --- /dev/null +++ b/sphinx/search/ja.py @@ -0,0 +1,273 @@ +# -*- coding: utf-8 -*- +""" + sphinx.search_languages.ja + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Japanese search language: includes routine to split words. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +# Python Version of TinySegmenter +# (http://chasen.org/~taku/software/TinySegmenter/) +# TinySegmenter is super compact Japanese tokenizer. +# +# TinySegmenter was originally developed by Taku Kudo <taku(at)chasen.org>. +# Python Version was developed by xnights <programming.magic(at)gmail.com>. +# For details, see http://programming-magic.com/?id=170 + +import os +import re +import sys + +try: + import MeCab + native_module = True +except ImportError: + native_module = False + +from sphinx.search import SearchLanguage + + +class MecabBinder(object): + def __init__(self, options): + self.ctypes_libmecab = None + self.ctypes_mecab = None + if not native_module: + self.init_ctypes(options) + else: + self.init_native(options) + self.dict_encode = options.get('dic_enc', 'utf-8') + + def split(self, input): + input2 = input.encode(self.dict_encode) + if native_module: + result = self.native.parse(input2) + else: + result = self.ctypes_libmecab.mecab_sparse_tostr( + self.ctypes_mecab, input) + return result.decode(self.dict_encode).split(' ') + + def init_native(self, options): + param = '-Owakati' + dict = options.get('dict') + if dict: + param += ' -d %s' % dict + self.native = MeCab.Tagger(param) + + def init_ctypes(self, options): + import ctypes.util + + lib = options.get('lib') + + if lib is None: + if sys.platform.startswith('win'): + libname = 'libmecab.dll' + else: + libname = 'mecab' + libpath = ctypes.util.find_library(libname) + elif os.path.basename(lib) == lib: + libpath = ctypes.util.find_library(lib) + else: + libpath = None + if os.path.exists(lib): + libpath = lib + if libpath is None: + raise RuntimeError('MeCab dynamic library is not available') + + param = 'mecab -Owakati' + dict = options.get('dict') + if dict: + param += ' -d %s' % dict + + self.ctypes_libmecab = ctypes.CDLL(libpath) + self.ctypes_libmecab.mecab_sparse_tostr.restype = ctypes.c_char_p + self.ctypes_mecab = self.libmecab.mecab_new2(param) + + def __del__(self): + if self.ctypes_libmecab: + self.ctypes_libmecab.mecab_destroy(self.ctypes_mecab) + + +class TinySegmenter(object): + patterns_ = dict([(re.compile(pattern), value) for pattern, value in { + u'[一二三四五å…七八ä¹å百åƒä¸‡å„„å…†]': u'M', + u'[一-é¾ ã€…ã€†ãƒµãƒ¶]': u'H', + u'[ã-ã‚“]': u'I', + u'[ã‚¡-ヴーア-ï¾ï¾žï½°]': u'K', + u'[a-zA-Zï½-zA-Z]': u'A', + u'[0-9ï¼-ï¼™]': u'N', + }.iteritems()]) + BIAS__ = -332 + BC1__ = {u'HH':6,u'II':2461,u'KH':406,u'OH':-1378} + BC2__ = {u'AA':-3267,u'AI':2744,u'AN':-878,u'HH':-4070,u'HM':-1711,u'HN':4012,u'HO':3761,u'IA':1327,u'IH':-1184,u'II':-1332,u'IK':1721,u'IO':5492,u'KI':3831,u'KK':-8741,u'MH':-3132,u'MK':3334,u'OO':-2920} + BC3__ = {u'HH':996,u'HI':626,u'HK':-721,u'HN':-1307,u'HO':-836,u'IH':-301,u'KK':2762,u'MK':1079,u'MM':4034,u'OA':-1652,u'OH':266} + BP1__ = {u'BB':295,u'OB':304,u'OO':-125,u'UB':352} + BP2__ = {u'BO':60,u'OO':-1762} + BQ1__ = {u'BHH':1150,u'BHM':1521,u'BII':-1158,u'BIM':886,u'BMH':1208,u'BNH':449,u'BOH':-91,u'BOO':-2597,u'OHI':451,u'OIH':-296,u'OKA':1851,u'OKH':-1020,u'OKK':904,u'OOO':2965} + BQ2__ = {u'BHH':118,u'BHI':-1159,u'BHM':466,u'BIH':-919,u'BKK':-1720,u'BKO':864,u'OHH':-1139,u'OHM':-181,u'OIH':153,u'UHI':-1146} + BQ3__ = {u'BHH':-792,u'BHI':2664,u'BII':-299,u'BKI':419,u'BMH':937,u'BMM':8335,u'BNN':998,u'BOH':775,u'OHH':2174,u'OHM':439,u'OII':280,u'OKH':1798,u'OKI':-793,u'OKO':-2242,u'OMH':-2402,u'OOO':11699} + BQ4__ = {u'BHH':-3895,u'BIH':3761,u'BII':-4654,u'BIK':1348,u'BKK':-1806,u'BMI':-3385,u'BOO':-12396,u'OAH':926,u'OHH':266,u'OHK':-2036,u'ONN':-973} + BW1__ = {u',ã¨':660,u',åŒ':727,u'B1ã‚':1404,u'B1åŒ':542,u'ã€ã¨':660,u'ã€åŒ':727,u'ã€ã¨':1682,u'ã‚ã£':1505,u'ã„ã†':1743,u'ã„ã£':-2055,u'ã„ã‚‹':672,u'ã†ã—':-4817,u'ã†ã‚“':665,u'ã‹ã‚‰':3472,u'ãŒã‚‰':600,u'ã“ã†':-790,u'ã“ã¨':2083,u'ã“ã‚“':-1262,u'ã•ら':-4143,u'ã•ã‚“':4573,u'ã—ãŸ':2641,u'ã—ã¦':1104,u'ã™ã§':-3399,u'ãã“':1977,u'ãれ':-871,u'ãŸã¡':1122,u'ãŸã‚':601,u'ã£ãŸ':3463,u'ã¤ã„':-802,u'ã¦ã„':805,u'ã¦ã':1249,u'ã§ã':1127,u'ã§ã™':3445,u'ã§ã¯':844,u'ã¨ã„':-4915,u'ã¨ã¿':1922,u'ã©ã“':3887,u'ãªã„':5713,u'ãªã£':3015,u'ãªã©':7379,u'ãªã‚“':-1113,u'ã«ã—':2468,u'ã«ã¯':1498,u'ã«ã‚‚':1671,u'ã«å¯¾':-912,u'ã®ä¸€':-501,u'ã®ä¸':741,u'ã¾ã›':2448,u'ã¾ã§':1711,u'ã¾ã¾':2600,u'ã¾ã‚‹':-2155,u'ã‚„ã‚€':-1947,u'よã£':-2565,u'れãŸ':2369,u'れã§':-913,u'ã‚’ã—':1860,u'を見':731,u'亡ã':-1886,u'京都':2558,u'å–り':-2784,u'大ã':-2604,u'大阪':1497,u'平方':-2314,u'引ã':-1336,u'日本':-195,u'本当':-2423,u'毎日':-2113,u'目指':-724,u'B1ã‚':1404,u'B1åŒ':542,u'ï½£ã¨':1682} + BW2__ = {u'..':-11822,u'11':-669,u'――':-5730,u'−−':-13175,u'ã„ã†':-1609,u'ã†ã‹':2490,u'ã‹ã—':-1350,u'ã‹ã‚‚':-602,u'ã‹ã‚‰':-7194,u'ã‹ã‚Œ':4612,u'ãŒã„':853,u'ãŒã‚‰':-3198,u'ããŸ':1941,u'ããª':-1597,u'ã“ã¨':-8392,u'ã“ã®':-4193,u'ã•ã›':4533,u'ã•れ':13168,u'ã•ã‚“':-3977,u'ã—ã„':-1819,u'ã—ã‹':-545,u'ã—ãŸ':5078,u'ã—ã¦':972,u'ã—ãª':939,u'ãã®':-3744,u'ãŸã„':-1253,u'ãŸãŸ':-662,u'ãŸã ':-3857,u'ãŸã¡':-786,u'ãŸã¨':1224,u'ãŸã¯':-939,u'ã£ãŸ':4589,u'ã£ã¦':1647,u'ã£ã¨':-2094,u'ã¦ã„':6144,u'ã¦ã':3640,u'ã¦ã':2551,u'ã¦ã¯':-3110,u'ã¦ã‚‚':-3065,u'ã§ã„':2666,u'ã§ã':-1528,u'ã§ã—':-3828,u'ã§ã™':-4761,u'ã§ã‚‚':-4203,u'ã¨ã„':1890,u'ã¨ã“':-1746,u'ã¨ã¨':-2279,u'ã¨ã®':720,u'ã¨ã¿':5168,u'ã¨ã‚‚':-3941,u'ãªã„':-2488,u'ãªãŒ':-1313,u'ãªã©':-6509,u'ãªã®':2614,u'ãªã‚“':3099,u'ã«ãŠ':-1615,u'ã«ã—':2748,u'ã«ãª':2454,u'ã«ã‚ˆ':-7236,u'ã«å¯¾':-14943,u'ã«å¾“':-4688,u'ã«é–¢':-11388,u'ã®ã‹':2093,u'ã®ã§':-7059,u'ã®ã«':-6041,u'ã®ã®':-6125,u'ã¯ã„':1073,u'ã¯ãŒ':-1033,u'ã¯ãš':-2532,u'ã°ã‚Œ':1813,u'ã¾ã—':-1316,u'ã¾ã§':-6621,u'ã¾ã‚Œ':5409,u'ã‚ã¦':-3153,u'ã‚‚ã„':2230,u'ã‚‚ã®':-10713,u'らã‹':-944,u'らã—':-1611,u'らã«':-1897,u'りã—':651,u'りã¾':1620,u'れãŸ':4270,u'れã¦':849,u'れã°':4114,u'ã‚ã†':6067,u'ã‚れ':7901,u'を通':-11877,u'ã‚“ã ':728,u'ã‚“ãª':-4115,u'一人':602,u'一方':-1375,u'一日':970,u'一部':-1051,u'上ãŒ':-4479,u'会社':-1116,u'出ã¦':2163,u'分ã®':-7758,u'åŒå…š':970,u'åŒæ—¥':-913,u'大阪':-2471,u'委員':-1250,u'å°‘ãª':-1050,u'年度':-8669,u'å¹´é–“':-1626,u'府県':-2363,u'手権':-1982,u'æ–°èž':-4066,u'日新':-722,u'日本':-7068,u'日米':3372,u'曜日':-601,u'æœé®®':-2355,u'本人':-2697,u'æ±äº¬':-1543,u'ç„¶ã¨':-1384,u'社会':-1276,u'ç«‹ã¦':-990,u'第ã«':-1612,u'米国':-4268,u'11':-669} + BW3__ = {u'ã‚ãŸ':-2194,u'ã‚り':719,u'ã‚ã‚‹':3846,u'ã„.':-1185,u'ã„。':-1185,u'ã„ã„':5308,u'ã„ãˆ':2079,u'ã„ã':3029,u'ã„ãŸ':2056,u'ã„ã£':1883,u'ã„ã‚‹':5600,u'ã„ã‚':1527,u'ã†ã¡':1117,u'ã†ã¨':4798,u'ãˆã¨':1454,u'ã‹.':2857,u'ã‹ã€‚':2857,u'ã‹ã‘':-743,u'ã‹ã£':-4098,u'ã‹ã«':-669,u'ã‹ã‚‰':6520,u'ã‹ã‚Š':-2670,u'ãŒ,':1816,u'ãŒã€':1816,u'ãŒã':-4855,u'ãŒã‘':-1127,u'ãŒã£':-913,u'ãŒã‚‰':-4977,u'ãŒã‚Š':-2064,u'ããŸ':1645,u'ã‘ã©':1374,u'ã“ã¨':7397,u'ã“ã®':1542,u'ã“ã‚':-2757,u'ã•ã„':-714,u'ã•ã‚’':976,u'ã—,':1557,u'ã—ã€':1557,u'ã—ã„':-3714,u'ã—ãŸ':3562,u'ã—ã¦':1449,u'ã—ãª':2608,u'ã—ã¾':1200,u'ã™.':-1310,u'ã™ã€‚':-1310,u'ã™ã‚‹':6521,u'ãš,':3426,u'ãšã€':3426,u'ãšã«':841,u'ãã†':428,u'ãŸ.':8875,u'ãŸã€‚':8875,u'ãŸã„':-594,u'ãŸã®':812,u'ãŸã‚Š':-1183,u'ãŸã‚‹':-853,u'ã .':4098,u'ã 。':4098,u'ã ã£':1004,u'ã£ãŸ':-4748,u'ã£ã¦':300,u'ã¦ã„':6240,u'ã¦ãŠ':855,u'ã¦ã‚‚':302,u'ã§ã™':1437,u'ã§ã«':-1482,u'ã§ã¯':2295,u'ã¨ã†':-1387,u'ã¨ã—':2266,u'ã¨ã®':541,u'ã¨ã‚‚':-3543,u'ã©ã†':4664,u'ãªã„':1796,u'ãªã':-903,u'ãªã©':2135,u'ã«,':-1021,u'ã«ã€':-1021,u'ã«ã—':1771,u'ã«ãª':1906,u'ã«ã¯':2644,u'ã®,':-724,u'ã®ã€':-724,u'ã®å':-1000,u'ã¯,':1337,u'ã¯ã€':1337,u'ã¹ã':2181,u'ã¾ã—':1113,u'ã¾ã™':6943,u'ã¾ã£':-1549,u'ã¾ã§':6154,u'ã¾ã‚Œ':-793,u'らã—':1479,u'られ':6820,u'ã‚‹ã‚‹':3818,u'れ,':854,u'れã€':854,u'れãŸ':1850,u'れã¦':1375,u'れã°':-3246,u'れる':1091,u'ã‚れ':-605,u'ã‚“ã ':606,u'ã‚“ã§':798,u'カ月':990,u'会è°':860,u'入り':1232,u'大会':2217,u'å§‹ã‚':1681,u'市':965,u'æ–°èž':-5055,u'æ—¥,':974,u'æ—¥ã€':974,u'社会':2024,u'カ月':990} + TC1__ = {u'AAA':1093,u'HHH':1029,u'HHM':580,u'HII':998,u'HOH':-390,u'HOM':-331,u'IHI':1169,u'IOH':-142,u'IOI':-1015,u'IOM':467,u'MMH':187,u'OOI':-1832} + TC2__ = {u'HHO':2088,u'HII':-1023,u'HMM':-1154,u'IHI':-1965,u'KKH':703,u'OII':-2649} + TC3__ = {u'AAA':-294,u'HHH':346,u'HHI':-341,u'HII':-1088,u'HIK':731,u'HOH':-1486,u'IHH':128,u'IHI':-3041,u'IHO':-1935,u'IIH':-825,u'IIM':-1035,u'IOI':-542,u'KHH':-1216,u'KKA':491,u'KKH':-1217,u'KOK':-1009,u'MHH':-2694,u'MHM':-457,u'MHO':123,u'MMH':-471,u'NNH':-1689,u'NNO':662,u'OHO':-3393} + TC4__ = {u'HHH':-203,u'HHI':1344,u'HHK':365,u'HHM':-122,u'HHN':182,u'HHO':669,u'HIH':804,u'HII':679,u'HOH':446,u'IHH':695,u'IHO':-2324,u'IIH':321,u'III':1497,u'IIO':656,u'IOO':54,u'KAK':4845,u'KKA':3386,u'KKK':3065,u'MHH':-405,u'MHI':201,u'MMH':-241,u'MMM':661,u'MOM':841} + TQ1__ = {u'BHHH':-227,u'BHHI':316,u'BHIH':-132,u'BIHH':60,u'BIII':1595,u'BNHH':-744,u'BOHH':225,u'BOOO':-908,u'OAKK':482,u'OHHH':281,u'OHIH':249,u'OIHI':200,u'OIIH':-68} + TQ2__ = {u'BIHH':-1401,u'BIII':-1033,u'BKAK':-543,u'BOOO':-5591} + TQ3__ = {u'BHHH':478,u'BHHM':-1073,u'BHIH':222,u'BHII':-504,u'BIIH':-116,u'BIII':-105,u'BMHI':-863,u'BMHM':-464,u'BOMH':620,u'OHHH':346,u'OHHI':1729,u'OHII':997,u'OHMH':481,u'OIHH':623,u'OIIH':1344,u'OKAK':2792,u'OKHH':587,u'OKKA':679,u'OOHH':110,u'OOII':-685} + TQ4__ = {u'BHHH':-721,u'BHHM':-3604,u'BHII':-966,u'BIIH':-607,u'BIII':-2181,u'OAAA':-2763,u'OAKK':180,u'OHHH':-294,u'OHHI':2446,u'OHHO':480,u'OHIH':-1573,u'OIHH':1935,u'OIHI':-493,u'OIIH':626,u'OIII':-4007,u'OKAK':-8156} + TW1__ = {u'ã«ã¤ã„':-4681,u'æ±äº¬éƒ½':2026} + TW2__ = {u'ã‚る程':-2049,u'ã„ã£ãŸ':-1256,u'ã“ã‚ãŒ':-2434,u'ã—ょã†':3873,u'ãã®å¾Œ':-4430,u'ã ã£ã¦':-1049,u'ã¦ã„ãŸ':1833,u'ã¨ã—ã¦':-4657,u'ã¨ã‚‚ã«':-4517,u'ã‚‚ã®ã§':1882,u'一気ã«':-792,u'åˆã‚ã¦':-1512,u'åŒæ™‚ã«':-8097,u'大ããª':-1255,u'対ã—ã¦':-2721,u'社会党':-3216} + TW3__ = {u'ã„ãŸã ':-1734,u'ã—ã¦ã„':1314,u'ã¨ã—ã¦':-4314,u'ã«ã¤ã„':-5483,u'ã«ã¨ã£':-5989,u'ã«å½“ãŸ':-6247,u'ã®ã§,':-727,u'ã®ã§ã€':-727,u'ã®ã‚‚ã®':-600,u'れã‹ã‚‰':-3752,u'å二月':-2287} + TW4__ = {u'ã„ã†.':8576,u'ã„ã†ã€‚':8576,u'ã‹ã‚‰ãª':-2348,u'ã—ã¦ã„':2958,u'ãŸãŒ,':1516,u'ãŸãŒã€':1516,u'ã¦ã„ã‚‹':1538,u'ã¨ã„ã†':1349,u'ã¾ã—ãŸ':5543,u'ã¾ã›ã‚“':1097,u'よã†ã¨':-4258,u'よるã¨':5865} + UC1__ = {u'A':484,u'K':93,u'M':645,u'O':-505} + UC2__ = {u'A':819,u'H':1059,u'I':409,u'M':3987,u'N':5775,u'O':646} + UC3__ = {u'A':-1370,u'I':2311} + UC4__ = {u'A':-2643,u'H':1809,u'I':-1032,u'K':-3450,u'M':3565,u'N':3876,u'O':6646} + UC5__ = {u'H':313,u'I':-1238,u'K':-799,u'M':539,u'O':-831} + UC6__ = {u'H':-506,u'I':-253,u'K':87,u'M':247,u'O':-387} + UP1__ = {u'O':-214} + UP2__ = {u'B':69,u'O':935} + UP3__ = {u'B':189} + UQ1__ = {u'BH':21,u'BI':-12,u'BK':-99,u'BN':142,u'BO':-56,u'OH':-95,u'OI':477,u'OK':410,u'OO':-2422} + UQ2__ = {u'BH':216,u'BI':113,u'OK':1759} + UQ3__ = {u'BA':-479,u'BH':42,u'BI':1913,u'BK':-7198,u'BM':3160,u'BN':6427,u'BO':14761,u'OI':-827,u'ON':-3212} + UW1__ = {u',':156,u'ã€':156,u'「':-463,u'ã‚':-941,u'ã†':-127,u'ãŒ':-553,u'ã':121,u'ã“':505,u'ã§':-201,u'ã¨':-547,u'ã©':-123,u'ã«':-789,u'ã®':-185,u'ã¯':-847,u'ã‚‚':-466,u'ã‚„':-470,u'よ':182,u'ら':-292,u'り':208,u'れ':169,u'ã‚’':-446,u'ã‚“':-137,u'・':-135,u'主':-402,u'京':-268,u'区':-912,u'åˆ':871,u'国':-460,u'大':561,u'å§”':729,u'市':-411,u'æ—¥':-141,u'ç†':361,u'生':-408,u'県':-386,u'都':-718,u'ï½¢':-463,u'ï½¥':-135} + UW2__ = {u',':-829,u'ã€':-829,u'〇':892,u'「':-645,u'ã€':3145,u'ã‚':-538,u'ã„':505,u'ã†':134,u'ãŠ':-502,u'ã‹':1454,u'ãŒ':-856,u'ã':-412,u'ã“':1141,u'ã•':878,u'ã–':540,u'ã—':1529,u'ã™':-675,u'ã›':300,u'ã':-1011,u'ãŸ':188,u'ã ':1837,u'ã¤':-949,u'ã¦':-291,u'ã§':-268,u'ã¨':-981,u'ã©':1273,u'ãª':1063,u'ã«':-1764,u'ã®':130,u'ã¯':-409,u'ã²':-1273,u'ã¹':1261,u'ã¾':600,u'ã‚‚':-1263,u'ã‚„':-402,u'よ':1639,u'り':-579,u'ã‚‹':-694,u'れ':571,u'ã‚’':-2516,u'ã‚“':2095,u'ã‚¢':-587,u'ã‚«':306,u'ã‚':568,u'ッ':831,u'三':-758,u'ä¸':-2150,u'世':-302,u'ä¸':-968,u'主':-861,u'事':492,u'人':-123,u'会':978,u'ä¿':362,u'å…¥':548,u'åˆ':-3025,u'副':-1566,u'北':-3414,u'区':-422,u'大':-1769,u'天':-865,u'太':-483,u'å':-1519,u'å¦':760,u'実':1023,u'å°':-2009,u'市':-813,u'å¹´':-1060,u'å¼·':1067,u'手':-1519,u'æº':-1033,u'政':1522,u'æ–‡':-1355,u'æ–°':-1682,u'æ—¥':-1815,u'明':-1462,u'最':-630,u'æœ':-1843,u'本':-1650,u'æ±':-931,u'æžœ':-665,u'次':-2378,u'æ°‘':-180,u'æ°—':-1740,u'ç†':752,u'発':529,u'ç›®':-1584,u'相':-242,u'県':-1165,u'ç«‹':-763,u'第':810,u'ç±³':509,u'自':-1353,u'行':838,u'西':-744,u'見':-3874,u'調':1010,u'è°':1198,u'è¾¼':3041,u'é–‹':1758,u'é–“':-1257,u'ï½¢':-645,u'ï½£':3145,u'ッ':831,u'ï½±':-587,u'ï½¶':306,u'ï½·':568} + UW3__ = {u',':4889,u'1':-800,u'−':-1723,u'ã€':4889,u'々':-2311,u'〇':5827,u'ã€':2670,u'〓':-3573,u'ã‚':-2696,u'ã„':1006,u'ã†':2342,u'ãˆ':1983,u'ãŠ':-4864,u'ã‹':-1163,u'ãŒ':3271,u'ã':1004,u'ã‘':388,u'ã’':401,u'ã“':-3552,u'ã”':-3116,u'ã•':-1058,u'ã—':-395,u'ã™':584,u'ã›':3685,u'ã':-5228,u'ãŸ':842,u'ã¡':-521,u'ã£':-1444,u'ã¤':-1081,u'ã¦':6167,u'ã§':2318,u'ã¨':1691,u'ã©':-899,u'ãª':-2788,u'ã«':2745,u'ã®':4056,u'ã¯':4555,u'ã²':-2171,u'ãµ':-1798,u'ã¸':1199,u'ã»':-5516,u'ã¾':-4384,u'ã¿':-120,u'ã‚':1205,u'ã‚‚':2323,u'ã‚„':-788,u'よ':-202,u'ら':727,u'り':649,u'ã‚‹':5905,u'れ':2773,u'ã‚':-1207,u'ã‚’':6620,u'ã‚“':-518,u'ã‚¢':551,u'ã‚°':1319,u'ス':874,u'ッ':-1350,u'ト':521,u'ム':1109,u'ル':1591,u'ãƒ':2201,u'ン':278,u'・':-3794,u'一':-1619,u'下':-1759,u'世':-2087,u'両':3815,u'ä¸':653,u'主':-758,u'予':-1193,u'二':974,u'人':2742,u'今':792,u'ä»–':1889,u'以':-1368,u'低':811,u'何':4265,u'作':-361,u'ä¿':-2439,u'å…ƒ':4858,u'å…š':3593,u'å…¨':1574,u'å…¬':-3030,u'å…':755,u'å…±':-1880,u'円':5807,u'å†':3095,u'分':457,u'åˆ':2475,u'別':1129,u'å‰':2286,u'副':4437,u'力':365,u'å‹•':-949,u'å‹™':-1872,u'化':1327,u'北':-1038,u'区':4646,u'åƒ':-2309,u'åˆ':-783,u'å”':-1006,u'å£':483,u'å³':1233,u'å„':3588,u'åˆ':-241,u'åŒ':3906,u'å’Œ':-837,u'å“¡':4513,u'国':642,u'åž‹':1389,u'å ´':1219,u'外':-241,u'妻':2016,u'å¦':-1356,u'安':-423,u'実':-1008,u'å®¶':1078,u'å°':-513,u'å°‘':-3102,u'å·ž':1155,u'市':3197,u'å¹³':-1804,u'å¹´':2416,u'広':-1030,u'府':1605,u'度':1452,u'建':-2352,u'当':-3885,u'å¾—':1905,u'æ€':-1291,u'性':1822,u'戸':-488,u'指':-3973,u'政':-2013,u'æ•™':-1479,u'æ•°':3222,u'æ–‡':-1489,u'æ–°':1764,u'æ—¥':2099,u'æ—§':5792,u'昨':-661,u'時':-1248,u'曜':-951,u'最':-937,u'月':4125,u'期':360,u'æŽ':3094,u'æ‘':364,u'æ±':-805,u'æ ¸':5156,u'森':2438,u'æ¥':484,u'æ°':2613,u'æ°‘':-1694,u'決':-1073,u'法':1868,u'æµ·':-495,u'ç„¡':979,u'物':461,u'特':-3850,u'生':-273,u'用':914,u'町':1215,u'çš„':7313,u'ç›´':-1835,u'çœ':792,u'県':6293,u'知':-1528,u'ç§':4231,u'税':401,u'ç«‹':-960,u'第':1201,u'ç±³':7767,u'ç³»':3066,u'ç´„':3663,u'ç´š':1384,u'çµ±':-4229,u'ç·':1163,u'ç·š':1255,u'者':6457,u'能':725,u'自':-2869,u'英':785,u'見':1044,u'調':-562,u'財':-733,u'è²»':1777,u'車':1835,u'è»':1375,u'è¾¼':-1504,u'通':-1136,u'é¸':-681,u'郎':1026,u'郡':4404,u'部':1200,u'金':2163,u'é•·':421,u'é–‹':-1432,u'é–“':1302,u'é–¢':-1282,u'雨':2009,u'é›»':-1045,u'éž':2066,u'é§…':1620,u'1':-800,u'ï½£':2670,u'ï½¥':-3794,u'ッ':-1350,u'ï½±':551,u'グ':1319,u'ï½½':874,u'ト':521,u'ム':1109,u'ï¾™':1591,u'ï¾›':2201,u'ï¾':278} + UW4__ = {u',':3930,u'.':3508,u'―':-4841,u'ã€':3930,u'。':3508,u'〇':4999,u'「':1895,u'ã€':3798,u'〓':-5156,u'ã‚':4752,u'ã„':-3435,u'ã†':-640,u'ãˆ':-2514,u'ãŠ':2405,u'ã‹':530,u'ãŒ':6006,u'ã':-4482,u'ãŽ':-3821,u'ã':-3788,u'ã‘':-4376,u'ã’':-4734,u'ã“':2255,u'ã”':1979,u'ã•':2864,u'ã—':-843,u'ã˜':-2506,u'ã™':-731,u'ãš':1251,u'ã›':181,u'ã':4091,u'ãŸ':5034,u'ã ':5408,u'ã¡':-3654,u'ã£':-5882,u'ã¤':-1659,u'ã¦':3994,u'ã§':7410,u'ã¨':4547,u'ãª':5433,u'ã«':6499,u'ã¬':1853,u'ã':1413,u'ã®':7396,u'ã¯':8578,u'ã°':1940,u'ã²':4249,u'ã³':-4134,u'ãµ':1345,u'ã¸':6665,u'ã¹':-744,u'ã»':1464,u'ã¾':1051,u'ã¿':-2082,u'ã‚€':-882,u'ã‚':-5046,u'ã‚‚':4169,u'ゃ':-2666,u'ã‚„':2795,u'ょ':-1544,u'よ':3351,u'ら':-2922,u'り':-9726,u'ã‚‹':-14896,u'れ':-2613,u'ã‚':-4570,u'ã‚':-1783,u'ã‚’':13150,u'ã‚“':-2352,u'ã‚«':2145,u'コ':1789,u'ã‚»':1287,u'ッ':-724,u'ト':-403,u'メ':-1635,u'ラ':-881,u'リ':-541,u'ル':-856,u'ン':-3637,u'・':-4371,u'ー':-11870,u'一':-2069,u'ä¸':2210,u'予':782,u'事':-190,u'井':-1768,u'人':1036,u'以':544,u'会':950,u'体':-1286,u'作':530,u'å´':4292,u'å…ˆ':601,u'å…š':-2006,u'å…±':-1212,u'内':584,u'円':788,u'åˆ':1347,u'å‰':1623,u'副':3879,u'力':-302,u'å‹•':-740,u'å‹™':-2715,u'化':776,u'区':4517,u'å”':1013,u'å‚':1555,u'åˆ':-1834,u'å’Œ':-681,u'å“¡':-910,u'器':-851,u'回':1500,u'国':-619,u'園':-1200,u'地':866,u'å ´':-1410,u'å¡':-2094,u'士':-1413,u'多':1067,u'大':571,u'å':-4802,u'å¦':-1397,u'定':-1057,u'寺':-809,u'å°':1910,u'屋':-1328,u'å±±':-1500,u'å³¶':-2056,u'å·':-2667,u'市':2771,u'å¹´':374,u'åº':-4556,u'後':456,u'性':553,u'感':916,u'所':-1566,u'支':856,u'改':787,u'政':2182,u'æ•™':704,u'æ–‡':522,u'æ–¹':-856,u'æ—¥':1798,u'時':1829,u'最':845,u'月':-9066,u'木':-485,u'æ¥':-442,u'æ ¡':-360,u'æ¥':-1043,u'æ°':5388,u'æ°‘':-2716,u'æ°—':-910,u'æ²¢':-939,u'済':-543,u'物':-735,u'率':672,u'çƒ':-1267,u'生':-1286,u'産':-1101,u'ç”°':-2900,u'町':1826,u'çš„':2586,u'ç›®':922,u'çœ':-3485,u'県':2997,u'空':-867,u'ç«‹':-2112,u'第':788,u'ç±³':2937,u'ç³»':786,u'ç´„':2171,u'経':1146,u'çµ±':-1169,u'ç·':940,u'ç·š':-994,u'ç½²':749,u'者':2145,u'能':-730,u'般':-852,u'行':-792,u'è¦':792,u'è¦':-1184,u'è°':-244,u'è°·':-1000,u'賞':730,u'車':-1481,u'è»':1158,u'輪':-1433,u'è¾¼':-3370,u'è¿‘':929,u'é“':-1291,u'é¸':2596,u'郎':-4866,u'都':1192,u'野':-1100,u'銀':-2213,u'é•·':357,u'é–“':-2344,u'院':-2297,u'éš›':-2604,u'é›»':-878,u'é ˜':-1659,u'題':-792,u'館':-1984,u'首':1749,u'高':2120,u'ï½¢':1895,u'ï½£':3798,u'ï½¥':-4371,u'ッ':-724,u'ï½°':-11870,u'ï½¶':2145,u'コ':1789,u'ï½¾':1287,u'ト':-403,u'ï¾’':-1635,u'ï¾—':-881,u'リ':-541,u'ï¾™':-856,u'ï¾':-3637} + UW5__ = {u',':465,u'.':-299,u'1':-514,u'E2':-32768,u']':-2762,u'ã€':465,u'。':-299,u'「':363,u'ã‚':1655,u'ã„':331,u'ã†':-503,u'ãˆ':1199,u'ãŠ':527,u'ã‹':647,u'ãŒ':-421,u'ã':1624,u'ãŽ':1971,u'ã':312,u'ã’':-983,u'ã•':-1537,u'ã—':-1371,u'ã™':-852,u'ã ':-1186,u'ã¡':1093,u'ã£':52,u'ã¤':921,u'ã¦':-18,u'ã§':-850,u'ã¨':-127,u'ã©':1682,u'ãª':-787,u'ã«':-1224,u'ã®':-635,u'ã¯':-578,u'ã¹':1001,u'ã¿':502,u'ã‚':865,u'ゃ':3350,u'ょ':854,u'り':-208,u'ã‚‹':429,u'れ':504,u'ã‚':419,u'ã‚’':-1264,u'ã‚“':327,u'イ':241,u'ル':451,u'ン':-343,u'ä¸':-871,u'京':722,u'会':-1153,u'å…š':-654,u'å‹™':3519,u'区':-901,u'告':848,u'å“¡':2104,u'大':-1296,u'å¦':-548,u'定':1785,u'åµ':-1304,u'市':-2991,u'å¸':921,u'å¹´':1763,u'æ€':872,u'所':-814,u'挙':1618,u'æ–°':-1682,u'æ—¥':218,u'月':-4353,u'査':932,u'æ ¼':1356,u'機':-1508,u'æ°':-1347,u'ç”°':240,u'町':-3912,u'çš„':-3149,u'相':1319,u'çœ':-1052,u'県':-4003,u'ç ”':-997,u'社':-278,u'空':-813,u'çµ±':1955,u'者':-2233,u'表':663,u'語':-1073,u'è°':1219,u'é¸':-1018,u'郎':-368,u'é•·':786,u'é–“':1191,u'題':2368,u'館':-689,u'1':-514,u'E2':-32768,u'ï½¢':363,u'ï½²':241,u'ï¾™':451,u'ï¾':-343} + UW6__ = {u',':227,u'.':808,u'1':-270,u'E1':306,u'ã€':227,u'。':808,u'ã‚':-307,u'ã†':189,u'ã‹':241,u'ãŒ':-73,u'ã':-121,u'ã“':-200,u'ã˜':1782,u'ã™':383,u'ãŸ':-428,u'ã£':573,u'ã¦':-1014,u'ã§':101,u'ã¨':-105,u'ãª':-253,u'ã«':-149,u'ã®':-417,u'ã¯':-236,u'ã‚‚':-206,u'り':187,u'ã‚‹':-135,u'ã‚’':195,u'ル':-673,u'ン':-496,u'一':-277,u'ä¸':201,u'ä»¶':-800,u'会':624,u'å‰':302,u'区':1792,u'å“¡':-1212,u'å§”':798,u'å¦':-960,u'市':887,u'広':-695,u'後':535,u'æ¥':-697,u'相':753,u'社':-507,u'ç¦':974,u'空':-822,u'者':1811,u'連':463,u'郎':1082,u'1':-270,u'E1':306,u'ï¾™':-673,u'ï¾':-496} + + # ctype_ + def ctype_(self, char): + for pattern, value in self.patterns_.iteritems(): + if pattern.match(char): + return value + return u'O' + # ts_ + def ts_(self, dict, key): + if key in dict: + return dict[key] + return 0 + + # segment + def split(self, input): + if not input: + return [] + + result = [] + seg = [u'B3',u'B2',u'B1'] + ctype = [u'O',u'O',u'O'] + for t in input: + seg.append(t) + ctype.append(self.ctype_(t)) + seg.append(u'E1') + seg.append(u'E2') + seg.append(u'E3') + ctype.append(u'O') + ctype.append(u'O') + ctype.append(u'O') + word = seg[3] + p1 = u'U' + p2 = u'U' + p3 = u'U' + + for i in range(4, len(seg) - 3): + score = self.BIAS__ + w1 = seg[i-3] + w2 = seg[i-2] + w3 = seg[i-1] + w4 = seg[i] + w5 = seg[i+1] + w6 = seg[i+2] + c1 = ctype[i-3] + c2 = ctype[i-2] + c3 = ctype[i-1] + c4 = ctype[i] + c5 = ctype[i+1] + c6 = ctype[i+2] + score += self.ts_(self.UP1__, p1) + score += self.ts_(self.UP2__, p2) + score += self.ts_(self.UP3__, p3) + score += self.ts_(self.BP1__, p1 + p2) + score += self.ts_(self.BP2__, p2 + p3) + score += self.ts_(self.UW1__, w1) + score += self.ts_(self.UW2__, w2) + score += self.ts_(self.UW3__, w3) + score += self.ts_(self.UW4__, w4) + score += self.ts_(self.UW5__, w5) + score += self.ts_(self.UW6__, w6) + score += self.ts_(self.BW1__, w2 + w3) + score += self.ts_(self.BW2__, w3 + w4) + score += self.ts_(self.BW3__, w4 + w5) + score += self.ts_(self.TW1__, w1 + w2 + w3) + score += self.ts_(self.TW2__, w2 + w3 + w4) + score += self.ts_(self.TW3__, w3 + w4 + w5) + score += self.ts_(self.TW4__, w4 + w5 + w6) + score += self.ts_(self.UC1__, c1) + score += self.ts_(self.UC2__, c2) + score += self.ts_(self.UC3__, c3) + score += self.ts_(self.UC4__, c4) + score += self.ts_(self.UC5__, c5) + score += self.ts_(self.UC6__, c6) + score += self.ts_(self.BC1__, c2 + c3) + score += self.ts_(self.BC2__, c3 + c4) + score += self.ts_(self.BC3__, c4 + c5) + score += self.ts_(self.TC1__, c1 + c2 + c3) + score += self.ts_(self.TC2__, c2 + c3 + c4) + score += self.ts_(self.TC3__, c3 + c4 + c5) + score += self.ts_(self.TC4__, c4 + c5 + c6) +# score += self.ts_(self.TC5__, c4 + c5 + c6) + score += self.ts_(self.UQ1__, p1 + c1) + score += self.ts_(self.UQ2__, p2 + c2) + score += self.ts_(self.UQ1__, p3 + c3) + score += self.ts_(self.BQ1__, p2 + c2 + c3) + score += self.ts_(self.BQ2__, p2 + c3 + c4) + score += self.ts_(self.BQ3__, p3 + c2 + c3) + score += self.ts_(self.BQ4__, p3 + c3 + c4) + score += self.ts_(self.TQ1__, p2 + c1 + c2 + c3) + score += self.ts_(self.TQ2__, p2 + c2 + c3 + c4) + score += self.ts_(self.TQ3__, p3 + c1 + c2 + c3) + score += self.ts_(self.TQ4__, p3 + c2 + c3 + c4) + p = u'O' + if score > 0: + result.append(word) + word = u'' + p = u'B' + p1 = p2 + p2 = p3 + p3 = p + word += seg[i] + + result.append(word) + return result + + +class SearchJapanese(SearchLanguage): + """ + Japanese search implementation: uses no stemmer, but word splitting is quite + complicated. + """ + lang = 'ja' + + def init(self, options): + type = options.get('type', 'default') + if type not in ('mecab', 'default'): + raise ValueError(("Japanese tokenizer's type should be 'mecab'" + " or 'default'")) + self.libmecab = None + if type == 'mecab': + self.splitter = MecabBinder(options) + else: + self.splitter = TinySegmenter() + + def split(self, input): + return self.splitter.split(input) + + def word_filter(self, stemmed_word): + return len(stemmed_word) > 1 diff --git a/sphinx/setup_command.py b/sphinx/setup_command.py index 5c705584..4cae738d 100644 --- a/sphinx/setup_command.py +++ b/sphinx/setup_command.py @@ -22,7 +22,8 @@ from sphinx.util.console import darkred, nocolor, color_terminal class BuildDoc(Command): - """Distutils command to build Sphinx documentation. + """ + Distutils command to build Sphinx documentation. The Sphinx build can then be triggered from distutils, and some Sphinx options can be set in ``setup.py`` or ``setup.cfg`` instead of Sphinx own diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty index ae7ba372..be0a0284 100644 --- a/sphinx/texinputs/sphinx.sty +++ b/sphinx/texinputs/sphinx.sty @@ -175,23 +175,6 @@ } -% Index-entry generation support. -% - -% Command to generate two index entries (using subentries) -\newcommand{\indexii}[2]{\index{#1!#2}\index{#2!#1}} - -% And three entries (using only one level of subentries) -\newcommand{\indexiii}[3]{\index{#1!#2 #3}\index{#2!#3, #1}\index{#3!#1 #2}} - -% And four (again, using only one level of subentries) -\newcommand{\indexiv}[4]{ -\index{#1!#2 #3 #4} -\index{#2!#3 #4, #1} -\index{#3!#4, #1 #2} -\index{#4!#1 #2 #3} -} - % \moduleauthor{name}{email} \newcommand{\moduleauthor}[2]{} diff --git a/sphinx/themes/basic/genindex-single.html b/sphinx/themes/basic/genindex-single.html index 225abfa8..b6fa6a85 100644 --- a/sphinx/themes/basic/genindex-single.html +++ b/sphinx/themes/basic/genindex-single.html @@ -7,31 +7,48 @@ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} +{% macro indexentries(firstname, links) %} + <dt> + {%- if links -%} + <a href="{{ links[0][1] }}"> + {%- if links[0][0] %}<strong>{% endif -%} + {{ firstname|e }} + {%- if links[0][0] %}</strong>{% endif -%} + </a> + + {%- for ismain, link in links[1:] -%} + , <a href="{{ link }}">{% if ismain %}<strong>{% endif -%} + [{{ loop.index }}] + {%- if ismain %}</strong>{% endif -%} + </a> + {%- endfor %} + {%- else %} + {{ firstname|e }} + {%- endif %} + </dt> +{% endmacro %} + {% extends "layout.html" %} {% set title = _('Index') %} {% block body %} - <h1 id="index">{% trans key=key %}Index – {{ key }}{% endtrans %}</h1> +<h1 id="index">{% trans key=key %}Index – {{ key }}{% endtrans %}</h1> <table width="100%" class="indextable"><tr> {%- for column in entries|slice(2) if column %} <td width="33%" valign="top"><dl> - {%- for entryname, (links, subitems) in column %} - <dt>{% if links %}<a href="{{ links[0] }}">{{ entryname|e }}</a> - {%- for link in links[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor %} - {%- else %}{{ entryname|e }}{% endif %}</dt> - {%- if subitems %} - <dd><dl> - {%- for subentryname, subentrylinks in subitems %} - <dt><a href="{{ subentrylinks[0] }}">{{ subentryname|e }}</a> - {%- for link in subentrylinks[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor -%} - </dt> + {%- for entryname, (links, subitems) in column %} + {{ indexentries(entryname, links) }} + {%- if subitems %} + <dd><dl> + {%- for subentryname, subentrylinks in subitems %} + {{ indexentries(subentryname, subentrylinks) }} + {%- endfor %} + </dl></dd> + {%- endif -%} {%- endfor %} - </dl></dd> - {%- endif -%} -{%- endfor %} -</dl></td> -{%- endfor %} + </dl></td> + {%- endfor %} </tr></table> {% endblock %} diff --git a/sphinx/themes/basic/genindex.html b/sphinx/themes/basic/genindex.html index 4af47252..536f0963 100644 --- a/sphinx/themes/basic/genindex.html +++ b/sphinx/themes/basic/genindex.html @@ -7,39 +7,57 @@ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} +{% macro indexentries(firstname, links) %} + <dt> + {%- if links -%} + <a href="{{ links[0][1] }}"> + {%- if links[0][0] %}<strong>{% endif -%} + {{ firstname|e }} + {%- if links[0][0] %}</strong>{% endif -%} + </a> + + {%- for ismain, link in links[1:] -%} + , <a href="{{ link }}">{% if ismain %}<strong>{% endif -%} + [{{ loop.index }}] + {%- if ismain %}</strong>{% endif -%} + </a> + {%- endfor %} + {%- else %} + {{ firstname|e }} + {%- endif %} + </dt> +{% endmacro %} + {% extends "layout.html" %} {% set title = _('Index') %} {% block body %} - <h1 id="index">{{ _('Index') }}</h1> +<h1 id="index">{{ _('Index') }}</h1> - <div class="genindex-jumpbox"> - {% for key, dummy in genindexentries -%} - <a href="#{{ key }}"><strong>{{ key }}</strong></a> {% if not loop.last %}| {% endif %} - {%- endfor %} - </div> +<div class="genindex-jumpbox"> + {% for key, dummy in genindexentries -%} + <a href="#{{ key }}"><strong>{{ key }}</strong></a> + {% if not loop.last %}| {% endif %} + {%- endfor %} +</div> - {%- for key, entries in genindexentries %} +{%- for key, entries in genindexentries %} <h2 id="{{ key }}">{{ key }}</h2> <table width="100%" class="indextable genindextable"><tr> {%- for column in entries|slice(2) if column %} <td width="33%" valign="top"><dl> - {%- for entryname, (links, subitems) in column %} - <dt>{% if links %}<a href="{{ links[0] }}">{{ entryname|e }}</a> - {%- for link in links[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor %} - {%- else %}{{ entryname|e }}{% endif %}</dt> - {%- if subitems %} - <dd><dl> - {%- for subentryname, subentrylinks in subitems %} - <dt><a href="{{ subentrylinks[0] }}">{{ subentryname|e }}</a> - {%- for link in subentrylinks[1:] %}, <a href="{{ link }}">[{{ loop.index }}]</a>{% endfor -%} - </dt> + {%- for entryname, (links, subitems) in column %} + {{ indexentries(entryname, links) }} + {%- if subitems %} + <dd><dl> + {%- for subentryname, subentrylinks in subitems %} + {{ indexentries(subentryname, subentrylinks) }} + {%- endfor %} + </dl></dd> + {%- endif -%} {%- endfor %} - </dl></dd> - {%- endif -%} -{%- endfor %} -</dl></td> -{%- endfor %} + </dl></td> + {%- endfor %} </tr></table> {% endfor %} diff --git a/sphinx/themes/basic/layout.html b/sphinx/themes/basic/layout.html index 7aa03155..9fb989cb 100644 --- a/sphinx/themes/basic/layout.html +++ b/sphinx/themes/basic/layout.html @@ -16,7 +16,13 @@ {%- set render_sidebar = (not embedded) and (not theme_nosidebar|tobool) and (sidebars != []) %} {%- set url_root = pathto('', 1) %} +{# XXX necessary? #} {%- if url_root == '#' %}{% set url_root = '' %}{% endif %} +{%- if not embedded and docstitle %} + {%- set titlesuffix = " — "|safe + docstitle|e %} +{%- else %} + {%- set titlesuffix = "" %} +{%- endif %} {%- macro relbar() %} <div class="related"> @@ -78,24 +84,7 @@ {%- endif %} {%- endmacro %} -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" /> - {{ metatags }} - {%- if not embedded and docstitle %} - {%- set titlesuffix = " — "|safe + docstitle|e %} - {%- else %} - {%- set titlesuffix = "" %} - {%- endif %} - {%- block htmltitle %} - <title>{{ title|striptags|e }}{{ titlesuffix }}</title> - {%- endblock %} - <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" /> - <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" /> - {%- for cssfile in css_files %} - <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" /> - {%- endfor %} - {%- if not embedded %} +{%- macro script() %} <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '{{ url_root }}', @@ -108,6 +97,26 @@ {%- for scriptfile in script_files %} <script type="text/javascript" src="{{ pathto(scriptfile, 1) }}"></script> {%- endfor %} +{%- endmacro %} + +{%- macro css() %} + <link rel="stylesheet" href="{{ pathto('_static/' + style, 1) }}" type="text/css" /> + <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css" /> + {%- for cssfile in css_files %} + <link rel="stylesheet" href="{{ pathto(cssfile, 1) }}" type="text/css" /> + {%- endfor %} +{%- endmacro %} + +<html xmlns="http://www.w3.org/1999/xhtml"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset={{ encoding }}" /> + {{ metatags }} + {%- block htmltitle %} + <title>{{ title|striptags|e }}{{ titlesuffix }}</title> + {%- endblock %} + {{ css() }} + {%- if not embedded %} + {{ script() }} {%- if use_opensearch %} <link rel="search" type="application/opensearchdescription+xml" title="{% trans docstitle=docstitle|e %}Search within {{ docstitle }}{% endtrans %}" diff --git a/sphinx/themes/basic/searchresults.html b/sphinx/themes/basic/searchresults.html new file mode 100644 index 00000000..667abffd --- /dev/null +++ b/sphinx/themes/basic/searchresults.html @@ -0,0 +1,36 @@ +{# + basic/searchresults.html + ~~~~~~~~~~~~~~~~~~~~~~~~ + + Template for the body of the search results page. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +#} +<h1 id="search-documentation">Search</h1> +<p> + From here you can search these documents. Enter your search + words into the box below and click "search". +</p> +<form action="" method="get"> + <input type="text" name="q" value="" /> + <input type="submit" value="search" /> + <span id="search-progress" style="padding-left: 10px"></span> +</form> +{%- if search_performed %} + <h2>Search Results</h2> + {%- if not search_results %} + <p>Your search did not match any results.</p> + {%- endif %} +{%- endif %} +<div id="search-results"> + {%- if search_results %} + <ul class="search"> + {% for href, caption, context in search_results %} + <li><a href="{{ docroot }}{{ href }}/?highlight={{ q }}">{{ caption }}</a> + <div class="context">{{ context|e }}</div> + </li> + {% endfor %} + </ul> + {%- endif %} +</div> diff --git a/sphinx/themes/basic/static/ajax-loader.gif b/sphinx/themes/basic/static/ajax-loader.gif Binary files differnew file mode 100644 index 00000000..61faf8ca --- /dev/null +++ b/sphinx/themes/basic/static/ajax-loader.gif diff --git a/sphinx/themes/basic/static/comment-bright.png b/sphinx/themes/basic/static/comment-bright.png Binary files differnew file mode 100644 index 00000000..551517b8 --- /dev/null +++ b/sphinx/themes/basic/static/comment-bright.png diff --git a/sphinx/themes/basic/static/comment-close.png b/sphinx/themes/basic/static/comment-close.png Binary files differnew file mode 100644 index 00000000..09b54be4 --- /dev/null +++ b/sphinx/themes/basic/static/comment-close.png diff --git a/sphinx/themes/basic/static/comment.png b/sphinx/themes/basic/static/comment.png Binary files differnew file mode 100644 index 00000000..92feb52b --- /dev/null +++ b/sphinx/themes/basic/static/comment.png diff --git a/sphinx/themes/basic/static/down-pressed.png b/sphinx/themes/basic/static/down-pressed.png Binary files differnew file mode 100644 index 00000000..6f7ad782 --- /dev/null +++ b/sphinx/themes/basic/static/down-pressed.png diff --git a/sphinx/themes/basic/static/down.png b/sphinx/themes/basic/static/down.png Binary files differnew file mode 100644 index 00000000..3003a887 --- /dev/null +++ b/sphinx/themes/basic/static/down.png diff --git a/sphinx/themes/basic/static/searchtools.js b/sphinx/themes/basic/static/searchtools.js_t index dae92b5e..6be7489f 100644 --- a/sphinx/themes/basic/static/searchtools.js +++ b/sphinx/themes/basic/static/searchtools.js_t @@ -1,6 +1,6 @@ /* - * searchtools.js - * ~~~~~~~~~~~~~~ + * searchtools.js_t + * ~~~~~~~~~~~~~~~~ * * Sphinx JavaScript utilties for the full-text search. * @@ -36,188 +36,7 @@ jQuery.makeSearchSummary = function(text, keywords, hlwords) { return rv; } -/** - * Porter Stemmer - */ -var PorterStemmer = function() { - - var step2list = { - ational: 'ate', - tional: 'tion', - enci: 'ence', - anci: 'ance', - izer: 'ize', - bli: 'ble', - alli: 'al', - entli: 'ent', - eli: 'e', - ousli: 'ous', - ization: 'ize', - ation: 'ate', - ator: 'ate', - alism: 'al', - iveness: 'ive', - fulness: 'ful', - ousness: 'ous', - aliti: 'al', - iviti: 'ive', - biliti: 'ble', - logi: 'log' - }; - - var step3list = { - icate: 'ic', - ative: '', - alize: 'al', - iciti: 'ic', - ical: 'ic', - ful: '', - ness: '' - }; - - var c = "[^aeiou]"; // consonant - var v = "[aeiouy]"; // vowel - var C = c + "[^aeiouy]*"; // consonant sequence - var V = v + "[aeiou]*"; // vowel sequence - - var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - +{{ search_language_stemming_code|safe }} /** * Search Module @@ -300,14 +119,10 @@ var Search = { }, query : function(query) { - var stopwords = ['and', 'then', 'into', 'it', 'as', 'are', 'in', - 'if', 'for', 'no', 'there', 'their', 'was', 'is', - 'be', 'to', 'that', 'but', 'they', 'not', 'such', - 'with', 'by', 'a', 'on', 'these', 'of', 'will', - 'this', 'near', 'the', 'or', 'at']; - - // stem the searchterms and add them to the correct list - var stemmer = new PorterStemmer(); + var stopwords = {{ search_language_stop_words }}; + + // Stem the searchterms and add them to the correct list + var stemmer = new Stemmer(); var searchterms = []; var excluded = []; var hlterms = []; diff --git a/sphinx/themes/basic/static/up-pressed.png b/sphinx/themes/basic/static/up-pressed.png Binary files differnew file mode 100644 index 00000000..8bd587af --- /dev/null +++ b/sphinx/themes/basic/static/up-pressed.png diff --git a/sphinx/themes/basic/static/up.png b/sphinx/themes/basic/static/up.png Binary files differnew file mode 100644 index 00000000..b9462568 --- /dev/null +++ b/sphinx/themes/basic/static/up.png diff --git a/sphinx/themes/basic/static/websupport.js b/sphinx/themes/basic/static/websupport.js new file mode 100644 index 00000000..cbb60923 --- /dev/null +++ b/sphinx/themes/basic/static/websupport.js @@ -0,0 +1,808 @@ +/* + * websupport.js + * ~~~~~~~~~~~~~ + * + * sphinx.websupport utilties for all documentation. + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +(function($) { + $.fn.autogrow = function() { + return this.each(function() { + var textarea = this; + + $.fn.autogrow.resize(textarea); + + $(textarea) + .focus(function() { + textarea.interval = setInterval(function() { + $.fn.autogrow.resize(textarea); + }, 500); + }) + .blur(function() { + clearInterval(textarea.interval); + }); + }); + }; + + $.fn.autogrow.resize = function(textarea) { + var lineHeight = parseInt($(textarea).css('line-height'), 10); + var lines = textarea.value.split('\n'); + var columns = textarea.cols; + var lineCount = 0; + $.each(lines, function() { + lineCount += Math.ceil(this.length / columns) || 1; + }); + var height = lineHeight * (lineCount + 1); + $(textarea).css('height', height); + }; +})(jQuery); + +(function($) { + var comp, by; + + function init() { + initEvents(); + initComparator(); + } + + function initEvents() { + $('a.comment-close').live("click", function(event) { + event.preventDefault(); + hide($(this).attr('id').substring(2)); + }); + $('a.vote').live("click", function(event) { + event.preventDefault(); + handleVote($(this)); + }); + $('a.reply').live("click", function(event) { + event.preventDefault(); + openReply($(this).attr('id').substring(2)); + }); + $('a.close-reply').live("click", function(event) { + event.preventDefault(); + closeReply($(this).attr('id').substring(2)); + }); + $('a.sort-option').live("click", function(event) { + event.preventDefault(); + handleReSort($(this)); + }); + $('a.show-proposal').live("click", function(event) { + event.preventDefault(); + showProposal($(this).attr('id').substring(2)); + }); + $('a.hide-proposal').live("click", function(event) { + event.preventDefault(); + hideProposal($(this).attr('id').substring(2)); + }); + $('a.show-propose-change').live("click", function(event) { + event.preventDefault(); + showProposeChange($(this).attr('id').substring(2)); + }); + $('a.hide-propose-change').live("click", function(event) { + event.preventDefault(); + hideProposeChange($(this).attr('id').substring(2)); + }); + $('a.accept-comment').live("click", function(event) { + event.preventDefault(); + acceptComment($(this).attr('id').substring(2)); + }); + $('a.delete-comment').live("click", function(event) { + event.preventDefault(); + deleteComment($(this).attr('id').substring(2)); + }); + $('a.comment-markup').live("click", function(event) { + event.preventDefault(); + toggleCommentMarkupBox($(this).attr('id').substring(2)); + }); + } + + /** + * Set comp, which is a comparator function used for sorting and + * inserting comments into the list. + */ + function setComparator() { + // If the first three letters are "asc", sort in ascending order + // and remove the prefix. + if (by.substring(0,3) == 'asc') { + var i = by.substring(3); + comp = function(a, b) { return a[i] - b[i]; }; + } else { + // Otherwise sort in descending order. + comp = function(a, b) { return b[by] - a[by]; }; + } + + // Reset link styles and format the selected sort option. + $('a.sel').attr('href', '#').removeClass('sel'); + $('a.by' + by).removeAttr('href').addClass('sel'); + } + + /** + * Create a comp function. If the user has preferences stored in + * the sortBy cookie, use those, otherwise use the default. + */ + function initComparator() { + by = 'rating'; // Default to sort by rating. + // If the sortBy cookie is set, use that instead. + if (document.cookie.length > 0) { + var start = document.cookie.indexOf('sortBy='); + if (start != -1) { + start = start + 7; + var end = document.cookie.indexOf(";", start); + if (end == -1) { + end = document.cookie.length; + by = unescape(document.cookie.substring(start, end)); + } + } + } + setComparator(); + } + + /** + * Show a comment div. + */ + function show(id) { + $('#ao' + id).hide(); + $('#ah' + id).show(); + var context = $.extend({id: id}, opts); + var popup = $(renderTemplate(popupTemplate, context)).hide(); + popup.find('textarea[name="proposal"]').hide(); + popup.find('a.by' + by).addClass('sel'); + var form = popup.find('#cf' + id); + form.submit(function(event) { + event.preventDefault(); + addComment(form); + }); + $('#s' + id).after(popup); + popup.slideDown('fast', function() { + getComments(id); + }); + } + + /** + * Hide a comment div. + */ + function hide(id) { + $('#ah' + id).hide(); + $('#ao' + id).show(); + var div = $('#sc' + id); + div.slideUp('fast', function() { + div.remove(); + }); + } + + /** + * Perform an ajax request to get comments for a node + * and insert the comments into the comments tree. + */ + function getComments(id) { + $.ajax({ + type: 'GET', + url: opts.getCommentsURL, + data: {node: id}, + success: function(data, textStatus, request) { + var ul = $('#cl' + id); + var speed = 100; + $('#cf' + id) + .find('textarea[name="proposal"]') + .data('source', data.source); + + if (data.comments.length === 0) { + ul.html('<li>No comments yet.</li>'); + ul.data('empty', true); + } else { + // If there are comments, sort them and put them in the list. + var comments = sortComments(data.comments); + speed = data.comments.length * 100; + appendComments(comments, ul); + ul.data('empty', false); + } + $('#cn' + id).slideUp(speed + 200); + ul.slideDown(speed); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem retrieving the comments.'); + }, + dataType: 'json' + }); + } + + /** + * Add a comment via ajax and insert the comment into the comment tree. + */ + function addComment(form) { + var node_id = form.find('input[name="node"]').val(); + var parent_id = form.find('input[name="parent"]').val(); + var text = form.find('textarea[name="comment"]').val(); + var proposal = form.find('textarea[name="proposal"]').val(); + + if (text == '') { + showError('Please enter a comment.'); + return; + } + + // Disable the form that is being submitted. + form.find('textarea,input').attr('disabled', 'disabled'); + + // Send the comment to the server. + $.ajax({ + type: "POST", + url: opts.addCommentURL, + dataType: 'json', + data: { + node: node_id, + parent: parent_id, + text: text, + proposal: proposal + }, + success: function(data, textStatus, error) { + // Reset the form. + if (node_id) { + hideProposeChange(node_id); + } + form.find('textarea') + .val('') + .add(form.find('input')) + .removeAttr('disabled'); + var ul = $('#cl' + (node_id || parent_id)); + if (ul.data('empty')) { + $(ul).empty(); + ul.data('empty', false); + } + insertComment(data.comment); + var ao = $('#ao' + node_id); + ao.find('img').attr({'src': opts.commentBrightImage}); + if (node_id) { + // if this was a "root" comment, remove the commenting box + // (the user can get it back by reopening the comment popup) + $('#ca' + node_id).slideUp(); + } + }, + error: function(request, textStatus, error) { + form.find('textarea,input').removeAttr('disabled'); + showError('Oops, there was a problem adding the comment.'); + } + }); + } + + /** + * Recursively append comments to the main comment list and children + * lists, creating the comment tree. + */ + function appendComments(comments, ul) { + $.each(comments, function() { + var div = createCommentDiv(this); + ul.append($(document.createElement('li')).html(div)); + appendComments(this.children, div.find('ul.comment-children')); + // To avoid stagnating data, don't store the comments children in data. + this.children = null; + div.data('comment', this); + }); + } + + /** + * After adding a new comment, it must be inserted in the correct + * location in the comment tree. + */ + function insertComment(comment) { + var div = createCommentDiv(comment); + + // To avoid stagnating data, don't store the comments children in data. + comment.children = null; + div.data('comment', comment); + + var ul = $('#cl' + (comment.node || comment.parent)); + var siblings = getChildren(ul); + + var li = $(document.createElement('li')); + li.hide(); + + // Determine where in the parents children list to insert this comment. + for(i=0; i < siblings.length; i++) { + if (comp(comment, siblings[i]) <= 0) { + $('#cd' + siblings[i].id) + .parent() + .before(li.html(div)); + li.slideDown('fast'); + return; + } + } + + // If we get here, this comment rates lower than all the others, + // or it is the only comment in the list. + ul.append(li.html(div)); + li.slideDown('fast'); + } + + function acceptComment(id) { + $.ajax({ + type: 'POST', + url: opts.acceptCommentURL, + data: {id: id}, + success: function(data, textStatus, request) { + $('#cm' + id).fadeOut('fast'); + $('#cd' + id).removeClass('moderate'); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem accepting the comment.'); + } + }); + } + + function deleteComment(id) { + $.ajax({ + type: 'POST', + url: opts.deleteCommentURL, + data: {id: id}, + success: function(data, textStatus, request) { + var div = $('#cd' + id); + if (data == 'delete') { + // Moderator mode: remove the comment and all children immediately + div.slideUp('fast', function() { + div.remove(); + }); + return; + } + // User mode: only mark the comment as deleted + div + .find('span.user-id:first') + .text('[deleted]').end() + .find('div.comment-text:first') + .text('[deleted]').end() + .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id + + ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id) + .remove(); + var comment = div.data('comment'); + comment.username = '[deleted]'; + comment.text = '[deleted]'; + div.data('comment', comment); + }, + error: function(request, textStatus, error) { + showError('Oops, there was a problem deleting the comment.'); + } + }); + } + + function showProposal(id) { + $('#sp' + id).hide(); + $('#hp' + id).show(); + $('#pr' + id).slideDown('fast'); + } + + function hideProposal(id) { + $('#hp' + id).hide(); + $('#sp' + id).show(); + $('#pr' + id).slideUp('fast'); + } + + function showProposeChange(id) { + $('#pc' + id).hide(); + $('#hc' + id).show(); + var textarea = $('#pt' + id); + textarea.val(textarea.data('source')); + $.fn.autogrow.resize(textarea[0]); + textarea.slideDown('fast'); + } + + function hideProposeChange(id) { + $('#hc' + id).hide(); + $('#pc' + id).show(); + var textarea = $('#pt' + id); + textarea.val('').removeAttr('disabled'); + textarea.slideUp('fast'); + } + + function toggleCommentMarkupBox(id) { + $('#mb' + id).toggle(); + } + + /** Handle when the user clicks on a sort by link. */ + function handleReSort(link) { + var classes = link.attr('class').split(/\s+/); + for (var i=0; i<classes.length; i++) { + if (classes[i] != 'sort-option') { + by = classes[i].substring(2); + } + } + setComparator(); + // Save/update the sortBy cookie. + var expiration = new Date(); + expiration.setDate(expiration.getDate() + 365); + document.cookie= 'sortBy=' + escape(by) + + ';expires=' + expiration.toUTCString(); + $('ul.comment-ul').each(function(index, ul) { + var comments = getChildren($(ul), true); + comments = sortComments(comments); + appendComments(comments, $(ul).empty()); + }); + } + + /** + * Function to process a vote when a user clicks an arrow. + */ + function handleVote(link) { + if (!opts.voting) { + showError("You'll need to login to vote."); + return; + } + + var id = link.attr('id'); + if (!id) { + // Didn't click on one of the voting arrows. + return; + } + // If it is an unvote, the new vote value is 0, + // Otherwise it's 1 for an upvote, or -1 for a downvote. + var value = 0; + if (id.charAt(1) != 'u') { + value = id.charAt(0) == 'u' ? 1 : -1; + } + // The data to be sent to the server. + var d = { + comment_id: id.substring(2), + value: value + }; + + // Swap the vote and unvote links. + link.hide(); + $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id) + .show(); + + // The div the comment is displayed in. + var div = $('div#cd' + d.comment_id); + var data = div.data('comment'); + + // If this is not an unvote, and the other vote arrow has + // already been pressed, unpress it. + if ((d.value !== 0) && (data.vote === d.value * -1)) { + $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide(); + $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show(); + } + + // Update the comments rating in the local data. + data.rating += (data.vote === 0) ? d.value : (d.value - data.vote); + data.vote = d.value; + div.data('comment', data); + + // Change the rating text. + div.find('.rating:first') + .text(data.rating + ' point' + (data.rating == 1 ? '' : 's')); + + // Send the vote information to the server. + $.ajax({ + type: "POST", + url: opts.processVoteURL, + data: d, + error: function(request, textStatus, error) { + showError('Oops, there was a problem casting that vote.'); + } + }); + } + + /** + * Open a reply form used to reply to an existing comment. + */ + function openReply(id) { + // Swap out the reply link for the hide link + $('#rl' + id).hide(); + $('#cr' + id).show(); + + // Add the reply li to the children ul. + var div = $(renderTemplate(replyTemplate, {id: id})).hide(); + $('#cl' + id) + .prepend(div) + // Setup the submit handler for the reply form. + .find('#rf' + id) + .submit(function(event) { + event.preventDefault(); + addComment($('#rf' + id)); + closeReply(id); + }) + .find('input[type=button]') + .click(function() { + closeReply(id); + }); + div.slideDown('fast', function() { + $('#rf' + id).find('textarea').focus(); + }); + } + + /** + * Close the reply form opened with openReply. + */ + function closeReply(id) { + // Remove the reply div from the DOM. + $('#rd' + id).slideUp('fast', function() { + $(this).remove(); + }); + + // Swap out the hide link for the reply link + $('#cr' + id).hide(); + $('#rl' + id).show(); + } + + /** + * Recursively sort a tree of comments using the comp comparator. + */ + function sortComments(comments) { + comments.sort(comp); + $.each(comments, function() { + this.children = sortComments(this.children); + }); + return comments; + } + + /** + * Get the children comments from a ul. If recursive is true, + * recursively include childrens' children. + */ + function getChildren(ul, recursive) { + var children = []; + ul.children().children("[id^='cd']") + .each(function() { + var comment = $(this).data('comment'); + if (recursive) + comment.children = getChildren($(this).find('#cl' + comment.id), true); + children.push(comment); + }); + return children; + } + + /** Create a div to display a comment in. */ + function createCommentDiv(comment) { + if (!comment.displayed && !opts.moderator) { + return $('<div class="moderate">Thank you! Your comment will show up ' + + 'once it is has been approved by a moderator.</div>'); + } + // Prettify the comment rating. + comment.pretty_rating = comment.rating + ' point' + + (comment.rating == 1 ? '' : 's'); + // Make a class (for displaying not yet moderated comments differently) + comment.css_class = comment.displayed ? '' : ' moderate'; + // Create a div for this comment. + var context = $.extend({}, opts, comment); + var div = $(renderTemplate(commentTemplate, context)); + + // If the user has voted on this comment, highblight the correct arrow. + if (comment.vote) { + var direction = (comment.vote == 1) ? 'u' : 'd'; + div.find('#' + direction + 'v' + comment.id).hide(); + div.find('#' + direction + 'u' + comment.id).show(); + } + + if (opts.moderator || comment.text != '[deleted]') { + div.find('a.reply').show(); + if (comment.proposal_diff) + div.find('#sp' + comment.id).show(); + if (opts.moderator && !comment.displayed) + div.find('#cm' + comment.id).show(); + if (opts.moderator || (opts.username == comment.username)) + div.find('#dc' + comment.id).show(); + } + return div; + } + + /** + * A simple template renderer. Placeholders such as <%id%> are replaced + * by context['id'] with items being escaped. Placeholders such as <#id#> + * are not escaped. + */ + function renderTemplate(template, context) { + var esc = $(document.createElement('div')); + + function handle(ph, escape) { + var cur = context; + $.each(ph.split('.'), function() { + cur = cur[this]; + }); + return escape ? esc.text(cur || "").html() : cur; + } + + return template.replace(/<([%#])([\w\.]*)\1>/g, function() { + return handle(arguments[2], arguments[1] == '%' ? true : false); + }); + } + + /** Flash an error message briefly. */ + function showError(message) { + $(document.createElement('div')).attr({'class': 'popup-error'}) + .append($(document.createElement('div')) + .attr({'class': 'error-message'}).text(message)) + .appendTo('body') + .fadeIn("slow") + .delay(2000) + .fadeOut("slow"); + } + + /** Add a link the user uses to open the comments popup. */ + $.fn.comment = function() { + return this.each(function() { + var id = $(this).attr('id').substring(1); + var count = COMMENT_METADATA[id]; + var title = count + ' comment' + (count == 1 ? '' : 's'); + var image = count > 0 ? opts.commentBrightImage : opts.commentImage; + var addcls = count == 0 ? ' nocomment' : ''; + $(this) + .append( + $(document.createElement('a')).attr({ + href: '#', + 'class': 'sphinx-comment-open' + addcls, + id: 'ao' + id + }) + .append($(document.createElement('img')).attr({ + src: image, + alt: 'comment', + title: title + })) + .click(function(event) { + event.preventDefault(); + show($(this).attr('id').substring(2)); + }) + ) + .append( + $(document.createElement('a')).attr({ + href: '#', + 'class': 'sphinx-comment-close hidden', + id: 'ah' + id + }) + .append($(document.createElement('img')).attr({ + src: opts.closeCommentImage, + alt: 'close', + title: 'close' + })) + .click(function(event) { + event.preventDefault(); + hide($(this).attr('id').substring(2)); + }) + ); + }); + }; + + var opts = { + processVoteURL: '/_process_vote', + addCommentURL: '/_add_comment', + getCommentsURL: '/_get_comments', + acceptCommentURL: '/_accept_comment', + deleteCommentURL: '/_delete_comment', + commentImage: '/static/_static/comment.png', + closeCommentImage: '/static/_static/comment-close.png', + loadingImage: '/static/_static/ajax-loader.gif', + commentBrightImage: '/static/_static/comment-bright.png', + upArrow: '/static/_static/up.png', + downArrow: '/static/_static/down.png', + upArrowPressed: '/static/_static/up-pressed.png', + downArrowPressed: '/static/_static/down-pressed.png', + voting: false, + moderator: false + }; + + if (typeof COMMENT_OPTIONS != "undefined") { + opts = jQuery.extend(opts, COMMENT_OPTIONS); + } + + var popupTemplate = '\ + <div class="sphinx-comments" id="sc<%id%>">\ + <p class="sort-options">\ + Sort by:\ + <a href="#" class="sort-option byrating">best rated</a>\ + <a href="#" class="sort-option byascage">newest</a>\ + <a href="#" class="sort-option byage">oldest</a>\ + </p>\ + <div class="comment-header">Comments</div>\ + <div class="comment-loading" id="cn<%id%>">\ + loading comments... <img src="<%loadingImage%>" alt="" /></div>\ + <ul id="cl<%id%>" class="comment-ul"></ul>\ + <div id="ca<%id%>">\ + <p class="add-a-comment">Add a comment\ + (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\ + <div class="comment-markup-box" id="mb<%id%>">\ + reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \ + <tt>``code``</tt>, \ + code blocks: <tt>::</tt> and an indented block after blank line</div>\ + <form method="post" id="cf<%id%>" class="comment-form" action="">\ + <textarea name="comment" cols="80"></textarea>\ + <p class="propose-button">\ + <a href="#" id="pc<%id%>" class="show-propose-change">\ + Propose a change ▹\ + </a>\ + <a href="#" id="hc<%id%>" class="hide-propose-change">\ + Propose a change ▿\ + </a>\ + </p>\ + <textarea name="proposal" id="pt<%id%>" cols="80"\ + spellcheck="false"></textarea>\ + <input type="submit" value="Add comment" />\ + <input type="hidden" name="node" value="<%id%>" />\ + <input type="hidden" name="parent" value="" />\ + </form>\ + </div>\ + </div>'; + + var commentTemplate = '\ + <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\ + <div class="vote">\ + <div class="arrow">\ + <a href="#" id="uv<%id%>" class="vote" title="vote up">\ + <img src="<%upArrow%>" />\ + </a>\ + <a href="#" id="uu<%id%>" class="un vote" title="vote up">\ + <img src="<%upArrowPressed%>" />\ + </a>\ + </div>\ + <div class="arrow">\ + <a href="#" id="dv<%id%>" class="vote" title="vote down">\ + <img src="<%downArrow%>" id="da<%id%>" />\ + </a>\ + <a href="#" id="du<%id%>" class="un vote" title="vote down">\ + <img src="<%downArrowPressed%>" />\ + </a>\ + </div>\ + </div>\ + <div class="comment-content">\ + <p class="tagline comment">\ + <span class="user-id"><%username%></span>\ + <span class="rating"><%pretty_rating%></span>\ + <span class="delta"><%time.delta%></span>\ + </p>\ + <div class="comment-text comment"><#text#></div>\ + <p class="comment-opts comment">\ + <a href="#" class="reply hidden" id="rl<%id%>">reply ▹</a>\ + <a href="#" class="close-reply" id="cr<%id%>">reply ▿</a>\ + <a href="#" id="sp<%id%>" class="show-proposal">proposal ▹</a>\ + <a href="#" id="hp<%id%>" class="hide-proposal">proposal ▿</a>\ + <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\ + <span id="cm<%id%>" class="moderation hidden">\ + <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\ + </span>\ + </p>\ + <pre class="proposal" id="pr<%id%>">\ +<#proposal_diff#>\ + </pre>\ + <ul class="comment-children" id="cl<%id%>"></ul>\ + </div>\ + <div class="clearleft"></div>\ + </div>\ + </div>'; + + var replyTemplate = '\ + <li>\ + <div class="reply-div" id="rd<%id%>">\ + <form id="rf<%id%>">\ + <textarea name="comment" cols="80"></textarea>\ + <input type="submit" value="Add reply" />\ + <input type="button" value="Cancel" />\ + <input type="hidden" name="parent" value="<%id%>" />\ + <input type="hidden" name="node" value="" />\ + </form>\ + </div>\ + </li>'; + + $(document).ready(function() { + init(); + }); +})(jQuery); + +$(document).ready(function() { + // add comment anchors for all paragraphs that are commentable + $('.sphinx-has-comment').comment(); + + // highlight search words in search results + $("div.context").each(function() { + var params = $.getQueryParameters(); + var terms = (params.q) ? params.q[0].split(/\s+/) : []; + var result = $(this); + $.each(terms, function() { + result.highlightText(this.toLowerCase(), 'highlighted'); + }); + }); + + // directly open comment window if requested + var anchor = document.location.hash; + if (anchor.substring(0, 9) == '#comment-') { + $('#ao' + anchor.substring(9)).click(); + document.location.hash = '#s' + anchor.substring(9); + } +}); diff --git a/sphinx/themes/default/static/sidebar.js b/sphinx/themes/default/static/sidebar.js index e9ef491c..a45e1926 100644 --- a/sphinx/themes/default/static/sidebar.js +++ b/sphinx/themes/default/static/sidebar.js @@ -29,6 +29,9 @@ $(function() { var sidebar = $('.sphinxsidebar'); var sidebarwrapper = $('.sphinxsidebarwrapper'); + // for some reason, the document has no sidebar; do not run into errors + if (!sidebar.length) return; + // original margin-left of the bodywrapper and width of the sidebar // with the sidebar expanded var bw_margin_expanded = bodywrapper.css('margin-left'); diff --git a/sphinx/themes/epub/epub-cover.html b/sphinx/themes/epub/epub-cover.html new file mode 100644 index 00000000..f8088925 --- /dev/null +++ b/sphinx/themes/epub/epub-cover.html @@ -0,0 +1,24 @@ +{# + epub/epub-cover.html + ~~~~~~~~~~~~~~~~~~~~ + + Sample template for the html cover page. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +#} +{% extends "layout.html" %} +{%- block rootrellink %}{% endblock %} +{%- block relbaritems %}{% endblock %} +{%- block sidebarlogo %}{% endblock %} +{%- block linktags %}{% endblock %} +{%- block relbar1 %}{% endblock %} +{%- block sidebar1 %}{% endblock %} +{%- block sidebar2 %}{% endblock %} +{%- block footer %}{% endblock %} + +{% block content %} + <div class="epub-cover"> + <img src="{{ image }}" alt="Cover image" /> + </div> +{% endblock %} diff --git a/sphinx/themes/pyramid/layout.html b/sphinx/themes/pyramid/layout.html new file mode 100644 index 00000000..1887361e --- /dev/null +++ b/sphinx/themes/pyramid/layout.html @@ -0,0 +1,24 @@ +{% extends "basic/layout.html" %} + +{%- block extrahead %} +<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Neuton&subset=latin" type="text/css" media="screen" charset="utf-8" /> +<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Nobile:regular,italic,bold,bolditalic&subset=latin" type="text/css" media="screen" charset="utf-8" /> +<!--[if lte IE 6]> +<link rel="stylesheet" href="{{ pathto('_static/ie6.css', 1) }}" type="text/css" media="screen" charset="utf-8" /> +<![endif]--> +{% endblock %} + +{% block header %} +{%- if logo %} +<div class="header"> + <div class="logo"> + <a href="{{ pathto(master_doc) }}"> + <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/> + </a> + </div> +</div> +{%- endif %} +{% endblock %} + +{%- block sidebarlogo %}{%- endblock %} +{%- block sidebarsourcelink %}{%- endblock %} diff --git a/sphinx/themes/pyramid/static/dialog-note.png b/sphinx/themes/pyramid/static/dialog-note.png Binary files differnew file mode 100644 index 00000000..263fbd58 --- /dev/null +++ b/sphinx/themes/pyramid/static/dialog-note.png diff --git a/sphinx/themes/pyramid/static/dialog-seealso.png b/sphinx/themes/pyramid/static/dialog-seealso.png Binary files differnew file mode 100644 index 00000000..3eb7b05c --- /dev/null +++ b/sphinx/themes/pyramid/static/dialog-seealso.png diff --git a/sphinx/themes/pyramid/static/dialog-topic.png b/sphinx/themes/pyramid/static/dialog-topic.png Binary files differnew file mode 100644 index 00000000..2ac57475 --- /dev/null +++ b/sphinx/themes/pyramid/static/dialog-topic.png diff --git a/sphinx/themes/pyramid/static/dialog-warning.png b/sphinx/themes/pyramid/static/dialog-warning.png Binary files differnew file mode 100644 index 00000000..7233d45d --- /dev/null +++ b/sphinx/themes/pyramid/static/dialog-warning.png diff --git a/sphinx/themes/pyramid/static/epub.css b/sphinx/themes/pyramid/static/epub.css new file mode 100644 index 00000000..28dff738 --- /dev/null +++ b/sphinx/themes/pyramid/static/epub.css @@ -0,0 +1,310 @@ +/* + * default.css_t + * ~~~~~~~~~~~~~ + * + * Sphinx stylesheet -- default theme. + * + * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: {{ theme_bodyfont }}; + font-size: 100%; + background-color: {{ theme_footerbgcolor }}; + color: #000; + margin: 0; + padding: 0; +} + +div.document { + background-color: {{ theme_sidebarbgcolor }}; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +div.body { + background-color: {{ theme_bgcolor }}; + color: {{ theme_textcolor }}; + padding: 0 20px 30px 20px; +} + +{%- if theme_rightsidebar|tobool %} +div.bodywrapper { + margin: 0 230px 0 0; +} +{%- endif %} + +div.footer { + color: {{ theme_footertextcolor }}; + width: 100%; + padding: 9px 0 9px 0; + text-align: center; + font-size: 75%; +} + +div.footer a { + color: {{ theme_footertextcolor }}; + text-decoration: underline; +} + +div.related { + background-color: {{ theme_relbarbgcolor }}; + line-height: 30px; + color: {{ theme_relbartextcolor }}; +} + +div.related a { + color: {{ theme_relbarlinkcolor }}; +} + +div.sphinxsidebar { + {%- if theme_stickysidebar|tobool %} + top: 30px; + bottom: 0; + margin: 0; + position: fixed; + overflow: auto; + height: auto; + {%- endif %} + {%- if theme_rightsidebar|tobool %} + float: right; + {%- if theme_stickysidebar|tobool %} + right: 0; + {%- endif %} + {%- endif %} +} + +{%- if theme_stickysidebar|tobool %} +/* this is nice, but it it leads to hidden headings when jumping + to an anchor */ +/* +div.related { + position: fixed; +} + +div.documentwrapper { + margin-top: 30px; +} +*/ +{%- endif %} + +div.sphinxsidebar h3 { + font-family: {{ theme_headfont }}; + color: {{ theme_sidebartextcolor }}; + font-size: 1.4em; + font-weight: normal; + margin: 0; + padding: 0; +} + +div.sphinxsidebar h3 a { + color: {{ theme_sidebartextcolor }}; +} + +div.sphinxsidebar h4 { + font-family: {{ theme_headfont }}; + color: {{ theme_sidebartextcolor }}; + font-size: 1.3em; + font-weight: normal; + margin: 5px 0 0 0; + padding: 0; +} + +div.sphinxsidebar p { + color: {{ theme_sidebartextcolor }}; +} + +div.sphinxsidebar p.topless { + margin: 5px 10px 10px 10px; +} + +div.sphinxsidebar ul { + margin: 10px; + padding: 0; + color: {{ theme_sidebartextcolor }}; +} + +div.sphinxsidebar a { + color: {{ theme_sidebarlinkcolor }}; +} + +div.sphinxsidebar input { + border: 1px solid {{ theme_sidebarlinkcolor }}; + font-family: sans-serif; + font-size: 1em; +} + +{% if theme_collapsiblesidebar|tobool %} +/* for collapsible sidebar */ +div#sidebarbutton { + background-color: {{ theme_sidebarbtncolor }}; +} +{% endif %} + +/* -- hyperlink styles ------------------------------------------------------ */ + +a { + color: {{ theme_linkcolor }}; + text-decoration: none; +} + +a:visited { + color: {{ theme_visitedlinkcolor }}; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +{% if theme_externalrefs|tobool %} +a.external { + text-decoration: none; + border-bottom: 1px dashed {{ theme_linkcolor }}; +} + +a.external:hover { + text-decoration: none; + border-bottom: none; +} + +a.external:visited { + text-decoration: none; + border-bottom: 1px dashed {{ theme_visitedlinkcolor }}; +} +{% endif %} + +/* -- body styles ----------------------------------------------------------- */ + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: {{ theme_headfont }}; + background-color: {{ theme_headbgcolor }}; + font-weight: normal; + color: {{ theme_headtextcolor }}; + border-bottom: 1px solid #ccc; + margin: 20px -20px 10px -20px; + padding: 3px 0 3px 10px; +} + +div.body h1 { margin-top: 0; font-size: 200%; } +div.body h2 { font-size: 160%; } +div.body h3 { font-size: 140%; } +div.body h4 { font-size: 120%; } +div.body h5 { font-size: 110%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: {{ theme_headlinkcolor }}; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: {{ theme_headlinkcolor }}; + color: white; +} + +div.body p, div.body dd, div.body li { + text-align: justify; + line-height: 130%; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.admonition p { + margin-bottom: 5px; +} + +div.admonition pre { + margin-bottom: 5px; +} + +div.admonition ul, div.admonition ol { + margin-bottom: 5px; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +div.topic { + background-color: #eee; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre { + padding: 5px; + background-color: {{ theme_codebgcolor }}; + color: {{ theme_codetextcolor }}; + line-height: 120%; + border: 1px solid #ac9; + border-left: none; + border-right: none; +} + +tt { + background-color: #ecf0f3; + padding: 0 1px 0 1px; + font-size: 0.95em; +} + +th { + background-color: #ede; +} + +.warning tt { + background: #efc2c2; +} + +.note tt { + background: #d6d6d6; +} + +.viewcode-back { + font-family: {{ theme_bodyfont }}; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} diff --git a/sphinx/themes/pyramid/static/footerbg.png b/sphinx/themes/pyramid/static/footerbg.png Binary files differnew file mode 100644 index 00000000..1fbc873d --- /dev/null +++ b/sphinx/themes/pyramid/static/footerbg.png diff --git a/sphinx/themes/pyramid/static/headerbg.png b/sphinx/themes/pyramid/static/headerbg.png Binary files differnew file mode 100644 index 00000000..0596f202 --- /dev/null +++ b/sphinx/themes/pyramid/static/headerbg.png diff --git a/sphinx/themes/pyramid/static/ie6.css b/sphinx/themes/pyramid/static/ie6.css new file mode 100644 index 00000000..74baa5d5 --- /dev/null +++ b/sphinx/themes/pyramid/static/ie6.css @@ -0,0 +1,7 @@ +* html img, +* html .png{position:relative;behavior:expression((this.runtimeStyle.behavior="none")&&(this.pngSet?this.pngSet=true:(this.nodeName == "IMG" && this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage = "none", +this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "',sizingMethod='image')", +this.src = "_static/transparent.gif"):(this.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''), +this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "',sizingMethod='crop')", +this.runtimeStyle.backgroundImage = "none")),this.pngSet=true) +);} diff --git a/sphinx/themes/pyramid/static/middlebg.png b/sphinx/themes/pyramid/static/middlebg.png Binary files differnew file mode 100644 index 00000000..2369cfb7 --- /dev/null +++ b/sphinx/themes/pyramid/static/middlebg.png diff --git a/sphinx/themes/pyramid/static/pyramid.css_t b/sphinx/themes/pyramid/static/pyramid.css_t new file mode 100644 index 00000000..283a96ff --- /dev/null +++ b/sphinx/themes/pyramid/static/pyramid.css_t @@ -0,0 +1,323 @@ +/* + * pylons.css_t + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- pylons theme. + * + * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: "Nobile", sans-serif; + font-size: 100%; + background-color: #393939; + color: #ffffff; + margin: 0; + padding: 0; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.document { + background-color: #eee; +} + +div.header { + width:100%; + background: #f4ad32 url(headerbg.png) repeat-x 0 top; + border-bottom: 2px solid #ffffff; +} + +div.logo { + text-align: center; + padding-top: 10px; +} + +div.body { + background-color: #ffffff; + color: #3E4349; + padding: 0 30px 30px 30px; + font-size: 1em; + border: 2px solid #ddd; + border-right-style: none; + overflow: auto; +} + +div.footer { + color: #ffffff; + width: 100%; + padding: 13px 0; + text-align: center; + font-size: 75%; + background: transparent; + clear:both; +} + +div.footer a { + color: #ffffff; + text-decoration: none; +} + +div.footer a:hover { + color: #e88f00; + text-decoration: underline; +} + +div.related { + line-height: 30px; + color: #373839; + font-size: 0.8em; + background-color: #eee; +} + +div.related a { + color: #1b61d6; +} + +div.related ul { + padding-left: 240px; +} + +div.sphinxsidebar { + font-size: 0.75em; + line-height: 1.5em; +} + +div.sphinxsidebarwrapper{ + padding: 10px 0; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: "Neuton", sans-serif; + color: #373839; + font-size: 1.4em; + font-weight: normal; + margin: 0; + padding: 5px 10px; + border-bottom: 2px solid #ddd; +} + +div.sphinxsidebar h4{ + font-size: 1.3em; +} + +div.sphinxsidebar h3 a { + color: #000000; +} + + +div.sphinxsidebar p { + color: #888; + padding: 5px 20px; +} + +div.sphinxsidebar p.topless { +} + +div.sphinxsidebar ul { + margin: 10px 20px; + padding: 0; + color: #373839; +} + +div.sphinxsidebar a { + color: #444; +} + +div.sphinxsidebar input { + border: 1px solid #ccc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar input[type=text]{ + margin-left: 20px; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 2px solid #c6d880; + background-color: #e6efc2; + width: 40%; + float: right; + border-right-style: none; + border-left-style: none; + padding: 10px 20px; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- body styles ----------------------------------------------------------- */ + +a, a .pre { + color: #1b61d6; + text-decoration: none; +} + +a:hover, a:hover .pre { + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: "Neuton", sans-serif; + background-color: #ffffff; + font-weight: normal; + color: #373839; + margin: 30px 0px 10px 0px; + padding: 5px 0; +} + +div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; } +div.body h2 { font-size: 150%; background-color: #ffffff; } +div.body h3 { font-size: 120%; background-color: #ffffff; } +div.body h4 { font-size: 110%; background-color: #ffffff; } +div.body h5 { font-size: 100%; background-color: #ffffff; } +div.body h6 { font-size: 100%; background-color: #ffffff; } + +a.headerlink { + color: #1b61d6; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + text-decoration: underline; +} + +div.body p, div.body dd, div.body li { + line-height: 1.5em; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.highlight{ + background-color: white; +} + +div.note { + border: 2px solid #7a9eec; + border-right-style: none; + border-left-style: none; + padding: 10px 20px 10px 60px; + background: #e1ecfe url(dialog-note.png) no-repeat 10px 8px; +} + +div.seealso { + background: #fff6bf url(dialog-seealso.png) no-repeat 10px 8px; + border: 2px solid #ffd324; + border-left-style: none; + border-right-style: none; + padding: 10px 20px 10px 60px; +} + +div.topic { + background: #eeeeee; + border: 2px solid #C6C9CB; + padding: 10px 20px; + border-right-style: none; + border-left-style: none; +} + +div.warning { + background: #fbe3e4 url(dialog-warning.png) no-repeat 10px 8px; + border: 2px solid #fbc2c4; + border-right-style: none; + border-left-style: none; + padding: 10px 20px 10px 60px; +} + +p.admonition-title { + display: none; +} + +p.admonition-title:after { + content: ":"; +} + +pre { + padding: 10px; + background-color: #fafafa; + color: #222; + line-height: 1.2em; + border: 2px solid #C6C9CB; + font-size: 1.1em; + margin: 1.5em 0 1.5em 0; + border-right-style: none; + border-left-style: none; +} + +tt { + background-color: transparent; + color: #222; + font-size: 1.1em; + font-family: monospace; +} + +.viewcode-back { + font-family: "Nobile", sans-serif; +} + +div.viewcode-block:target { + background-color: #fff6bf; + border: 2px solid #ffd324; + border-left-style: none; + border-right-style: none; + padding: 10px 20px; +} + +table.highlighttable { + width: 100%; +} + +table.highlighttable td { + padding: 0; +} + +a em.std-term { + color: #007f00; +} + +a:hover em.std-term { + text-decoration: underline; +} + +.download { + font-family: "Nobile", sans-serif; + font-weight: normal; + font-style: normal; +} + +tt.xref { + font-weight: normal; + font-style: normal; +} diff --git a/sphinx/themes/pyramid/static/transparent.gif b/sphinx/themes/pyramid/static/transparent.gif Binary files differnew file mode 100644 index 00000000..0341802e --- /dev/null +++ b/sphinx/themes/pyramid/static/transparent.gif diff --git a/sphinx/themes/pyramid/theme.conf b/sphinx/themes/pyramid/theme.conf new file mode 100644 index 00000000..409579fd --- /dev/null +++ b/sphinx/themes/pyramid/theme.conf @@ -0,0 +1,4 @@ +[theme] +inherit = basic +stylesheet = pyramid.css +pygments_style = sphinx.pygments_styles.PyramidStyle diff --git a/sphinx/theming.py b/sphinx/theming.py index ebc88d27..68d11a49 100644 --- a/sphinx/theming.py +++ b/sphinx/theming.py @@ -30,13 +30,13 @@ class Theme(object): themes = {} @classmethod - def init_themes(cls, builder): + def init_themes(cls, confdir, theme_path, warn=None): """Search all theme paths for available themes.""" - cls.themepath = list(builder.config.html_theme_path) + cls.themepath = list(theme_path) cls.themepath.append(path.join(package_dir, 'themes')) for themedir in cls.themepath[::-1]: - themedir = path.join(builder.confdir, themedir) + themedir = path.join(confdir, themedir) if not path.isdir(themedir): continue for theme in os.listdir(themedir): @@ -48,8 +48,9 @@ class Theme(object): tname = theme[:-4] tinfo = zfile except Exception: - builder.warn('file %r on theme path is not a valid ' - 'zipfile or contains no theme' % theme) + if warn: + warn('file %r on theme path is not a valid ' + 'zipfile or contains no theme' % theme) continue else: if not path.isfile(path.join(themedir, theme, THEMECONF)): @@ -98,8 +99,7 @@ class Theme(object): self.base = Theme(inherit) def get_confstr(self, section, name, default=NODEFAULT): - """ - Return the value for a theme configuration setting, searching the + """Return the value for a theme configuration setting, searching the base theme chain. """ try: @@ -114,9 +114,7 @@ class Theme(object): return default def get_options(self, overrides): - """ - Return a dictionary of theme options and their values. - """ + """Return a dictionary of theme options and their values.""" chain = [self.themeconf] base = self.base while base is not None: @@ -135,8 +133,7 @@ class Theme(object): return options def get_dirchain(self): - """ - Return a list of theme directories, beginning with this theme's, + """Return a list of theme directories, beginning with this theme's, then the base theme's, then that one's base theme's, etc. """ chain = [self.themedir] @@ -147,9 +144,7 @@ class Theme(object): return chain def cleanup(self): - """ - Remove temporary directories. - """ + """Remove temporary directories.""" if self.themedir_created: try: shutil.rmtree(self.themedir) diff --git a/sphinx/util/__init__.py b/sphinx/util/__init__.py index f4e08fbc..8218c04a 100644 --- a/sphinx/util/__init__.py +++ b/sphinx/util/__init__.py @@ -18,6 +18,8 @@ import tempfile import posixpath import traceback from os import path +from codecs import open +from collections import deque import docutils from docutils.utils import relative_path @@ -48,8 +50,7 @@ def docname_join(basedocname, docname): def get_matching_files(dirname, exclude_matchers=()): - """ - Get all file names in a directory, recursively. + """Get all file names in a directory, recursively. Exclude files and dirs matching some matcher in *exclude_matchers*. """ @@ -75,9 +76,8 @@ def get_matching_files(dirname, exclude_matchers=()): def get_matching_docs(dirname, suffix, exclude_matchers=()): - """ - Get all file names (without suffix) matching a suffix in a - directory, recursively. + """Get all file names (without suffix) matching a suffix in a directory, + recursively. Exclude files and dirs matching a pattern in *exclude_patterns*. """ @@ -140,8 +140,8 @@ def copy_static_entry(source, targetdir, builder, context={}, target = path.join(targetdir, path.basename(source)) if source.lower().endswith('_t') and builder.templates: # templated! - fsrc = open(source, 'rb') - fdst = open(target[:-2], 'wb') + fsrc = open(source, 'r', encoding='utf-8') + fdst = open(target[:-2], 'w', encoding='utf-8') fdst.write(builder.templates.render_string(fsrc.read(), context)) fsrc.close() fdst.close() @@ -162,19 +162,24 @@ def copy_static_entry(source, targetdir, builder, context={}, shutil.copytree(source, target) +_DEBUG_HEADER = '''\ +# Sphinx version: %s +# Python version: %s +# Docutils version: %s %s +# Jinja2 version: %s +''' + def save_traceback(): - """ - Save the current exception's traceback in a temporary file. - """ + """Save the current exception's traceback in a temporary file.""" import platform exc = traceback.format_exc() fd, path = tempfile.mkstemp('.log', 'sphinx-err-') - os.write(fd, '# Sphinx version: %s\n' % sphinx.__version__) - os.write(fd, '# Python version: %s\n' % platform.python_version()) - os.write(fd, '# Docutils version: %s %s\n' % (docutils.__version__, - docutils.__version_details__)) - os.write(fd, '# Jinja2 version: %s\n' % jinja2.__version__) - os.write(fd, exc) + os.write(fd, (_DEBUG_HEADER % + (sphinx.__version__, + platform.python_version(), + docutils.__version__, docutils.__version_details__, + jinja2.__version__)).encode('utf-8')) + os.write(fd, exc.encode('utf-8')) os.close(fd) return path @@ -227,8 +232,7 @@ class Tee(object): def parselinenos(spec, total): - """ - Parse a line number spec (such as "1,2,4-6") and return a list of + """Parse a line number spec (such as "1,2,4-6") and return a list of wanted line numbers. """ items = list() @@ -281,10 +285,16 @@ def rpartition(s, t): return '', s +def split_into(n, type, value): + """Split an index entry into a given number of parts at semicolons.""" + parts = map(lambda x: x.strip(), value.split(';', n-1)) + if sum(1 for part in parts if part) < n: + raise ValueError('invalid %s index entry %r' % (type, value)) + return parts + + def format_exception_cut_frames(x=1): - """ - Format an exception with traceback, but only the last x frames. - """ + """Format an exception with traceback, but only the last x frames.""" typ, val, tb = sys.exc_info() #res = ['Traceback (most recent call last):\n'] res = [] @@ -292,3 +302,34 @@ def format_exception_cut_frames(x=1): res += tbres[-x:] res += traceback.format_exception_only(typ, val) return ''.join(res) + + +class PeekableIterator(object): + """ + An iterator which wraps any iterable and makes it possible to peek to see + what's the next item. + """ + def __init__(self, iterable): + self.remaining = deque() + self._iterator = iter(iterable) + + def __iter__(self): + return self + + def next(self): + """Return the next item from the iterator.""" + if self.remaining: + return self.remaining.popleft() + return self._iterator.next() + + def push(self, item): + """Push the `item` on the internal stack, it will be returned on the + next :meth:`next` call. + """ + self.remaining.append(item) + + def peek(self): + """Return the next item without changing the state of the iterator.""" + item = self.next() + self.push(item) + return item diff --git a/sphinx/util/docstrings.py b/sphinx/util/docstrings.py index fca79c3f..ba81bf00 100644 --- a/sphinx/util/docstrings.py +++ b/sphinx/util/docstrings.py @@ -12,26 +12,29 @@ import sys -def prepare_docstring(s): - """ - Convert a docstring into lines of parseable reST. Return it as a list of - lines usable for inserting into a docutils ViewList (used as argument - of nested_parse().) An empty line is added to act as a separator between - this docstring and following content. +def prepare_docstring(s, ignore=1): + """Convert a docstring into lines of parseable reST. Remove common leading + indentation, where the indentation of a given number of lines (usually just + one) is ignored. + + Return the docstring as a list of lines usable for inserting into a docutils + ViewList (used as argument of nested_parse().) An empty line is added to + act as a separator between this docstring and following content. """ lines = s.expandtabs().splitlines() - # Find minimum indentation of any non-blank lines after first line. + # Find minimum indentation of any non-blank lines after ignored lines. margin = sys.maxint - for line in lines[1:]: + for line in lines[ignore:]: content = len(line.lstrip()) if content: indent = len(line) - content margin = min(margin, indent) - # Remove indentation. - if lines: - lines[0] = lines[0].lstrip() + # Remove indentation from ignored lines. + for i in range(ignore): + if i < len(lines): + lines[i] = lines[i].lstrip() if margin < sys.maxint: - for i in range(1, len(lines)): lines[i] = lines[i][margin:] + for i in range(ignore, len(lines)): lines[i] = lines[i][margin:] # Remove any leading blank lines. while lines and not lines[0]: lines.pop(0) @@ -42,9 +45,8 @@ def prepare_docstring(s): def prepare_commentdoc(s): - """ - Extract documentation comment lines (starting with #:) and return them as a - list of lines. Returns an empty list if there is no documentation. + """Extract documentation comment lines (starting with #:) and return them + as a list of lines. Returns an empty list if there is no documentation. """ result = [] lines = [line.strip() for line in s.expandtabs().splitlines()] diff --git a/sphinx/util/jsdump.py b/sphinx/util/jsdump.py index a0f6d0e3..191e2419 100644 --- a/sphinx/util/jsdump.py +++ b/sphinx/util/jsdump.py @@ -12,6 +12,8 @@ import re +from sphinx.util.pycompat import u + _str_re = re.compile(r'"(\\\\|\\"|[^"])*"') _int_re = re.compile(r'\d+') _name_re = re.compile(r'[a-zA-Z]\w*') @@ -50,7 +52,7 @@ def encode_string(s): return '"' + str(ESCAPE_ASCII.sub(replace, s)) + '"' def decode_string(s): - return ESCAPED.sub(lambda m: eval('u"'+m.group()+'"'), s) + return ESCAPED.sub(lambda m: eval(u + '"' + m.group() + '"'), s) reswords = set("""\ diff --git a/sphinx/util/jsonimpl.py b/sphinx/util/jsonimpl.py index b1982d9f..cf5ddb42 100644 --- a/sphinx/util/jsonimpl.py +++ b/sphinx/util/jsonimpl.py @@ -13,7 +13,7 @@ import UserString try: import json - # json-py's json module has not JSONEncoder; this will raise AttributeError + # json-py's json module has no JSONEncoder; this will raise AttributeError # if json-py is imported instead of the built-in json module JSONEncoder = json.JSONEncoder except (ImportError, AttributeError): diff --git a/sphinx/util/matching.py b/sphinx/util/matching.py index d358a2a0..fa6cb7e0 100644 --- a/sphinx/util/matching.py +++ b/sphinx/util/matching.py @@ -13,8 +13,7 @@ import re def _translate_pattern(pat): - """ - Translate a shell-style glob pattern to a regular expression. + """Translate a shell-style glob pattern to a regular expression. Adapted from the fnmatch module, but enhanced so that single stars don't match slashes. @@ -65,16 +64,14 @@ def compile_matchers(patterns): _pat_cache = {} def patmatch(name, pat): - """ - Return if name matches pat. Adapted from fnmatch module. - """ + """Return if name matches pat. Adapted from fnmatch module.""" if pat not in _pat_cache: _pat_cache[pat] = re.compile(_translate_pattern(pat)) return _pat_cache[pat].match(name) def patfilter(names, pat): - """ - Return the subset of the list NAMES that match PAT. + """Return the subset of the list NAMES that match PAT. + Adapted from fnmatch module. """ if pat not in _pat_cache: diff --git a/sphinx/util/nodes.py b/sphinx/util/nodes.py index fd6a2f83..a241f574 100644 --- a/sphinx/util/nodes.py +++ b/sphinx/util/nodes.py @@ -10,11 +10,12 @@ """ import re -import types from docutils import nodes from sphinx import addnodes +from sphinx.locale import pairindextypes +from sphinx.util.pycompat import class_types # \x00 means the "<" was backslash-escaped @@ -22,7 +23,28 @@ explicit_title_re = re.compile(r'^(.+?)\s*(?<!\x00)<(.*?)>$', re.DOTALL) caption_ref_re = explicit_title_re # b/w compat alias +def extract_messages(doctree): + """Extract translatable messages from a document tree.""" + for node in doctree.traverse(nodes.TextElement): + if isinstance(node, (nodes.Invisible, nodes.Inline)): + continue + # <field_name>orphan</field_name> + # XXX ignore all metadata (== docinfo) + if isinstance(node, nodes.field_name) and node.children[0] == 'orphan': + continue + msg = node.rawsource.replace('\n', ' ').strip() + # XXX nodes rendering empty are likely a bug in sphinx.addnodes + if msg: + yield node, msg + + def nested_parse_with_titles(state, content, node): + """Version of state.nested_parse() that allows titles and does not require + titles to have the same decoration as the calling document. + + This is useful when the parsed content comes from a completely different + context, such as docstrings. + """ # hack around title style bookkeeping surrounding_title_styles = state.memo.title_styles surrounding_section_level = state.memo.section_level @@ -51,6 +73,46 @@ def split_explicit_title(text): return False, text, text +indextypes = [ + 'single', 'pair', 'double', 'triple', 'see', 'seealso', +] + +def process_index_entry(entry, targetid): + indexentries = [] + entry = entry.strip() + oentry = entry + main = '' + if entry.startswith('!'): + main = 'main' + entry = entry[1:].lstrip() + for type in pairindextypes: + if entry.startswith(type+':'): + value = entry[len(type)+1:].strip() + value = pairindextypes[type] + '; ' + value + indexentries.append(('pair', value, targetid, main)) + break + else: + for type in indextypes: + if entry.startswith(type+':'): + value = entry[len(type)+1:].strip() + if type == 'double': + type = 'pair' + indexentries.append((type, value, targetid, main)) + break + # shorthand notation for single entries + else: + for value in oentry.split(','): + value = value.strip() + main = '' + if value.startswith('!'): + main = 'main' + value = value[1:].lstrip() + if not value: + continue + indexentries.append(('single', value, targetid, main)) + return indexentries + + def inline_all_toctrees(builder, docnameset, docname, tree, colorfunc): """Inline all toctrees in the *tree*. @@ -115,7 +177,7 @@ def _new_traverse(self, condition=None, if include_self and descend and not siblings and not ascend: if condition is None: return self._all_traverse([]) - elif isinstance(condition, (types.ClassType, type)): + elif isinstance(condition, class_types): return self._fast_traverse(condition, []) return self._old_traverse(condition, include_self, descend, siblings, ascend) diff --git a/sphinx/util/osutil.py b/sphinx/util/osutil.py index 6aeb2f4f..487a5afc 100644 --- a/sphinx/util/osutil.py +++ b/sphinx/util/osutil.py @@ -11,6 +11,7 @@ import os import re +import sys import time import errno import shutil @@ -58,8 +59,8 @@ def ensuredir(path): def walk(top, topdown=True, followlinks=False): - """ - Backport of os.walk from 2.6, where the followlinks argument was added. + """Backport of os.walk from 2.6, where the *followlinks* argument was + added. """ names = os.listdir(top) @@ -124,7 +125,10 @@ no_fn_re = re.compile(r'[^a-zA-Z0-9_-]') def make_filename(string): return no_fn_re.sub('', string) - -def ustrftime(format, *args): - # strftime for unicode strings - return time.strftime(unicode(format).encode('utf-8'), *args).decode('utf-8') +if sys.version_info < (3, 0): + def ustrftime(format, *args): + # strftime for unicode strings + return time.strftime(unicode(format).encode('utf-8'), *args) \ + .decode('utf-8') +else: + ustrftime = time.strftime diff --git a/sphinx/util/png.py b/sphinx/util/png.py index 5450bccf..50c72efd 100644 --- a/sphinx/util/png.py +++ b/sphinx/util/png.py @@ -12,18 +12,18 @@ import struct import binascii +from sphinx.util.pycompat import b + LEN_IEND = 12 LEN_DEPTH = 22 DEPTH_CHUNK_LEN = struct.pack('!i', 10) -DEPTH_CHUNK_START = 'tEXtDepth\x00' -IEND_CHUNK = '\x00\x00\x00\x00IEND\xAE\x42\x60\x82' +DEPTH_CHUNK_START = b('tEXtDepth\x00') +IEND_CHUNK = b('\x00\x00\x00\x00IEND\xAE\x42\x60\x82') def read_png_depth(filename): - """ - Read the special tEXt chunk indicating the depth from a PNG file. - """ + """Read the special tEXt chunk indicating the depth from a PNG file.""" result = None f = open(filename, 'rb') try: @@ -39,8 +39,8 @@ def read_png_depth(filename): def write_png_depth(filename, depth): - """ - Write the special tEXt chunk indicating the depth to a PNG file. + """Write the special tEXt chunk indicating the depth to a PNG file. + The chunk is placed immediately before the special IEND chunk. """ data = struct.pack('!i', depth) diff --git a/sphinx/util/pycompat.py b/sphinx/util/pycompat.py index bbaf4e23..a95c9332 100644 --- a/sphinx/util/pycompat.py +++ b/sphinx/util/pycompat.py @@ -13,11 +13,104 @@ import sys import codecs import encodings - -try: +# ------------------------------------------------------------------------------ +# Python 2/3 compatibility + +if sys.version_info >= (3, 0): + # Python 3 + class_types = (type,) + # the ubiquitous "bytes" helper functions + def b(s): + return s.encode('utf-8') + bytes = bytes + # prefix for Unicode strings + u = '' + # support for running 2to3 over config files + def convert_with_2to3(filepath): + from lib2to3.refactor import RefactoringTool, get_fixers_from_package + from lib2to3.pgen2.parse import ParseError + fixers = get_fixers_from_package('lib2to3.fixes') + refactoring_tool = RefactoringTool(fixers) + source = refactoring_tool._read_python_source(filepath)[0] + try: + tree = refactoring_tool.refactor_string(source, 'conf.py') + except ParseError, err: + # do not propagate lib2to3 exceptions + lineno, offset = err.context[1] + # try to match ParseError details with SyntaxError details + raise SyntaxError(err.msg, (filepath, lineno, offset, err.value)) + return unicode(tree) + +else: + # Python 2 + from types import ClassType + class_types = (type, ClassType) + b = str + bytes = str + u = 'u' + # no need to refactor on 2.x versions + convert_with_2to3 = None + + +# ------------------------------------------------------------------------------ +# Missing builtins and itertools in Python < 2.6 + +if sys.version_info >= (2, 6): + # Python >= 2.6 + next = next + + from itertools import product + try: + from itertools import zip_longest # Python 3 name + except ImportError: + from itertools import izip_longest as zip_longest + +else: + # Python < 2.6 + from itertools import izip, repeat, chain + + # this is on Python 2, where the method is called "next" (it is refactored + # to __next__ by 2to3, but in that case never executed) + def next(iterator): + return iterator.next() + + # These replacement functions have been taken from the Python 2.6 + # itertools documentation. + def product(*args, **kwargs): + pools = map(tuple, args) * kwargs.get('repeat', 1) + result = [[]] + for pool in pools: + result = [x + [y] for x in result for y in pool] + for prod in result: + yield tuple(prod) + + def zip_longest(*args, **kwds): + # zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D- + fillvalue = kwds.get('fillvalue') + def sentinel(counter = ([fillvalue]*(len(args)-1)).pop): + yield counter() # yields the fillvalue, or raises IndexError + fillers = repeat(fillvalue) + iters = [chain(it, sentinel(), fillers) for it in args] + try: + for tup in izip(*iters): + yield tup + except IndexError: + pass + + +# ------------------------------------------------------------------------------ +# Missing builtins and codecs in Python < 2.5 + +if sys.version_info >= (2, 5): + # Python >= 2.5 + base_exception = BaseException any = any all = all -except NameError: + +else: + # Python 2.4 + base_exception = Exception + def all(gen): for i in gen: if not i: @@ -30,8 +123,6 @@ except NameError: return True return False - -if sys.version_info < (2, 5): # Python 2.4 doesn't know the utf-8-sig encoding, so deliver it here def my_search_function(encoding): diff --git a/sphinx/util/websupport.py b/sphinx/util/websupport.py new file mode 100644 index 00000000..d9b47213 --- /dev/null +++ b/sphinx/util/websupport.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +""" + sphinx.util.websupport + ~~~~~~~~~~~~~~~~~~~~~~ + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +def is_commentable(node): + #return node.__class__.__name__ in ('paragraph', 'literal_block') + return node.__class__.__name__ == 'paragraph' diff --git a/sphinx/versioning.py b/sphinx/versioning.py new file mode 100644 index 00000000..f50f80b0 --- /dev/null +++ b/sphinx/versioning.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- +""" + sphinx.versioning + ~~~~~~~~~~~~~~~~~ + + Implements the low-level algorithms Sphinx uses for the versioning of + doctrees. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" +from uuid import uuid4 +from operator import itemgetter +from collections import defaultdict + +from sphinx.util.pycompat import product, zip_longest + + +# anything below that ratio is considered equal/changed +VERSIONING_RATIO = 65 + + +def add_uids(doctree, condition): + """Add a unique id to every node in the `doctree` which matches the + condition and yield the nodes. + + :param doctree: + A :class:`docutils.nodes.document` instance. + + :param condition: + A callable which returns either ``True`` or ``False`` for a given node. + """ + for node in doctree.traverse(condition): + node.uid = uuid4().hex + yield node + + +def merge_doctrees(old, new, condition): + """Merge the `old` doctree with the `new` one while looking at nodes + matching the `condition`. + + Each node which replaces another one or has been added to the `new` doctree + will be yielded. + + :param condition: + A callable which returns either ``True`` or ``False`` for a given node. + """ + old_iter = old.traverse(condition) + new_iter = new.traverse(condition) + old_nodes = [] + new_nodes = [] + ratios = defaultdict(list) + seen = set() + # compare the nodes each doctree in order + for old_node, new_node in zip_longest(old_iter, new_iter): + if old_node is None: + new_nodes.append(new_node) + continue + if new_node is None: + old_nodes.append(old_node) + continue + ratio = get_ratio(old_node.rawsource, new_node.rawsource) + if ratio == 0: + new_node.uid = old_node.uid + seen.add(new_node) + else: + ratios[old_node, new_node] = ratio + old_nodes.append(old_node) + new_nodes.append(new_node) + # calculate the ratios for each unequal pair of nodes, should we stumble + # on a pair which is equal we set the uid and add it to the seen ones + for old_node, new_node in product(old_nodes, new_nodes): + if new_node in seen or (old_node, new_node) in ratios: + continue + ratio = get_ratio(old_node.rawsource, new_node.rawsource) + if ratio == 0: + new_node.uid = old_node.uid + seen.add(new_node) + else: + ratios[old_node, new_node] = ratio + # choose the old node with the best ratio for each new node and set the uid + # as long as the ratio is under a certain value, in which case we consider + # them not changed but different + ratios = sorted(ratios.iteritems(), key=itemgetter(1)) + for (old_node, new_node), ratio in ratios: + if new_node in seen: + continue + else: + seen.add(new_node) + if ratio < VERSIONING_RATIO: + new_node.uid = old_node.uid + else: + new_node.uid = uuid4().hex + yield new_node + # create new uuids for any new node we left out earlier, this happens + # if one or more nodes are simply added. + for new_node in set(new_nodes) - seen: + new_node.uid = uuid4().hex + yield new_node + + +def get_ratio(old, new): + """Return a "similiarity ratio" (in percent) representing the similarity + between the two strings where 0 is equal and anything above less than equal. + """ + if not all([old, new]): + return VERSIONING_RATIO + return levenshtein_distance(old, new) / (len(old) / 100.0) + + +def levenshtein_distance(a, b): + """Return the Levenshtein edit distance between two strings *a* and *b*.""" + if a == b: + return 0 + if len(a) < len(b): + a, b = b, a + if not a: + return len(b) + previous_row = xrange(len(b) + 1) + for i, column1 in enumerate(a): + current_row = [i + 1] + for j, column2 in enumerate(b): + insertions = previous_row[j + 1] + 1 + deletions = current_row[j] + 1 + substitutions = previous_row[j] + (column1 != column2) + current_row.append(min(insertions, deletions, substitutions)) + previous_row = current_row + return previous_row[-1] diff --git a/sphinx/websupport/__init__.py b/sphinx/websupport/__init__.py new file mode 100644 index 00000000..15c619af --- /dev/null +++ b/sphinx/websupport/__init__.py @@ -0,0 +1,455 @@ +# -*- coding: utf-8 -*- +""" + sphinx.websupport + ~~~~~~~~~~~~~~~~~ + + Base Module for web support functions. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import cgi +import sys +import cPickle as pickle +import posixpath +from os import path + +from jinja2 import Environment, FileSystemLoader + +from docutils.core import publish_parts + +from sphinx.application import Sphinx +from sphinx.util.osutil import ensuredir +from sphinx.util.jsonimpl import dumps as dump_json +from sphinx.websupport import errors +from sphinx.websupport.search import BaseSearch, SEARCH_ADAPTERS +from sphinx.websupport.storage import StorageBackend + + +class WebSupport(object): + """The main API class for the web support package. All interactions + with the web support package should occur through this class. + """ + def __init__(self, + srcdir=None, # only required for building + builddir='', # the dir with data/static/doctrees subdirs + datadir=None, # defaults to builddir/data + staticdir=None, # defaults to builddir/static + doctreedir=None, # defaults to builddir/doctrees + search=None, # defaults to no search + storage=None, # defaults to SQLite in datadir + status=sys.stdout, + warning=sys.stderr, + moderation_callback=None, + allow_anonymous_comments=True, + docroot='', + staticroot='static', + ): + # directories + self.srcdir = srcdir + self.builddir = builddir + self.outdir = path.join(builddir, 'data') + self.datadir = datadir or self.outdir + self.staticdir = staticdir or path.join(self.builddir, 'static') + self.doctreedir = staticdir or path.join(self.builddir, 'doctrees') + # web server virtual paths + self.staticroot = staticroot.strip('/') + self.docroot = docroot.strip('/') + + self.status = status + self.warning = warning + self.moderation_callback = moderation_callback + self.allow_anonymous_comments = allow_anonymous_comments + + self._init_templating() + self._init_search(search) + self._init_storage(storage) + + self._globalcontext = None + + self._make_base_comment_options() + + def _init_storage(self, storage): + if isinstance(storage, StorageBackend): + self.storage = storage + else: + # If a StorageBackend isn't provided, use the default + # SQLAlchemy backend. + from sphinx.websupport.storage.sqlalchemystorage \ + import SQLAlchemyStorage + if not storage: + # no explicit DB path given; create default sqlite database + db_path = path.join(self.datadir, 'db', 'websupport.db') + ensuredir(path.dirname(db_path)) + storage = 'sqlite:///' + db_path + self.storage = SQLAlchemyStorage(storage) + + def _init_templating(self): + import sphinx + template_path = path.join(path.dirname(sphinx.__file__), + 'themes', 'basic') + loader = FileSystemLoader(template_path) + self.template_env = Environment(loader=loader) + + def _init_search(self, search): + if isinstance(search, BaseSearch): + self.search = search + else: + mod, cls = SEARCH_ADAPTERS[search or 'null'] + mod = 'sphinx.websupport.search.' + mod + SearchClass = getattr(__import__(mod, None, None, [cls]), cls) + search_path = path.join(self.datadir, 'search') + self.search = SearchClass(search_path) + self.results_template = \ + self.template_env.get_template('searchresults.html') + + def build(self): + """Build the documentation. Places the data into the `outdir` + directory. Use it like this:: + + support = WebSupport(srcdir, builddir, search='xapian') + support.build() + + This will read reStructured text files from `srcdir`. Then it will + build the pickles and search index, placing them into `builddir`. + It will also save node data to the database. + """ + if not self.srcdir: + raise RuntimeError('No srcdir associated with WebSupport object') + app = Sphinx(self.srcdir, self.srcdir, self.outdir, self.doctreedir, + 'websupport', status=self.status, warning=self.warning) + app.builder.set_webinfo(self.staticdir, self.staticroot, + self.search, self.storage) + + self.storage.pre_build() + app.build() + self.storage.post_build() + + def get_globalcontext(self): + """Load and return the "global context" pickle.""" + if not self._globalcontext: + infilename = path.join(self.datadir, 'globalcontext.pickle') + f = open(infilename, 'rb') + try: + self._globalcontext = pickle.load(f) + finally: + f.close() + return self._globalcontext + + def get_document(self, docname, username='', moderator=False): + """Load and return a document from a pickle. The document will + be a dict object which can be used to render a template:: + + support = WebSupport(datadir=datadir) + support.get_document('index', username, moderator) + + In most cases `docname` will be taken from the request path and + passed directly to this function. In Flask, that would be something + like this:: + + @app.route('/<path:docname>') + def index(docname): + username = g.user.name if g.user else '' + moderator = g.user.moderator if g.user else False + try: + document = support.get_document(docname, username, + moderator) + except DocumentNotFoundError: + abort(404) + render_template('doc.html', document=document) + + The document dict that is returned contains the following items + to be used during template rendering. + + * **body**: The main body of the document as HTML + * **sidebar**: The sidebar of the document as HTML + * **relbar**: A div containing links to related documents + * **title**: The title of the document + * **css**: Links to css files used by Sphinx + * **script**: Javascript containing comment options + + This raises :class:`~sphinx.websupport.errors.DocumentNotFoundError` + if a document matching `docname` is not found. + + :param docname: the name of the document to load. + """ + docpath = path.join(self.datadir, 'pickles', docname) + if path.isdir(docpath): + infilename = docpath + '/index.fpickle' + if not docname: + docname = 'index' + else: + docname += '/index' + else: + infilename = docpath + '.fpickle' + + try: + f = open(infilename, 'rb') + except IOError: + raise errors.DocumentNotFoundError( + 'The document "%s" could not be found' % docname) + try: + document = pickle.load(f) + finally: + f.close() + + comment_opts = self._make_comment_options(username, moderator) + comment_meta = self._make_metadata( + self.storage.get_metadata(docname, moderator)) + + document['script'] = comment_opts + comment_meta + document['script'] + return document + + def get_search_results(self, q): + """Perform a search for the query `q`, and create a set + of search results. Then render the search results as html and + return a context dict like the one created by + :meth:`get_document`:: + + document = support.get_search_results(q) + + :param q: the search query + """ + results = self.search.query(q) + ctx = { + 'q': q, + 'search_performed': True, + 'search_results': results, + 'docroot': '../', # XXX + } + document = { + 'body': self.results_template.render(ctx), + 'title': 'Search Results', + 'sidebar': '', + 'relbar': '' + } + return document + + def get_data(self, node_id, username=None, moderator=False): + """Get the comments and source associated with `node_id`. If + `username` is given vote information will be included with the + returned comments. The default CommentBackend returns a dict with + two keys, *source*, and *comments*. *source* is raw source of the + node and is used as the starting point for proposals a user can + add. *comments* is a list of dicts that represent a comment, each + having the following items: + + ============= ====================================================== + Key Contents + ============= ====================================================== + text The comment text. + username The username that was stored with the comment. + id The comment's unique identifier. + rating The comment's current rating. + age The time in seconds since the comment was added. + time A dict containing time information. It contains the + following keys: year, month, day, hour, minute, second, + iso, and delta. `iso` is the time formatted in ISO + 8601 format. `delta` is a printable form of how old + the comment is (e.g. "3 hours ago"). + vote If `user_id` was given, this will be an integer + representing the vote. 1 for an upvote, -1 for a + downvote, or 0 if unvoted. + node The id of the node that the comment is attached to. + If the comment's parent is another comment rather than + a node, this will be null. + parent The id of the comment that this comment is attached + to if it is not attached to a node. + children A list of all children, in this format. + proposal_diff An HTML representation of the differences between the + the current source and the user's proposed source. + ============= ====================================================== + + :param node_id: the id of the node to get comments for. + :param username: the username of the user viewing the comments. + :param moderator: whether the user is a moderator. + """ + return self.storage.get_data(node_id, username, moderator) + + def delete_comment(self, comment_id, username='', moderator=False): + """Delete a comment. + + If `moderator` is True, the comment and all descendants will be deleted + from the database, and the function returns ``True``. + + If `moderator` is False, the comment will be marked as deleted (but not + removed from the database so as not to leave any comments orphaned), but + only if the `username` matches the `username` on the comment. The + username and text files are replaced with "[deleted]" . In this case, + the function returns ``False``. + + This raises :class:`~sphinx.websupport.errors.UserNotAuthorizedError` + if moderator is False and `username` doesn't match username on the + comment. + + :param comment_id: the id of the comment to delete. + :param username: the username requesting the deletion. + :param moderator: whether the requestor is a moderator. + """ + return self.storage.delete_comment(comment_id, username, moderator) + + def add_comment(self, text, node_id='', parent_id='', displayed=True, + username=None, time=None, proposal=None, + moderator=False): + """Add a comment to a node or another comment. Returns the comment + in the same format as :meth:`get_comments`. If the comment is being + attached to a node, pass in the node's id (as a string) with the + node keyword argument:: + + comment = support.add_comment(text, node_id=node_id) + + If the comment is the child of another comment, provide the parent's + id (as a string) with the parent keyword argument:: + + comment = support.add_comment(text, parent_id=parent_id) + + If you would like to store a username with the comment, pass + in the optional `username` keyword argument:: + + comment = support.add_comment(text, node=node_id, + username=username) + + :param parent_id: the prefixed id of the comment's parent. + :param text: the text of the comment. + :param displayed: for moderation purposes + :param username: the username of the user making the comment. + :param time: the time the comment was created, defaults to now. + """ + if username is None: + if self.allow_anonymous_comments: + username = 'Anonymous' + else: + raise errors.UserNotAuthorizedError() + parsed = self._parse_comment_text(text) + comment = self.storage.add_comment(parsed, displayed, username, + time, proposal, node_id, + parent_id, moderator) + comment['original_text'] = text + if not displayed and self.moderation_callback: + self.moderation_callback(comment) + return comment + + def process_vote(self, comment_id, username, value): + """Process a user's vote. The web support package relies + on the API user to perform authentication. The API user will + typically receive a comment_id and value from a form, and then + make sure the user is authenticated. A unique username must be + passed in, which will also be used to retrieve the user's past + voting data. An example, once again in Flask:: + + @app.route('/docs/process_vote', methods=['POST']) + def process_vote(): + if g.user is None: + abort(401) + comment_id = request.form.get('comment_id') + value = request.form.get('value') + if value is None or comment_id is None: + abort(400) + support.process_vote(comment_id, g.user.name, value) + return "success" + + :param comment_id: the comment being voted on + :param username: the unique username of the user voting + :param value: 1 for an upvote, -1 for a downvote, 0 for an unvote. + """ + value = int(value) + if not -1 <= value <= 1: + raise ValueError('vote value %s out of range (-1, 1)' % value) + self.storage.process_vote(comment_id, username, value) + + def update_username(self, old_username, new_username): + """To remain decoupled from a webapp's authentication system, the + web support package stores a user's username with each of their + comments and votes. If the authentication system allows a user to + change their username, this can lead to stagnate data in the web + support system. To avoid this, each time a username is changed, this + method should be called. + + :param old_username: The original username. + :param new_username: The new username. + """ + self.storage.update_username(old_username, new_username) + + def accept_comment(self, comment_id, moderator=False): + """Accept a comment that is pending moderation. + + This raises :class:`~sphinx.websupport.errors.UserNotAuthorizedError` + if moderator is False. + + :param comment_id: The id of the comment that was accepted. + :param moderator: Whether the user making the request is a moderator. + """ + if not moderator: + raise errors.UserNotAuthorizedError() + self.storage.accept_comment(comment_id) + + def _make_base_comment_options(self): + """Helper method to create the part of the COMMENT_OPTIONS javascript + that remains the same throughout the lifetime of the + :class:`~sphinx.websupport.WebSupport` object. + """ + self.base_comment_opts = {} + + if self.docroot != '': + comment_urls = [ + ('addCommentURL', '_add_comment'), + ('getCommentsURL', '_get_comments'), + ('processVoteURL', '_process_vote'), + ('acceptCommentURL', '_accept_comment'), + ('deleteCommentURL', '_delete_comment') + ] + for key, value in comment_urls: + self.base_comment_opts[key] = \ + '/' + posixpath.join(self.docroot, value) + if self.staticroot != 'static': + static_urls = [ + ('commentImage', 'comment.png'), + ('closeCommentImage', 'comment-close.png'), + ('loadingImage', 'ajax-loader.gif'), + ('commentBrightImage', 'comment-bright.png'), + ('upArrow', 'up.png'), + ('upArrowPressed', 'up-pressed.png'), + ('downArrow', 'down.png'), + ('downArrowPressed', 'down-pressed.png') + ] + for key, value in static_urls: + self.base_comment_opts[key] = \ + '/' + posixpath.join(self.staticroot, '_static', value) + + def _make_comment_options(self, username, moderator): + """Helper method to create the parts of the COMMENT_OPTIONS + javascript that are unique to each request. + + :param username: The username of the user making the request. + :param moderator: Whether the user making the request is a moderator. + """ + rv = self.base_comment_opts.copy() + if username: + rv.update({ + 'voting': True, + 'username': username, + 'moderator': moderator, + }) + return '''\ + <script type="text/javascript"> + var COMMENT_OPTIONS = %s; + </script> + ''' % dump_json(rv) + + def _make_metadata(self, data): + return '''\ + <script type="text/javascript"> + var COMMENT_METADATA = %s; + </script> + ''' % dump_json(data) + + def _parse_comment_text(self, text): + settings = {'file_insertion_enabled': False, + 'output_encoding': 'unicode'} + try: + ret = publish_parts(text, writer_name='html', + settings_overrides=settings)['fragment'] + except Exception: + ret = cgi.escape(text) + return ret diff --git a/sphinx/websupport/errors.py b/sphinx/websupport/errors.py new file mode 100644 index 00000000..225b10c8 --- /dev/null +++ b/sphinx/websupport/errors.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +""" + sphinx.websupport.errors + ~~~~~~~~~~~~~~~~~~~~~~~~ + + Contains Error classes for the web support package. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + + +class DocumentNotFoundError(Exception): + pass + + +class UserNotAuthorizedError(Exception): + pass + + +class CommentNotAllowedError(Exception): + pass + + +class NullSearchException(Exception): + pass diff --git a/sphinx/websupport/search/__init__.py b/sphinx/websupport/search/__init__.py new file mode 100644 index 00000000..9410973c --- /dev/null +++ b/sphinx/websupport/search/__init__.py @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- +""" + sphinx.websupport.search + ~~~~~~~~~~~~~~~~~~~~~~~~ + + Server side search support for the web support package. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import re + + +class BaseSearch(object): + def __init__(self, path): + pass + + def init_indexing(self, changed=[]): + """Called by the builder to initialize the search indexer. `changed` + is a list of pagenames that will be reindexed. You may want to remove + these from the search index before indexing begins. + + :param changed: a list of pagenames that will be re-indexed + """ + pass + + def finish_indexing(self): + """Called by the builder when writing has been completed. Use this + to perform any finalization or cleanup actions after indexing is + complete. + """ + pass + + def feed(self, pagename, title, doctree): + """Called by the builder to add a doctree to the index. Converts the + `doctree` to text and passes it to :meth:`add_document`. You probably + won't want to override this unless you need access to the `doctree`. + Override :meth:`add_document` instead. + + :param pagename: the name of the page to be indexed + :param title: the title of the page to be indexed + :param doctree: is the docutils doctree representation of the page + """ + self.add_document(pagename, title, doctree.astext()) + + def add_document(self, pagename, title, text): + """Called by :meth:`feed` to add a document to the search index. + This method should should do everything necessary to add a single + document to the search index. + + `pagename` is name of the page being indexed. It is the combination + of the source files relative path and filename, + minus the extension. For example, if the source file is + "ext/builders.rst", the `pagename` would be "ext/builders". This + will need to be returned with search results when processing a + query. + + :param pagename: the name of the page being indexed + :param title: the page's title + :param text: the full text of the page + """ + raise NotImplementedError() + + def query(self, q): + """Called by the web support api to get search results. This method + compiles the regular expression to be used when :meth:`extracting + context <extract_context>`, then calls :meth:`handle_query`. You + won't want to override this unless you don't want to use the included + :meth:`extract_context` method. Override :meth:`handle_query` instead. + + :param q: the search query string. + """ + self.context_re = re.compile('|'.join(q.split()), re.I) + return self.handle_query(q) + + def handle_query(self, q): + """Called by :meth:`query` to retrieve search results for a search + query `q`. This should return an iterable containing tuples of the + following format:: + + (<path>, <title>, <context>) + + `path` and `title` are the same values that were passed to + :meth:`add_document`, and `context` should be a short text snippet + of the text surrounding the search query in the document. + + The :meth:`extract_context` method is provided as a simple way + to create the `context`. + + :param q: the search query + """ + raise NotImplementedError() + + def extract_context(self, text, length=240): + """Extract the context for the search query from the document's + full `text`. + + :param text: the full text of the document to create the context for + :param length: the length of the context snippet to return. + """ + res = self.context_re.search(text) + if res is None: + return '' + context_start = max(res.start() - length/2, 0) + context_end = context_start + length + context = ''.join(['...' if context_start > 0 else '', + text[context_start:context_end], + '...' if context_end < len(text) else '']) + + try: + return unicode(context, errors='ignore') + except TypeError: + return context + + def context_for_searchtool(self): + """Required by the HTML builder.""" + return {} + + +# The built-in search adapters. +SEARCH_ADAPTERS = { + 'xapian': ('xapiansearch', 'XapianSearch'), + 'whoosh': ('whooshsearch', 'WhooshSearch'), + 'null': ('nullsearch', 'NullSearch'), +} diff --git a/sphinx/websupport/search/nullsearch.py b/sphinx/websupport/search/nullsearch.py new file mode 100644 index 00000000..61f2d2fb --- /dev/null +++ b/sphinx/websupport/search/nullsearch.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +""" + sphinx.websupport.search.nullsearch + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + The default search adapter, does nothing. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from sphinx.websupport.search import BaseSearch +from sphinx.websupport.errors import NullSearchException + + +class NullSearch(BaseSearch): + """A search adapter that does nothing. Used when no search adapter + is specified. + """ + def feed(self, pagename, title, doctree): + pass + + def query(self, q): + raise NullSearchException('No search adapter specified.') diff --git a/sphinx/websupport/search/whooshsearch.py b/sphinx/websupport/search/whooshsearch.py new file mode 100644 index 00000000..1ed3d714 --- /dev/null +++ b/sphinx/websupport/search/whooshsearch.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +""" + sphinx.websupport.search.whooshsearch + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Whoosh search adapter. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from whoosh import index +from whoosh.fields import Schema, ID, TEXT +from whoosh.qparser import QueryParser +from whoosh.analysis import StemmingAnalyzer + +from sphinx.util.osutil import ensuredir +from sphinx.websupport.search import BaseSearch + + +class WhooshSearch(BaseSearch): + """The whoosh search adapter for sphinx web support.""" + + # Define the Whoosh Schema for the search index. + schema = Schema(path=ID(stored=True, unique=True), + title=TEXT(field_boost=2.0, stored=True), + text=TEXT(analyzer=StemmingAnalyzer(), stored=True)) + + def __init__(self, db_path): + ensuredir(db_path) + if index.exists_in(db_path): + self.index = index.open_dir(db_path) + else: + self.index = index.create_in(db_path, schema=self.schema) + self.qparser = QueryParser('text', self.schema) + + def init_indexing(self, changed=[]): + for changed_path in changed: + self.index.delete_by_term('path', changed_path) + self.index_writer = self.index.writer() + + def finish_indexing(self): + self.index_writer.commit() + + def add_document(self, pagename, title, text): + self.index_writer.add_document(path=unicode(pagename), + title=title, + text=text) + + def handle_query(self, q): + searcher = self.index.searcher() + whoosh_results = searcher.search(self.qparser.parse(q)) + results = [] + for result in whoosh_results: + context = self.extract_context(result['text']) + results.append((result['path'], + result.get('title', ''), + context)) + return results diff --git a/sphinx/websupport/search/xapiansearch.py b/sphinx/websupport/search/xapiansearch.py new file mode 100644 index 00000000..0615be84 --- /dev/null +++ b/sphinx/websupport/search/xapiansearch.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- +""" + sphinx.websupport.search.xapiansearch + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Xapian search adapter. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import xapian + +from sphinx.util.osutil import ensuredir +from sphinx.websupport.search import BaseSearch + + +class XapianSearch(BaseSearch): + # Adapted from the GSOC 2009 webapp project. + + # Xapian metadata constants + DOC_PATH = 0 + DOC_TITLE = 1 + + def __init__(self, db_path): + self.db_path = db_path + + def init_indexing(self, changed=[]): + ensuredir(self.db_path) + self.database = xapian.WritableDatabase(self.db_path, + xapian.DB_CREATE_OR_OPEN) + self.indexer = xapian.TermGenerator() + stemmer = xapian.Stem("english") + self.indexer.set_stemmer(stemmer) + + def finish_indexing(self): + # Ensure the db lock is removed. + del self.database + + def add_document(self, path, title, text): + self.database.begin_transaction() + # sphinx_page_path is used to easily retrieve documents by path. + sphinx_page_path = '"sphinxpagepath%s"' % path.replace('/', '_') + # Delete the old document if it exists. + self.database.delete_document(sphinx_page_path) + + doc = xapian.Document() + doc.set_data(text) + doc.add_value(self.DOC_PATH, path) + doc.add_value(self.DOC_TITLE, title) + self.indexer.set_document(doc) + self.indexer.index_text(text) + doc.add_term(sphinx_page_path) + for word in text.split(): + doc.add_posting(word, 1) + self.database.add_document(doc) + self.database.commit_transaction() + + def handle_query(self, q): + database = xapian.Database(self.db_path) + enquire = xapian.Enquire(database) + qp = xapian.QueryParser() + stemmer = xapian.Stem("english") + qp.set_stemmer(stemmer) + qp.set_database(database) + qp.set_stemming_strategy(xapian.QueryParser.STEM_SOME) + query = qp.parse_query(q) + + # Find the top 100 results for the query. + enquire.set_query(query) + matches = enquire.get_mset(0, 100) + + results = [] + + for m in matches: + context = self.extract_context(m.document.get_data()) + results.append((m.document.get_value(self.DOC_PATH), + m.document.get_value(self.DOC_TITLE), + ''.join(context) )) + + return results diff --git a/sphinx/websupport/storage/__init__.py b/sphinx/websupport/storage/__init__.py new file mode 100644 index 00000000..77292812 --- /dev/null +++ b/sphinx/websupport/storage/__init__.py @@ -0,0 +1,115 @@ +# -*- coding: utf-8 -*- +""" + sphinx.websupport.storage + ~~~~~~~~~~~~~~~~~~~~~~~~~ + + Storage for the websupport package. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +class StorageBackend(object): + def pre_build(self): + """Called immediately before the build process begins. Use this + to prepare the StorageBackend for the addition of nodes. + """ + pass + + def has_node(self, id): + """Check to see if a node exists. + + :param id: the id to check for. + """ + raise NotImplementedError() + + def add_node(self, id, document, source): + """Add a node to the StorageBackend. + + :param id: a unique id for the comment. + :param document: the name of the document the node belongs to. + :param source: the source files name. + """ + raise NotImplementedError() + + def post_build(self): + """Called after a build has completed. Use this to finalize the + addition of nodes if needed. + """ + pass + + def add_comment(self, text, displayed, username, time, + proposal, node_id, parent_id, moderator): + """Called when a comment is being added. + + :param text: the text of the comment + :param displayed: whether the comment should be displayed + :param username: the name of the user adding the comment + :param time: a date object with the time the comment was added + :param proposal: the text of the proposal the user made + :param node_id: the id of the node that the comment is being added to + :param parent_id: the id of the comment's parent comment. + :param moderator: whether the user adding the comment is a moderator + """ + raise NotImplementedError() + + def delete_comment(self, comment_id, username, moderator): + """Delete a comment. + + Raises :class:`~sphinx.websupport.errors.UserNotAuthorizedError` + if moderator is False and `username` doesn't match the username + on the comment. + + :param comment_id: The id of the comment being deleted. + :param username: The username of the user requesting the deletion. + :param moderator: Whether the user is a moderator. + """ + raise NotImplementedError() + + def get_metadata(self, docname, moderator): + """Get metadata for a document. This is currently just a dict + of node_id's with associated comment counts. + + :param docname: the name of the document to get metadata for. + :param moderator: whether the requester is a moderator. + """ + raise NotImplementedError() + + def get_data(self, node_id, username, moderator): + """Called to retrieve all data for a node. This should return a + dict with two keys, *source* and *comments* as described by + :class:`~sphinx.websupport.WebSupport`'s + :meth:`~sphinx.websupport.WebSupport.get_data` method. + + :param node_id: The id of the node to get data for. + :param username: The name of the user requesting the data. + :param moderator: Whether the requestor is a moderator. + """ + raise NotImplementedError() + + def process_vote(self, comment_id, username, value): + """Process a vote that is being cast. `value` will be either -1, 0, + or 1. + + :param comment_id: The id of the comment being voted on. + :param username: The username of the user casting the vote. + :param value: The value of the vote being cast. + """ + raise NotImplementedError() + + def update_username(self, old_username, new_username): + """If a user is allowed to change their username this method should + be called so that there is not stagnate data in the storage system. + + :param old_username: The username being changed. + :param new_username: What the username is being changed to. + """ + raise NotImplementedError() + + def accept_comment(self, comment_id): + """Called when a moderator accepts a comment. After the method is + called the comment should be displayed to all users. + + :param comment_id: The id of the comment being accepted. + """ + raise NotImplementedError() diff --git a/sphinx/websupport/storage/differ.py b/sphinx/websupport/storage/differ.py new file mode 100644 index 00000000..cd57bae8 --- /dev/null +++ b/sphinx/websupport/storage/differ.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +""" + sphinx.websupport.storage.differ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + A differ for creating an HTML representations of proposal diffs + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import re +from cgi import escape +from difflib import Differ + + +class CombinedHtmlDiff(object): + """Create an HTML representation of the differences between two pieces + of text. + """ + highlight_regex = re.compile(r'([\+\-\^]+)') + + def __init__(self, source, proposal): + proposal = escape(proposal) + + differ = Differ() + self.diff = list(differ.compare(source.splitlines(1), + proposal.splitlines(1))) + + def make_text(self): + return '\n'.join(self.diff) + + def make_html(self): + """Return the HTML representation of the differences between + `source` and `proposal`. + + :param source: the original text + :param proposal: the proposed text + """ + html = [] + diff = self.diff[:] + line = diff.pop(0) + next = diff.pop(0) + while True: + html.append(self._handle_line(line, next)) + line = next + try: + next = diff.pop(0) + except IndexError: + html.append(self._handle_line(line)) + break + return ''.join(html).rstrip() + + def _handle_line(self, line, next=None): + """Handle an individual line in a diff.""" + prefix = line[0] + text = line[2:] + + if prefix == ' ': + return text + elif prefix == '?': + return '' + + if next is not None and next[0] == '?': + tag = 'ins' if prefix == '+' else 'del' + text = self._highlight_text(text, next, tag) + css_class = 'prop-added' if prefix == '+' else 'prop-removed' + + return '<span class="%s">%s</span>\n' % (css_class, text.rstrip()) + + def _highlight_text(self, text, next, tag): + """Highlight the specific changes made to a line by adding + <ins> and <del> tags. + """ + next = next[2:] + new_text = [] + start = 0 + for match in self.highlight_regex.finditer(next): + new_text.append(text[start:match.start()]) + new_text.append('<%s>' % tag) + new_text.append(text[match.start():match.end()]) + new_text.append('</%s>' % tag) + start = match.end() + new_text.append(text[start:]) + return ''.join(new_text) diff --git a/sphinx/websupport/storage/sqlalchemy_db.py b/sphinx/websupport/storage/sqlalchemy_db.py new file mode 100644 index 00000000..dc2ec6a7 --- /dev/null +++ b/sphinx/websupport/storage/sqlalchemy_db.py @@ -0,0 +1,208 @@ +# -*- coding: utf-8 -*- +""" + sphinx.websupport.storage.sqlalchemy_db + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + SQLAlchemy table and mapper definitions used by the + :class:`sphinx.websupport.storage.sqlalchemystorage.SQLAlchemyStorage`. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from datetime import datetime + +from sqlalchemy import Column, Integer, Text, String, Boolean, \ + ForeignKey, DateTime +from sqlalchemy.orm import relation, sessionmaker, aliased +from sqlalchemy.ext.declarative import declarative_base + +Base = declarative_base() +Session = sessionmaker() + +db_prefix = 'sphinx_' + + +class Node(Base): + """Data about a Node in a doctree.""" + __tablename__ = db_prefix + 'nodes' + + id = Column(String(32), primary_key=True) + document = Column(String(256), nullable=False) + source = Column(Text, nullable=False) + + def nested_comments(self, username, moderator): + """Create a tree of comments. First get all comments that are + descendants of this node, then convert them to a tree form. + + :param username: the name of the user to get comments for. + :param moderator: whether the user is moderator. + """ + session = Session() + + if username: + # If a username is provided, create a subquery to retrieve all + # votes by this user. We will outerjoin with the comment query + # with this subquery so we have a user's voting information. + sq = session.query(CommentVote).\ + filter(CommentVote.username == username).subquery() + cvalias = aliased(CommentVote, sq) + q = session.query(Comment, cvalias.value).outerjoin(cvalias) + else: + # If a username is not provided, we don't need to join with + # CommentVote. + q = session.query(Comment) + + # Filter out all comments not descending from this node. + q = q.filter(Comment.path.like(str(self.id) + '.%')) + + # Filter out all comments that are not moderated yet. + if not moderator: + q = q.filter(Comment.displayed == True) + + # Retrieve all results. Results must be ordered by Comment.path + # so that we can easily transform them from a flat list to a tree. + results = q.order_by(Comment.path).all() + session.close() + + return self._nest_comments(results, username) + + def _nest_comments(self, results, username): + """Given the flat list of results, convert the list into a + tree. + + :param results: the flat list of comments + :param username: the name of the user requesting the comments. + """ + comments = [] + list_stack = [comments] + for r in results: + comment, vote = r if username else (r, 0) + + inheritance_chain = comment.path.split('.')[1:] + + if len(inheritance_chain) == len(list_stack) + 1: + parent = list_stack[-1][-1] + list_stack.append(parent['children']) + elif len(inheritance_chain) < len(list_stack): + while len(inheritance_chain) < len(list_stack): + list_stack.pop() + + list_stack[-1].append(comment.serializable(vote=vote)) + + return comments + + def __init__(self, id, document, source): + self.id = id + self.document = document + self.source = source + + +class CommentVote(Base): + """A vote a user has made on a Comment.""" + __tablename__ = db_prefix + 'commentvote' + + username = Column(String(64), primary_key=True) + comment_id = Column(Integer, ForeignKey(db_prefix + 'comments.id'), + primary_key=True) + # -1 if downvoted, +1 if upvoted, 0 if voted then unvoted. + value = Column(Integer, nullable=False) + + def __init__(self, comment_id, username, value): + self.comment_id = comment_id + self.username = username + self.value = value + + +class Comment(Base): + """An individual Comment being stored.""" + __tablename__ = db_prefix + 'comments' + + id = Column(Integer, primary_key=True) + rating = Column(Integer, nullable=False) + time = Column(DateTime, nullable=False) + text = Column(Text, nullable=False) + displayed = Column(Boolean, index=True, default=False) + username = Column(String(64)) + proposal = Column(Text) + proposal_diff = Column(Text) + path = Column(String(256), index=True) + + node_id = Column(String, ForeignKey(db_prefix + 'nodes.id')) + node = relation(Node, backref="comments") + + votes = relation(CommentVote, backref="comment", + cascade="all") + + def __init__(self, text, displayed, username, rating, time, + proposal, proposal_diff): + self.text = text + self.displayed = displayed + self.username = username + self.rating = rating + self.time = time + self.proposal = proposal + self.proposal_diff = proposal_diff + + def set_path(self, node_id, parent_id): + """Set the materialized path for this comment.""" + # This exists because the path can't be set until the session has + # been flushed and this Comment has an id. + if node_id: + self.node_id = node_id + self.path = '%s.%s' % (node_id, self.id) + else: + session = Session() + parent_path = session.query(Comment.path).\ + filter(Comment.id == parent_id).one().path + session.close() + self.node_id = parent_path.split('.')[0] + self.path = '%s.%s' % (parent_path, self.id) + + def serializable(self, vote=0): + """Creates a serializable representation of the comment. This is + converted to JSON, and used on the client side. + """ + delta = datetime.now() - self.time + + time = {'year': self.time.year, + 'month': self.time.month, + 'day': self.time.day, + 'hour': self.time.hour, + 'minute': self.time.minute, + 'second': self.time.second, + 'iso': self.time.isoformat(), + 'delta': self.pretty_delta(delta)} + + path = self.path.split('.') + node = path[0] + parent = path[-2] if len(path) > 2 else None + + return {'text': self.text, + 'username': self.username or 'Anonymous', + 'id': self.id, + 'node': node, + 'parent': parent, + 'rating': self.rating, + 'displayed': self.displayed, + 'age': delta.seconds, + 'time': time, + 'vote': vote or 0, + 'proposal_diff': self.proposal_diff, + 'children': []} + + def pretty_delta(self, delta): + """Create a pretty representation of the Comment's age. + (e.g. 2 minutes). + """ + days = delta.days + seconds = delta.seconds + hours = seconds / 3600 + minutes = seconds / 60 + + if days == 0: + dt = (minutes, 'minute') if hours == 0 else (hours, 'hour') + else: + dt = (days, 'day') + + return '%s %s ago' % dt if dt[0] == 1 else '%s %ss ago' % dt diff --git a/sphinx/websupport/storage/sqlalchemystorage.py b/sphinx/websupport/storage/sqlalchemystorage.py new file mode 100644 index 00000000..b2efe82b --- /dev/null +++ b/sphinx/websupport/storage/sqlalchemystorage.py @@ -0,0 +1,177 @@ +# -*- coding: utf-8 -*- +""" + sphinx.websupport.storage.sqlalchemystorage + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + An SQLAlchemy storage backend. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from datetime import datetime + +import sqlalchemy +from sqlalchemy.orm import aliased +from sqlalchemy.sql import func + +if sqlalchemy.__version__[:3] < '0.5': + raise ImportError('SQLAlchemy version 0.5 or greater is required for this ' + 'storage backend; you have version %s' % sqlalchemy.__version__) + +from sphinx.websupport.errors import CommentNotAllowedError, \ + UserNotAuthorizedError +from sphinx.websupport.storage import StorageBackend +from sphinx.websupport.storage.sqlalchemy_db import Base, Node, \ + Comment, CommentVote, Session +from sphinx.websupport.storage.differ import CombinedHtmlDiff + + +class SQLAlchemyStorage(StorageBackend): + """ + A :class:`.StorageBackend` using SQLAlchemy. + """ + + def __init__(self, uri): + self.engine = sqlalchemy.create_engine(uri) + Base.metadata.bind = self.engine + Base.metadata.create_all() + Session.configure(bind=self.engine) + + def pre_build(self): + self.build_session = Session() + + def has_node(self, id): + session = Session() + node = session.query(Node).filter(Node.id == id).first() + session.close() + return True if node else False + + def add_node(self, id, document, source): + node = Node(id, document, source) + self.build_session.add(node) + self.build_session.flush() + + def post_build(self): + self.build_session.commit() + self.build_session.close() + + def add_comment(self, text, displayed, username, time, + proposal, node_id, parent_id, moderator): + session = Session() + proposal_diff = None + proposal_diff_text = None + + if node_id and proposal: + node = session.query(Node).filter(Node.id == node_id).one() + differ = CombinedHtmlDiff(node.source, proposal) + proposal_diff = differ.make_html() + proposal_diff_text = differ.make_text() + elif parent_id: + parent = session.query(Comment.displayed).\ + filter(Comment.id == parent_id).one() + if not parent.displayed: + raise CommentNotAllowedError( + "Can't add child to a parent that is not displayed") + + comment = Comment(text, displayed, username, 0, + time or datetime.now(), proposal, proposal_diff) + session.add(comment) + session.flush() + # We have to flush the session before setting the path so the + # Comment has an id. + comment.set_path(node_id, parent_id) + session.commit() + d = comment.serializable() + d['document'] = comment.node.document + d['proposal_diff_text'] = proposal_diff_text + session.close() + return d + + def delete_comment(self, comment_id, username, moderator): + session = Session() + comment = session.query(Comment).\ + filter(Comment.id == comment_id).one() + if moderator: + # moderator mode: delete the comment and all descendants + # find descendants via path + session.query(Comment).filter( + Comment.path.like(comment.path + '.%')).delete(False) + session.delete(comment) + session.commit() + session.close() + return True + elif comment.username == username: + # user mode: do not really delete, but remove text and proposal + comment.username = '[deleted]' + comment.text = '[deleted]' + comment.proposal = '' + session.commit() + session.close() + return False + else: + session.close() + raise UserNotAuthorizedError() + + def get_metadata(self, docname, moderator): + session = Session() + subquery = session.query( + Comment.id, Comment.node_id, + func.count('*').label('comment_count')).group_by( + Comment.node_id).subquery() + nodes = session.query(Node.id, subquery.c.comment_count).outerjoin( + (subquery, Node.id==subquery.c.node_id)).filter( + Node.document==docname) + session.close() + session.commit() + return dict([(k, v or 0) for k, v in nodes]) + + def get_data(self, node_id, username, moderator): + session = Session() + node = session.query(Node).filter(Node.id == node_id).one() + session.close() + comments = node.nested_comments(username, moderator) + return {'source': node.source, + 'comments': comments} + + def process_vote(self, comment_id, username, value): + session = Session() + + subquery = session.query(CommentVote).filter( + CommentVote.username == username).subquery() + vote_alias = aliased(CommentVote, subquery) + q = session.query(Comment, vote_alias).outerjoin(vote_alias).filter( + Comment.id == comment_id) + comment, vote = q.one() + + if vote is None: + vote = CommentVote(comment_id, username, value) + comment.rating += value + else: + comment.rating += value - vote.value + vote.value = value + + session.add(vote) + session.commit() + session.close() + + def update_username(self, old_username, new_username): + session = Session() + + session.query(Comment).filter(Comment.username == old_username).\ + update({Comment.username: new_username}) + session.query(CommentVote).\ + filter(CommentVote.username == old_username).\ + update({CommentVote.username: new_username}) + + session.commit() + session.close() + + def accept_comment(self, comment_id): + session = Session() + session.query(Comment).filter(Comment.id == comment_id).update( + {Comment.displayed: True} + ) + + session.commit() + session.close() diff --git a/sphinx/writers/html.py b/sphinx/writers/html.py index f1c4d596..5719aca2 100644 --- a/sphinx/writers/html.py +++ b/sphinx/writers/html.py @@ -59,7 +59,11 @@ class HTMLTranslator(BaseTranslator): self.highlightlang = builder.config.highlight_language self.highlightlinenothreshold = sys.maxint self.protect_literal_text = 0 - self.add_permalinks = builder.config.html_add_permalinks + self.permalink_text = builder.config.html_add_permalinks + # support backwards-compatible setting to a bool + if not isinstance(self.permalink_text, basestring): + self.permalink_text = self.permalink_text and u'\u00B6' or '' + self.permalink_text = self.encode(self.permalink_text) self.secnumber_suffix = builder.config.html_secnumber_suffix def visit_start_of_file(self, node): @@ -81,11 +85,12 @@ class HTMLTranslator(BaseTranslator): and node['ids'] and node['first']: self.body.append('<!--[%s]-->' % node['ids'][0]) def depart_desc_signature(self, node): - if node['ids'] and self.add_permalinks and self.builder.add_permalinks: + if node['ids'] and self.permalink_text and self.builder.add_permalinks: self.body.append(u'<a class="headerlink" href="#%s" ' % node['ids'][0] + - u'title="%s">\u00B6</a>' % - _('Permalink to this definition')) + u'title="%s">%s</a>' % ( + _('Permalink to this definition'), + self.permalink_text)) self.body.append('</dt>\n') def visit_desc_addname(self, node): @@ -180,7 +185,7 @@ class HTMLTranslator(BaseTranslator): atts['title'] = node['reftitle'] self.body.append(self.starttag(node, 'a', '', **atts)) - if node.hasattr('secnumber'): + if node.get('secnumber'): self.body.append(('%s' + self.secnumber_suffix) % '.'.join(map(str, node['secnumber']))) @@ -202,14 +207,14 @@ class HTMLTranslator(BaseTranslator): self.depart_admonition(node) def add_secnumber(self, node): - if node.hasattr('secnumber'): + if node.get('secnumber'): self.body.append('.'.join(map(str, node['secnumber'])) + self.secnumber_suffix) elif isinstance(node.parent, nodes.section): anchorname = '#' + node.parent['ids'][0] if anchorname not in self.builder.secnumbers: anchorname = '' # try first heading which has no anchor - if anchorname in self.builder.secnumbers: + if self.builder.secnumbers.get(anchorname): numbers = self.builder.secnumbers[anchorname] self.body.append('.'.join(map(str, numbers)) + self.secnumber_suffix) @@ -246,9 +251,6 @@ class HTMLTranslator(BaseTranslator): # overwritten def visit_literal(self, node): - if len(node.children) == 1 and \ - node.children[0] in ('None', 'True', 'False'): - node['classes'].append('xref') self.body.append(self.starttag(node, 'tt', '', CLASS='docutils literal')) self.protect_literal_text += 1 @@ -481,24 +483,57 @@ class HTMLTranslator(BaseTranslator): def depart_abbreviation(self, node): self.body.append('</abbr>') + def visit_termsep(self, node): + self.body.append('<br />') + raise nodes.SkipNode + def depart_title(self, node): close_tag = self.context[-1] - if (self.add_permalinks and self.builder.add_permalinks and + if (self.permalink_text and self.builder.add_permalinks and node.parent.hasattr('ids') and node.parent['ids']): aname = node.parent['ids'][0] # add permalink anchor if close_tag.startswith('</h'): self.body.append(u'<a class="headerlink" href="#%s" ' % aname + - u'title="%s">\u00B6</a>' % - _('Permalink to this headline')) + u'title="%s">%s</a>' % ( + _('Permalink to this headline'), + self.permalink_text)) elif close_tag.startswith('</a></h'): self.body.append(u'</a><a class="headerlink" href="#%s" ' % aname + - u'title="%s">\u00B6' % - _('Permalink to this headline')) + u'title="%s">%s' % ( + _('Permalink to this headline'), + self.permalink_text)) BaseTranslator.depart_title(self, node) + # overwritten to add even/odd classes + + def visit_table(self, node): + self._table_row_index = 0 + return BaseTranslator.visit_table(self, node) + + def visit_row(self, node): + self._table_row_index += 1 + if self._table_row_index % 2 == 0: + node['classes'].append('row-even') + else: + node['classes'].append('row-odd') + self.body.append(self.starttag(node, 'tr', '')) + node.column = 0 + + def visit_field_list(self, node): + self._fieldlist_row_index = 0 + return BaseTranslator.visit_field_list(self, node) + + def visit_field(self, node): + self._fieldlist_row_index += 1 + if self._fieldlist_row_index % 2 == 0: + node['classes'].append('field-even') + else: + node['classes'].append('field-odd') + self.body.append(self.starttag(node, 'tr', '', CLASS='field')) + def unknown_visit(self, node): raise NotImplementedError('Unknown node: ' + node.__class__.__name__) diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index 3bed28ff..c557101b 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -23,6 +23,7 @@ from sphinx import addnodes from sphinx import highlighting from sphinx.errors import SphinxError from sphinx.locale import admonitionlabels, versionlabels, _ +from sphinx.util import split_into from sphinx.util.osutil import ustrftime from sphinx.util.pycompat import any from sphinx.util.texescape import tex_escape_map, tex_replace_map @@ -330,7 +331,7 @@ class LaTeXTranslator(nodes.NodeVisitor): # ... and all others are the appendices self.body.append(u'\n\\appendix\n') self.first_document = -1 - if node.has_key('docname'): + if 'docname' in node: self.body.append(self.hypertarget(':doc')) # "- 1" because the level is increased before the title is visited self.sectionlevel = self.top_sectionlevel - 1 @@ -718,7 +719,7 @@ class LaTeXTranslator(nodes.NodeVisitor): self.table.rowcount += 1 def visit_entry(self, node): - if node.has_key('morerows') or node.has_key('morecols'): + if 'morerows' in node or 'morecols' in node: raise UnsupportedError('%s:%s: column or row spanning cells are ' 'not yet implemented.' % (self.curfilestack[-1], node.line or '')) @@ -781,13 +782,17 @@ class LaTeXTranslator(nodes.NodeVisitor): def visit_term(self, node): ctx = '}] \\leavevmode' - if node.has_key('ids') and node['ids']: + if node.get('ids'): ctx += self.hypertarget(node['ids'][0]) self.body.append('\\item[{') self.context.append(ctx) def depart_term(self, node): self.body.append(self.context.pop()) + def visit_termsep(self, node): + self.body.append(', ') + raise nodes.SkipNode + def visit_classifier(self, node): self.body.append('{[}') def depart_classifier(self, node): @@ -869,20 +874,20 @@ class LaTeXTranslator(nodes.NodeVisitor): post = [] include_graphics_options = [] is_inline = self.is_inline(node) - if attrs.has_key('scale'): + if 'scale' in attrs: # Could also be done with ``scale`` option to # ``\includegraphics``; doing it this way for consistency. pre.append('\\scalebox{%f}{' % (attrs['scale'] / 100.0,)) post.append('}') - if attrs.has_key('width'): + if 'width' in attrs: w = self.latex_image_length(attrs['width']) if w: include_graphics_options.append('width=%s' % w) - if attrs.has_key('height'): + if 'height' in attrs: h = self.latex_image_length(attrs['height']) if h: include_graphics_options.append('height=%s' % h) - if attrs.has_key('align'): + if 'align' in attrs: align_prepost = { # By default latex aligns the top of an image. (1, 'top'): ('', ''), @@ -927,13 +932,13 @@ class LaTeXTranslator(nodes.NodeVisitor): for id in self.next_figure_ids: ids += self.hypertarget(id, anchor=False) self.next_figure_ids.clear() - if node.has_key('width') and node.get('align', '') in ('left', 'right'): + if 'width' in node and node.get('align', '') in ('left', 'right'): self.body.append('\\begin{wrapfigure}{%s}{%s}\n\\centering' % (node['align'] == 'right' and 'r' or 'l', node['width'])) self.context.append(ids + '\\end{wrapfigure}\n') else: - if (not node.attributes.has_key('align') or + if (not 'align' in node.attributes or node.attributes['align'] == 'center'): # centering does not add vertical space like center. align = '\n\\centering' @@ -1059,29 +1064,36 @@ class LaTeXTranslator(nodes.NodeVisitor): self.body.append('\n\\end{flushright}\n') def visit_index(self, node, scre=re.compile(r';\s*')): - if not node.get('inline'): + if not node.get('inline', True): self.body.append('\n') entries = node['entries'] - for type, string, tid, _ in entries: - if type == 'single': - self.body.append(r'\index{%s}' % - scre.sub('!', self.encode(string))) - elif type == 'pair': - parts = tuple(self.encode(x.strip()) - for x in string.split(';', 1)) - try: - self.body.append(r'\indexii{%s}{%s}' % parts) - except TypeError: - self.builder.warn('invalid pair index entry %r' % string) - elif type == 'triple': - parts = tuple(self.encode(x.strip()) - for x in string.split(';', 2)) - try: - self.body.append(r'\indexiii{%s}{%s}{%s}' % parts) - except TypeError: - self.builder.warn('invalid triple index entry %r' % string) - else: - self.builder.warn('unknown index entry type %s found' % type) + for type, string, tid, ismain in entries: + m = '' + if ismain: + m = '|textbf' + try: + if type == 'single': + p = scre.sub('!', self.encode(string)) + self.body.append(r'\index{%s%s}' % (p, m)) + elif type == 'pair': + p1, p2 = map(self.encode, split_into(2, 'pair', string)) + self.body.append(r'\index{%s!%s%s}\index{%s!%s%s}' % + (p1, p2, m, p2, p1, m)) + elif type == 'triple': + p1, p2, p3 = map(self.encode, split_into(3, 'triple', string)) + self.body.append( + r'\index{%s!%s %s%s}\index{%s!%s, %s%s}\index{%s!%s %s%s}' % + (p1, p2, p3, m, p2, p3, p1, m, p3, p1, p2, m)) + elif type == 'see': + p1, p2 = map(self.encode, split_into(2, 'see', string)) + self.body.append(r'\index{%s|see{%s}}' % (p1, p2)) + elif type == 'seealso': + p1, p2 = map(self.encode, split_into(2, 'seealso', string)) + self.body.append(r'\index{%s|see{%s}}' % (p1, p2)) + else: + self.builder.warn('unknown index entry type %s found' % type) + except ValueError, err: + self.builder.warn(str(err)) raise nodes.SkipNode def visit_raw(self, node): @@ -1099,11 +1111,17 @@ class LaTeXTranslator(nodes.NodeVisitor): uri.startswith('https:') or uri.startswith('ftp:'): self.body.append('\\href{%s}{' % self.encode_uri(uri)) # if configured, put the URL after the link - if self.builder.config.latex_show_urls and \ - node.astext() != uri: + show_urls = self.builder.config.latex_show_urls + if node.astext() != uri and show_urls and show_urls != 'no': if uri.startswith('mailto:'): uri = uri[7:] - self.context.append('} (%s)' % self.encode_uri(uri)) + if show_urls == 'footnote' and not \ + (self.in_footnote or self.in_caption): + # obviously, footnotes in footnotes are not going to work + self.context.append( + r'}\footnote{%s}' % self.encode_uri(uri)) + else: # all other true values (b/w compat) + self.context.append('} (%s)' % self.encode_uri(uri)) else: self.context.append('}') elif uri.startswith('#'): @@ -1212,7 +1230,7 @@ class LaTeXTranslator(nodes.NodeVisitor): self.no_contractions -= 1 if self.in_title: self.body.append(r'\texttt{%s}' % content) - elif node.has_key('role') and node['role'] == 'samp': + elif node.get('role') == 'samp': self.body.append(r'\samp{%s}' % content) else: self.body.append(r'\code{%s}' % content) @@ -1245,10 +1263,10 @@ class LaTeXTranslator(nodes.NodeVisitor): code = self.verbatim.rstrip('\n') lang = self.hlsettingstack[-1][0] linenos = code.count('\n') >= self.hlsettingstack[-1][1] - 1 - if node.has_key('language'): + if 'language' in node: # code-block directives lang = node['language'] - if node.has_key('linenos'): + if 'linenos' in node: linenos = node['linenos'] def warner(msg): self.builder.warn(msg, (self.curfilestack[-1], node.line)) diff --git a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py index 5377ee58..e6bccca7 100644 --- a/sphinx/writers/manpage.py +++ b/sphinx/writers/manpage.py @@ -161,6 +161,10 @@ class ManualPageTranslator(BaseTranslator): def depart_versionmodified(self, node): self.depart_paragraph(node) + def visit_termsep(self, node): + self.body.append(', ') + raise nodes.SkipNode + # overwritten -- we don't want source comments to show up def visit_comment(self, node): raise nodes.SkipNode @@ -235,6 +239,19 @@ class ManualPageTranslator(BaseTranslator): self.body.append(self.defs['reference'][0]) self.body.append(node.astext()) self.body.append(self.defs['reference'][1]) + + uri = node.get('refuri', '') + if uri.startswith('mailto:') or uri.startswith('http:') or \ + uri.startswith('https:') or uri.startswith('ftp:'): + # if configured, put the URL after the link + if self.builder.config.man_show_urls and \ + node.astext() != uri: + if uri.startswith('mailto:'): + uri = uri[7:] + self.body.extend([ + ' <', + self.defs['strong'][0], uri, self.defs['strong'][1], + '>']) raise nodes.SkipNode def visit_centered(self, node): diff --git a/sphinx/writers/texinfo.py b/sphinx/writers/texinfo.py new file mode 100644 index 00000000..c5c3aabe --- /dev/null +++ b/sphinx/writers/texinfo.py @@ -0,0 +1,1256 @@ +# -*- coding: utf-8 -*- +""" + sphinx.writers.texinfo + ~~~~~~~~~~~~~~~~~~~~~~ + + Custom docutils writer for Texinfo. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +import re +from os import path + +from docutils import nodes, writers + +from sphinx import addnodes +from sphinx.locale import versionlabels + + +TEMPLATE = """\ +\\input texinfo @c -*-texinfo-*- +@c %%**start of header +@setfilename %(filename)s +@documentencoding UTF-8 +@copying +Generated by Sphinx +@end copying +@settitle %(title)s +@defindex ge +@paragraphindent %(paragraphindent)s +@exampleindent %(exampleindent)s +@afourlatex +%(direntry)s +@c %%**end of header + +@titlepage +@title %(title)s +@author %(author)s +@end titlepage +@contents + +@c %%** start of user preamble +%(preamble)s +@c %%** end of user preamble + +@ifnottex +@node Top +@top %(title)s +@end ifnottex + +@c %%**start of body +%(body)s +@c %%**end of body +@bye +""" + + +def find_subsections(section): + """Return a list of subsections for the given ``section``.""" + result = [] + for child in section.children: + if isinstance(child, nodes.section): + result.append(child) + continue + result.extend(find_subsections(child)) + return result + + +## Escaping +# Which characters to escape depends on the context. In some cases, +# namely menus and node names, it's not possible to escape certain +# characters. + +def escape(s): + """Return a string with Texinfo command characters escaped.""" + s = s.replace('@', '@@') + s = s.replace('{', '@{') + s = s.replace('}', '@}') + # Prevent "--" from being converted to an "em dash" + # s = s.replace('-', '@w{-}') + return s + +def escape_arg(s): + """Return an escaped string suitable for use as an argument + to a Texinfo command.""" + s = escape(s) + # Commas are the argument delimeters + s = s.replace(',', '@comma{}') + # Normalize white space + s = ' '.join(s.split()).strip() + return s + +def escape_id(s): + """Return an escaped string suitable for node names, menu entries, + and xrefs anchors.""" + bad_chars = ',:.()@{}' + for bc in bad_chars: + s = s.replace(bc, ' ') + s = ' '.join(s.split()).strip() + return s + +class TexinfoWriter(writers.Writer): + """Texinfo writer for generating Texinfo documents.""" + supported = ('texinfo', 'texi') + + settings_spec = ( + 'Texinfo Specific Options', + None, + ( + ("Name of the resulting Info file to be created by 'makeinfo'. " + "Should probably end with '.info'.", + ['--texinfo-filename'], + {'default': '', 'metavar': '<file>'}), + + ('Specify the Info dir entry category.', + ['--texinfo-dir-category'], + {'default': 'Miscellaneous', 'metavar': '<name>'}), + + ('The name to use for the Info dir entry. ' + 'If not provided, no entry will be created.', + ['--texinfo-dir-entry'], + {'default': '', 'metavar': '<name>'}), + + ('A brief description (one or two lines) to use for the ' + 'Info dir entry.', + ['--texinfo-dir-description'], + {'default': '', 'metavar': '<desc>'}), + ) + ) + + settings_defaults = {} + settings_default_overrides = {'docinfo_xform': 0} + + output = None + + visitor_attributes = ('output', 'fragment') + + def __init__(self, builder): + writers.Writer.__init__(self) + self.builder = builder + + def translate(self): + self.visitor = visitor = TexinfoTranslator(self.document, self.builder) + self.document.walkabout(visitor) + visitor.finish() + for attr in self.visitor_attributes: + setattr(self, attr, getattr(visitor, attr)) + + +class TexinfoTranslator(nodes.NodeVisitor): + + ignore_missing_images = False + + default_elements = { + 'filename': '', + 'title': '', + 'paragraphindent': 2, + 'exampleindent': 4, + 'direntry': '', + 'preamble': '', + 'body': '', + } + + def __init__(self, document, builder): + nodes.NodeVisitor.__init__(self, document) + self.builder = builder + self.init_settings() + + self.written_ids = set() # node names and anchors in output + self.referenced_ids = set() # node names and anchors that should + # be in output + self.node_names = {} # node name --> node's name to display + self.node_menus = {} # node name --> node's menu entries + self.rellinks = {} # node name --> (next, previous, up) + + self.collect_node_names() + self.collect_node_menus() + self.collect_rellinks() + + self.short_ids = {} + self.body = [] + self.context = [] + self.previous_section = None + self.section_level = 0 + self.seen_title = False + self.next_section_targets = [] + self.escape_newlines = 0 + self.curfilestack = [] + + def finish(self): + while self.referenced_ids: + # Handle xrefs with missing anchors + r = self.referenced_ids.pop() + if r not in self.written_ids: + self.document.reporter.info( + "Unknown cross-reference target: `%s'" % r) + self.add_text('@anchor{%s}@w{%s}\n' % (r, ' ' * 30)) + self.fragment = ''.join(self.body).strip() + '\n' + self.elements['body'] = self.fragment + self.output = TEMPLATE % self.elements + + + ## Helper routines + + def init_settings(self): + settings = self.settings = self.document.settings + elements = self.elements = self.default_elements.copy() + elements.update({ + # if empty, the title is set to the first section title + 'title': settings.title, + 'author': escape_arg(settings.author), + # if empty, use basename of input file + 'filename': settings.texinfo_filename, + }) + # Title + title = elements['title'] + if not title: + title = self.document.next_node(nodes.title) + title = (title and title.astext()) or '<untitled>' + elements['title'] = escape_id(title) or '<untitled>' + # Filename + if not elements['filename']: + elements['filename'] = self.document.get('source') or 'untitled' + if elements['filename'][-4:] in ('.txt', '.rst'): + elements['filename'] = elements['filename'][:-4] + elements['filename'] += '.info' + # Direntry + if settings.texinfo_dir_entry: + elements['direntry'] = ('@dircategory %s\n' + '@direntry\n' + '* %s: (%s). %s\n' + '@end direntry\n') % ( + escape_id(settings.texinfo_dir_category), + escape_id(settings.texinfo_dir_entry), + elements['filename'], + escape_arg(settings.texinfo_dir_description)) + # allow the user to override them all + elements.update(settings.texinfo_elements) + + def collect_node_names(self): + """Generates a unique id for each section. + + Assigns the attribute ``node_name`` to each section.""" + self.document['node_name'] = 'Top' + self.node_names['Top'] = 'Top' + self.written_ids.update(('Top', 'top')) + + for section in self.document.traverse(nodes.section): + title = section.next_node(nodes.Titular) + name = (title and title.astext()) or '<untitled>' + node_id = name = escape_id(name) or '<untitled>' + assert node_id and name + nth, suffix = 1, '' + while (node_id + suffix).lower() in self.written_ids: + nth += 1 + suffix = '<%s>' % nth + node_id += suffix + assert node_id not in self.node_names + assert node_id not in self.written_ids + assert node_id.lower() not in self.written_ids + section['node_name'] = node_id + self.node_names[node_id] = name + self.written_ids.update((node_id, node_id.lower())) + + def collect_node_menus(self): + """Collect the menu entries for each "node" section.""" + node_menus = self.node_menus + for node in ([self.document] + + self.document.traverse(nodes.section)): + assert 'node_name' in node and node['node_name'] + entries = tuple(s['node_name'] + for s in find_subsections(node)) + node_menus[node['node_name']] = entries + # Try to find a suitable "Top" node + title = self.document.next_node(nodes.title) + top = (title and title.parent) or self.document + if not isinstance(top, (nodes.document, nodes.section)): + top = self.document + if top is not self.document: + entries = node_menus[top['node_name']] + entries += node_menus['Top'][1:] + node_menus['Top'] = entries + del node_menus[top['node_name']] + top['node_name'] = 'Top' + + def collect_rellinks(self): + """Collect the relative links (next, previous, up) for each "node".""" + rellinks = self.rellinks + node_menus = self.node_menus + for id, entries in node_menus.items(): + rellinks[id] = ['', '', ''] + # Up's + for id, entries in node_menus.items(): + for e in entries: + rellinks[e][2] = id + # Next's and prev's + for id, entries in node_menus.items(): + for i, id in enumerate(entries): + # First child's prev is empty + if i != 0: + rellinks[id][1] = entries[i-1] + # Last child's next is empty + if i != len(entries) - 1: + rellinks[id][0] = entries[i+1] + # Top's next is its first child + try: + first = node_menus['Top'][0] + except IndexError: + pass + else: + rellinks['Top'][0] = first + rellinks[first][1] = 'Top' + + def add_text(self, text, fresh=False): + """Add some text to the output. + + Optional argument ``fresh`` means to insert a newline before + the text if the last character out was not a newline.""" + if fresh: + if self.body and not self.body[-1].endswith('\n'): + self.body.append('\n') + self.body.append(text) + + def rstrip(self): + """Strip trailing whitespace from the current output.""" + while self.body and not self.body[-1].strip(): + del self.body[-1] + if not self.body: + return + self.body[-1] = self.body[-1].rstrip() + + def add_menu_entries(self, entries): + for entry in entries: + name = self.node_names[entry] + if name == entry: + self.add_text('* %s::\n' % name, fresh=1) + else: + self.add_text('* %s: %s.\n' % (name, entry), fresh=1) + + def add_menu(self, section, master=False): + entries = self.node_menus[section['node_name']] + if not entries: + return + self.add_text('\n@menu\n') + self.add_menu_entries(entries) + if master: + # Write the "detailed menu" + started_detail = False + for entry in entries: + subentries = self.node_menus[entry] + if not subentries: + continue + if not started_detail: + started_detail = True + self.add_text('\n@detailmenu\n' + ' --- The Detailed Node Listing ---\n') + self.add_text('\n%s\n\n' % self.node_names[entry]) + self.add_menu_entries(subentries) + if started_detail: + self.rstrip() + self.add_text('\n@end detailmenu\n') + self.rstrip() + self.add_text('\n@end menu\n\n') + + + def tex_image_length(self, width_str): + match = re.match('(\d*\.?\d*)\s*(\S*)', width_str) + if not match: + # fallback + return width_str + res = width_str + amount, unit = match.groups()[:2] + if not unit or unit == "px": + # pixels: let TeX alone + return '' + elif unit == "%": + # a4paper: textwidth=418.25368pt + res = "%d.0pt" % (float(amount) * 4.1825368) + return res + + ## xref handling + + def get_short_id(self, id): + """Return a shorter 'id' associated with ``id``.""" + # Shorter ids improve paragraph filling in places + # that the id is hidden by Emacs. + try: + sid = self.short_ids[id] + except KeyError: + sid = hex(len(self.short_ids))[2:] + self.short_ids[id] = sid + return sid + + def add_anchor(self, id, msg_node=None): + # Anchors can be referenced by their original id + # or by the generated shortened id + id = escape_id(id).lower() + ids = (self.get_short_id(id), id) + for id in ids: + if id not in self.written_ids: + self.add_text('@anchor{%s}' % id) + self.written_ids.add(id) + + def add_xref(self, ref, name, node): + ref = self.get_short_id(escape_id(ref).lower()) + name = ' '.join(name.split()).strip() + if not name or ref == name: + self.add_text('@pxref{%s}' % ref) + else: + self.add_text('@pxref{%s,,%s}' % (ref, name)) + self.referenced_ids.add(ref) + + ## Visiting + + def visit_document(self, node): + pass + def depart_document(self, node): + pass + + def visit_Text(self, node): + s = escape(node.astext()) + if self.escape_newlines: + s = s.replace('\n', ' ') + self.add_text(s) + def depart_Text(self, node): + pass + + def visit_section(self, node): + self.next_section_targets.extend(node.get('ids', [])) + if not self.seen_title: + return + if self.previous_section: + self.add_menu(self.previous_section) + else: + self.add_menu(self.document, master=True) + + node_name = node['node_name'] + pointers = tuple([node_name] + self.rellinks[node_name]) + self.add_text('\n@node %s,%s,%s,%s\n' % pointers) + if node_name != node_name.lower(): + self.add_text('@anchor{%s}' % node_name.lower()) + for id in self.next_section_targets: + self.add_anchor(id, node) + + self.next_section_targets = [] + self.previous_section = node + self.section_level += 1 + + def depart_section(self, node): + self.section_level -= 1 + + headings = ( + '@unnumbered', + '@chapter', + '@section', + '@subsection', + '@subsubsection', + ) + + rubrics = ( + '@heading', + '@subheading', + '@subsubheading', + ) + + def visit_title(self, node): + if not self.seen_title: + self.seen_title = 1 + raise nodes.SkipNode + parent = node.parent + if isinstance(parent, nodes.table): + return + if isinstance(parent, nodes.Admonition): + raise nodes.SkipNode + elif isinstance(parent, nodes.sidebar): + self.visit_rubric(node) + elif isinstance(parent, nodes.topic): + raise nodes.SkipNode + elif not isinstance(parent, nodes.section): + self.document.reporter.warning( + 'encountered title node not in section, topic, table, ' + 'admonition or sidebar', base_node=node) + self.visit_rubric(node) + else: + try: + heading = self.headings[self.section_level] + except IndexError: + heading = self.headings[-1] + self.add_text('%s ' % heading, fresh=1) + + def depart_title(self, node): + self.add_text('', fresh=1) + + def visit_rubric(self, node): + try: + rubric = self.rubrics[self.section_level] + except IndexError: + rubric = self.rubrics[-1] + self.add_text('%s ' % rubric, fresh=1) + def depart_rubric(self, node): + self.add_text('', fresh=1) + + def visit_subtitle(self, node): + self.add_text('\n\n@noindent\n') + def depart_subtitle(self, node): + self.add_text('\n\n') + + ## References + + def visit_target(self, node): + if node.get('ids'): + self.add_anchor(node['ids'][0], node) + elif node.get('refid'): + # Section targets need to go after the start of the section. + next = node.next_node(ascend=1, siblings=1) + while isinstance(next, nodes.target): + next = next.next_node(ascend=1, siblings=1) + if isinstance(next, nodes.section): + self.next_section_targets.append(node['refid']) + return + self.add_anchor(node['refid'], node) + elif node.get('refuri'): + pass + else: + self.document.reporter.error("Unknown target type: %r" % node) + + def visit_reference(self, node): + if isinstance(node.parent, nodes.title): + return + if isinstance(node[0], nodes.image): + return + if isinstance(node.parent, addnodes.desc_type): + return + name = node.get('name', node.astext()).strip() + if node.get('refid'): + self.add_xref(escape_id(node['refid']), + escape_id(name), node) + raise nodes.SkipNode + if not node.get('refuri'): + self.document.reporter.error("Unknown reference type: %s" % node) + return + uri = node['refuri'] + if uri.startswith('#'): + self.add_xref(escape_id(uri[1:]), escape_id(name), node) + elif uri.startswith('%'): + id = uri[1:] + if '#' in id: + src, id = uri[1:].split('#', 1) + assert '#' not in id + self.add_xref(escape_id(id), escape_id(name), node) + elif uri.startswith('mailto:'): + uri = escape_arg(uri[7:]) + name = escape_arg(name) + if not name or name == uri: + self.add_text('@email{%s}' % uri) + else: + self.add_text('@email{%s,%s}' % (uri, name)) + elif uri.startswith('info:'): + uri = uri[5:].replace('_', ' ') + uri = escape_arg(uri) + id = 'Top' + if '#' in uri: + uri, id = uri.split('#', 1) + id = escape_id(id) + name = escape_id(name) + if name == id: + self.add_text('@pxref{%s,,,%s}' % (id, uri)) + else: + self.add_text('@pxref{%s,,%s,%s}' % (id, name, uri)) + else: + uri = escape_arg(uri) + name = escape_arg(name) + if not name or uri == name: + self.add_text('@indicateurl{%s}' % uri) + else: + self.add_text('@uref{%s,%s}' % (uri, name)) + raise nodes.SkipNode + + def depart_reference(self, node): + pass + + def visit_title_reference(self, node): + text = node.astext() + self.add_text('@cite{%s}' % escape_arg(text)) + raise nodes.SkipNode + def depart_title_reference(self, node): + pass + + ## Blocks + + def visit_paragraph(self, node): + if 'continued' in node or isinstance(node.parent, nodes.compound): + self.add_text('@noindent\n', fresh=1) + def depart_paragraph(self, node): + self.add_text('\n\n') + + def visit_block_quote(self, node): + self.rstrip() + self.add_text('\n\n@quotation\n') + def depart_block_quote(self, node): + self.rstrip() + self.add_text('\n@end quotation\n\n') + + def visit_literal_block(self, node): + self.rstrip() + self.add_text('\n\n@example\n') + def depart_literal_block(self, node): + self.rstrip() + self.add_text('\n@end example\n\n' + '@noindent\n') + + visit_doctest_block = visit_literal_block + depart_doctest_block = depart_literal_block + + def visit_line_block(self, node): + self.add_text('@display\n', fresh=1) + def depart_line_block(self, node): + self.add_text('@end display\n', fresh=1) + + def visit_line(self, node): + self.rstrip() + self.add_text('\n') + self.escape_newlines += 1 + def depart_line(self, node): + self.add_text('@w{ }\n') + self.escape_newlines -= 1 + + ## Inline + + def visit_strong(self, node): + self.add_text('@strong{') + def depart_strong(self, node): + self.add_text('}') + + def visit_emphasis(self, node): + self.add_text('@emph{') + def depart_emphasis(self, node): + self.add_text('}') + + def visit_literal(self, node): + self.add_text('@code{') + def depart_literal(self, node): + self.add_text('}') + + def visit_superscript(self, node): + self.add_text('@w{^') + def depart_superscript(self, node): + self.add_text('}') + + def visit_subscript(self, node): + self.add_text('@w{[') + def depart_subscript(self, node): + self.add_text(']}') + + ## Footnotes + + def visit_footnote(self, node): + self.visit_block_quote(node) + def depart_footnote(self, node): + self.depart_block_quote(node) + + def visit_footnote_reference(self, node): + self.add_text('@w{(') + def depart_footnote_reference(self, node): + self.add_text(')}') + + visit_citation = visit_footnote + depart_citation = depart_footnote + + def visit_citation_reference(self, node): + self.add_text('@w{[') + def depart_citation_reference(self, node): + self.add_text(']}') + + ## Lists + + def visit_bullet_list(self, node): + bullet = node.get('bullet', '*') + self.rstrip() + self.add_text('\n\n@itemize %s\n' % bullet) + def depart_bullet_list(self, node): + self.rstrip() + self.add_text('\n@end itemize\n\n') + + def visit_enumerated_list(self, node): + # Doesn't support Roman numerals + enum = node.get('enumtype', 'arabic') + starters = {'arabic': '', + 'loweralpha': 'a', + 'upperalpha': 'A',} + start = node.get('start', starters.get(enum, '')) + self.rstrip() + self.add_text('\n\n@enumerate %s\n' % start) + def depart_enumerated_list(self, node): + self.rstrip() + self.add_text('\n@end enumerate\n\n') + + def visit_list_item(self, node): + self.rstrip() + self.add_text('\n@item\n') + def depart_list_item(self, node): + pass + + ## Option List + + def visit_option_list(self, node): + self.add_text('\n@table @option\n') + def depart_option_list(self, node): + self.rstrip() + self.add_text('\n@end table\n\n') + + def visit_option_list_item(self, node): + pass + def depart_option_list_item(self, node): + pass + + def visit_option_group(self, node): + self.at_item_x = '@item' + def depart_option_group(self, node): + pass + + def visit_option(self, node): + self.add_text(self.at_item_x + ' ', fresh=1) + self.at_item_x = '@itemx' + def depart_option(self, node): + pass + + def visit_option_string(self, node): + pass + def depart_option_string(self, node): + pass + + def visit_option_argument(self, node): + self.add_text(node.get('delimiter', ' ')) + def depart_option_argument(self, node): + pass + + def visit_description(self, node): + self.add_text('', fresh=1) + def depart_description(self, node): + pass + + ## Definitions + + def visit_definition_list(self, node): + self.add_text('\n@table @asis\n') + def depart_definition_list(self, node): + self.rstrip() + self.add_text('\n@end table\n\n') + + def visit_definition_list_item(self, node): + self.at_item_x = '@item' + def depart_definition_list_item(self, node): + pass + + def visit_term(self, node): + if node.get('ids') and node['ids'][0]: + self.add_anchor(node['ids'][0], node) + self.add_text(self.at_item_x + ' ', fresh=1) + self.at_item_x = '@itemx' + def depart_term(self, node): + pass + + def visit_termsep(self, node): + self.add_text(self.at_item_x + ' ', fresh=1) + + def visit_classifier(self, node): + self.add_text(' : ') + def depart_classifier(self, node): + pass + + def visit_definition(self, node): + self.add_text('', fresh=1) + def depart_definition(self, node): + pass + + ## Tables + + def visit_table(self, node): + self.entry_sep = '@item' + def depart_table(self, node): + self.rstrip() + self.add_text('\n@end multitable\n\n') + + def visit_tabular_col_spec(self, node): + pass + def depart_tabular_col_spec(self, node): + pass + + def visit_colspec(self, node): + self.colwidths.append(node['colwidth']) + if len(self.colwidths) != self.n_cols: + return + self.add_text('@multitable ', fresh=1) + for i, n in enumerate(self.colwidths): + self.add_text('{%s} ' %('x' * (n+2))) + def depart_colspec(self, node): + pass + + def visit_tgroup(self, node): + self.colwidths = [] + self.n_cols = node['cols'] + def depart_tgroup(self, node): + pass + + def visit_thead(self, node): + self.entry_sep = '@headitem' + def depart_thead(self, node): + pass + + def visit_tbody(self, node): + pass + def depart_tbody(self, node): + pass + + def visit_row(self, node): + pass + def depart_row(self, node): + self.entry_sep = '@item' + + def visit_entry(self, node): + self.rstrip() + self.add_text('\n%s ' % self.entry_sep) + self.entry_sep = '@tab' + def depart_entry(self, node): + for i in xrange(node.get('morecols', 0)): + self.add_text('@tab\n', fresh=1) + self.add_text('', fresh=1) + + ## Field Lists + + def visit_field_list(self, node): + self.add_text('\n@itemize @w\n') + def depart_field_list(self, node): + self.rstrip() + self.add_text('\n@end itemize\n\n') + + def visit_field(self, node): + if not isinstance(node.parent, nodes.field_list): + self.visit_field_list(None) + def depart_field(self, node): + if not isinstance(node.parent, nodes.field_list): + self.depart_field_list(None) + + def visit_field_name(self, node): + self.add_text('@item ', fresh=1) + def depart_field_name(self, node): + self.add_text(':') + + def visit_field_body(self, node): + self.add_text('', fresh=1) + def depart_field_body(self, node): + pass + + ## Admonitions + + def visit_admonition(self, node): + title = escape(node[0].astext()) + self.add_text('\n@cartouche\n' + '@quotation %s\n' % title) + def depart_admonition(self, node): + self.rstrip() + self.add_text('\n@end quotation\n' + '@end cartouche\n\n') + + def _make_visit_admonition(typ): + def visit(self, node): + title = escape(typ) + self.add_text('\n@cartouche\n' + '@quotation %s\n' % title) + return visit + + visit_attention = _make_visit_admonition('Attention') + visit_caution = _make_visit_admonition('Caution') + visit_danger = _make_visit_admonition('Danger') + visit_error = _make_visit_admonition('Error') + visit_important = _make_visit_admonition('Important') + visit_note = _make_visit_admonition('Note') + visit_tip = _make_visit_admonition('Tip') + visit_hint = _make_visit_admonition('Hint') + visit_warning = _make_visit_admonition('Warning') + + depart_attention = depart_admonition + depart_caution = depart_admonition + depart_danger = depart_admonition + depart_error = depart_admonition + depart_important = depart_admonition + depart_note = depart_admonition + depart_tip = depart_admonition + depart_hint = depart_admonition + depart_warning = depart_admonition + + ## Misc + + def visit_docinfo(self, node): + # No 'docinfo_xform' + raise nodes.SkipNode + + def visit_topic(self, node): + # Ignore TOC's since we have to have a "menu" anyway + if 'contents' in node.get('classes', []): + raise nodes.SkipNode + title = node[0] + self.visit_rubric(title) + self.add_text('%s\n' % escape(title.astext())) + self.visit_block_quote(node) + def depart_topic(self, node): + self.depart_block_quote(node) + + def visit_generated(self, node): + raise nodes.SkipNode + def depart_generated(self, node): + pass + + def visit_transition(self, node): + self.add_text('\n\n@noindent\n' + '@exdent @w{%s}\n\n' + '@noindent\n' % ('_' * 70)) + def depart_transition(self, node): + pass + + def visit_attribution(self, node): + self.add_text('@flushright\n', fresh=1) + def depart_attribution(self, node): + self.add_text('@end flushright\n', fresh=1) + + def visit_raw(self, node): + format = node.get('format', '').split() + if 'texinfo' in format or 'texi' in format: + self.add_text(node.astext()) + raise nodes.SkipNode + def depart_raw(self, node): + pass + + def visit_figure(self, node): + self.add_text('\n@float Figure\n') + def depart_figure(self, node): + self.rstrip() + self.add_text('\n@end float\n\n') + + def visit_caption(self, node): + if not isinstance(node.parent, nodes.figure): + self.document.reporter.warning('Caption not inside a figure.', + base_node=node) + return + self.add_text('@caption{', fresh=1) + def depart_caption(self, node): + if isinstance(node.parent, nodes.figure): + self.rstrip() + self.add_text('}\n') + + def visit_image(self, node): + if node['uri'] in self.builder.images: + uri = self.builder.images[node['uri']] + else: + # missing image! + if self.ignore_missing_images: + return + uri = node['uri'] + if uri.find('://') != -1: + # ignore remote images + return + name, ext = path.splitext(uri) + attrs = node.attributes + # ignored in non-tex output + width = self.tex_image_length(attrs.get('width', '')) + height = self.tex_image_length(attrs.get('height', '')) + alt = escape_arg(attrs.get('alt', '')) + self.add_text('\n\n@image{%s,%s,%s,%s,%s}\n\n' % + (name, width, height, alt, ext[1:])) + def depart_image(self, node): + pass + + def visit_compound(self, node): + pass + def depart_compound(self, node): + pass + + def visit_sidebar(self, node): + pass + def depart_sidebar(self, node): + pass + + def visit_label(self, node): + self.add_text('@w{(') + def depart_label(self, node): + self.add_text(')} ') + + def visit_legend(self, node): + pass + def depart_legend(self, node): + pass + + def visit_substitution_reference(self, node): + pass + def depart_substitution_reference(self, node): + pass + + def visit_substitution_definition(self, node): + raise nodes.SkipNode + def depart_substitution_definition(self, node): + pass + + def visit_system_message(self, node): + self.add_text('\n@format\n' + '---------- SYSTEM MESSAGE -----------\n') + def depart_system_message(self, node): + self.rstrip() + self.add_text('\n------------------------------------\n' + '@end format\n') + + def visit_comment(self, node): + for line in node.astext().splitlines(): + self.add_text('@c %s\n' % line, fresh=1) + raise nodes.SkipNode + + def visit_problematic(self, node): + self.add_text('>') + def depart_problematic(self, node): + self.add_text('<') + + def unimplemented_visit(self, node): + self.document.reporter.error("Unimplemented node type: `%s'" + % node.__class__.__name__, base_node=node) + + def unknown_visit(self, node): + self.document.reporter.error("Unknown node type: `%s'" + % node.__class__.__name__, base_node=node) + def unknown_departure(self, node): + pass + + ### Sphinx specific + + def visit_productionlist(self, node): + self.visit_literal_block(None) + names = [] + for production in node: + names.append(production['tokenname']) + maxlen = max(len(name) for name in names) + for production in node: + if production['tokenname']: + s = production['tokenname'].ljust(maxlen) + ' ::=' + lastname = production['tokenname'] + else: + s = '%s ' % (' '*len(lastname)) + self.add_text(escape(s)) + self.add_text(escape(production.astext() + '\n')) + self.depart_literal_block(None) + raise nodes.SkipNode + def depart_productionlist(self, node): + pass + + def visit_literal_emphasis(self, node): + self.add_text('@code{') + def depart_literal_emphasis(self, node): + self.add_text('}') + + def visit_module(self, node): + modname = escape_id(node['modname']) + self.add_anchor(modname, node) + + def visit_index(self, node): + # Throws off table alignment + if isinstance(node.parent, nodes.term): + return + for entry in node['entries']: + typ, text, tid, text2 = entry + text = text.replace('!', ' ').replace(';', ' ') + text = escape_id(text) + self.add_text('@geindex %s\n' % text, fresh=1) + + def visit_autosummary_table(self, node): + pass + def depart_autosummary_table(self, node): + pass + + def visit_todo_node(self, node): + self.visit_transition(node) + self.visit_admonition(node) + def depart_todo_node(self, node): + self.depart_admonition(node) + self.visit_transition(node) + + def visit_refcount(self, node): + self.add_text('\n') + def depart_refcount(self, node): + self.add_text('\n\n') + + def visit_versionmodified(self, node): + intro = versionlabels[node['type']] % node['version'] + if node.children: + intro += ': ' + else: + intro += '.' + self.add_text('%s' % escape(intro), fresh=1) + def depart_versionmodified(self, node): + self.rstrip() + self.add_text('\n\n', fresh=1) + + def visit_start_of_file(self, node): + self.curfilestack.append(node.get('docname', '')) + if node.get('docname'): + self.next_section_targets.append(node['docname']) + def depart_start_of_file(self, node): + self.curfilestack.pop() + + def visit_centered(self, node): + txt = escape_arg(node.astext()) + self.add_text('@center %s\n' % txt, fresh=1) + raise nodes.SkipNode + def depart_centered(self, node): + pass + + def visit_seealso(self, node): + pass + def depart_seealso(self, node): + pass + + def visit_meta(self, node): + raise nodes.SkipNode + def depart_meta(self, node): + pass + + def visit_glossary(self, node): + pass + def depart_glossary(self, node): + pass + + def visit_acks(self, node): + pass + def depart_acks(self, node): + pass + + def visit_highlightlang(self, node): + pass + def depart_highlightlang(self, node): + pass + + ## Desc + + desc_map = { + 'function' : 'Function', + 'class': 'Class', + 'method': 'Method', + 'classmethod': 'Class Method', + 'staticmethod': 'Static Method', + 'exception': 'Exception', + 'data': 'Data', + 'attribute': 'Attribute', + 'opcode': 'Opcode', + 'cfunction': 'C Function', + 'cmember': 'C Member', + 'cmacro': 'C Macro', + 'ctype': 'C Type', + 'cvar': 'C Variable', + 'cmdoption': 'Option', + 'describe': 'Description', + } + + def visit_desc(self, node): + self.at_deffnx = '@deffn' + def depart_desc(self, node): + self.rstrip() + self.add_text('@end deffn\n\n', fresh=1) + def visit_desc_signature(self, node): + self.desctype = node.parent['desctype'].strip() + if self.desctype != 'describe' and node['ids']: + self.add_anchor(node['ids'][0], node) + typ = self.desc_map.get(self.desctype, self.desctype) + self.add_text('%s {%s} ' % (self.at_deffnx, escape_arg(typ)), fresh=1) + self.at_deffnx = '@deffnx' + def depart_desc_signature(self, node): + self.add_text("", fresh=1) + + def visit_desc_name(self, node): + pass + def depart_desc_name(self, node): + pass + + def visit_desc_addname(self, node): + pass + def depart_desc_addname(self, node): + pass + + def visit_desc_type(self, node): + pass + def depart_desc_type(self, node): + pass + + def visit_desc_returns(self, node): + self.add_text(' -> ') + def depart_desc_returns(self, node): + pass + + def visit_desc_parameterlist(self, node): + self.add_text(' (') + self.first_param = 1 + def depart_desc_parameterlist(self, node): + self.add_text(')') + + def visit_desc_parameter(self, node): + if not self.first_param: + self.add_text(', ') + else: + self.first_param = 0 + self.add_text(escape(node.astext())) + raise nodes.SkipNode + def depart_desc_parameter(self, node): + pass + + def visit_desc_optional(self, node): + self.add_text('[') + def depart_desc_optional(self, node): + self.add_text(']') + + def visit_desc_annotation(self, node): + raise nodes.SkipNode + def depart_desc_annotation(self, node): + pass + + def visit_desc_content(self, node): + self.add_text("", fresh=1) + def depart_desc_content(self, node): + pass + + def visit_inline(self, node): + # stub + pass + def depart_inline(self, node): + pass + + def visit_abbreviation(self, node): + self.add_text('@abbr{') + if node.hasattr('explanation'): + self.context.append(', %s}' % escape_arg(node['explanation'])) + else: + self.context.append('}') + def depart_abbreviation(self, node): + self.body.append(self.context.pop()) + + def visit_download_reference(self, node): + pass + def depart_download_reference(self, node): + pass + + def visit_hlist(self, node): + # stub + self.visit_bullet_list(node) + def depart_hlist(self, node): + self.depart_bullet_list(node) + + def visit_hlistcol(self, node): + pass + def depart_hlistcol(self, node): + pass diff --git a/sphinx/writers/text.py b/sphinx/writers/text.py index 1d6ad648..1a7d2a7d 100644 --- a/sphinx/writers/text.py +++ b/sphinx/writers/text.py @@ -8,7 +8,7 @@ :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ - +import os import re import textwrap @@ -52,6 +52,14 @@ class TextTranslator(nodes.NodeVisitor): def __init__(self, document, builder): nodes.NodeVisitor.__init__(self, document) + newlines = builder.config.text_newlines + if newlines == 'windows': + self.nl = '\r\n' + elif newlines == 'native': + self.nl = os.linesep + else: + self.nl = '\n' + self.sectionchars = builder.config.text_sectionchars self.states = [[]] self.stateindent = [0] self.list_counter = [] @@ -98,9 +106,9 @@ class TextTranslator(nodes.NodeVisitor): self.new_state(0) def depart_document(self, node): self.end_state() - self.body = '\n'.join(line and (' '*indent + line) - for indent, lines in self.states[0] - for line in lines) + self.body = self.nl.join(line and (' '*indent + line) + for indent, lines in self.states[0] + for line in lines) # XXX header/footer? def visit_highlightlang(self, node): @@ -225,7 +233,7 @@ class TextTranslator(nodes.NodeVisitor): def visit_desc_content(self, node): self.new_state() - self.add_text('\n') + self.add_text(self.nl) def depart_desc_content(self, node): self.end_state() @@ -251,7 +259,7 @@ class TextTranslator(nodes.NodeVisitor): lastname = production['tokenname'] else: self.add_text('%s ' % (' '*len(lastname))) - self.add_text(production.astext() + '\n') + self.add_text(production.astext() + self.nl) self.end_state(wrap=False) raise nodes.SkipNode @@ -351,7 +359,7 @@ class TextTranslator(nodes.NodeVisitor): 'not implemented.') self.new_state(0) def depart_entry(self, node): - text = '\n'.join('\n'.join(x[1]) for x in self.states.pop()) + text = self.nl.join(self.nl.join(x[1]) for x in self.states.pop()) self.stateindent.pop() self.table[-1].append(text) @@ -387,10 +395,10 @@ class TextTranslator(nodes.NodeVisitor): for width in realwidths: out.append(char * (width+2)) out.append('+') - self.add_text(''.join(out) + '\n') + self.add_text(''.join(out) + self.nl) def writerow(row): - lines = map(None, *row) + lines = zip(*row) for line in lines: out = ['|'] for i, cell in enumerate(line): @@ -399,7 +407,7 @@ class TextTranslator(nodes.NodeVisitor): else: out.append(' ' * (realwidths[i] + 2)) out.append('|') - self.add_text(''.join(out) + '\n') + self.add_text(''.join(out) + self.nl) for i, row in enumerate(fmted_rows): if separator and i == separator: @@ -475,6 +483,10 @@ class TextTranslator(nodes.NodeVisitor): if not self._li_has_classifier: self.end_state(end=None) + def visit_termsep(self, node): + self.add_text(', ') + raise nodes.SkipNode + def visit_classifier(self, node): self.add_text(' : ') def depart_classifier(self, node): @@ -651,9 +663,9 @@ class TextTranslator(nodes.NodeVisitor): self.add_text('*') def visit_literal(self, node): - self.add_text('``') + self.add_text('"') def depart_literal(self, node): - self.add_text('``') + self.add_text('"') def visit_subscript(self, node): self.add_text('_') diff --git a/sphinx/writers/websupport.py b/sphinx/writers/websupport.py new file mode 100644 index 00000000..f75cd47b --- /dev/null +++ b/sphinx/writers/websupport.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +""" + sphinx.writers.websupport + ~~~~~~~~~~~~~~~~~~~~~~~~~ + + sphinx.websupport writer that adds comment-related annotations. + + :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from sphinx.writers.html import HTMLTranslator +from sphinx.util.websupport import is_commentable + + +class WebSupportTranslator(HTMLTranslator): + """ + Our custom HTML translator. + """ + + def __init__(self, builder, *args, **kwargs): + HTMLTranslator.__init__(self, builder, *args, **kwargs) + self.comment_class = 'sphinx-has-comment' + + def dispatch_visit(self, node): + if is_commentable(node): + self.handle_visit_commentable(node) + HTMLTranslator.dispatch_visit(self, node) + + def handle_visit_commentable(self, node): + # We will place the node in the HTML id attribute. If the node + # already has an id (for indexing purposes) put an empty + # span with the existing id directly before this node's HTML. + self.add_db_node(node) + if node.attributes['ids']: + self.body.append('<span id="%s"></span>' + % node.attributes['ids'][0]) + node.attributes['ids'] = ['s%s' % node.uid] + node.attributes['classes'].append(self.comment_class) + + def add_db_node(self, node): + storage = self.builder.storage + if not storage.has_node(node.uid): + storage.add_node(id=node.uid, + document=self.builder.cur_docname, + source=node.rawsource or node.astext()) |
