diff options
| author | Georg Brandl <georg@python.org> | 2011-09-22 10:42:09 +0200 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2011-09-22 10:42:09 +0200 |
| commit | c5599ea28eeac416ab4646a9ef1b9eb3d783f8b7 (patch) | |
| tree | 76a1db0ec536f130b4394c48be68fee820d8024b /sphinx | |
| parent | ccef6db7cb04db18258c41a4fd5af6384525737a (diff) | |
| parent | 7cabc9f2a989a78753f9ddcbfd941dd3fc45e106 (diff) | |
| download | sphinx-c5599ea28eeac416ab4646a9ef1b9eb3d783f8b7.tar.gz | |
Merge with 1.0
Diffstat (limited to 'sphinx')
205 files changed, 17879 insertions, 6038 deletions
diff --git a/sphinx/__init__.py b/sphinx/__init__.py index 4671a449..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.7+' -__released__ = '1.0.7' # 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..af404333 --- /dev/null +++ b/sphinx/apidoc.py @@ -0,0 +1,269 @@ +# -*- 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>). + + This is derived from the "sphinx-autopackage" script, which is: + Copyright 2008 Société des arts technologiques (SAT), http://www.sat.qc.ca/. + + :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 (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. + """ + # use absolute path for root, as relative paths like '../../foo' cause + # 'if "/." in root ...' to filter out *all* modules otherwise + rootpath = os.path.abspath(rootpath) + # check if the base directory is a package and get is name + if INITPY in os.listdir(rootpath): + package_name = 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=sys.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..dec9c13c 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 @@ -472,8 +472,11 @@ class Sphinx(object): def add_stylesheet(self, filename): from sphinx.builders.html import StandaloneHTMLBuilder - StandaloneHTMLBuilder.css_files.append( - posixpath.join('_static', filename)) + if '://' in filename: + StandaloneHTMLBuilder.css_files.append(filename) + else: + StandaloneHTMLBuilder.css_files.append( + posixpath.join('_static', filename)) def add_lexer(self, alias, lexer): from sphinx.highlighting import lexers @@ -490,6 +493,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 +506,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 +517,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..5240a1c7 100644 --- a/sphinx/builders/__init__.py +++ b/sphinx/builders/__init__.py @@ -31,9 +31,12 @@ class Builder(object): name = '' # builder's output format, or '' if no document output is produced format = '' + # doctree versioning method + versioning_method = 'none' def __init__(self, app): self.env = app.env + self.env.set_versioning_method(self.versioning_method) self.srcdir = app.srcdir self.confdir = app.confdir self.outdir = app.outdir @@ -55,16 +58,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 +73,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 +129,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 +196,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 +301,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 +329,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': ('gettext', '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 a356254b..e946e0d3 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 @@ -234,6 +242,7 @@ class EpubBuilder(StandaloneHTMLBuilder): 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. """ @@ -252,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 @@ -267,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. """ @@ -275,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']) @@ -387,7 +397,6 @@ class EpubBuilder(StandaloneHTMLBuilder): 'media_type': self.esc(_media_types[ext]) }) self.files.append(filename) - projectfiles = '\n'.join(projectfiles) # spine spine = [] @@ -407,12 +416,38 @@ class EpubBuilder(StandaloneHTMLBuilder): spine.append(_spine_template % { 'idref': self.esc(self.make_id('genindex' + self.out_suffix)) }) + + # 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() @@ -429,6 +464,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) @@ -438,8 +474,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 = [] @@ -479,8 +515,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 @@ -505,8 +541,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'] \ @@ -516,7 +552,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/gettext.py b/sphinx/builders/gettext.py new file mode 100644 index 00000000..41a5acbc --- /dev/null +++ b/sphinx/builders/gettext.py @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- +""" + sphinx.builders.gettext + ~~~~~~~~~~~~~~~~~~~~~~~ + + 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 sphinx.builders import Builder +from sphinx.util.nodes import extract_messages +from sphinx.util.osutil import SEP, safe_relpath +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 Catalog(object): + """Catalog of translatable messages.""" + + def __init__(self): + self.messages = [] # retain insertion order, a la OrderedDict + self.metadata = {} # msgid -> file, line, uid + + def add(self, msg, origin): + if msg not in self.metadata: # faster lookup in hash + self.messages.append(msg) + self.metadata[msg] = [] + self.metadata[msg].append((origin.source, origin.line, origin.uid)) + + +class I18nBuilder(Builder): + """ + General i18n builder. + """ + name = 'i18n' + versioning_method = 'text' + + def init(self): + Builder.init(self) + self.catalogs = defaultdict(Catalog) + + 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]] + + for node, msg in extract_messages(doctree): + catalog.add(msg, node) + + +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, catalog 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 message in catalog.messages: + positions = catalog.metadata[message] + + # generate "#: file1:line1\n#: file2:line2 ..." + pofile.write(u"#: %s\n" % "\n#: ".join("%s:%s" % + (safe_relpath(source, self.outdir), line) + for source, line, _ in positions)) + # generate "# uuid1\n# uuid2\n ..." + pofile.write(u"# %s\n" % "\n# ".join(uid for _, _, uid + in positions)) + + # message contains *one* line of text ready for translation + message = message.replace(u'\\', ur'\\'). \ + replace(u'"', ur'\"') + pofile.write(u'msgid "%s"\nmsgstr ""\n\n' % message) + + finally: + pofile.close() diff --git a/sphinx/builders/html.py b/sphinx/builders/html.py index 8ff628c9..b6f9d133 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, @@ -379,7 +387,8 @@ class StandaloneHTMLBuilder(Builder): meta = self.env.metadata.get(docname) # local TOC and global TOC tree - toc = self.render_partial(self.env.get_toc_for(docname))['fragment'] + self_toc = self.env.get_toc_for(docname, self) + toc = self.render_partial(self_toc)['fragment'] return dict( parents = parents, @@ -536,13 +545,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 +569,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 +603,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 +627,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 +754,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 +771,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 +785,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 +945,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 +970,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 +993,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 +1006,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 +1026,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 +1044,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 9d367183..143f6df9 100644 --- a/sphinx/builders/htmlhelp.py +++ b/sphinx/builders/htmlhelp.py @@ -132,6 +132,7 @@ chm_locales = { 'fr': (0x40c, 'iso8859_1'), 'it': (0x410, 'iso8859_1'), 'ja': (0x411, 'cp932'), + 'lv': (0x426, 'cp1257'), 'nl': (0x413, 'iso8859_1'), 'pl': (0x415, 'iso8859_2'), 'pt_BR': (0x416, 'iso8859_1'), 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..535c527e --- /dev/null +++ b/sphinx/builders/texinfo.py @@ -0,0 +1,227 @@ +# -*- 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 = ['image/png', 'image/jpeg', + 'image/gif',] + + 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) + 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/websupport.py b/sphinx/builders/websupport.py new file mode 100644 index 00000000..b7757309 --- /dev/null +++ b/sphinx/builders/websupport.py @@ -0,0 +1,155 @@ +# -*- 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.builders.html import PickleHTMLBuilder +from sphinx.writers.websupport import WebSupportTranslator + + +class WebSupportBuilder(PickleHTMLBuilder): + """ + Builds documents for the web support package. + """ + name = 'websupport' + versioning_method = 'commentable' + + def init(self): + PickleHTMLBuilder.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.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) + + # 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/cmdline.py b/sphinx/cmdline.py index 5be530be..5340aa88 100644 --- a/sphinx/cmdline.py +++ b/sphinx/cmdline.py @@ -22,6 +22,7 @@ from sphinx.errors import SphinxError from sphinx.application import Sphinx from sphinx.util import Tee, format_exception_cut_frames, save_traceback from sphinx.util.console import red, nocolor, color_terminal +from sphinx.util.pycompat import terminal_safe def usage(argv, msg=None): @@ -190,8 +191,7 @@ def main(argv): except KeyboardInterrupt: if use_pdb: import pdb - print >>error, red('Interrupted while building, ' - 'starting debugger:') + print >>error, red('Interrupted while building, starting debugger:') traceback.print_exc() pdb.post_mortem(sys.exc_info()[2]) return 1 @@ -199,17 +199,17 @@ def main(argv): if use_pdb: import pdb print >>error, red('Exception occurred while building, ' - 'starting debugger:') + 'starting debugger:') traceback.print_exc() pdb.post_mortem(sys.exc_info()[2]) else: print >>error if isinstance(err, SystemMessage): print >>error, red('reST markup error:') - print >>error, err.args[0].encode('ascii', 'backslashreplace') + print >>error, terminal_safe(err.args[0]) elif isinstance(err, SphinxError): print >>error, red('%s:' % err.category) - print >>error, unicode(err).encode('ascii', 'backslashreplace') + print >>error, terminal_safe(unicode(err)) else: print >>error, red('Exception occurred:') print >>error, format_exception_cut_frames().rstrip() diff --git a/sphinx/config.py b/sphinx/config.py index 19e29919..2250c57f 100644 --- a/sphinx/config.py +++ b/sphinx/config.py @@ -11,16 +11,24 @@ import os import re +import sys from os import path from sphinx.errors import ConfigError +from sphinx.locale import l_ 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) @@ -64,12 +72,13 @@ class Config(object): primary_domain = ('py', 'env'), needs_sphinx = (None, None), nitpicky = (False, 'env'), + nitpick_ignore = ([], 'env'), # HTML options html_theme = ('default', 'html'), html_theme_path = ([], 'html'), html_theme_options = ({}, 'html'), - html_title = (lambda self: '%s v%s documentation' % + html_title = (lambda self: l_('%s %s documentation') % (self.project, self.release), 'html'), html_short_title = (lambda self: self.html_title, 'html'), @@ -85,7 +94,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 +108,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 +131,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 +145,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 +158,24 @@ 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), + texinfo_show_urls = ('footnote', None), + + # linkcheck options + linkcheck_ignore = ([], None), + linkcheck_timeout = (None, None), + linkcheck_workers = (5, None), ) def __init__(self, dirname, filename, overrides, tags): @@ -163,12 +188,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 +225,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 6073a7de..f41ca3a6 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 @@ -57,13 +55,28 @@ class CodeBlock(Directive): final_argument_whitespace = False option_spec = { 'linenos': directives.flag, + 'emphasize-lines': directives.unchanged_required, } def run(self): code = u'\n'.join(self.content) + + linespec = self.options.get('emphasize-lines') + if linespec: + try: + nlines = len(self.content) + hl_lines = [x+1 for x in parselinenos(linespec, nlines)] + except ValueError, err: + document = self.state.document + return [document.reporter.warning(str(err), line=self.lineno)] + else: + hl_lines = None + literal = nodes.literal_block(code, code) literal['language'] = self.arguments[0] literal['linenos'] = 'linenos' in self.options + if hl_lines is not None: + literal['highlight_args'] = {'hl_lines': hl_lines} literal.line = self.lineno return [literal] @@ -90,27 +103,16 @@ class LiteralInclude(Directive): 'end-before': directives.unchanged_required, 'prepend': directives.unchanged_required, 'append': directives.unchanged_required, + 'emphasize-lines': directives.unchanged_required, } 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 +122,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 +139,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( @@ -160,6 +162,15 @@ class LiteralInclude(Directive): 'Line spec %r: no lines pulled from include file %r' % (linespec, filename), line=self.lineno)] + linespec = self.options.get('emphasize-lines') + if linespec: + try: + hl_lines = [x+1 for x in parselinenos(linespec, len(lines))] + except ValueError, err: + return [document.reporter.warning(str(err), line=self.lineno)] + else: + hl_lines = None + startafter = self.options.get('start-after') endbefore = self.options.get('end-before') prepend = self.options.get('prepend') @@ -185,14 +196,16 @@ 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) + if hl_lines is not None: + retnode['highlight_args'] = {'hl_lines': hl_lines} + env.note_dependency(rel_filename) return [retnode] diff --git a/sphinx/directives/other.py b/sphinx/directives/other.py index f59a29e1..7647e738 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,20 @@ 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 + if self.arguments[0].startswith('<') and \ + self.arguments[0].endswith('>'): + # docutils "standard" includes, do not do path processing + return BaseInclude.run(self) + rel_filename, filename = env.relfn2path(self.arguments[0]) + self.arguments[0] = filename return BaseInclude.run(self) @@ -400,7 +373,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 1d04a593..c48568eb 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 @@ -160,8 +159,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: @@ -177,8 +175,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: @@ -197,21 +194,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 @@ -227,8 +219,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 @@ -247,9 +238,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 dac0106b..0d33f59d 100644 --- a/sphinx/domains/cpp.py +++ b/sphinx/domains/cpp.py @@ -21,6 +21,7 @@ from sphinx.domains import Domain, ObjType from sphinx.directives import ObjectDescription from sphinx.util.nodes import make_refnode from sphinx.util.compat import Directive +from sphinx.util.docfields import Field, GroupedField _identifier_re = re.compile(r'(~?\b[a-zA-Z_][a-zA-Z0-9_]*)\b') @@ -28,6 +29,8 @@ _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*\]') +_template_arg_re = re.compile(r'[^,>]+') _operator_re = re.compile(r'''(?x) \[\s*\] | \(\s*\) @@ -109,7 +112,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 +134,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 +161,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): @@ -235,6 +242,18 @@ class TemplateDefExpr(PrimaryDefExpr): return u'%s<%s>' % (self.typename, u', '.join(map(unicode, self.args))) +class ConstantTemplateArgExpr(PrimaryDefExpr): + + def __init__(self, arg): + self.arg = arg + + def get_id(self): + return self.arg.replace(u' ', u'-') + + def __unicode__(self): + return unicode(self.arg) + + class WrappingDefExpr(DefExpr): def __init__(self, typename): @@ -269,6 +288,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): @@ -523,8 +558,15 @@ class DefinitionParser(object): return CastOpDefExpr(type) def _parse_name(self): + return self._parse_name_or_template_arg(False) + + def _parse_name_or_template_arg(self, in_template): if not self.match(_identifier_re): - self.fail('expected name') + if not in_template: + self.fail('expected name') + if not self.match(_template_arg_re): + self.fail('expected name or constant template argument') + return ConstantTemplateArgExpr(self.matched_text.strip()) identifier = self.matched_text # strictly speaking, operators are not regular identifiers @@ -558,6 +600,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: @@ -591,8 +635,8 @@ class DefinitionParser(object): rv = ModifierDefExpr(NameDefExpr(typename), modifiers) return self._attach_crefptr(rv, is_const) - def _parse_type_expr(self): - typename = self._parse_name() + def _parse_type_expr(self, in_template=False): + typename = self._parse_name_or_template_arg(in_template) self.skip_ws() if not self.skip_string('<'): return typename @@ -641,7 +685,7 @@ class DefinitionParser(object): (result and not self.skip_string('::')) or \ self.eof: break - result.append(self._parse_type_expr()) + result.append(self._parse_type_expr(in_template)) if not result: self.fail('expected type') @@ -689,6 +733,13 @@ class DefinitionParser(object): self.fail('expected comma between arguments') self.skip_ws() + if self.skip_string('...'): + args.append(ArgumentDefExpr(None, '...', None)) + if self.skip_string(')'): + break + else: + self.fail('expected closing parenthesis after ellipses') + argtype = self._parse_type() argname = default = None self.skip_ws() @@ -788,6 +839,17 @@ class DefinitionParser(object): class CPPObject(ObjectDescription): """Description of a C++ language object.""" + doc_field_types = [ + GroupedField('parameter', label=l_('Parameters'), + names=('param', 'parameter', 'arg', 'argument'), + can_collapse=True), + GroupedField('exceptions', label=l_('Throws'), rolename='cpp:class', + names=('throws', 'throw', 'exception'), + can_collapse=True), + Field('returnvalue', label=l_('Returns'), has_arg=False, + names=('returns', 'return')), + ] + def attach_name(self, node, name): owner, name = name.split_owner() varname = unicode(name) @@ -829,7 +891,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 +1039,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 @@ -1077,7 +1140,7 @@ class CPPDomain(Domain): node.line) return None - parent = node['cpp:parent'] + parent = node.get('cpp:parent', None) rv = _create_refnode(expr) if rv is not None or parent is None: diff --git a/sphinx/domains/javascript.py b/sphinx/domains/javascript.py index e53eb5fd..09d555ad 100644 --- a/sphinx/domains/javascript.py +++ b/sphinx/domains/javascript.py @@ -98,7 +98,7 @@ class JSObject(ObjectDescription): if indextext: self.indexnode['entries'].append(('single', indextext, fullname.replace('$', '_S_'), - fullname)) + '')) def get_index_text(self, objectname, name_obj): name, obj = name_obj @@ -128,11 +128,13 @@ class JSCallable(JSObject): can_collapse=True), Field('returnvalue', label=l_('Returns'), has_arg=False, names=('returns', 'return')), + Field('returntype', label=l_('Return type'), has_arg=False, + names=('rtype',)), ] 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 0220afd0..4004599c 100644 --- a/sphinx/domains/python.py +++ b/sphinx/domains/python.py @@ -88,6 +88,7 @@ class PyObject(ObjectDescription): option_spec = { 'noindex': directives.flag, 'module': directives.unchanged, + 'annotation': directives.unchanged, } doc_field_types = [ @@ -110,22 +111,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 @@ -181,6 +181,8 @@ class PyObject(ObjectDescription): nodetext = modname + '.' signode += addnodes.desc_addname(nodetext, nodetext) + anno = self.options.get('annotation') + signode += addnodes.desc_name(name, name) if not arglist: if self.needs_arglist(): @@ -188,16 +190,19 @@ class PyObject(ObjectDescription): signode += addnodes.desc_parameterlist() if retann: signode += addnodes.desc_returns(retann, retann) + if anno: + signode += addnodes.desc_annotation(' ' + anno, ' ' + anno) return fullname, name_prefix + _pseudo_parse_arglist(signode, arglist) if retann: signode += addnodes.desc_returns(retann, retann) + if anno: + signode += addnodes.desc_annotation(' ' + anno, ' ' + anno) 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 +229,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) @@ -360,6 +365,38 @@ class PyClassmember(PyObject): self.clsname_set = True +class PyDecoratorMixin(object): + """ + Mixin for decorator directives. + """ + def handle_signature(self, sig, signode): + ret = super(PyDecoratorMixin, self).handle_signature(sig, signode) + signode.insert(0, addnodes.desc_addname('@', '@')) + return ret + + def needs_arglist(self): + return False + + +class PyDecoratorFunction(PyDecoratorMixin, PyModulelevel): + """ + Directive to mark functions meant to be used as decorators. + """ + def run(self): + # a decorator function is a function after all + self.name = 'py:function' + return PyModulelevel.run(self) + + +class PyDecoratorMethod(PyDecoratorMixin, PyClassmember): + """ + Directive to mark methods meant to be used as decorators. + """ + def run(self): + self.name = 'py:method' + return PyClassmember.run(self) + + class PyModule(Directive): """ Directive to mark description of a new module. @@ -386,26 +423,17 @@ class PyModule(Directive): env.domaindata['py']['modules'][modname] = \ (env.docname, self.options.get('synopsis', ''), self.options.get('platform', ''), 'deprecated' in self.options) - # make a duplicate entry in 'objects' to facilitate searching for - # the module in PythonDomain.find_obj() + # make a duplicate entry in 'objects' to facilitate searching for the + # module in PythonDomain.find_obj() env.domaindata['py']['objects'][modname] = (env.docname, 'module') - targetnode = nodes.target('', '', ids=['module-' + modname], - ismod=True) + targetnode = nodes.target('', '', ids=['module-' + modname], ismod=True) self.state.document.note_explicit_target(targetnode) + # the platform and synopsis aren't printed; in fact, they are only used + # in the modindex currently ret.append(targetnode) - # XXX this behavior of the module directive is a mess... - if 'platform' in self.options: - platform = self.options['platform'] - node = nodes.paragraph() - node += nodes.emphasis('', _('Platforms: ')) - node += nodes.Text(platform, platform) - ret.append(node) - # the synopsis isn't printed; in fact, it is only used in the - # modindex currently - if not noindex: indextext = _('%s (module)') % modname inode = addnodes.index(entries=[('single', indextext, - 'module-' + modname, modname)]) + 'module-' + modname, '')]) ret.append(inode) return ret @@ -540,16 +568,18 @@ class PythonDomain(Domain): } directives = { - 'function': PyModulelevel, - 'data': PyModulelevel, - 'class': PyClasslike, - 'exception': PyClasslike, - 'method': PyClassmember, - 'classmethod': PyClassmember, - 'staticmethod': PyClassmember, - 'attribute': PyClassmember, - 'module': PyModule, - 'currentmodule': PyCurrentModule, + 'function': PyModulelevel, + 'data': PyModulelevel, + 'class': PyClasslike, + 'exception': PyClasslike, + 'method': PyClassmember, + 'classmethod': PyClassmember, + 'staticmethod': PyClassmember, + 'attribute': PyClassmember, + 'module': PyModule, + 'currentmodule': PyCurrentModule, + 'decorator': PyDecoratorFunction, + 'decoratormethod': PyDecoratorMethod, } roles = { 'data': PyXRefRole(), @@ -579,9 +609,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 1fd015ac..9d5b0b0f 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 line, (source, lineno) in zip(self.content, self.content.items): + # 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 b2fb529f..c28eae94 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -11,6 +11,7 @@ import re import os +import sys import time import types import codecs @@ -25,9 +26,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 +36,18 @@ 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.util.websupport import is_commentable from sphinx.errors import SphinxError, ExtensionError -from sphinx.locale import _ +from sphinx.locale import _, init as init_locale +from sphinx.versioning import add_uids, merge_doctrees +fs_encoding = sys.getfilesystemencoding() or sys.getdefaultencoding() orig_role_function = roles.role orig_directive_function = directives.directive @@ -64,7 +68,7 @@ default_settings = { # This is increased every time an environment attribute is added # or changed to properly invalidate pickle files. -ENV_VERSION = 39 +ENV_VERSION = 41 default_substitutions = set([ @@ -75,13 +79,19 @@ default_substitutions = set([ dummy_reporter = Reporter('', 4, 4) +versioning_conditions = { + 'none': False, + 'text': nodes.TextElement, + 'commentable': is_commentable, +} + class WarningStream(object): def __init__(self, warnfunc): self.warnfunc = warnfunc def write(self, text): if text.strip(): - self.warnfunc(text, None, '') + self.warnfunc(text.strip(), None, '') class NoUri(Exception): @@ -178,17 +188,56 @@ class CitationReferences(Transform): for citnode in self.document.traverse(nodes.citation_reference): cittext = citnode.astext() refnode = addnodes.pending_xref(cittext, reftype='citation', - reftarget=cittext) + reftarget=cittext, refwarn=True) + refnode.line = citnode.line or citnode.parent.line refnode += nodes.Text('[' + cittext + ']') 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 = os.path.splitext(source[len(env.srcdir):].lstrip(os.sep))[0] + section = docname.split(os.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 +301,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) @@ -271,6 +320,9 @@ class BuildEnvironment: self.srcdir = srcdir self.config = config + # the method of doctree versioning; see set_versioning_method + self.versioning_condition = None + # the application object; only set while update() runs self.app = None @@ -287,6 +339,9 @@ class BuildEnvironment: # this is to invalidate old pickles self.version = ENV_VERSION + # make this a set for faster testing + self._nitpick_ignore = set(self.config.nitpick_ignore) + # All "docnames" here are /-separated and relative and exclude # the source suffix. @@ -338,6 +393,23 @@ class BuildEnvironment: self._warnfunc = func self.settings['warning_stream'] = WarningStream(func) + def set_versioning_method(self, method): + """This sets the doctree versioning method for this environment. + + Versioning methods are a builder property; only builders with the same + versioning method can share the same doctree directory. Therefore, we + raise an exception if the user tries to use an environment with an + incompatible versioning method. + """ + if method not in versioning_conditions: + raise ValueError('invalid versioning method: %r' % method) + condition = versioning_conditions[method] + if self.versioning_condition not in (None, condition): + raise SphinxError('This environment is incompatible with the ' + 'selected builder, please choose another ' + 'doctree directory.') + self.versioning_condition = condition + def warn(self, docname, msg, lineno=None): # strange argument order is due to backwards compatibility self._warnfunc(msg, (docname, lineno)) @@ -376,25 +448,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 +500,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 +550,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 +586,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 +690,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 +732,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 +755,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() @@ -687,6 +784,25 @@ class BuildEnvironment: # store time of build, for outdated files detection self.all_docs[docname] = time.time() + if self.versioning_condition: + # get old doctree + try: + f = open(self.doc2path(docname, + self.doctreedir, '.doctree'), 'rb') + try: + old_doctree = pickle.load(f) + finally: + f.close() + except EnvironmentError: + old_doctree = None + + # add uids for versioning + if old_doctree is None: + list(add_uids(doctree, self.versioning_condition)) + else: + list(merge_doctrees( + old_doctree, doctree, self.versioning_condition)) + # make it picklable doctree.reporter = None doctree.transformer = None @@ -754,18 +870,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 +892,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 +918,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 +942,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 +954,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 +1040,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 +1078,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'): @@ -1019,6 +1117,12 @@ class BuildEnvironment: # find all toctree nodes in this section and add them # to the toc (just copying the toctree node which is then # resolved in self.get_and_resolve_doctree) + if isinstance(sectionnode, addnodes.only): + onlynode = addnodes.only(expr=sectionnode['expr']) + blist = build_toc(sectionnode, depth) + if blist: + onlynode += blist.children + entries.append(onlynode) if not isinstance(sectionnode, nodes.section): for toctreenode in traverse_in_section(sectionnode, addnodes.toctree): @@ -1040,6 +1144,8 @@ class BuildEnvironment: else: anchorname = '#' + sectionnode['ids'][0] numentries[0] += 1 + # make these nodes: + # list_item -> compact_paragraph -> reference reference = nodes.reference( '', '', internal=True, refuri=docname, anchorname=anchorname, *nodetext) @@ -1058,9 +1164,10 @@ class BuildEnvironment: self.tocs[docname] = nodes.bullet_list('') self.toc_num_entries[docname] = numentries[0] - def get_toc_for(self, docname): + def get_toc_for(self, docname, builder): """Return a TOC nodetree -- for use on the same page only!""" toc = self.tocs[docname].deepcopy() + self.process_only_nodes(toc, builder, docname) for node in toc.traverse(nodes.reference): node['refuri'] = node['anchorname'] or '#' return toc @@ -1087,7 +1194,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 +1221,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 +1242,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. @@ -1235,6 +1344,7 @@ class BuildEnvironment: toc = nodes.bullet_list('', item) else: toc = self.tocs[ref].deepcopy() + self.process_only_nodes(toc, builder, ref) if title and toc.children and len(toc.children) == 1: child = toc.children[0] for refnode in child.traverse(nodes.reference): @@ -1265,12 +1375,14 @@ class BuildEnvironment: toplevel[1][:] = subtrees # resolve all sub-toctrees for toctreenode in toc.traverse(addnodes.toctree): - i = toctreenode.parent.index(toctreenode) + 1 - for item in _entries_from_toctree(toctreenode, - subtree=True): - toctreenode.parent.insert(i, item) - i += 1 - toctreenode.parent.remove(toctreenode) + if not (toctreenode.get('hidden', False) + and not includehidden): + i = toctreenode.parent.index(toctreenode) + 1 + for item in _entries_from_toctree(toctreenode, + subtree=True): + toctreenode.parent.insert(i, item) + i += 1 + toctreenode.parent.remove(toctreenode) if separate: entries.append(toc) else: @@ -1314,7 +1426,6 @@ class BuildEnvironment: typ = node['reftype'] target = node['reftarget'] refdoc = node.get('refdoc', fromdocname) - warned = False domain = None try: @@ -1331,11 +1442,7 @@ class BuildEnvironment: # directly reference to document by source name; # can be absolute or relative docname = docname_join(refdoc, target) - if docname not in self.all_docs: - self.warn(refdoc, - 'unknown document: %s' % docname, node.line) - warned = True - else: + if docname in self.all_docs: if node['refexplicit']: # reference with explicit title caption = node.astext() @@ -1348,11 +1455,7 @@ class BuildEnvironment: newnode.append(innernode) elif typ == 'citation': docname, labelid = self.citations.get(target, ('', '')) - if not docname: - self.warn(refdoc, - 'citation not found: %s' % target, node.line) - warned = True - else: + if docname: newnode = make_refnode(builder, fromdocname, docname, labelid, contnode) # no new node found? try the missing-reference event @@ -1360,21 +1463,44 @@ class BuildEnvironment: newnode = builder.app.emit_firstresult( 'missing-reference', self, node, contnode) # still not found? warn if in nit-picky mode - if newnode is None and not warned and \ - (self.config.nitpicky or node.get('refwarn')): - if domain and typ in domain.dangling_warnings: - msg = domain.dangling_warnings[typ] - elif node.get('refdomain') != 'std': - msg = '%s:%s reference target not found: ' \ - '%%(target)s' % (node['refdomain'], typ) - else: - msg = '%s reference target not found: ' \ - '%%(target)s' % typ - self.warn(refdoc, msg % {'target': target}, node.line) + if newnode is None: + self._warn_missing_reference( + fromdocname, typ, target, node, domain) except NoUri: newnode = contnode node.replace_self(newnode or contnode) + # remove only-nodes that do not belong to our builder + self.process_only_nodes(doctree, builder, fromdocname) + + # allow custom references to be resolved + builder.app.emit('doctree-resolved', doctree, fromdocname) + + def _warn_missing_reference(self, fromdoc, typ, target, node, domain): + warn = node.get('refwarn') + if self.config.nitpicky: + warn = True + if self._nitpick_ignore: + dtype = domain and '%s:%s' % (domain.name, typ) or typ + if (dtype, target) in self._nitpick_ignore: + warn = False + if not warn: + return + refdoc = node.get('refdoc', fromdoc) + if domain and typ in domain.dangling_warnings: + msg = domain.dangling_warnings[typ] + elif typ == 'doc': + msg = 'unknown document: %(target)s' + elif typ == 'citation': + msg = 'citation not found: %(target)s' + elif node.get('refdomain', 'std') != 'std': + msg = '%s:%s reference target not found: %%(target)s' % \ + (node['refdomain'], typ) + else: + msg = '%s reference target not found: %%(target)s' % typ + self.warn(refdoc, msg % {'target': target}, node.line) + + def process_only_nodes(self, doctree, builder, fromdocname=None): for node in doctree.traverse(addnodes.only): try: ret = builder.tags.eval_condition(node['expr']) @@ -1390,9 +1516,6 @@ class BuildEnvironment: # if there is a target node before the only node node.replace_self(nodes.comment()) - # allow custom references to be resolved - builder.app.emit('doctree-resolved', doctree, fromdocname) - def assign_section_numbers(self): """Assign a section number to each heading under a numbered toctree.""" # a list of all docnames whose section numbers changed @@ -1401,46 +1524,60 @@ 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.only): + # at this stage we don't know yet which sections are going + # to be included; just include all of them, even if it leads + # to gaps in the numbering + _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 @@ -1449,56 +1586,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 @@ -1541,8 +1672,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() @@ -1601,7 +1733,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: @@ -1610,3 +1741,4 @@ class BuildEnvironment: if 'orphan' in self.metadata[docname]: continue self.warn(docname, 'document isn\'t included in any toctree') + diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index f72e7dfa..f19334a0 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 @@ -27,16 +27,12 @@ from sphinx.pycode import ModuleAnalyzer, PycodeError 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.inspect import getargspec, isdescriptor, safe_getmembers, \ + safe_getattr, safe_repr +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 +87,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 +136,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 +162,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 +265,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 +275,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 +312,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 +341,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 +358,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 +419,16 @@ 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 +447,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 +483,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 +527,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,18 +555,33 @@ class Documenter(object): # if isattr is True, the member is documented as an attribute isattr = False - if want_all and membername.startswith('_'): + doc = self.get_attr(member, '__doc__', None) + # if the member __doc__ is the same as self's __doc__, it's just + # inherited and therefore not the member's doc + cls = self.get_attr(member, '__class__', None) + if cls: + cls_doc = self.get_attr(cls, '__doc__', None) + if cls_doc == doc: + doc = None + has_doc = bool(doc) + + keep = False + if want_all and membername.startswith('__') and \ + membername.endswith('__') and len(membername) > 4: + # special __methods__ + if self.options.special_members and membername != '__doc__': + keep = has_doc or self.options.undoc_members + elif want_all and membername.startswith('_'): # ignore members whose name starts with _ by default - skip = True + keep = self.options.private_members and \ + (has_doc or self.options.undoc_members) elif (namespace, membername) in attr_docs: # keep documented attributes - skip = False + keep = True isattr = True else: - # ignore undocumented members if :undoc-members: - # is not given - doc = self.get_attr(member, '__doc__', None) - skip = not self.options.undoc_members and not doc + # ignore undocumented members if :undoc-members: is not given + keep = has_doc or self.options.undoc_members # give the user a chance to decide whether this member # should be skipped @@ -572,20 +589,20 @@ class Documenter(object): # let extensions preprocess docstrings skip_user = self.env.app.emit_firstresult( 'autodoc-skip-member', self.objtype, membername, member, - skip, self.options) + not keep, self.options) if skip_user is not None: - skip = skip_user - if skip: - continue + keep = not skip_user - ret.append((membername, member, isattr)) + if keep: + ret.append((membername, member, isattr)) 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 +660,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 +744,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 +851,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,18 +911,18 @@ 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 + # cannot introspect arguments of a C function or method return None try: - argspec = inspect.getargspec(self.object) + argspec = getargspec(self.object) except TypeError: # if a class should be documented as function (yay duck # typing) we try to use the constructor signature as function # signature without the first argument. try: - argspec = inspect.getargspec(self.object.__new__) + argspec = getargspec(self.object.__new__) except TypeError: - argspec = inspect.getargspec(self.object.__init__) + argspec = getargspec(self.object.__init__) if argspec[0]: del argspec[0][0] args = inspect.formatargspec(*argspec) @@ -881,11 +945,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) @@ -907,7 +972,7 @@ class ClassDocumenter(ModuleLevelDocumenter): (inspect.ismethod(initmeth) or inspect.isfunction(initmeth)): return None try: - argspec = inspect.getargspec(initmeth) + argspec = getargspec(initmeth) except TypeError: # still not possible: happens e.g. for old-style classes # with __init__ in C @@ -937,7 +1002,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 +1023,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 +1059,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) @@ -1001,16 +1069,26 @@ class DataDocumenter(ModuleLevelDocumenter): """ objtype = 'data' member_order = 40 + priority = -10 @classmethod def can_document_member(cls, member, membername, isattr, parent): return isinstance(parent, ModuleDocumenter) and isattr + def add_directive_header(self, sig): + ModuleLevelDocumenter.add_directive_header(self, sig) + try: + objrepr = safe_repr(self.object) + except ValueError: + pass + else: + self.add_line(u' :annotation: = ' + objrepr, '<autodoc>') + def document_members(self, all_members=False): pass -class MethodDocumenter(ClassLevelDocumenter): +class MethodDocumenter(DocstringSignatureMixin, ClassLevelDocumenter): """ Specialized Documenter subclass for methods (normal, static and class). """ @@ -1023,31 +1101,45 @@ 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 \ inspect.ismethoddescriptor(self.object): # can never get arguments of a C function or method return None - argspec = inspect.getargspec(self.object) + argspec = getargspec(self.object) if argspec[0] and argspec[0][0] in ('cls', 'self'): del argspec[0][0] return inspect.formatargspec(*argspec) @@ -1074,16 +1166,44 @@ class AttributeDocumenter(ClassLevelDocumenter): isdatadesc = isdescriptor(member) and not \ isinstance(member, cls.method_types) and not \ type(member).__name__ == "method_descriptor" - return isdatadesc or \ - (isattr and not isinstance(parent, ModuleDocumenter)) + return isdatadesc or (not isinstance(parent, ModuleDocumenter) + and not inspect.isroutine(member) + and not isinstance(member, class_types)) def document_members(self, all_members=False): pass + def import_object(self): + ret = ClassLevelDocumenter.import_object(self) + if isdescriptor(self.object) and \ + not isinstance(self.object, self.method_types): + self._datadescriptor = True + else: + # if it's not a data descriptor + self._datadescriptor = False + return ret + def get_real_modname(self): return self.get_attr(self.parent or self.object, '__module__', None) \ or self.modname + def add_directive_header(self, sig): + ClassLevelDocumenter.add_directive_header(self, sig) + if not self._datadescriptor: + try: + objrepr = safe_repr(self.object) + except ValueError: + pass + else: + self.add_line(u' :annotation: = ' + objrepr, '<autodoc>') + + def add_content(self, more_content, no_docstring=False): + if not self._datadescriptor: + # if it's not a data descriptor, its docstring is very probably the + # wrong thing to display + no_docstring = True + ClassLevelDocumenter.add_content(self, more_content, no_docstring) + class InstanceAttributeDocumenter(AttributeDocumenter): """ @@ -1106,6 +1226,7 @@ class InstanceAttributeDocumenter(AttributeDocumenter): """Never import anything.""" # disguise as an attribute self.objtype = 'attribute' + self._datadescriptor = False return True def add_content(self, more_content, no_docstring=False): @@ -1135,8 +1256,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 @@ -1226,6 +1349,17 @@ 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') + + +class testcls: + """test doc string""" + + def __getattr__(self, x): + return x + + def __setattr__(self, x, y): + """Attr setter.""" diff --git a/sphinx/ext/autosummary/__init__.py b/sphinx/ext/autosummary/__init__.py index a194fba8..0f5c2640 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 @@ -126,22 +125,39 @@ def autosummary_table_visit_html(self, node): # -- autodoc integration ------------------------------------------------------- -try: - ismemberdescriptor = inspect.ismemberdescriptor - isgetsetdescriptor = inspect.isgetsetdescriptor -except AttributeError: - def ismemberdescriptor(obj): - return False - isgetsetdescriptor = ismemberdescriptor +class FakeDirective: + env = {} + genopt = {} def get_documenter(obj, parent): + """Get an autodoc.Documenter class suitable for documenting the given + object. + + *obj* is the Python object to be documented, and *parent* is an + another Python object (e.g. a module or a class) to which *obj* + belongs to. """ - Get an autodoc.Documenter class suitable for documenting the given object - """ - from sphinx.ext.autodoc import AutoDirective, DataDocumenter + from sphinx.ext.autodoc import AutoDirective, DataDocumenter, \ + ModuleDocumenter + + if inspect.ismodule(obj): + # ModuleDocumenter.can_document_member always returns False + return ModuleDocumenter + # Construct a fake documenter for *parent* + if parent is not None: + parent_doc_cls = get_documenter(parent, None) + else: + parent_doc_cls = ModuleDocumenter + + if hasattr(parent, '__name__'): + parent_doc = parent_doc_cls(FakeDirective(), parent.__name__) + else: + parent_doc = parent_doc_cls(FakeDirective(), "") + + # Get the corrent documenter class for *obj* classes = [cls for cls in AutoDirective._registry.values() - if cls.can_document_member(obj, '', False, parent)] + if cls.can_document_member(obj, '', False, parent_doc)] if classes: classes.sort(key=lambda cls: cls.priority) return classes[-1] @@ -155,7 +171,7 @@ class Autosummary(Directive): """ Pretty table containing short signatures and summaries of functions etc. - autosummary also generates a (hidden) toctree:: node. + autosummary can also optionally generate a hidden toctree:: node. """ required_arguments = 0 @@ -210,16 +226,12 @@ 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 - prefixes = [''] - currmodule = env.temp_data.get('py:module') - if currmodule: - prefixes.insert(0, currmodule) + prefixes = get_import_prefixes_from_env(env) items = [] @@ -279,8 +291,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`. """ @@ -325,13 +336,29 @@ class Autosummary(Directive): def mangle_signature(sig, max_chars=30): """Reformat a function signature to a more compact form.""" - sig = re.sub(r"^\((.*)\)$", r"\1", sig) + ", " - r = re.compile(r"(?P<name>[a-zA-Z0-9_*]+)(?P<default>=.*?)?, ") - items = r.findall(sig) + s = re.sub(r"^\((.*)\)$", r"\1", sig).strip() + + # Strip strings (which can contain things that confuse the code below) + s = re.sub(r"\\\\", "", s) + s = re.sub(r"\\'", "", s) + s = re.sub(r"'[^']*'", "", s) + + # Parse the signature to arguments + options + args = [] + opts = [] + + opt_re = re.compile(r"^(.*, |)([a-zA-Z0-9_*]+)=") + while s: + m = opt_re.search(s) + if not m: + # The rest are arguments + args = s.split(', ') + break - args = [name for name, default in items if not default] - opts = [name for name, default in items if default] + opts.insert(0, m.group(2)) + s = m.group(1)[:-2] + # Produce a more compact signature sig = limited_join(", ", args, max_chars=max_chars-2) if opts: if not sig: @@ -343,8 +370,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*. @@ -368,9 +394,28 @@ def limited_join(sep, items, max_chars=30, overflow_marker="..."): # -- Importing items ----------------------------------------------------------- -def import_by_name(name, prefixes=[None]): +def get_import_prefixes_from_env(env): + """ + Obtain current Python import prefixes (for `import_by_name`) + from ``document.env`` """ - Import a Python object that has the given *name*, under one of the + prefixes = [None] + + currmodule = env.temp_data.get('py:module') + if currmodule: + prefixes.insert(0, currmodule) + + currclass = env.temp_data.get('py:class') + if currclass: + if currmodule: + prefixes.insert(0, currmodule + "." + currclass) + else: + prefixes.insert(0, currclass) + + return prefixes + +def import_by_name(name, prefixes=[None]): + """Import a Python object that has the given *name*, under one of the *prefixes*. The first name that succeeds is used. """ tried = [] @@ -431,8 +476,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*'. @@ -442,8 +486,7 @@ def autolink_role(typ, rawtext, etext, lineno, inliner, 'obj', rawtext, etext, lineno, inliner, options, content) pnode = r[0][0] - prefixes = [None] - #prefixes.insert(0, inliner.document.settings.env.currmodule) + prefixes = get_import_prefixes_from_env(env) try: name, obj, parent = import_by_name(pnode['reftarget'], prefixes) except ImportError: @@ -483,12 +526,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 b5ff3f4c..089d181f 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 @@ -231,7 +232,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None): *template* ``None`` if the directive does not have the corresponding options set. """ - autosummary_re = re.compile(r'^\s*\.\.\s+autosummary::\s*') + autosummary_re = re.compile(r'^(\s*)\.\.\s+autosummary::\s*') automodule_re = re.compile( r'^\s*\.\.\s+automodule::\s*([A-Za-z0-9_.]+)\s*$') module_re = re.compile( @@ -246,6 +247,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None): template = None current_module = module in_autosummary = False + base_indent = "" for line in lines: if in_autosummary: @@ -276,7 +278,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None): documented.append((name, toctree, template)) continue - if not line.strip(): + if not line.strip() or line.startswith(base_indent + " "): continue in_autosummary = False @@ -284,6 +286,7 @@ def find_autosummary_in_lines(lines, module=None, filename=None): m = autosummary_re.match(line) if m: in_autosummary = True + base_indent = m.group(1) toctree = None template = None continue diff --git a/sphinx/ext/coverage.py b/sphinx/ext/coverage.py index cfd4265e..af1b4026 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: @@ -217,7 +232,7 @@ class CoverageBuilder(Builder): if not methods: op.write(' * %s\n' % name) else: - op.write(' * %s -- missing methods:\n' % name) + op.write(' * %s -- missing methods:\n\n' % name) op.writelines(' - %s\n' % x for x in methods) op.write('\n') @@ -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..2952388f 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,43 @@ 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 + + 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 True + # 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 - 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 - return + 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 +408,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 +423,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 1bb70d02..886af505 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 @@ -24,12 +25,11 @@ from docutils import nodes from docutils.parsers.rst import directives from sphinx.errors import SphinxError -from sphinx.util.osutil import ensuredir, ENOENT, EPIPE +from sphinx.util.osutil import ensuredir, ENOENT, EPIPE, EINVAL from sphinx.util.compat import Directive mapname_re = re.compile(r'<map id="(.*?)"') -svg_dim_re = re.compile(r'<svg\swidth="(\d+)pt"\sheight="(\d+)pt"', re.M) class GraphvizError(SphinxError): @@ -46,23 +46,48 @@ 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, + 'caption': directives.unchanged, } 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'] + if 'caption' in self.options: + node['caption'] = self.options['caption'] + node['inline'] = 'inline' in self.options return [node] @@ -76,6 +101,8 @@ class GraphvizSimple(Directive): final_argument_whitespace = False option_spec = { 'alt': directives.unchanged, + 'inline': directives.flag, + 'caption': directives.unchanged, } def run(self): @@ -85,14 +112,16 @@ class GraphvizSimple(Directive): node['options'] = [] if 'alt' in self.options: node['alt'] = self.options['alt'] + if 'caption' in self.options: + node['caption'] = self.options['caption'] + 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'): @@ -133,6 +162,7 @@ def render_dot(self, code, options, format, prefix='graphviz'): self.builder.config.graphviz_dot) self.builder._graphviz_warned_dot = True return None, None + wentWrong = False try: # Graphviz may close standard input when an error occurs, # resulting in a broken pipe on communicate() @@ -140,6 +170,12 @@ def render_dot(self, code, options, format, prefix='graphviz'): except (OSError, IOError), err: if err.errno != EPIPE: raise + wentWrong = True + except IOError, err: + if err.errno != EINVAL: + raise + wentWrong = True + if wentWrong: # in this case, read the standard output and standard error streams # directly, to get the error message(s) stdout, stderr = p.stdout.read(), p.stderr.read() @@ -150,37 +186,6 @@ def render_dot(self, code, options, format, prefix='graphviz'): return relfn, outfn -def get_svg_tag(svgref, svgfile, imgcls=None): - # Webkit can't figure out svg dimensions when using object tag - # so we need to get it from the svg file - fp = open(svgfile, 'r') - try: - for line in fp: - match = svg_dim_re.match(line) - if match: - dimensions = match.groups() - break - else: - dimensions = None - finally: - fp.close() - - # We need this hack to make WebKit show our object tag properly - def pt2px(x): - return int(ceil((96.0/72.0) * float(x))) - - if dimensions: - style = ' width="%s" height="%s"' % tuple(map(pt2px, dimensions)) - else: - style = '' - - # The object tag works fine on Firefox and WebKit - # Besides it's a hack, this strategy does not mess with templates. - imgcss = imgcls and ' class="%s"' % imgcls or '' - return '<object type="image/svg+xml" data="%s"%s%s></object>\n' % \ - (svgref, imgcss, style) - - def render_dot_html(self, node, code, options, prefix='graphviz', imgcls=None, alt=None): format = self.builder.config.graphviz_output_format @@ -193,14 +198,21 @@ 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')) + inline = node.get('inline', False) + if inline: + 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: if alt is None: alt = node.get('alt', self.encode(code).strip()) + imgcss = imgcls and 'class="%s"' % imgcls or '' if format == 'svg': - svgtag = get_svg_tag(fname, outfn, imgcls) + svgtag = '<img src="%s" alt="%s" %s/>\n' % (fname, alt, imgcss) self.body.append(svgtag) else: mapfile = open(outfn + '.map', 'rb') @@ -208,7 +220,6 @@ def render_dot_html(self, node, code, options, prefix='graphviz', imgmap = mapfile.readlines() finally: mapfile.close() - imgcss = imgcls and 'class="%s"' % imgcls or '' if len(imgmap) == 2: # nothing in image map (the lines are <map> and </map>) self.body.append('<img src="%s" alt="%s" %s/>\n' % @@ -219,8 +230,11 @@ def render_dot_html(self, node, code, options, prefix='graphviz', self.body.append('<img src="%s" alt="%s" usemap="#%s" %s/>\n' % (fname, alt, mapname, imgcss)) self.body.extend(imgmap) + if node.get('caption') and not inline: + self.body.append('</p>\n<p class="caption">') + self.body.append(self.encode(node['caption'])) - self.body.append('</p>\n') + self.body.append('</%s>\n' % wrapper) raise nodes.SkipNode @@ -235,18 +249,56 @@ def render_dot_latex(self, node, code, options, prefix='graphviz'): self.builder.warn('dot code %r: ' % code + str(exc)) raise nodes.SkipNode + inline = node.get('inline', False) + if inline: + para_separator = '' + else: + para_separator = '\n' + if fname is not None: - self.body.append('\n\\includegraphics{%s}\n' % fname) + caption = node.get('caption') + # XXX add ids from previous target node + if caption and not inline: + self.body.append('\n\\begin{figure}[h!]') + self.body.append('\n\\begin{center}') + self.body.append('\n\\caption{%s}' % self.encode(caption)) + self.body.append('\n\\includegraphics{%s}' % fname) + self.body.append('\n\\end{center}') + self.body.append('\n\\end{figure}\n') + else: + self.body.append('%s\\includegraphics{%s}%s' % + (para_separator, fname, para_separator)) raise nodes.SkipNode def latex_visit_graphviz(self, node): render_dot_latex(self, node, node['code'], node['options']) + +def render_dot_texinfo(self, node, code, options, prefix='graphviz'): + try: + fname, outfn = render_dot(self, code, options, 'png', prefix) + except GraphvizError, exc: + self.builder.warn('dot code %r: ' % code + str(exc)) + raise nodes.SkipNode + if fname is not None: + self.body.append('\n\n@float\n') + caption = node.get('caption') + if caption: + self.body.append('@caption{%s}\n' % self.escape_arg(caption)) + self.body.append('@image{%s,,,[graphviz],png}\n' + '@end float\n\n' % fname[:-4]) + raise nodes.SkipNode + +def texinfo_visit_graphviz(self, node): + render_dot_texinfo(self, node, node['code'], node['options']) + + def setup(app): app.add_node(graphviz, html=(html_visit_graphviz, None), - latex=(latex_visit_graphviz, None)) + latex=(latex_visit_graphviz, None), + texinfo=(texinfo_visit_graphviz, None)) app.add_directive('graphviz', Graphviz) app.add_directive('graph', GraphvizSimple) app.add_directive('digraph', GraphvizSimple) diff --git a/sphinx/ext/inheritance_diagram.py b/sphinx/ext/inheritance_diagram.py index 1b49720f..a2490486 100644 --- a/sphinx/ext/inheritance_diagram.py +++ b/sphinx/ext/inheritance_diagram.py @@ -47,7 +47,8 @@ except ImportError: from docutils import nodes from docutils.parsers.rst import directives -from sphinx.ext.graphviz import render_dot_html, render_dot_latex +from sphinx.ext.graphviz import render_dot_html, render_dot_latex, \ + render_dot_texinfo from sphinx.util.compat import Directive @@ -66,24 +67,23 @@ class InheritanceGraph(object): from all the way to the root "object", and then is able to generate a 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. + def __init__(self, class_names, currmodule, show_builtins=False, + private_bases=False, parts=0): + """*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. """ self.class_names = class_names classes = self._import_classes(class_names, currmodule) - self.class_info = self._class_info(classes, show_builtins, parts) + self.class_info = self._class_info(classes, show_builtins, + private_bases, parts) if not self.class_info: raise InheritanceException('No classes found for ' '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 (AttributeError, ValueError): @@ -134,7 +134,7 @@ class InheritanceGraph(object): classes.extend(self._import_class_or_module(name, currmodule)) return classes - def _class_info(self, classes, show_builtins, parts): + def _class_info(self, classes, show_builtins, private_bases, parts): """Return name and bases for all classes that are ancestors of *classes*. @@ -147,6 +147,8 @@ class InheritanceGraph(object): def recurse(cls): if not show_builtins and cls in builtins: return + if not private_bases and cls.__name__.startswith('_'): + return nodename = self.class_name(cls, parts) fullname = self.class_name(cls, 0) @@ -156,6 +158,8 @@ class InheritanceGraph(object): for base in cls.__bases__: if not show_builtins and base in builtins: continue + if not private_bases and base.__name__.startswith('_'): + continue baselist.append(self.class_name(base, parts)) if base not in all_classes: recurse(base) @@ -182,9 +186,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 +215,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. @@ -274,6 +275,7 @@ class InheritanceDiagram(Directive): final_argument_whitespace = True option_spec = { 'parts': directives.nonnegative_int, + 'private-bases': directives.flag, } def run(self): @@ -290,7 +292,8 @@ class InheritanceDiagram(Directive): try: graph = InheritanceGraph( class_names, env.temp_data.get('py:module'), - parts=node['parts']) + parts=node['parts'], + private_bases='private-bases' in self.options) except InheritanceException, err: return [node.document.reporter.warning(err.args[0], line=self.lineno)] @@ -352,6 +355,21 @@ def latex_visit_inheritance_diagram(self, node): raise nodes.SkipNode +def texinfo_visit_inheritance_diagram(self, node): + """ + Output the graph for Texinfo. This will insert a PNG. + """ + graph = node['graph'] + + graph_hash = get_graph_hash(node) + name = 'inheritance%s' % graph_hash + + dotcode = graph.generate_dot(name, env=self.builder.env, + graph_attrs={'size': '"6.0,6.0"'}) + render_dot_texinfo(self, node, dotcode, [], 'inheritance') + raise nodes.SkipNode + + def skip(self, node): raise nodes.SkipNode @@ -363,7 +381,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=(texinfo_visit_inheritance_diagram, 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..9bfd53fd 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) @@ -150,7 +158,7 @@ def load_mappings(app): # new format name, (uri, inv) = key, value if not name.isalnum(): - env.warn('intersphinx identifier %r is not alphanumeric' % name) + env.warn(docname=None, msg='intersphinx identifier %r is not alphanumeric' % name) else: # old format, no name name, uri, inv = None, key, value diff --git a/sphinx/ext/mathbase.py b/sphinx/ext/mathbase.py index e7ea82d7..1a2ca6af 100644 --- a/sphinx/ext/mathbase.py +++ b/sphinx/ext/mathbase.py @@ -56,6 +56,7 @@ class MathDirective(Directive): final_argument_whitespace = True option_spec = { 'label': directives.unchanged, + 'name': directives.unchanged, 'nowrap': directives.flag, } @@ -65,7 +66,9 @@ class MathDirective(Directive): latex = self.arguments[0] + '\n\n' + latex node = displaymath() node['latex'] = latex - node['label'] = self.options.get('label', None) + node['label'] = self.options.get('name', None) + if node['label'] is None: + node['label'] = self.options.get('label', None) node['nowrap'] = 'nowrap' in self.options node['docname'] = self.state.document.settings.env.docname ret = [node] @@ -125,6 +128,24 @@ def man_visit_eqref(self, node): raise nodes.SkipNode +def texinfo_visit_math(self, node): + self.body.append('@math{' + self.escape_arg(node['latex']) + '}') + raise nodes.SkipNode + +def texinfo_visit_displaymath(self, node): + if node.get('label'): + self.add_anchor(node['label'], node) + self.body.append('\n\n@example\n%s\n@end example\n\n' % + self.escape_arg(node['latex'])) +def texinfo_depart_displaymath(self, node): + pass + +def texinfo_visit_eqref(self, node): + self.add_xref(node['docname'] + ':' + node['target'], + node['target'], node) + raise nodes.SkipNode + + def html_visit_eqref(self, node): self.body.append('<a href="#equation-%s">' % node['target']) @@ -151,20 +172,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..7a552364 --- /dev/null +++ b/sphinx/ext/mathjax.py @@ -0,0 +1,68 @@ +# -*- 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', + 'http://cdn.mathjax.org/mathjax/latest/MathJax.js?' + 'config=TeX-AMS-MML_HTMLorMML', 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..78c331a6 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 @@ -178,6 +178,11 @@ def cleanup_tempdir(app, exc): except Exception: pass +def get_tooltip(self, node): + if self.builder.config.pngmath_add_tooltips: + return ' alt="%s"' % self.encode(node['latex']).strip() + return '' + def html_visit_math(self, node): try: fname, depth = render_math(self, '$'+node['latex']+'$') @@ -193,15 +198,10 @@ def html_visit_math(self, node): self.body.append('<span class="math">%s</span>' % self.encode(node['latex']).strip()) else: - if depth is None: - self.body.append( - '<img class="math" src="%s" alt="%s"/>' % - (fname, self.encode(node['latex']).strip())) - else: - self.body.append( - '<img class="math" src="%s" alt="%s" ' - 'style="vertical-align: %dpx"/>' % - (fname, self.encode(node['latex']).strip(), -depth)) + c = ('<img class="math" src="%s"' % fname) + get_tooltip(self, node) + if depth is not None: + c += ' style="vertical-align: %dpx"' % (-depth) + self.body.append(c + '/>') raise nodes.SkipNode def html_visit_displaymath(self, node): @@ -226,8 +226,8 @@ def html_visit_displaymath(self, node): self.body.append('<span class="math">%s</span></p>\n</div>' % self.encode(node['latex']).strip()) else: - self.body.append('<img src="%s" alt="%s" /></p>\n</div>' % - (fname, self.encode(node['latex']).strip())) + self.body.append(('<img src="%s"' % fname) + get_tooltip(self, node) + + '/></p>\n</div>') raise nodes.SkipNode @@ -240,4 +240,5 @@ def setup(app): ['-gamma 1.5', '-D 110'], 'html') app.add_config_value('pngmath_latex_args', [], 'html') app.add_config_value('pngmath_latex_preamble', '', 'html') + app.add_config_value('pngmath_add_tooltips', True, 'html') app.connect('build-finished', cleanup_tempdir) 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..32840f30 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 @@ -94,7 +98,7 @@ def collect_pages(app): # construct a page name for the highlighted source pagename = '_modules/' + modname.replace('.', '/') # highlight the source using the builder's highlighter - highlighted = highlighter.highlight_block(code, 'python', False) + highlighted = highlighter.highlight_block(code, 'python', linenos=False) # split the code into lines lines = highlighted.splitlines() # split off wrap markup from the first line of the actual code diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py index 8cbd647a..0912ee05 100644 --- a/sphinx/highlighting.py +++ b/sphinx/highlighting.py @@ -21,6 +21,7 @@ except ImportError: parser = None from sphinx.util.texescape import tex_hl_escape_map_old, tex_hl_escape_map_new +from sphinx.ext import doctest try: import pygments @@ -30,34 +31,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(), @@ -84,8 +65,6 @@ _LATEX_STYLES = r''' \newcommand\PYGZrb{]} ''' -doctestopt_re = re.compile(r'#\s*doctest:.+$', re.MULTILINE) - parsing_exceptions = (SyntaxError, UnicodeEncodeError) if sys.version_info < (2, 5): # Python <= 2.4 raises MemoryError when parsing an @@ -115,14 +94,16 @@ class PygmentsBridge(object): else: style = get_style_by_name(stylename) self.trim_doctest_flags = trim_doctest_flags + self.formatter_args = {'style' : style} if dest == 'html': - self.fmter = {False: self.html_formatter(style=style), - True: self.html_formatter(style=style, linenos=True)} + self.formatter = self.html_formatter else: - self.fmter = {False: self.latex_formatter(style=style, - commandprefix='PYG'), - True: self.latex_formatter(style=style, linenos=True, - commandprefix='PYG')} + self.formatter = self.latex_formatter + self.formatter_args['commandprefix'] = 'PYG' + + def get_formatter(self, **kwargs): + kwargs.update(self.formatter_args) + return self.formatter(**kwargs) def unhighlighted(self, source): if self.dest == 'html': @@ -156,7 +137,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 @@ -174,8 +155,8 @@ class PygmentsBridge(object): else: return True - def highlight_block(self, source, lang, linenos=False, warn=None): - if isinstance(source, str): + def highlight_block(self, source, lang, warn=None, **kwargs): + if not isinstance(source, unicode): source = source.decode() if not pygments: return self.unhighlighted(source) @@ -216,17 +197,19 @@ class PygmentsBridge(object): # trim doctest options if wanted if isinstance(lexer, PythonConsoleLexer) and self.trim_doctest_flags: - source = doctestopt_re.sub('', source) + source = doctest.blankline_re.sub('', source) + source = doctest.doctestopt_re.sub('', source) # highlight via Pygments try: + formatter = self.get_formatter(**kwargs) + hlsource = highlight(source, lexer, formatter) if self.dest == 'html': - return highlight(source, lexer, self.fmter[bool(linenos)]) + return hlsource + elif hlsource.startswith(r'\begin{Verbatim}[commandchars=\\\{\}'): + # Pygments >= 1.2 + return hlsource.translate(tex_hl_escape_map_new) else: - hlsource = highlight(source, lexer, self.fmter[bool(linenos)]) - if hlsource.startswith(r'\begin{Verbatim}[commandchars=\\\{\}'): - # Pygments >= 1.2 - return hlsource.translate(tex_hl_escape_map_new) return hlsource.translate(tex_hl_escape_map_old) except ErrorToken: # this is most probably not the selected language, @@ -239,10 +222,11 @@ class PygmentsBridge(object): return _LATEX_STYLES # no HTML styles needed return '' + formatter = self.get_formatter() if self.dest == 'html': - return self.fmter[0].get_style_defs('.highlight') + return formatter.get_style_defs('.highlight') else: - styledefs = self.fmter[0].get_style_defs() + styledefs = formatter.get_style_defs() # workaround for Pygments < 0.12 if styledefs.startswith('\\newcommand\\at{@}'): styledefs += _LATEX_STYLES diff --git a/sphinx/jinja2glue.py b/sphinx/jinja2glue.py index c952a117..ffe3a0b3 100644 --- a/sphinx/jinja2glue.py +++ b/sphinx/jinja2glue.py @@ -26,6 +26,12 @@ def _tobool(val): return val.lower() in ('true', '1', 'yes', 'on') return bool(val) +def _toint(val): + try: + return int(val) + except ValueError: + return 0 + def accesskey(context, key): """Helper to output each access key only once.""" if '_accesskeys' not in context: @@ -40,14 +46,17 @@ class idgen(object): self.id = 0 def current(self): return self.id - def next(self): + def __next__(self): self.id += 1 return self.id + next = __next__ # Python 2/Jinja compatibility 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: @@ -107,6 +116,7 @@ class BuiltinTemplateLoader(TemplateBridge, BaseLoader): self.environment = SandboxedEnvironment(loader=self, extensions=extensions) self.environment.filters['tobool'] = _tobool + self.environment.filters['toint'] = _toint self.environment.globals['debug'] = contextfunction(pformat) self.environment.globals['accesskey'] = contextfunction(accesskey) self.environment.globals['idgen'] = idgen 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..a69d00b5 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": {"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", "Permalink to this definition": "\u098f\u0987 \u09b8\u0982\u099c\u09cd\u099e\u09be\u09b0 \u09aa\u09be\u09b0\u09cd\u09ae\u09be\u09b2\u09bf\u0999\u09cd\u0995", "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", "Collapse sidebar": ""}});
\ 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..cb06ba98 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..49549939 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. @@ -7,520 +7,607 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-09-21 10:08+0200\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.6\n" -#: sphinx/environment.py:130 -#: sphinx/writers/latex.py:184 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, 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:1625 +#, fuzzy, python-format +msgid "see %s" +msgstr "আরও %s" -#: sphinx/environment.py:350 -#: sphinx/themes/basic/defindex.html:16 -msgid "Search Page" -msgstr "অনুসন্ধান পাতা" +#: sphinx/environment.py:1628 +#, fuzzy, python-format +msgid "see also %s" +msgstr "আরও দেখুন %s" -#: sphinx/roles.py:167 +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "পাইথন উন্নয়ন পরামর্শ!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "পাইথন উন্নয়ন পরামর্শ; PEP %s" -#: sphinx/builders/changes.py:70 +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "বিল্টইন সমূহ" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "মডিউল লেভেল" -#: sphinx/builders/html.py:224 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "সাধারণ ইনডেক্স" -#: sphinx/builders/html.py:243 +#: sphinx/builders/html.py:293 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:353 msgid "next" msgstr "পরবর্তী" -#: sphinx/builders/html.py:313 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "পূর্ববর্তী" -#: sphinx/builders/latex.py:162 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 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:136 msgid "Section author: " msgstr "অনুচ্ছেদ লেখক:" -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "মডিউল লেখক:" -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 +#, fuzzy +msgid "Code author: " +msgstr "মডিউল লেখক:" + +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "লেখক:" -#: sphinx/directives/other.py:233 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "আরও দেখুন" -#: sphinx/domains/c.py:124 +#: sphinx/domains/__init__.py:244 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:51 sphinx/domains/python.py:95 +msgid "Parameters" +msgstr "প্যারামিটার" + +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128 +#: sphinx/domains/python.py:107 +msgid "Returns" +msgstr "রিটার্নস" + +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 +msgid "Return type" +msgstr "রিটার্ন টাইপ" + +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C ফাংশন)" -#: sphinx/domains/c.py:126 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C মেম্বার)" -#: sphinx/domains/c.py:128 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C ম্যাক্রো)" -#: sphinx/domains/c.py:130 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C টাইপ)" -#: sphinx/domains/c.py:132 +#: sphinx/domains/c.py:149 #, python-format msgid "%s (C variable)" msgstr "%s (C ভ্যারিয়েবল)" -#: sphinx/domains/c.py:162 -msgid "C function" -msgstr "C ফাংশন" +#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 +msgid "function" +msgstr "ফাংশন" -#: sphinx/domains/c.py:163 -msgid "C member" +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 +#, fuzzy +msgid "member" msgstr "C মেম্বার" -#: sphinx/domains/c.py:164 -msgid "C macro" +#: sphinx/domains/c.py:206 +#, fuzzy +msgid "macro" msgstr "C ম্যাক্রো" -#: sphinx/domains/c.py:165 -msgid "C type" +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 +#, fuzzy +msgid "type" msgstr "C টাইপ" -#: sphinx/domains/c.py:166 -msgid "C variable" +#: sphinx/domains/c.py:208 +#, fuzzy +msgid "variable" msgstr "C ভ্যারিয়েবল" -#: sphinx/domains/python.py:186 +#: sphinx/domains/cpp.py:904 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (C++ ক্লাসে)" + +#: sphinx/domains/cpp.py:919 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (C++ টাইপ)" + +#: sphinx/domains/cpp.py:938 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (C++ মেম্বার)" + +#: sphinx/domains/cpp.py:990 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (C++ ফাংশন)" + +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 +msgid "class" +msgstr "ক্লাস" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (%s মেথড)" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (ক্লাসে)" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (%s এ্যট্রিবিউট)" + +#: sphinx/domains/javascript.py:122 +#, fuzzy +msgid "Arguments" +msgstr "প্যারামিটার" + +#: sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "" + +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 +msgid "data" +msgstr "ডাটা" + +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 +msgid "attribute" +msgstr "এ্যট্রিবিউট" + +#: sphinx/domains/python.py:100 +#, fuzzy +msgid "Variables" +msgstr "ভ্যারিয়েবল" + +#: sphinx/domains/python.py:104 +msgid "Raises" +msgstr "রেইজেস" + +#: sphinx/domains/python.py:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s মডিউলে)" -#: sphinx/domains/python.py:190 +#: sphinx/domains/python.py:258 #, python-format msgid "%s (built-in variable)" msgstr "%s (বিল্ট-ইন ভ্যারিয়েবল)" -#: sphinx/domains/python.py:191 -#: sphinx/domains/python.py:282 +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (%s মডিউলে)" -#: sphinx/domains/python.py:207 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (বিল্ট-ইন ক্লাস)" -#: sphinx/domains/python.py:208 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (%s ক্লাসে)" -#: sphinx/domains/python.py:248 +#: sphinx/domains/python.py:316 #, 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:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s (%s.%s স্ট্যাটিক মেথড)" -#: sphinx/domains/python.py:263 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s স্ট্যাটিক মেথড)" -#: sphinx/domains/python.py:273 +#: sphinx/domains/python.py:341 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s ক্লাস মেথড)" -#: sphinx/domains/python.py:276 +#: sphinx/domains/python.py:344 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s ক্লাস মেথড)" -#: sphinx/domains/python.py:286 +#: sphinx/domains/python.py:354 #, 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 -msgid "Platforms: " -msgstr "প্লাটফরম:" - -#: sphinx/domains/python.py:340 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (মডিউল)" -#: sphinx/domains/python.py:396 -msgid "function" -msgstr "ফাংশন" +#: sphinx/domains/python.py:491 +#, fuzzy +msgid "Python Module Index" +msgstr "মডিউল ইনডেক্স" -#: sphinx/domains/python.py:397 -msgid "data" -msgstr "ডাটা" +#: sphinx/domains/python.py:492 +msgid "modules" +msgstr "মডিউল সমূহ" -#: sphinx/domains/python.py:398 -msgid "class" -msgstr "ক্লাস" +#: sphinx/domains/python.py:537 +msgid "Deprecated" +msgstr "ডেপ্রিকেটেড" -#: sphinx/domains/python.py:399 -#: sphinx/locale/__init__.py:161 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "এক্সেপশন" -#: sphinx/domains/python.py:400 +#: sphinx/domains/python.py:563 msgid "method" msgstr "মেথড" -#: sphinx/domains/python.py:401 -msgid "attribute" -msgstr "এ্যট্রিবিউট" +#: sphinx/domains/python.py:564 +msgid "class method" +msgstr "ক্লাস মেথড" -#: sphinx/domains/python.py:402 -#: sphinx/locale/__init__.py:157 +#: sphinx/domains/python.py:565 +msgid "static method" +msgstr "স্ট্যাটিক মেথড" + +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "মডিউল" -#: sphinx/domains/std.py:67 -#: sphinx/domains/std.py:83 +#: sphinx/domains/python.py:695 +#, 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:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "এনভায়রনমেন্ট ভ্যারিয়েবল; %s" -#: sphinx/domains/std.py:156 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%sকমান্ড লাইন অপশন; %s" -#: sphinx/domains/std.py:324 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "শব্দকোষ" -#: sphinx/domains/std.py:325 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "ব্যকরণ টোকেন" -#: sphinx/domains/std.py:326 +#: sphinx/domains/std.py:395 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "এনভায়রনমেন্ট ভ্যারিয়েবল" -#: sphinx/domains/std.py:327 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "প্রোগ্রাম অপশন" -#: sphinx/ext/autodoc.py:892 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 +msgid "Index" +msgstr "ইনডেক্স" + +#: sphinx/domains/std.py:428 +msgid "Module Index" +msgstr "মডিউল ইনডেক্স" + +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "অনুসন্ধান পাতা" + +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr "বেস: %s" -#: sphinx/ext/autodoc.py:925 +#: sphinx/ext/autodoc.py:1038 #, 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/viewcode.py:164 +msgid "Overview: module code" +msgstr "" -#: sphinx/ext/todo.py:104 -msgid "here" -msgstr "এখানে" +#: 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 "দৃষ্টি আকর্ষণ" -#: 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:176 msgid "keyword" msgstr "কিওয়ার্ড" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "অপারেটর" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "অবজেক্ট" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "স্ট্যাটমেন্ট" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:181 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:137 +#: 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:35 #, 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:63 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:74 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:29 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 #, python-format msgid "Search within %(docstitle)s" @@ -530,51 +617,56 @@ msgstr "%(docstitle)s এর মধ্যে খুঁজুন" 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 msgid "Copyright" msgstr "কপিরাইট" -#: sphinx/themes/basic/layout.html:187 -#: sphinx/themes/scrolls/layout.html:83 +#: sphinx/themes/basic/layout.html:189 #, 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:191 #, 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:195 #, 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:198 #, 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 +674,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 +682,32 @@ 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 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 +736,50 @@ 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:504 +#: sphinx/writers/html.py:510 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:92 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 -msgid "Searching" -msgstr "অনুসন্ধান চলছে" - -#: sphinx/themes/basic/static/searchtools.js:279 -msgid "Preparing search..." -msgstr "অনুসন্ধানের প্রস্তুতি চলছে..." - -#: sphinx/themes/basic/static/searchtools.js:352 -msgid ", in " -msgstr ", -" +#: sphinx/themes/default/static/sidebar.js:69 +msgid "Expand sidebar" +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/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 +msgid "Collapse sidebar" +msgstr "" -#: sphinx/themes/basic/static/searchtools.js:477 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "অনুসন্ধান শেষ হয়েছে, ফলাফলে %s-টি পাতা পাওয়া গেছে।" +#: sphinx/themes/haiku/layout.html:26 +msgid "Contents" +msgstr "" -#: sphinx/writers/latex.py:187 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "রিলিজ" -#: sphinx/writers/latex.py:579 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "পাদটীকা" -#: sphinx/writers/latex.py:647 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "পূর্ববর্তী পাতা হতে চলমান" -#: sphinx/writers/latex.py:652 +#: sphinx/writers/latex.py:681 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:437 msgid "[image]" msgstr "[ছবি]" diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.js b/sphinx/locale/ca/LC_MESSAGES/sphinx.js index 71a50776..736d9b76 100644 --- a/sphinx/locale/ca/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/ca/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "ca", "plural_expr": "(n != 1)", "messages": {"Search Results": "Resultats de la Cerca", "Preparing search...": "Preparant la cerca...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "La teva cerca no ha donat resultats. Assegura't que totes les paraules estan ben escrites i que has seleccionat prou categories.", "Search finished, found %s page(s) matching the search query.": "Cerca finalitzada, s'han trobat %s p\u00e0gin(a/es) de resultats.", ", in ": ", a ", "Expand sidebar": "", "Permalink to this headline": "Link permanent a aquest t\u00edtol", "Searching": "Cercant", "Collapse sidebar": "", "Permalink to this definition": "Link permanent a aquesta definici\u00f3", "Hide Search Matches": "Oculta Resultats de Cerca"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "ca", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Oculta Resultats de Cerca", "Permalink to this definition": "Link permanent a aquesta definici\u00f3", "Expand sidebar": "", "Permalink to this headline": "Link permanent a aquest t\u00edtol", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/ca/LC_MESSAGES/sphinx.mo b/sphinx/locale/ca/LC_MESSAGES/sphinx.mo Binary files differindex 339c787f..fc373e47 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..c876228e 100644 --- a/sphinx/locale/ca/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ca/LC_MESSAGES/sphinx.po @@ -7,387 +7,405 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, fuzzy, python-format +msgid "%s %s documentation" +msgstr "%s %s documentació" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d de %B de %Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "vegeu %s" + +#: sphinx/environment.py:1628 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "see also %s" +msgstr "vegeu també %s" -#: sphinx/builders/changes.py:72 +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Mòduls Interns" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Nivell de mòdul" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Índex General" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "índex" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "següent" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "anterior" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr " (a " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Autor de la secció:" -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Autor del mòdul: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "Autor del mòdul: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Autor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Vegeu també" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Retorna" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Tipus de retorn" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (funció de C)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (membre de C)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (macro de C)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (tipus de C)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "funció" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "membre" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "tipus" -#: sphinx/domains/c.py:175 -#, fuzzy +#: sphinx/domains/c.py:208 msgid "variable" -msgstr "Variable" +msgstr "variable" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (class de C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (tipus de C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (membre de C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, 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:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "class" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (mètode %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (class)" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (atribut %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "Paràmetres" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "Variable" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (al mòdul %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (al mòdul %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (classe interna)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (class a %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (mètode %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, 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:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (mètode estàtic %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (mètode %s.%s)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (mètode %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atribut %s.%s)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Plataformes: " - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (mòdul)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "Índex de Mòduls" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "mòduls" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Obsolet" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "excepció" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 msgid "class method" -msgstr "%s() (mètode %s)" +msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "mètode estàtic" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "mòdul" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr " (obsolet)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, python-format msgid "%s (role)" -msgstr "%s (mòdul)" +msgstr "" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "mòdul" +msgstr "" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "variable d'entorn; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "opció de línia de comandes %s; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "variable d'entorn" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Índex" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Índex de Mòduls" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Pàgina de Cerca" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " Bases: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "àlies de :class:`%s`" @@ -405,104 +423,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:176 msgid "keyword" msgstr "paraula clau" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "operador" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "objecte" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "sentència" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "funció interna" @@ -511,8 +529,8 @@ msgstr "funció interna" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Cerca" @@ -560,15 +578,15 @@ msgstr "accés ràpid a tots els mòduls" msgid "all functions, classes, terms" msgstr "totes les funcions, classes, termes" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Índes – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Índex complet en una pàgina" @@ -580,39 +598,39 @@ msgstr "Pàgines d'índex per lletra" msgid "can be huge" msgstr "pot ser gegant" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navegació" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Cerca dins de %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "Quant a aquests documents" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Última actualització el %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -642,7 +660,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 +668,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 +680,15 @@ 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 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 +728,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Link permanent a aquesta definició" @@ -724,37 +741,12 @@ msgstr "Link permanent a aquesta definició" msgid "Hide Search Matches" msgstr "Oculta Resultats de Cerca" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Cercant" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Preparant la cerca..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr ", a " - -#: 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 "" -"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 -#, 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." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -762,22 +754,24 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Versió" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "ve de la pàgina anterior" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" msgstr "Continua a la pàgina següent" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[imatge]" + diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.js b/sphinx/locale/cs/LC_MESSAGES/sphinx.js index 8fdd489a..011ef542 100644 --- a/sphinx/locale/cs/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/cs/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "cs", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Search Results": "V\u00fdsledky hled\u00e1n\u00ed", "Preparing search...": "P\u0159ipravuji vyhled\u00e1v\u00e1n\u00ed....", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Nenalezli jsme \u017e\u00e1dn\u00fd dokument. Ujist\u011bte se pros\u00edm, \u017ee v\u0161echna slova jsou spr\u00e1vn\u011b a \u017ee jste vybral dostatek kategori\u00ed.", "Search finished, found %s page(s) matching the search query.": "Vyhled\u00e1v\u00e1n\u00ed skon\u010dilo, nalezeno %s stran.", ", in ": ", v", "Expand sidebar": "", "Permalink to this headline": "Trval\u00fd odkaz na tento nadpis", "Searching": "Hled\u00e1m", "Collapse sidebar": "", "Permalink to this definition": "Trval\u00fd odkaz na tuto definici", "Hide Search Matches": "Skr\u00fdt v\u00fdsledky vyhled\u00e1v\u00e1n\u00ed"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "cs", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "Skr\u00fdt v\u00fdsledky vyhled\u00e1v\u00e1n\u00ed", "Permalink to this definition": "Trval\u00fd odkaz na tuto definici", "Expand sidebar": "", "Permalink to this headline": "Trval\u00fd odkaz na tento nadpis", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/cs/LC_MESSAGES/sphinx.mo b/sphinx/locale/cs/LC_MESSAGES/sphinx.mo Binary files differindex 8092a992..ba0798db 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..9ed728ed 100644 --- a/sphinx/locale/cs/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/cs/LC_MESSAGES/sphinx.po @@ -7,8 +7,8 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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,379 +16,398 @@ 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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, fuzzy, python-format +msgid "%s %s documentation" +msgstr "%s %s dokumentaci" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d.%m.%Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, fuzzy, python-format +msgid "see %s" +msgstr "viz %s" + +#: sphinx/environment.py:1628 +#, fuzzy, python-format +msgid "see also %s" +msgstr "viz také %s" + +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:73 msgid "Builtins" -msgstr "Vestavěné funkce " +msgstr "Vestavěné funkce" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Úroveň modulů" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Rejstřík indexů" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "index" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "další" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "předchozí" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr "(v" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Autor sekce: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Autor modulu: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "Autor modulu: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Autor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Viz také" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Vrací" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Typ navrácené hodnoty" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C funkce)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (člen C)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C makro)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C typ)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "funkce" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "člen" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "typ" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 #, fuzzy msgid "variable" msgstr "Proměnná" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ třída)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ typ)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (člen C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkce)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "třída" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (metoda %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (třída)" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s() (atribut %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "Parametry" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "Proměnná" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (v modulu %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s() (v modulu %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s () (vestavěná proměnná)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s() (třída v %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (metoda %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (statická metoda %s.%s)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (statická metoda %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (metoda %s.%s)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (metoda %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s() (atribut %s.%s)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Platformy: " - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (module)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" -msgstr "Rejstřík modulů " +msgstr "Rejstřík modulů" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "moduly" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Zastaralé" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "výjimka" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 msgid "class method" -msgstr "%s() (metoda %s)" +msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "statická metoda" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "modul" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr " (zastaralé)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, python-format msgid "%s (role)" -msgstr "%s (module)" +msgstr "" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "modul" +msgstr "" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "promměná prostředí, %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%s parametry příkazového řádku; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "promměná prostředí" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Index" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Rejstřík modulů " -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Vyhledávací stránka" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -400,110 +419,110 @@ msgstr "Todo" #: sphinx/ext/todo.py:109 #, fuzzy, python-format msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(Původní záznam je v %s, řádka %d a lze jej nalézt" +msgstr "(Původní záznam je v %s, řádka %d.)" #: sphinx/ext/todo.py:117 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:176 msgid "keyword" msgstr "klíčové slovo" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "operátor" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "příkaz" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "vestavěná funkce" @@ -512,8 +531,8 @@ msgstr "vestavěná funkce" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Hledání" @@ -562,15 +581,15 @@ msgstr "rychlý přístup ke všem modulům" msgid "all functions, classes, terms" msgstr "všechny funkce, třídy, termíny" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Plný index na jedné stránce" @@ -582,39 +601,39 @@ msgstr "Index podle písmene" msgid "can be huge" msgstr "může být obrovský" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navigace" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Hledání uvnitř %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "O těchto dokumentech" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Veškerá práva vyhrazena" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Aktualizováno dne %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -644,13 +663,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 +681,15 @@ 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 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 +729,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Trvalý odkaz na tuto definici" @@ -724,37 +742,12 @@ 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 -msgid "Searching" -msgstr "Hledám" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Připravuji vyhledávání...." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr ", v" - -#: 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 "" -"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 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "Vyhledávání skončilo, nalezeno %s stran." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -762,23 +755,25 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Vydání" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 #, fuzzy msgid "Continued on next page" msgstr "Plný index na jedné stránce" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 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..c28fab30 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": {"Hide Search Matches": "Skjul s\u00f8geresultater", "Permalink to this definition": "Permalink til denne definition", "Expand sidebar": "Udfold sidebj\u00e6lke", "Permalink to this headline": "Permalink til denne overskrift", "Collapse sidebar": "Sammenfold sidebj\u00e6lke"}});
\ 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..d0006ee2 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..df991aec 100644 --- a/sphinx/locale/da/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/da/LC_MESSAGES/sphinx.po @@ -1,509 +1,602 @@ -# Translations template for Sphinx. -# Copyright (C) 2009 The Sphinx Team +# Danish translations for Sphinx. +# Copyright (C) 2009, 2011 The Sphinx Team # This file is distributed under the same license as the Sphinx project. # -# Ask Hjorth Larsen <asklarsen@gmail.com>, 2010. +# Ask Hjorth Larsen <asklarsen@gmail.com>, 2010, 2011. msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\n" "Last-Translator: Ask Hjorth Larsen <asklarsen@gmail.com>\n" -"Language-Team: Danish <dansk@dansk-gruppen.dk\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.6\n" -# 21. april, 2010 -#: sphinx/environment.py:130 sphinx/writers/latex.py:184 +#: sphinx/config.py:81 +#, fuzzy, python-format +msgid "%s %s documentation" +msgstr "%s %s dokumentation" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, 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" +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "se %s" -# Ikke 'Søg på side' -#: sphinx/environment.py:350 sphinx/themes/basic/defindex.html:16 -msgid "Search Page" -msgstr "Søgeside" +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "se også %s" -#: sphinx/roles.py:167 +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/builders/changes.py:70 +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Indbyggede" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Modulniveau" -# Apr 21, 2010 -#: sphinx/builders/html.py:224 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Generelt indeks" -#: sphinx/builders/html.py:243 +#: sphinx/builders/html.py:293 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:353 msgid "next" msgstr "næste" -#: sphinx/builders/html.py:313 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "forrige" -#: sphinx/builders/latex.py:162 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 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:136 msgid "Section author: " msgstr "Afsnitsforfatter: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Modulforfatter: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 +msgid "Code author: " +msgstr "Kodeforfatter: " + +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Forfatter: " -#: sphinx/directives/other.py:233 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Se også" -#: sphinx/domains/c.py:124 +#: sphinx/domains/__init__.py:244 +#, python-format +msgid "%s %s" +msgstr "%s %s" + +#: sphinx/domains/c.py:51 sphinx/domains/python.py:95 +msgid "Parameters" +msgstr "Parametre" + +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128 +#: sphinx/domains/python.py:107 +msgid "Returns" +msgstr "Returnerer" + +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 +msgid "Return type" +msgstr "Returtype" + +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C-funktion)" -#: sphinx/domains/c.py:126 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C-medlem)" -#: sphinx/domains/c.py:128 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C-makro)" -#: sphinx/domains/c.py:130 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C-type)" -#: sphinx/domains/c.py:132 +#: sphinx/domains/c.py:149 #, 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 +msgid "function" +msgstr "funktion" + +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 +msgid "member" +msgstr "medlem" + +#: sphinx/domains/c.py:206 +msgid "macro" +msgstr "makro" + +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 +msgid "type" +msgstr "type" + +#: sphinx/domains/c.py:208 +msgid "variable" +msgstr "variabel" + +#: sphinx/domains/cpp.py:904 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (C++-klasse)" -#: sphinx/domains/c.py:163 -msgid "C member" -msgstr "C-medlem" +#: sphinx/domains/cpp.py:919 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (C++-type)" -#: sphinx/domains/c.py:164 -msgid "C macro" -msgstr "C-makro" +#: sphinx/domains/cpp.py:938 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (C++-medlem)" -#: sphinx/domains/c.py:165 -msgid "C type" -msgstr "C-type" +#: sphinx/domains/cpp.py:990 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (C++-funktion)" -#: sphinx/domains/c.py:166 -msgid "C variable" -msgstr "C-variabel" +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 +msgid "class" +msgstr "klasse" -#: sphinx/domains/python.py:186 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (metode i %s)" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (klasse)" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "%s (global variabel eller konstant)" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (attribut i %s)" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "Parametre" + +#: sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "Kaster" + +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 +msgid "data" +msgstr "data" + +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 +msgid "attribute" +msgstr "attribut" + +#: sphinx/domains/python.py:100 +msgid "Variables" +msgstr "Variable" + +#: sphinx/domains/python.py:104 +msgid "Raises" +msgstr "Rejser" + +#: sphinx/domains/python.py:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (i modulet %s)" -#: sphinx/domains/python.py:190 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (i modulet %s)" -#: sphinx/domains/python.py:207 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (indbygget klasse)" -#: sphinx/domains/python.py:208 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (klasse i %s)" -#: sphinx/domains/python.py:248 +#: sphinx/domains/python.py:316 #, 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:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (statisk metode i %s.%s)" -#: sphinx/domains/python.py:263 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (statisk metode i %s)" -#: sphinx/domains/python.py:273 +#: sphinx/domains/python.py:341 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (klassemetode i %s.%s)" -#: sphinx/domains/python.py:276 +#: sphinx/domains/python.py:344 #, python-format msgid "%s() (%s class method)" msgstr "%s() (klassemetode i %s)" -#: sphinx/domains/python.py:286 +#: sphinx/domains/python.py:354 #, 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 -msgid "Platforms: " -msgstr "Platforme: " - -#: sphinx/domains/python.py:340 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:396 -msgid "function" -msgstr "funktion" +#: sphinx/domains/python.py:491 +msgid "Python Module Index" +msgstr "Python-modulindeks" -#: sphinx/domains/python.py:397 -msgid "data" -msgstr "data" +#: sphinx/domains/python.py:492 +msgid "modules" +msgstr "moduler" -#: sphinx/domains/python.py:398 -msgid "class" -msgstr "klasse" +#: sphinx/domains/python.py:537 +msgid "Deprecated" +msgstr "Forældet" -#: sphinx/domains/python.py:399 sphinx/locale/__init__.py:161 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "undtagelse" -#: sphinx/domains/python.py:400 +#: sphinx/domains/python.py:563 msgid "method" msgstr "metode" -#: sphinx/domains/python.py:401 -msgid "attribute" -msgstr "attribut" +#: sphinx/domains/python.py:564 +msgid "class method" +msgstr "klassemetode" -#: sphinx/domains/python.py:402 sphinx/locale/__init__.py:157 +#: sphinx/domains/python.py:565 +msgid "static method" +msgstr "statisk metode" + +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "modul" -#: sphinx/domains/std.py:67 sphinx/domains/std.py:83 +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr " (forældet)" + +#: 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 (rolle)" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "direktiv" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "rolle" + +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "miljøvariabel; %s" -#: sphinx/domains/std.py:156 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%skommandolinjetilvalg; %s" -#: sphinx/domains/std.py:324 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "begreb i ordliste" -#: sphinx/domains/std.py:325 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "grammatisk element" -#: sphinx/domains/std.py:326 +#: sphinx/domains/std.py:395 +msgid "reference label" +msgstr "referenceetiket" + +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "miljøvariabel" -#: sphinx/domains/std.py:327 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "programtilvalg" -#: sphinx/ext/autodoc.py:892 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 +msgid "Index" +msgstr "Indeks" + +#: sphinx/domains/std.py:428 +msgid "Module Index" +msgstr "Modulindeks" + +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "Søgeside" + +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " Baser: %s" -#: sphinx/ext/autodoc.py:925 +#: sphinx/ext/autodoc.py:1038 #, 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 +#, 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 "oprindeligt punkt" + +#: sphinx/ext/viewcode.py:70 +msgid "[source]" +msgstr "[kilde]" + +#: sphinx/ext/viewcode.py:117 +msgid "[docs]" +msgstr "[dok]" + +#: sphinx/ext/viewcode.py:131 +msgid "Module code" +msgstr "Modulkode" + +#: 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 "<h1>Kildekode for %s</h1>" -#: sphinx/ext/todo.py:104 -msgid "here" -msgstr "her" +#: sphinx/ext/viewcode.py:164 +msgid "Overview: module code" +msgstr "Oversigt: modulkode" -#: sphinx/locale/__init__.py:138 +#: sphinx/ext/viewcode.py:165 +msgid "<h1>All modules for which code is available</h1>" +msgstr "<h1>Alle moduler, der er kode tilgængelig for</h1>" + +#: 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" +msgstr "Forældet siden version %s" -#: sphinx/locale/__init__.py:158 +#: sphinx/locale/__init__.py:176 msgid "keyword" msgstr "nøgleord" -#: sphinx/locale/__init__.py:159 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:162 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "erklæring" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:181 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:137 +#: 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:35 #, 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:63 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:74 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:29 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 #, python-format msgid "Search within %(docstitle)s" @@ -513,48 +606,56 @@ msgstr "Søg i %(docstitle)s" 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 msgid "Copyright" msgstr "Ophavsret" -#: sphinx/themes/basic/layout.html:187 sphinx/themes/scrolls/layout.html:83 +#: sphinx/themes/basic/layout.html:189 #, 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:191 #, 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:195 #, 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:198 #, 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 +663,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 +675,26 @@ 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 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 +723,50 @@ 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:504 +#: sphinx/writers/html.py:510 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:92 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 -msgid "Searching" -msgstr "Søger" +#: sphinx/themes/default/static/sidebar.js:69 +msgid "Expand sidebar" +msgstr "Udfold sidebjælke" -#: sphinx/themes/basic/static/searchtools.js:279 -msgid "Preparing search..." -msgstr "Forbereder søgning..." +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 +msgid "Collapse sidebar" +msgstr "Sammenfold sidebjælke" -#: sphinx/themes/basic/static/searchtools.js:352 -msgid ", in " -msgstr ", i " +#: sphinx/themes/haiku/layout.html:26 +msgid "Contents" +msgstr "Indhold" -#: 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 "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 -#, 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/writers/latex.py:177 msgid "Release" msgstr "Udgave" -#: sphinx/writers/latex.py:579 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "Fodnoter" -#: sphinx/writers/latex.py:647 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "fortsat fra forrige side" -#: sphinx/writers/latex.py:652 +#: sphinx/writers/latex.py:681 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:437 msgid "[image]" msgstr "[billede]" diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.js b/sphinx/locale/de/LC_MESSAGES/sphinx.js index 5409d6d9..665492b1 100644 --- a/sphinx/locale/de/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/de/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "de", "plural_expr": "(n != 1)", "messages": {"Search Results": "Suchergebnisse", "Preparing search...": "Suche wird vorbereitet...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Es wurden keine zutreffenden Dokumente gefunden. Haben Sie alle Suchbegriffe richtig geschrieben und gen\u00fcgend Kategorien ausgew\u00e4hlt?", "Search finished, found %s page(s) matching the search query.": "Suche beendet, %s zutreffende Seite(n) gefunden.", ", in ": ", in ", "Expand sidebar": "Sidebar ausklappen", "Permalink to this headline": "Permalink zu dieser \u00dcberschrift", "Searching": "Suche...", "Collapse sidebar": "Sidebar einklappen", "Permalink to this definition": "Permalink zu dieser Definition", "Hide Search Matches": "Suchergebnisse ausblenden"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "de", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Suchergebnisse ausblenden", "Permalink to this definition": "Permalink zu dieser Definition", "Expand sidebar": "Sidebar ausklappen", "Permalink to this headline": "Permalink zu dieser \u00dcberschrift", "Collapse sidebar": "Sidebar einklappen"}});
\ No newline at end of file diff --git a/sphinx/locale/de/LC_MESSAGES/sphinx.mo b/sphinx/locale/de/LC_MESSAGES/sphinx.mo Binary files differindex abecb480..ce12882d 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 83e6fabe..50ba7490 100644 --- a/sphinx/locale/de/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/de/LC_MESSAGES/sphinx.po @@ -6,383 +6,401 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s Dokumentation" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d. %m. %Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "siehe %s" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "siehe auch %s" + +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Builtins" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Modulebene" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Allgemeiner Index" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "Index" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "weiter" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "zurück" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr " (in " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Autor des Abschnitts: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Autor des Moduls: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 msgid "Code author: " msgstr "Autor des Quellcode: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Autor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Siehe auch" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Rückgabe" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Rückgabetyp" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C-Funktion)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C-Member)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C-Makro)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C-Typ)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "Funktion" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "Member" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "Makro" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "Typ" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 msgid "variable" msgstr "Variable" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (C++-Klasse)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (C++-Typ)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (C++-Member)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (C++-Funktion)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "Klasse" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (Methode von %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (Klasse)" + +#: sphinx/domains/javascript.py:111 #, 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:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (Attribut von %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 msgid "Arguments" msgstr "Parameter" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Wirft" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "Daten" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 -#, python-format +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "Attribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 msgid "Variables" msgstr "Variablen" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (in Modul %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (in Modul %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (Standard-Klasse)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (Klasse in %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (Methode von %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (statische Methode von %s.%s)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (statische Methode von %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (Klassenmethode von %s.%s)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, python-format msgid "%s() (%s class method)" msgstr "%s() (Klassenmethode von %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (Attribut von %s.%s)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Plattformen: " - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (Modul)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 msgid "Python Module Index" msgstr "Python-Modulindex" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "Module" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Veraltet" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "Exception" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "Methode" -#: sphinx/domains/python.py:502 -#, python-format +#: sphinx/domains/python.py:564 msgid "class method" msgstr "Klassenmethode" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "statische Methode" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "Module" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +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" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "Umgebungsvariable; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%sKommandozeilenoption; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "Glossareintrag" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "Grammatik-Token" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "Referenz-Label" -#: sphinx/domains/std.py:331 -#, python-format +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "Umgebungsvariable" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "Programmoption" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Stichwortverzeichnis" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Modulindex" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Suche" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " Basisklassen: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "Alias von :class:`%s`" @@ -400,103 +418,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:176 msgid "keyword" msgstr "Schlüsselwort" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "Operator" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "Objekt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "Anweisung" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "Standard-Funktion" @@ -505,8 +523,8 @@ msgstr "Standard-Funktion" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Suche" @@ -556,15 +574,15 @@ msgstr "Schneller Zugriff auf alle Module" msgid "all functions, classes, terms" msgstr "Alle Funktionen, Klassen, Begriffe" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Stichwortverzeichnis – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Gesamtes Stichwortverzeichnis auf einer Seite" @@ -576,39 +594,39 @@ msgstr "Stichwortverzeichnis nach Anfangsbuchstabe" msgid "can be huge" msgstr "kann groß sein" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navigation" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Suche in %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "Über diese Dokumentation" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Zuletzt aktualisiert am %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -638,13 +656,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 +675,15 @@ 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 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 +723,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Permalink zu dieser Definition" @@ -719,37 +736,12 @@ msgstr "Permalink zu dieser Definition" msgid "Hide Search Matches" msgstr "Suchergebnisse ausblenden" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Suche..." - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Suche wird vorbereitet..." - -#: sphinx/themes/basic/static/searchtools.js:364 -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 "" -"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 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "Suche beendet, %s zutreffende Seite(n) gefunden." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 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:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "Sidebar einklappen" @@ -757,23 +749,24 @@ msgstr "Sidebar einklappen" msgid "Contents" msgstr "Inhalt" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Release" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "Fußnoten" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "Fortsetzung der vorherigen Seite" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" msgstr "Fortsetzung auf der nächsten Seite" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[Bild]" diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.js b/sphinx/locale/es/LC_MESSAGES/sphinx.js index 098e8b5d..8ccbc0ca 100644 --- a/sphinx/locale/es/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/es/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "es", "plural_expr": "(n != 1)", "messages": {"Search Results": "Resultados de la b\u00fasqueda", "Preparing search...": "Preparando la b\u00fasqueda", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "La b\u00fasqueda no dio ning\u00fan resultado. Por favor aseg\u00farese que escribi\u00f3 todas las palabras correctamente y que ha seleccionado suficientes categor\u00edas", "Search finished, found %s page(s) matching the search query.": "B\u00fasqueda finalizada, se han encontrado %s p\u00e1gina(s) que concuerdan con su consulta", ", in ": "", "Expand sidebar": "", "Permalink to this headline": "Enlazar permanentemente con este t\u00edtulo", "Searching": "Buscando", "Collapse sidebar": "", "Permalink to this definition": "Enlazar permanentemente con esta definici\u00f3n", "Hide Search Matches": "Coincidencias de la b\u00fasqueda"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "es", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Coincidencias de la b\u00fasqueda", "Permalink to this definition": "Enlazar permanentemente con esta definici\u00f3n", "Expand sidebar": "", "Permalink to this headline": "Enlazar permanentemente con este t\u00edtulo", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/es/LC_MESSAGES/sphinx.mo b/sphinx/locale/es/LC_MESSAGES/sphinx.mo Binary files differindex c1ee0bfe..87b44fe6 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..fbcba7d9 100644 --- a/sphinx/locale/es/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/es/LC_MESSAGES/sphinx.po @@ -7,390 +7,412 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 #, fuzzy, python-format +msgid "%s %s documentation" +msgstr "%s %s documentación" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 +#, python-format msgid "%B %d, %Y" msgstr "%d de %B de %Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "ver %s" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "ver también %s" + +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:73 #, fuzzy msgid "Builtins" msgstr "Funciones de base" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 #, fuzzy msgid "Module level" msgstr "Módulos" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Índice General" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "índice" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "siguiente" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "anterior" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Autor de la sección: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Autor del módulo: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "Autor del módulo: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Autor:" -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Ver también" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Devuelve" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 #, fuzzy msgid "Return type" msgstr "Tipo del argumento devuelto" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (función C)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (miembro C)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (macro C)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (tipo C)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "función" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "miembro" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "tipo" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 #, fuzzy msgid "variable" msgstr "Variable" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (clase C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (tipo C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, fuzzy, python-format msgid "%s (C++ member)" msgstr "%s (miembro C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, 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:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "clase" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s método)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (clase C++)" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atributo)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "Parámetros" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "atributo" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "Variable" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (en el módulo %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (en el módulo %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, fuzzy, python-format msgid "%s (built-in class)" msgstr "%s (variable de base)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (clase en %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s método)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, 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:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s método estático)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s método)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s método)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atributo)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Plataformas:" - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (módulo)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "Índice de Módulos" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "módulos" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Obsoleto" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "excepción" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 +#, fuzzy msgid "class method" msgstr "%s() (%s método)" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "método estático" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "módulo" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +#, 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" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "variables de entorno; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, fuzzy, python-format msgid "%scommand line option; %s" msgstr "%sOpciones en línea de comandos; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "variables de entorno" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Índice" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Índice de Módulos" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Página de Búsqueda" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -408,104 +430,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:176 msgid "keyword" msgstr "palabra clave" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "operador" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "objeto" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "sentencia" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 #, fuzzy msgid "built-in function" msgstr "función de base" @@ -515,8 +537,8 @@ msgstr "función de base" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Búsqueda" @@ -565,15 +587,15 @@ msgstr "acceso rápido a todos los módulos" msgid "all functions, classes, terms" msgstr "todas las funciones, clases, términos" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Índice – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Índice completo en una página" @@ -585,39 +607,39 @@ msgstr "Índice alfabético" msgid "can be huge" msgstr "puede ser muy grande" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navegación" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Buscar en %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "Sobre este documento" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Actualizado por última vez en %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -647,13 +669,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 +688,15 @@ 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 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 +736,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Enlazar permanentemente con esta definición" @@ -729,40 +750,12 @@ msgstr "Enlazar permanentemente con esta definición" msgid "Hide Search Matches" msgstr "Coincidencias de la búsqueda" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Buscando" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Preparando la búsqueda" - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr "" - -#: 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 "" -"La búsqueda no dio ningún resultado. Por favor asegúrese que escribió " -"todas las palabras correctamente y que ha seleccionado suficientes " -"categorías" - -#: sphinx/themes/basic/static/searchtools.js:493 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "" -"Búsqueda finalizada, se han encontrado %s página(s) que concuerdan con su" -" consulta" - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -770,24 +763,26 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 #, fuzzy msgid "Release" msgstr "Versión" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 #, fuzzy msgid "Continued on next page" msgstr "Índice completo en una página" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[imagen]" + diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.js b/sphinx/locale/et/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000..5f51a53a --- /dev/null +++ b/sphinx/locale/et/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "et", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Varja otsingutulemused", "Permalink to this definition": "P\u00fcsilink sellele definitsioonile", "Expand sidebar": "N\u00e4ita k\u00fclgriba", "Permalink to this headline": "P\u00fcsilink sellele pealkirjale", "Collapse sidebar": "Varja k\u00fclgriba"}});
\ No newline at end of file diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.mo b/sphinx/locale/et/LC_MESSAGES/sphinx.mo Binary files differnew file mode 100644 index 00000000..14b911c0 --- /dev/null +++ b/sphinx/locale/et/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/et/LC_MESSAGES/sphinx.po b/sphinx/locale/et/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..a687f297 --- /dev/null +++ b/sphinx/locale/et/LC_MESSAGES/sphinx.po @@ -0,0 +1,770 @@ +# Estonian translations for Sphinx. +# Copyright (C) 2010 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: Sphinx 1.0pre/8b971dbc7d36\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-09-18 11:40+0200\n" +"Last-Translator: Aivar Annamaa <aivar.annamaa@gmail.com>\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.6\n" + +#: sphinx/config.py:81 +#, fuzzy, python-format +msgid "%s %s documentation" +msgstr "%s %s dokumentatsioon" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 +#, python-format +msgid "%B %d, %Y" +msgstr "%B %d, %Y" + +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/roles.py:175 +#, fuzzy, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals!PEP %s" + +#: sphinx/builders/changes.py:73 +msgid "Builtins" +msgstr "Sisseehitatud" + +#: sphinx/builders/changes.py:75 +msgid "Module level" +msgstr "Mooduli tase" + +#: sphinx/builders/html.py:274 +#, python-format +msgid "%b %d, %Y" +msgstr "%b %d, %Y" + +#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "Üldindeks" + +#: sphinx/builders/html.py:293 +msgid "index" +msgstr "indeks" + +#: sphinx/builders/html.py:353 +msgid "next" +msgstr "järgmine" + +#: sphinx/builders/html.py:362 +msgid "previous" +msgstr "eelmine" + +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 +msgid " (in " +msgstr " (in " + +#: sphinx/directives/other.py:136 +msgid "Section author: " +msgstr "Sektsiooni autor:" + +#: sphinx/directives/other.py:138 +msgid "Module author: " +msgstr "Mooduli autor:" + +#: sphinx/directives/other.py:140 +msgid "Code author: " +msgstr "Koodi autor:" + +#: sphinx/directives/other.py:142 +msgid "Author: " +msgstr "Autor: " + +#: sphinx/directives/other.py:215 +msgid "See also" +msgstr "Vaata ka" + +#: sphinx/domains/__init__.py:244 +#, python-format +msgid "%s %s" +msgstr "%s %s" + +#: sphinx/domains/c.py:51 sphinx/domains/python.py:95 +msgid "Parameters" +msgstr "Parameetrid" + +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128 +#: sphinx/domains/python.py:107 +msgid "Returns" +msgstr "Tagastab" + +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 +msgid "Return type" +msgstr "Tagastustüüp" + +#: sphinx/domains/c.py:141 +#, python-format +msgid "%s (C function)" +msgstr "%s (C funktsioon)" + +#: sphinx/domains/c.py:143 +#, python-format +msgid "%s (C member)" +msgstr "%s (C liige)" + +#: sphinx/domains/c.py:145 +#, python-format +msgid "%s (C macro)" +msgstr "%s (C makro)" + +#: sphinx/domains/c.py:147 +#, python-format +msgid "%s (C type)" +msgstr "%s (C tüüp)" + +#: sphinx/domains/c.py:149 +#, python-format +msgid "%s (C variable)" +msgstr "%s (C muutuja)" + +#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 +msgid "function" +msgstr "funktsioon" + +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 +msgid "member" +msgstr "liige" + +#: sphinx/domains/c.py:206 +msgid "macro" +msgstr "makro" + +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 +msgid "type" +msgstr "tüüp" + +#: sphinx/domains/c.py:208 +msgid "variable" +msgstr "muutuja" + +#: sphinx/domains/cpp.py:904 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (C++ klass)" + +#: sphinx/domains/cpp.py:919 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (C++ tüüp)" + +#: sphinx/domains/cpp.py:938 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (C++ liige)" + +#: sphinx/domains/cpp.py:990 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (C++ funktsioon)" + +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 +msgid "class" +msgstr "klass" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 +#, python-format +msgid "%s() (built-in function)" +msgstr "%s() (sisseehitatud funktsioon)" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (%s meetod)" + +#: sphinx/domains/javascript.py:109 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (C++ klass)" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "%s (globaalmuutuja või konstant)" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (%s atribuut)" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "Argumendid" + +#: sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "Throws" + +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 +msgid "data" +msgstr "andmed" + +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 +msgid "attribute" +msgstr "atribuut" + +#: sphinx/domains/python.py:100 +msgid "Variables" +msgstr "Muutujad" + +#: sphinx/domains/python.py:104 +msgid "Raises" +msgstr "Raises" + +#: sphinx/domains/python.py:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 +#, python-format +msgid "%s() (in module %s)" +msgstr "%s() (moodulis %s)" + +#: sphinx/domains/python.py:258 +#, python-format +msgid "%s (built-in variable)" +msgstr "%s (sisseehitatud muutuja)" + +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 +#, python-format +msgid "%s (in module %s)" +msgstr "%s (moodulis %s)" + +#: sphinx/domains/python.py:275 +#, python-format +msgid "%s (built-in class)" +msgstr "%s (sisseehitatud klass)" + +#: sphinx/domains/python.py:276 +#, python-format +msgid "%s (class in %s)" +msgstr "%s (klass moodulis %s)" + +#: sphinx/domains/python.py:316 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "%s() (%s.%s meetod)" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "%s() (%s.%s staatiline meetod)" + +#: sphinx/domains/python.py:331 +#, python-format +msgid "%s() (%s static method)" +msgstr "%s() (%s staatiline meetod)" + +#: sphinx/domains/python.py:341 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "%s() (%s.%s klassi meetod)" + +#: sphinx/domains/python.py:344 +#, python-format +msgid "%s() (%s class method)" +msgstr "%s() (%s klassi meetod)" + +#: sphinx/domains/python.py:354 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "%s (%s.%s atribuut)" + +#: sphinx/domains/python.py:434 +#, python-format +msgid "%s (module)" +msgstr "%s (moodul)" + +#: sphinx/domains/python.py:491 +msgid "Python Module Index" +msgstr "Pythoni moodulite indeks" + +#: sphinx/domains/python.py:492 +msgid "modules" +msgstr "moodulid" + +#: sphinx/domains/python.py:537 +msgid "Deprecated" +msgstr "Ebaasoovitav" + +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 +msgid "exception" +msgstr "erind" + +#: sphinx/domains/python.py:563 +msgid "method" +msgstr "meetod" + +#: sphinx/domains/python.py:564 +msgid "class method" +msgstr "klassi meetod" + +#: sphinx/domains/python.py:565 +msgid "static method" +msgstr "staatiline meetod" + +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 +msgid "module" +msgstr "moodul" + +#: sphinx/domains/python.py:695 +#, fuzzy +msgid " (deprecated)" +msgstr "Ebaasoovitav" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "%s (direktiiv)" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "%s (roll)" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "direktiiv" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "roll" + +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 +#, python-format +msgid "environment variable; %s" +msgstr "keskkonnamuutuja; %s" + +#: sphinx/domains/std.py:162 +#, python-format +msgid "%scommand line option; %s" +msgstr "%s käsurea valik; %s" + +#: sphinx/domains/std.py:393 +msgid "glossary term" +msgstr "termin" + +#: sphinx/domains/std.py:394 +msgid "grammar token" +msgstr "grammatika märgend" + +#: sphinx/domains/std.py:395 +msgid "reference label" +msgstr "viite pealkiri" + +#: sphinx/domains/std.py:396 +msgid "environment variable" +msgstr "keskkonnamuutuja" + +#: sphinx/domains/std.py:397 +msgid "program option" +msgstr "programmi seade" + +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 +msgid "Index" +msgstr "Indeks" + +#: sphinx/domains/std.py:428 +msgid "Module Index" +msgstr "Mooduli indeks" + +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "Otsingu lehekülg" + +#: sphinx/ext/autodoc.py:1002 +#, python-format +msgid " Bases: %s" +msgstr " Baasid: %s" + +#: sphinx/ext/autodoc.py:1038 +#, python-format +msgid "alias of :class:`%s`" +msgstr "sünonüüm :class:`%s`" + +#: sphinx/ext/todo.py:41 +msgid "Todo" +msgstr "Tegemata" + +#: sphinx/ext/todo.py:109 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(Algne kirje asub failis %s, real %d.)" + +#: sphinx/ext/todo.py:117 +msgid "original entry" +msgstr "algne kirje" + +#: sphinx/ext/viewcode.py:70 +msgid "[source]" +msgstr "[lähtekood]" + +#: sphinx/ext/viewcode.py:117 +msgid "[docs]" +msgstr "[dokumentatsioon]" + +#: sphinx/ext/viewcode.py:131 +msgid "Module code" +msgstr "Mooduli kood" + +#: sphinx/ext/viewcode.py:137 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "<h1>%s lähtekood</h1>" + +#: sphinx/ext/viewcode.py:164 +msgid "Overview: module code" +msgstr "Ülevaade: mooduli kood" + +#: sphinx/ext/viewcode.py:165 +msgid "<h1>All modules for which code is available</h1>" +msgstr "<h1>Kõik lähtekoodiga moodulid</h1>" + +#: sphinx/locale/__init__.py:155 +msgid "Attention" +msgstr "Tähelepanu" + +#: sphinx/locale/__init__.py:156 +msgid "Caution" +msgstr "Ettevaatust" + +#: sphinx/locale/__init__.py:157 +msgid "Danger" +msgstr "Oht" + +#: sphinx/locale/__init__.py:158 +msgid "Error" +msgstr "Viga" + +#: sphinx/locale/__init__.py:159 +msgid "Hint" +msgstr "Vihje" + +#: sphinx/locale/__init__.py:160 +msgid "Important" +msgstr "Tähtis" + +#: sphinx/locale/__init__.py:161 +msgid "Note" +msgstr "Märkus" + +#: sphinx/locale/__init__.py:162 +msgid "See Also" +msgstr "Vaata ka" + +#: sphinx/locale/__init__.py:163 +msgid "Tip" +msgstr "Nõuanne" + +#: sphinx/locale/__init__.py:164 +msgid "Warning" +msgstr "Hoiatus" + +#: sphinx/locale/__init__.py:168 +#, python-format +msgid "New in version %s" +msgstr "Uus versioonis %s" + +#: sphinx/locale/__init__.py:169 +#, python-format +msgid "Changed in version %s" +msgstr "Muudetud versioonis %s" + +#: sphinx/locale/__init__.py:170 +#, python-format +msgid "Deprecated since version %s" +msgstr "Ebasoovitav alates versioonist %s" + +#: sphinx/locale/__init__.py:176 +msgid "keyword" +msgstr "võtmesõna" + +#: sphinx/locale/__init__.py:177 +msgid "operator" +msgstr "operaator" + +#: sphinx/locale/__init__.py:178 +msgid "object" +msgstr "objekt" + +#: sphinx/locale/__init__.py:180 +msgid "statement" +msgstr "lause" + +#: sphinx/locale/__init__.py:181 +msgid "built-in function" +msgstr "sisseehitatud funktsioon" + +#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 +msgid "Table Of Contents" +msgstr "Sisukord" + +#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 +msgid "Search" +msgstr "Otsing" + +#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "Otsi" + +#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20 +msgid "Enter search terms or a module, class or function name." +msgstr "Sisesta otsingusõna" + +#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14 +msgid "Show Source" +msgstr "Näita lähtekoodi" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "Ülevaade" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "Indeksid ja tabelid" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "Täielik sisukord" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "toob välja kõiks sektsioonid ja alamsektsioonid" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "otsi sellest dokumentatsioonist" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "Globaalne moodulite indeks" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "kiire ligipääs kõigile moodulitele" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "kõik funktsioonid, klassid ja terminid" + +#: sphinx/themes/basic/genindex-single.html:35 +#, python-format +msgid "Index – %(key)s" +msgstr "Indeks – %(key)s" + +#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:74 +msgid "Full index on one page" +msgstr "Täisindeks ühel lehel" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "Indeksi leheküljed algustähe kaupa" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "võib olla väga suur" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "Navigatsioon" + +#: sphinx/themes/basic/layout.html:122 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Otsi %(docstitle)s piires" + +#: sphinx/themes/basic/layout.html:131 +msgid "About these documents" +msgstr "Info selle dokumentatsiooni kohta" + +#: sphinx/themes/basic/layout.html:140 +msgid "Copyright" +msgstr "Copyright" + +#: sphinx/themes/basic/layout.html:189 +#, 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:191 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Viimati uuendatud %(last_updated)s." + +#: sphinx/themes/basic/layout.html:198 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" +"Loodud <a href=\"http://sphinx.pocoo.org/\">Sphinx-iga</a> (versioon: " +"%(sphinx_version)s)." + +#: sphinx/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "Otsi %(docstitle)s" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "Eelmine teema" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "eelmine peatükk" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "Järgmine teema" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "järgmine peatükk" + +#: sphinx/themes/basic/search.html:24 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "Otsingu võimaldamiseks tuleb aktiveerida JavaScript." + +#: 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 "" +"Siin saad otsida käesolevast dokumentatsioonist. Sisesta otsisõned " +"allolevasse lahtrisse ning klõpsa \"Otsi\". Tulemuseks antakse " +"leheküljed, mis sisaldavad kõiki otsisõnesid." + +#: sphinx/themes/basic/search.html:36 +msgid "search" +msgstr "otsi" + +#: sphinx/themes/basic/search.html:40 +msgid "Search Results" +msgstr "Otsingutulemused" + +#: sphinx/themes/basic/search.html:42 +msgid "Your search did not match any results." +msgstr "Otsing ei andnud tulemusi" + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "Kiirotsing" + +#: sphinx/themes/basic/sourcelink.html:11 +msgid "This Page" +msgstr "Käesolev lehekülg" + +#: 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 "Muudatused versioonis %(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 "Automaatselt genereeritud nimekiri versiooni %(version)s muudatustest" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "Teegi muudatused" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "C API muudatused" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "Ülejäänud muudatused" + +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504 +#: sphinx/writers/html.py:510 +msgid "Permalink to this headline" +msgstr "Püsilink sellele pealkirjale" + +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92 +msgid "Permalink to this definition" +msgstr "Püsilink sellele definitsioonile" + +#: sphinx/themes/basic/static/doctools.js:189 +msgid "Hide Search Matches" +msgstr "Varja otsingutulemused" + +#: sphinx/themes/default/static/sidebar.js:69 +msgid "Expand sidebar" +msgstr "Näita külgriba" + +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 +msgid "Collapse sidebar" +msgstr "Varja külgriba" + +#: sphinx/themes/haiku/layout.html:26 +msgid "Contents" +msgstr "Sisukord" + +#: sphinx/writers/latex.py:177 +msgid "Release" +msgstr "Väljalase" + +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 +msgid "Footnotes" +msgstr "Joonealused märkused" + +#: sphinx/writers/latex.py:676 +msgid "continued from previous page" +msgstr "jätk eelmisele leheküljele" + +#: sphinx/writers/latex.py:681 +msgid "Continued on next page" +msgstr "Jätkub järgmisel lehel" + +#: sphinx/writers/text.py:437 +msgid "[image]" +msgstr "[pilt]" + diff --git a/sphinx/locale/fa/LC_MESSAGES/sphinx.js b/sphinx/locale/fa/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000..72b0ee94 --- /dev/null +++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "fa", "plural_expr": "(n > 1)", "messages": {"Hide Search Matches": "\u0639\u062f\u0645 \u0646\u0645\u0627\u06cc\u0634 \u0646\u062a\u0627\u06cc\u062c \u06cc\u0627\u0641\u062a \u0634\u062f\u0647", "Permalink to this definition": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u062a\u0639\u0631\u06cc\u0641", "Expand sidebar": "", "Permalink to this headline": "\u0644\u06cc\u0646\u06a9 \u062b\u0627\u0628\u062a \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0631 \u0645\u0642\u0627\u0644\u0647", "Collapse sidebar": ""}});
\ 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..fe705e76 --- /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..92caf31a --- /dev/null +++ b/sphinx/locale/fa/LC_MESSAGES/sphinx.po @@ -0,0 +1,779 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx 1.0.3\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\n" +"Last-Translator: Omid Raha <omidraha.com@gmail.com>\n" +"Language-Team: Omid Raha <omidraha.com@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.6\n" + +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 +#, python-format +msgid "%B %d, %Y" +msgstr "" + +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment.py:1628 +#, fuzzy, python-format +msgid "see also %s" +msgstr "همچنین ملاحظه نمائید %s" + +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 +msgid "Builtins" +msgstr "درونی سازی" + +#: sphinx/builders/changes.py:75 +msgid "Module level" +msgstr "در سطح ماژول" + +#: sphinx/builders/html.py:274 +#, python-format +msgid "%b %d, %Y" +msgstr "" + +#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "فهرست کلی" + +#: sphinx/builders/html.py:293 +msgid "index" +msgstr "فهرست" + +#: sphinx/builders/html.py:353 +msgid "next" +msgstr "بعدی" + +#: sphinx/builders/html.py:362 +msgid "previous" +msgstr "قبلی" + +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 +msgid " (in " +msgstr "" + +#: sphinx/directives/other.py:136 +msgid "Section author: " +msgstr ":نویسنده این بخش" + +#: sphinx/directives/other.py:138 +msgid "Module author: " +msgstr "نویسنده این ماژول:" + +#: sphinx/directives/other.py:140 +#, fuzzy +msgid "Code author: " +msgstr "نویسنده این ماژول:" + +#: sphinx/directives/other.py:142 +msgid "Author: " +msgstr ":نویسنده" + +#: sphinx/directives/other.py:215 +msgid "See also" +msgstr "همچنین ملاحظه نمائید" + +#: sphinx/domains/__init__.py:244 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:51 sphinx/domains/python.py:95 +msgid "Parameters" +msgstr "پارامترها" + +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128 +#: sphinx/domains/python.py:107 +msgid "Returns" +msgstr "" + +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 +msgid "Return type" +msgstr "نوع برگشتی" + +#: sphinx/domains/c.py:141 +#, python-format +msgid "%s (C function)" +msgstr "%s (C تابع)" + +#: sphinx/domains/c.py:143 +#, python-format +msgid "%s (C member)" +msgstr "%s (C عضو)" + +#: sphinx/domains/c.py:145 +#, python-format +msgid "%s (C macro)" +msgstr "%s (C ماکرو)" + +#: sphinx/domains/c.py:147 +#, python-format +msgid "%s (C type)" +msgstr "%s (C نوع)" + +#: sphinx/domains/c.py:149 +#, python-format +msgid "%s (C variable)" +msgstr "%s (C متغیر)" + +#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 +#, fuzzy +msgid "function" +msgstr "تابع" + +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 +#, fuzzy +msgid "member" +msgstr "عضو" + +#: sphinx/domains/c.py:206 +msgid "macro" +msgstr "" + +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 +msgid "type" +msgstr "" + +#: sphinx/domains/c.py:208 +#, fuzzy +msgid "variable" +msgstr "متغیر" + +#: sphinx/domains/cpp.py:904 +#, fuzzy, python-format +msgid "%s (C++ class)" +msgstr "%s (C++ کلاس در)" + +#: sphinx/domains/cpp.py:919 +#, fuzzy, python-format +msgid "%s (C++ type)" +msgstr "%s (C++ نوع)" + +#: sphinx/domains/cpp.py:938 +#, fuzzy, python-format +msgid "%s (C++ member)" +msgstr "%s (C++ عضو)" + +#: sphinx/domains/cpp.py:990 +#, fuzzy, python-format +msgid "%s (C++ function)" +msgstr "%s (C++ تابع)" + +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 +msgid "class" +msgstr "" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 +#, python-format +msgid "%s() (built-in function)" +msgstr "%s() (توابع درونی)" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (%s متد)" + +#: sphinx/domains/javascript.py:109 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s() (کلاس در)" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (%s مشخصه)" + +#: sphinx/domains/javascript.py:122 +#, fuzzy +msgid "Arguments" +msgstr "پارامترها" + +#: sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "" + +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 +msgid "data" +msgstr "" + +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 +msgid "attribute" +msgstr "" + +#: sphinx/domains/python.py:100 +#, fuzzy +msgid "Variables" +msgstr "متغیر" + +#: sphinx/domains/python.py:104 +msgid "Raises" +msgstr "برانگیختن" + +#: sphinx/domains/python.py:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 +#, python-format +msgid "%s() (in module %s)" +msgstr "%s() (در ماژول %s)" + +#: sphinx/domains/python.py:258 +#, python-format +msgid "%s (built-in variable)" +msgstr "%s (متغیر درونی)" + +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 +#, python-format +msgid "%s (in module %s)" +msgstr "%s (در ماژول %s)" + +#: sphinx/domains/python.py:275 +#, python-format +msgid "%s (built-in class)" +msgstr "%s (کلاس درونی)" + +#: sphinx/domains/python.py:276 +#, python-format +msgid "%s (class in %s)" +msgstr "%s (کلاس در %s)" + +#: sphinx/domains/python.py:316 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "%s() (%s.%s متد)" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "%s() (%s.%s متد استاتیک)" + +#: sphinx/domains/python.py:331 +#, python-format +msgid "%s() (%s static method)" +msgstr "%s() (%s متد استاتیک)" + +#: sphinx/domains/python.py:341 +#, fuzzy, python-format +msgid "%s() (%s.%s class method)" +msgstr "%s() (%s.%s متد)" + +#: sphinx/domains/python.py:344 +#, fuzzy, python-format +msgid "%s() (%s class method)" +msgstr "%s() (%s متد)" + +#: sphinx/domains/python.py:354 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "%s (%s.%s مشخصه)" + +#: sphinx/domains/python.py:434 +#, python-format +msgid "%s (module)" +msgstr "%s (ماژول)" + +#: sphinx/domains/python.py:491 +#, fuzzy +msgid "Python Module Index" +msgstr "فهرست ماژول ها" + +#: sphinx/domains/python.py:492 +msgid "modules" +msgstr "ماژول ها" + +#: sphinx/domains/python.py:537 +msgid "Deprecated" +msgstr "منسوخ شده" + +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 +msgid "exception" +msgstr "استثناء" + +#: sphinx/domains/python.py:563 +msgid "method" +msgstr "" + +#: sphinx/domains/python.py:564 +msgid "class method" +msgstr "" + +#: sphinx/domains/python.py:565 +msgid "static method" +msgstr "" + +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 +msgid "module" +msgstr "ماژول" + +#: sphinx/domains/python.py:695 +#, fuzzy +msgid " (deprecated)" +msgstr " (منسوخ شده)" + +#: 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:70 sphinx/domains/std.py:86 +#, python-format +msgid "environment variable; %s" +msgstr "%s متغیرهای عمومی؛" + +#: sphinx/domains/std.py:162 +#, python-format +msgid "%scommand line option; %s" +msgstr "%sگزینه خط فرمان; %s" + +#: sphinx/domains/std.py:393 +msgid "glossary term" +msgstr "" + +#: sphinx/domains/std.py:394 +msgid "grammar token" +msgstr "" + +#: sphinx/domains/std.py:395 +msgid "reference label" +msgstr "" + +#: sphinx/domains/std.py:396 +#, fuzzy +msgid "environment variable" +msgstr "متغیرهای عمومی؛" + +#: sphinx/domains/std.py:397 +msgid "program option" +msgstr "" + +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 +msgid "Index" +msgstr "فهرست" + +#: sphinx/domains/std.py:428 +msgid "Module Index" +msgstr "فهرست ماژول ها" + +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "صفحه جستجو" + +#: sphinx/ext/autodoc.py:1002 +#, python-format +msgid " Bases: %s" +msgstr "" + +#: sphinx/ext/autodoc.py:1038 +#, python-format +msgid "alias of :class:`%s`" +msgstr "" + +#: sphinx/ext/todo.py:41 +msgid "Todo" +msgstr "در دست انجام" + +#: sphinx/ext/todo.py:109 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "" + +#: 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 "<h1>Source code for %s</h1>" +msgstr "" + +#: sphinx/ext/viewcode.py:164 +msgid "Overview: module code" +msgstr "" + +#: 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:156 +msgid "Caution" +msgstr "ملاحظه" + +#: sphinx/locale/__init__.py:157 +msgid "Danger" +msgstr "خطر" + +#: sphinx/locale/__init__.py:158 +msgid "Error" +msgstr "خطا" + +#: sphinx/locale/__init__.py:159 +msgid "Hint" +msgstr "تذکر" + +#: sphinx/locale/__init__.py:160 +msgid "Important" +msgstr "مهم" + +#: sphinx/locale/__init__.py:161 +msgid "Note" +msgstr "توجه" + +#: sphinx/locale/__init__.py:162 +msgid "See Also" +msgstr "همچنین ملاحظه نمائید" + +#: sphinx/locale/__init__.py:163 +msgid "Tip" +msgstr "نکته" + +#: sphinx/locale/__init__.py:164 +msgid "Warning" +msgstr "هشدار" + +#: sphinx/locale/__init__.py:168 +#, python-format +msgid "New in version %s" +msgstr "جدید در نسخه %s" + +#: sphinx/locale/__init__.py:169 +#, python-format +msgid "Changed in version %s" +msgstr "تغییر داده شده در نسخه %s" + +#: sphinx/locale/__init__.py:170 +#, python-format +msgid "Deprecated since version %s" +msgstr "منسوخ شده از نسخه %s" + +#: sphinx/locale/__init__.py:176 +msgid "keyword" +msgstr "کلمه کلیدی" + +#: sphinx/locale/__init__.py:177 +msgid "operator" +msgstr "عملگر" + +#: sphinx/locale/__init__.py:178 +msgid "object" +msgstr "شیء" + +#: sphinx/locale/__init__.py:180 +msgid "statement" +msgstr "گذاره" + +#: sphinx/locale/__init__.py:181 +msgid "built-in function" +msgstr "توابع درونی" + +#: 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:137 +#: 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 +#, fuzzy +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:20 +msgid "Indices and tables:" +msgstr "ایندکس ها و جداول:" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "فهرست کامل مطالب" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "فهرست تمامی بخش ها و زیر مجموعه ها" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "جستجو در این اسناد" + +#: 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:31 +msgid "all functions, classes, terms" +msgstr "تمامی توابع ، کلاس ها ، اصطلاحات" + +#: sphinx/themes/basic/genindex-single.html:35 +#, python-format +msgid "Index – %(key)s" +msgstr "فهرست – %(key)s" + +#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:74 +msgid "Full index on one page" +msgstr "فهرست کامل در یک صفحه" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "فهرست صفحات بر اساس حروف" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "ناوبری" + +#: sphinx/themes/basic/layout.html:122 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "جستجو در %(docstitle)s" + +#: sphinx/themes/basic/layout.html:131 +msgid "About these documents" +msgstr "درباره این مستندات" + +#: sphinx/themes/basic/layout.html:140 +msgid "Copyright" +msgstr "کپی رایت" + +#: sphinx/themes/basic/layout.html:189 +#, python-format +msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:191 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "" + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr ". %(last_updated)s آخرین بروز رسانی در" + +#: sphinx/themes/basic/layout.html:198 +#, 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/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "جستجو %(docstitle)s" + +#: 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." +msgstr "" + +#: sphinx/themes/basic/search.html:29 +#, fuzzy +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 "" +"در اینجا شما می توانید مستندات را جستجو نمائید ، کلماتی را در کادر جستجو " +"وارد کنید و سپس بر روی دکمه جستجو کلیک نمائید ، توجه کنید که تابع جستجو " +"گر امر جستجو را بطور خودکار برای تمامی کلمات دنبال خواهد کرد .صفحاتی که " +"شامل کلمات کمتری هستند ، در لیست جستجو نمایش داده نخواهند شد." + +#: sphinx/themes/basic/search.html:36 +msgid "search" +msgstr "جستجو" + +#: sphinx/themes/basic/search.html:40 +msgid "Search Results" +msgstr "نتایج جستجو" + +#: 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 +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "تغییرات در نسخه %(version)s — %(docstitle)s" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, python-format +msgid "%(filename)s — %(docstitle)s" +msgstr "" + +#: sphinx/themes/basic/changes/versionchanges.html:17 +#, python-format +msgid "Automatically generated list of changes in version %(version)s" +msgstr "لیست تولید شده خودکار از تغییرات در نسخه %(version)s" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "تغییرات کتابخانه ایی" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "C API تغییرات" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "دگر تغییرات" + +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504 +#: sphinx/writers/html.py:510 +msgid "Permalink to this headline" +msgstr "لینک ثابت به این سر مقاله" + +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92 +msgid "Permalink to this definition" +msgstr "لینک ثابت به این تعریف" + +#: sphinx/themes/basic/static/doctools.js:189 +msgid "Hide Search Matches" +msgstr "عدم نمایش نتایج یافت شده" + +#: sphinx/themes/default/static/sidebar.js:69 +msgid "Expand sidebar" +msgstr "" + +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 +msgid "Collapse sidebar" +msgstr "" + +#: sphinx/themes/haiku/layout.html:26 +msgid "Contents" +msgstr "" + +#: sphinx/writers/latex.py:177 +msgid "Release" +msgstr "انتشار" + +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 +msgid "Footnotes" +msgstr "" + +#: sphinx/writers/latex.py:676 +msgid "continued from previous page" +msgstr "" + +#: sphinx/writers/latex.py:681 +#, fuzzy +msgid "Continued on next page" +msgstr "فهرست کامل در یک صفحه" + +#: sphinx/writers/text.py:437 +msgid "[image]" +msgstr "" + diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.js b/sphinx/locale/fi/LC_MESSAGES/sphinx.js index 9d2cc6f4..1f160037 100644 --- a/sphinx/locale/fi/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "fi", "plural_expr": "(n != 1)", "messages": {"Search Results": "Etsinn\u00e4n tulos", "Preparing search...": "Valmistellaan etsint\u00e4\u00e4...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Ei l\u00f6ytynyt yht\u00e4\u00e4n. Tarkista hakuehdot, sanahaku, ei sen osia", "Search finished, found %s page(s) matching the search query.": "Etsint\u00e4 tehty, l\u00f6ydetty %s sivu(a).", ", in ": "", "Expand sidebar": "", "Permalink to this headline": "", "Searching": "Etsit\u00e4\u00e4n", "Collapse sidebar": "", "Permalink to this definition": "", "Hide Search Matches": "Piilota l\u00f6ydetyt"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "fi", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Piilota l\u00f6ydetyt", "Permalink to this definition": "", "Expand sidebar": "", "Permalink to this headline": "", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/fi/LC_MESSAGES/sphinx.mo b/sphinx/locale/fi/LC_MESSAGES/sphinx.mo Binary files differindex 7c300006..497088c8 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 77076231..4a329546 100644 --- a/sphinx/locale/fi/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/fi/LC_MESSAGES/sphinx.po @@ -7,384 +7,404 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d.%m.%Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 #, python-format -msgid "Python Enhancement Proposals!PEP %s" +msgid "see %s" msgstr "" -#: sphinx/builders/changes.py:72 +#: sphinx/environment.py:1628 +#, fuzzy, python-format +msgid "see also %s" +msgstr "katso myös %s" + +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Moduulitaso" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Yleinen sisällysluettelo" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "hakemisto" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr ">" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "<" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Luvun kirjoittaja: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Moduulin kirjoittaja: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "Moduulin kirjoittaja: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Tekijä: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Katso myös" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 #, fuzzy msgid "function" msgstr "Varoitus" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 msgid "variable" msgstr "" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, python-format msgid "%s() (built-in function)" msgstr "" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, python-format msgid "%s (built-in variable)" msgstr "" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Ympäristö" - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (moduuli)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "Moduuli sisällysluettelo" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "moduulit" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Poistettu" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 +#: sphinx/domains/python.py:564 msgid "class method" msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "moduuli" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr " (poistettu)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, python-format msgid "%s (role)" -msgstr "%s (moduuli)" +msgstr "" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "moduuli" +msgstr "" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Sisällysluettelo" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Moduuli sisällysluettelo" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Etsi sivu" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -402,104 +422,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:176 msgid "keyword" msgstr "" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "" @@ -508,8 +528,8 @@ msgstr "" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Etsi" @@ -557,15 +577,15 @@ msgstr "" msgid "all functions, classes, terms" msgstr "" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Hakemisto yhtenä luettelona" @@ -577,39 +597,39 @@ msgstr "Hakemisto aakkostus sivuttain" msgid "can be huge" msgstr "voi olla iso" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navikointi" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "Tietoja tästä documentistä" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, python-format msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:182 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -637,13 +657,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 +671,15 @@ 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 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 +719,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "" @@ -713,35 +732,12 @@ msgstr "" msgid "Hide Search Matches" msgstr "Piilota löydetyt" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Etsitään" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Valmistellaan etsintää..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr "" - -#: 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 "Ei löytynyt yhtään. Tarkista hakuehdot, sanahaku, ei sen osia" - -#: sphinx/themes/basic/static/searchtools.js:493 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "Etsintä tehty, löydetty %s sivu(a)." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -749,24 +745,25 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 #, fuzzy msgid "Continued on next page" msgstr "" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "" diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.js b/sphinx/locale/fr/LC_MESSAGES/sphinx.js index e482673f..5d6fafbd 100644 --- a/sphinx/locale/fr/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "fr", "plural_expr": "(n > 1)", "messages": {"Search Results": "R\u00e9sultats de la recherche", "Preparing search...": "Pr\u00e9paration de la recherche...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Votre recherche ne correspond \u00e0 aucun document. V\u00e9rifiez l'orthographe des termes de recherche et que vous avez s\u00e9lectionn\u00e9 suffisamment de cat\u00e9gories.", "Search finished, found %s page(s) matching the search query.": "La recherche est termin\u00e9e, %s page(s) correspond(ent) \u00e0 la requ\u00eate.", ", in ": ", dans", "Expand sidebar": "Agrandir le menu", "Permalink to this headline": "Lien permanent vers ce titre", "Searching": "En cours de recherche", "Collapse sidebar": "R\u00e9duire le menu", "Permalink to this definition": "Lien permanent vers cette d\u00e9finition", "Hide Search Matches": "Cacher les r\u00e9sultats de la recherche"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "fr", "plural_expr": "(n > 1)", "messages": {"Hide Search Matches": "Cacher les r\u00e9sultats de la recherche", "Permalink to this definition": "Lien permanent vers cette d\u00e9finition", "Expand sidebar": "Agrandir le menu", "Permalink to this headline": "Lien permanent vers ce titre", "Collapse sidebar": "R\u00e9duire le menu"}});
\ No newline at end of file diff --git a/sphinx/locale/fr/LC_MESSAGES/sphinx.mo b/sphinx/locale/fr/LC_MESSAGES/sphinx.mo Binary files differindex bfa97b19..f123c004 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 bdb13396..ab989cf9 100644 --- a/sphinx/locale/fr/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/fr/LC_MESSAGES/sphinx.po @@ -10,387 +10,407 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, fuzzy, python-format +msgid "%s %s documentation" +msgstr "%s %s documentation" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d %B %Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "voir %s" + +#: sphinx/environment.py:1628 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "see also %s" +msgstr "voir aussi %s" -#: sphinx/builders/changes.py:72 +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Fonctions de base" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Module" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Index général" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "index" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "suivant" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "précédent" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr "(dans" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Auteur de la section : " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Auteur du module : " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "Auteur du module : " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Auteur : " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Voir aussi" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Retourne" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Type retourné" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (fonction C)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (membre C)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (macro C)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (type C)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "fonction" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "membre" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "type" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 #, fuzzy msgid "variable" msgstr "Variable" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (classe C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (type C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (membre C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (fonction C++)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "classe" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (méthode %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (classe)" + +#: sphinx/domains/javascript.py:111 #, 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:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (attribut %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "Paramètres" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Lance" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "données" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "attribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "Variable" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (dans le module %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (dans le module %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (classe de base)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (classe dans %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (méthode %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (méthode statique %s.%s)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (méthode statique %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" -msgstr "%s() (méthode %s.%s)" +msgstr "%s() (méthode de classe %s.%s)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" -msgstr "%s() (méthode %s)" +msgstr "%s() (méthode de classe %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (attribut %s.%s)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Plateformes : " - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (module)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "Index du module" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "modules" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Obsolète" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "exception" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "méthode" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 +#, fuzzy msgid "class method" -msgstr "%s() (méthode %s)" +msgstr "méthode de classe" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "méthode statique" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "module" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr " (obsolète)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, python-format msgid "%s (role)" -msgstr "%s (module)" +msgstr "" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "module" +msgstr "" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "variable d'environnement; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%soption de ligne de commande; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "terme du glossaire" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "élément de grammaire" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "étiquette de référence" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "variable d'environnement" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "option du programme" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Index" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Index du module" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Page de recherche" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "alias de :class:`%s`" @@ -408,104 +428,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:176 msgid "keyword" msgstr "mot-clé" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "opérateur" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "objet" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "état" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "fonction de base" @@ -514,8 +534,8 @@ msgstr "fonction de base" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Recherche" @@ -564,15 +584,15 @@ msgstr "accès rapide à l'ensemble des modules" msgid "all functions, classes, terms" msgstr "toutes les fonctions, classes, termes" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Index complet sur une seule page" @@ -584,39 +604,39 @@ msgstr "Indexer les pages par lettre" msgid "can be huge" msgstr "peut être énorme" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navigation" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Recherchez dans %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "À propos de ces documents" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Mis à jour le %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -646,13 +666,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." -#: 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 +688,15 @@ 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 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 +736,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Lien permanent vers cette définition" @@ -730,38 +749,12 @@ 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 -msgid "Searching" -msgstr "En cours de recherche" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Préparation de la recherche..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr ", dans" - -#: 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 "" -"Votre recherche ne correspond à aucun document. Vérifiez l'orthographe " -"des termes de recherche et que vous avez sélectionné suffisamment de " -"catégories." - -#: sphinx/themes/basic/static/searchtools.js:493 -#, 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." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 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:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "Réduire le menu" @@ -769,36 +762,25 @@ msgstr "Réduire le menu" msgid "Contents" msgstr "Contenu" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Version" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "Notes de bas de page" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "Suite de la page précédente" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 #, fuzzy msgid "Continued on next page" msgstr "Suite sur la page suivante" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 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.js b/sphinx/locale/hr/LC_MESSAGES/sphinx.js index b9d1f7af..d4284716 100644 --- a/sphinx/locale/hr/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/hr/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "hr", "plural_expr": "0", "messages": {"Search Results": "Rezultati pretrage", "Preparing search...": "Pripremam pretra\u017eivanje...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Za va\u0161u pretragu nema rezultata. Molimo pregledajte da li so sve rije\u010di ispravno napisane i da li ste izbrali dovoljno kategorija.", "Search finished, found %s page(s) matching the search query.": "Pretra\u017eivanje je zaklju\u010deno, prona\u0111eno %s stranica, koje odgovaraju tra\u017eenom nizu.", ", in ": ", u ", "Expand sidebar": "", "Permalink to this headline": "Link na taj naslov", "Searching": "Tra\u017eim", "Collapse sidebar": "", "Permalink to this definition": "Link na tu definiciju", "Hide Search Matches": "Sakrij rezultate pretrage"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "hr", "plural_expr": "0", "messages": {"Hide Search Matches": "Sakrij rezultate pretrage", "Permalink to this definition": "Link na tu definiciju", "Expand sidebar": "", "Permalink to this headline": "Link na taj naslov", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/hr/LC_MESSAGES/sphinx.mo b/sphinx/locale/hr/LC_MESSAGES/sphinx.mo Binary files differindex e032adeb..a9bdb145 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..15e70346 100644 --- a/sphinx/locale/hr/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/hr/LC_MESSAGES/sphinx.po @@ -3,388 +3,406 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d %B, %Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, fuzzy, python-format +msgid "see %s" +msgstr "pogledaj %s" + +#: sphinx/environment.py:1628 +#, fuzzy, python-format +msgid "see also %s" +msgstr "pogledaj i %s" + +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Ugrađeni dijelovi" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Nivo modula" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Opceniti abecedni indeks" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "abecedni indeks" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "naprijed" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "nazad" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr " (u " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " -msgstr "Autor sekcije:" +msgstr "Autor sekcije: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " -msgstr "Autor modula:" +msgstr "Autor modula: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " -msgstr "Autor modula:" +msgstr "Autor modula: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Autor:" -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Pogledaj i" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Vraća" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Vraća tip" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C funkcija)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C član)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C makro)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C tip)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "funkcija" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "član" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "tip" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 #, fuzzy msgid "variable" msgstr "Varijabla" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ razred)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tip)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ član)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkcija)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 -#, fuzzy +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "razred" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metoda)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (razred)" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atribut)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "Parametri" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "Varijabla" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (u modulu %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (u modulu %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (ugrađen razred)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (razred u %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statična metoda)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statična metoda)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s metoda)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atribut)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Platforme:" - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "Popis modula" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "Moduli" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Zastarjelo" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "izuzetak" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 msgid "class method" -msgstr "%s() (%s metoda)" +msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "statična metoda" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "modul" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr " (zastarjelo)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, python-format msgid "%s (role)" -msgstr "%s (modul)" +msgstr "" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "modul" +msgstr "" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "varijabla okruženja; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%scommand line parameter; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "varijabla okruženja" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Abecedni popis" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Popis modula" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Tražilica" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " Osnove: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "nadimak za :class:`%s`" @@ -396,110 +414,110 @@ msgstr "Todo" #: sphinx/ext/todo.py:109 #, fuzzy, python-format msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(Originalan unos se nalazi u %s, u retku %d, i može biti pronađen " +msgstr "(Originalan unos se nalazi u %s, u retku %d.)" #: sphinx/ext/todo.py:117 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:176 msgid "keyword" msgstr "ključna riječ" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "izjava" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "ugrađen funkcije" @@ -508,8 +526,8 @@ msgstr "ugrađen funkcije" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Traži" @@ -557,15 +575,15 @@ msgstr "brz dostup do svih modulov" msgid "all functions, classes, terms" msgstr "sve funkcije, razredi, izrazi" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Potpun indeks na jednoj strani" @@ -577,39 +595,39 @@ msgstr "Indeksiraj stranice po slovu" msgid "can be huge" msgstr "može biti veliko" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navigacija" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Traži između %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "O ovim dokumentima" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Sva prava zadržana" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, python-format msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "© <a href=\"%(path)s\">Sva prava zadržana</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:182 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Sva prava zadržana %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Zadnji put ažurirano %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -639,7 +657,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 +665,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 +677,15 @@ 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 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 +725,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Link na tu definiciju" @@ -721,39 +738,12 @@ msgstr "Link na tu definiciju" msgid "Hide Search Matches" msgstr "Sakrij rezultate pretrage" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Tražim" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Pripremam pretraživanje..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr ", u " - -#: 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 "" -"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 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "" -"Pretraživanje je zaključeno, pronađeno %s stranica, koje odgovaraju " -"traženom nizu." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -761,35 +751,24 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Distribucija" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "nastavak sa prethodne stranice" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" msgstr "nastavak na slijedećoj stranici" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 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.js b/sphinx/locale/it/LC_MESSAGES/sphinx.js index f9b193fe..590de16e 100644 --- a/sphinx/locale/it/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/it/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "it", "plural_expr": "(n != 1)", "messages": {"Search Results": "Risultati della ricerca", "Preparing search...": "Preparazione della ricerca", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "La tua ricerca non ha trovato alcun risultato. Controlla la correttezza dei termini di ricerca e di avere selezionato un numero sufficiente di categorie", "Search finished, found %s page(s) matching the search query.": "Ricerca terminata, trovate %s pagine corrispondenti alla ricerca.", ", in ": ", in ", "Expand sidebar": "", "Permalink to this headline": "link permanente per questa intestazione", "Searching": "Ricerca in corso", "Collapse sidebar": "", "Permalink to this definition": "link permanente per questa definizione", "Hide Search Matches": "Nascondi i risultati della ricerca"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "it", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Nascondi i risultati della ricerca", "Permalink to this definition": "link permanente per questa definizione", "Expand sidebar": "", "Permalink to this headline": "link permanente per questa intestazione", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/it/LC_MESSAGES/sphinx.mo b/sphinx/locale/it/LC_MESSAGES/sphinx.mo Binary files differindex 10ca29a5..a4213c8e 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..ccfab24e 100644 --- a/sphinx/locale/it/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/it/LC_MESSAGES/sphinx.po @@ -6,387 +6,406 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, fuzzy, python-format +msgid "%s %s documentation" +msgstr "%s %s documentazione" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d %B %Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "vedi %s" + +#: sphinx/environment.py:1628 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "see also %s" +msgstr "vedi anche %s" -#: sphinx/builders/changes.py:72 +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Builtin" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Modulo" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Indice generale" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "indice" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "successivo" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "precedente" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr " (in " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Autore della sezione: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Autore del modulo: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "Autore del modulo: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Autore: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Vedi anche" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Ritorna" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Tipo di ritorno" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (funzione C)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (membro C )" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (macro C)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (tipo C)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "funzione" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "membro" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "tipo" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 #, fuzzy msgid "variable" msgstr "Variabile" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (classe C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (tipo C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (membro C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (funzione C++)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metodo)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (classe)" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s attributo)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "Parametri" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "attributo" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "Variabile" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (nel modulo %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (nel modulo %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (classe built-in)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (classe in %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metodo)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s metodo statico)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s metodo statico)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s metodo)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s metodo)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s attributo)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Piattaforme:" - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (modulo)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "Indice dei Moduli" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "moduli" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Deprecato" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "eccezione" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 msgid "class method" -msgstr "%s() (%s metodo)" +msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "metodo statico" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "modulo" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr " (deprecato)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, python-format msgid "%s (role)" -msgstr "%s (modulo)" +msgstr "" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "modulo" +msgstr "" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "variabile d'ambiente, %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%sopzione di linea di comando; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "variabile d'ambiente" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Indice" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Indice dei Moduli" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Cerca" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "alias per :class:`%s`" @@ -404,104 +423,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:176 msgid "keyword" msgstr "keyword" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "operatore" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "oggetto" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "statement" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "funzione built-in" @@ -510,8 +529,8 @@ msgstr "funzione built-in" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Cerca" @@ -559,15 +578,15 @@ msgstr "accesso veloce ai moduli" msgid "all functions, classes, terms" msgstr "tutte le funzioni, classi e moduli" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Indice – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Indice completo in una pagina" @@ -579,39 +598,39 @@ msgstr "Indice delle pagine per lettera" msgid "can be huge" msgstr "può essere enorme" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navigazione" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Cerca in %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "A proposito di questi documenti" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Ultimo aggiornamento %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -641,13 +660,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 +680,15 @@ 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 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 +728,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "link permanente per questa definizione" @@ -723,38 +741,12 @@ msgstr "link permanente per questa definizione" msgid "Hide Search Matches" msgstr "Nascondi i risultati della ricerca" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Ricerca in corso" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Preparazione della ricerca" - -#: sphinx/themes/basic/static/searchtools.js:364 -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 "" -"La tua ricerca non ha trovato alcun risultato. Controlla la correttezza " -"dei termini di ricerca e di avere selezionato un numero sufficiente di " -"categorie" - -#: sphinx/themes/basic/static/searchtools.js:493 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "Ricerca terminata, trovate %s pagine corrispondenti alla ricerca." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -762,23 +754,25 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Release" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 #, fuzzy msgid "Continued on next page" msgstr "Indice completo in una pagina" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[immagine]" + diff --git a/sphinx/locale/ja/LC_MESSAGES/sphinx.js b/sphinx/locale/ja/LC_MESSAGES/sphinx.js index 6b63245e..feb32159 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": {"Hide Search Matches": "\u691c\u7d22\u7d50\u679c\u3092\u96a0\u3059", "Permalink to this definition": "\u3053\u306e\u5b9a\u7fa9\u3078\u306e\u30d1\u30fc\u30de\u30ea\u30f3\u30af", "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", "Collapse sidebar": "\u30b5\u30a4\u30c9\u30d0\u30fc\u3092\u305f\u305f\u3080"}});
\ 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..2bbd3b24 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..17d26d93 100644 --- a/sphinx/locale/ja/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ja/LC_MESSAGES/sphinx.po @@ -2,392 +2,408 @@ # Copyright (C) 2008 ORGANIZATION # This file is distributed under the same license as the Sphinx project. # Yasushi Masuda <whosaysni@gmail.com>, 2008. +# Kouhei Sutou <kou@clear-code.com>, 2011. +# Akitoshi Ohta <fire.kuma8@gmail.com>, 2011. # msgid "" msgstr "" -"Project-Id-Version: Sphinx 0.5\n" +"Project-Id-Version: Sphinx 1.1pre\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" -"Last-Translator: Yasushi MASUDA <whosaysni@gmail.com>\n" -"Language-Team: ja <LL@li.org>\n" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-08-27 17:50+0900\n" +"Last-Translator: Akitoshi Ohta <fire.kuma8@gmail.com>\n" +"Language-Team: Japanese\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%Y 年 %m 月 %d 日" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "%sを参照" + +#: sphinx/environment.py:1628 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "see also %s" +msgstr "%sも参照" -#: sphinx/builders/changes.py:72 +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "組み込み" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "モジュールレベル" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "総合索引" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "索引" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "次へ" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "前へ" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "この節の作者: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "モジュールの作者: " -#: sphinx/directives/other.py:131 -#, fuzzy +#: sphinx/directives/other.py:140 msgid "Code author: " -msgstr "モジュールの作者: " +msgstr "コードの作者: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "作者: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "参考" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "戻り値" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "戻り値の型" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C の関数)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C のメンバ変数)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C のマクロ)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C のデータ型)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "の関数" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "のメンバ変数" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "のマクロ" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "のデータ型" -#: sphinx/domains/c.py:175 -#, fuzzy +#: sphinx/domains/c.py:208 msgid "variable" msgstr "変数" -#: sphinx/domains/cpp.py:876 -#, fuzzy, python-format +#: sphinx/domains/cpp.py:904 +#, python-format msgid "%s (C++ class)" -msgstr "%s (のクラス)" +msgstr "%s (C++ のクラス)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ のデータ型)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ のメンバ変数)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ の関数)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" -msgstr "" +msgstr "クラス" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, python-format msgid "%s() (built-in function)" msgstr "%s() (組み込み関数)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s のメソッド)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (クラス)" + +#: sphinx/domains/javascript.py:111 #, 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:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s の属性)" -#: sphinx/domains/javascript.py:131 -#, fuzzy +#: sphinx/domains/javascript.py:122 msgid "Arguments" -msgstr "パラメタ" +msgstr "引数" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" -msgstr "" +msgstr "例外" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" -msgstr "" +msgstr "データ" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "の属性" -#: sphinx/domains/python.py:53 -#, fuzzy +#: sphinx/domains/python.py:100 msgid "Variables" msgstr "変数" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s モジュール)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, python-format msgid "%s (built-in variable)" msgstr "%s (組み込み変数)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (%s モジュール)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (組み込み変数)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (%s のクラス)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s のメソッド)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s の静的メソッド)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s の静的メソッド)" -#: sphinx/domains/python.py:308 -#, fuzzy, python-format +#: sphinx/domains/python.py:341 +#, python-format msgid "%s() (%s.%s class method)" -msgstr "%s() (%s.%s のメソッド)" +msgstr "%s() (%s.%s のクラスメソッド)" -#: sphinx/domains/python.py:311 -#, fuzzy, python-format +#: sphinx/domains/python.py:344 +#, python-format msgid "%s() (%s class method)" -msgstr "%s() (%s のメソッド)" +msgstr "%s() (%s のクラスメソッド)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s の属性)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "プラットフォーム: " - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (モジュール)" -#: sphinx/domains/python.py:429 -#, fuzzy +#: sphinx/domains/python.py:491 msgid "Python Module Index" -msgstr "モジュール索引" +msgstr "Pythonモジュール索引" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "モジュール" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "撤廃" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "例外" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" -msgstr "" +msgstr "メソッド" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 msgid "class method" -msgstr "%s() (%s のメソッド)" +msgstr "クラスメソッド" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "の静的メソッド" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "モジュール" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr " (撤廃)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" -msgstr "" +msgstr "%s (ディレクティブ)" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, python-format msgid "%s (role)" -msgstr "%s (モジュール)" +msgstr "%s (ロール)" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" -msgstr "" +msgstr "ディレクティブ" -#: sphinx/domains/rst.py:104 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "モジュール" +msgstr "ロール" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "環境変数; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%sコマンドラインオプション; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" -msgstr "" +msgstr "用語集の項目" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" -msgstr "" +msgstr "文法トークン" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" -msgstr "" +msgstr "参照ラベル" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "環境変数" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" -msgstr "" +msgstr "プログラムオプション" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "索引" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "モジュール索引" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "検索ページ" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " ベースクラス: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr ":class:`%s` のエイリアス" @@ -399,110 +415,109 @@ 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 -#, fuzzy +#: sphinx/ext/viewcode.py:131 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:176 msgid "keyword" msgstr "キーワード" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "演算子" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "オブジェクト" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "文" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "組み込み関数" @@ -511,8 +526,8 @@ msgstr "組み込み関数" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "検索" @@ -560,15 +575,15 @@ msgstr "全モジュール早見表" msgid "all functions, classes, terms" msgstr "関数、クラスおよび用語総覧" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "索引 – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "総索引" @@ -580,39 +595,39 @@ msgstr "頭文字別索引" msgid "can be huge" msgstr "大きい場合があるので注意" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "ナビゲーション" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "%(docstitle)s 内を検索" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "このドキュメントについて" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "著作権" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "最終更新: %(last_updated)s" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -642,13 +657,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 +671,15 @@ 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 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 +719,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "この定義へのパーマリンク" @@ -718,58 +732,37 @@ msgstr "この定義へのパーマリンク" msgid "Hide Search Matches" msgstr "検索結果を隠す" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "検索中" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "検索の準備中..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr "" - -#: 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 "検索条件に一致するドキュメントはありませんでした。検索したい言葉を正しいつづりで入力しているか確認してください。また、正しいカテゴリの検索を行っているか確認してください。" - -#: sphinx/themes/basic/static/searchtools.js:493 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "検索が終了し、条件に一致するページが %s 個みつかりました。" - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 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:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" -msgstr "" +msgstr "サイドバーをたたむ" #: sphinx/themes/haiku/layout.html:26 msgid "Contents" -msgstr "" +msgstr "コンテンツ" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "リリース" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "注記" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "前のページからの続き" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" -msgstr "総索引" +msgstr "次のページに続く" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[画像]" + diff --git a/sphinx/locale/ko/LC_MESSAGES/sphinx.js b/sphinx/locale/ko/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000..0beffaa2 --- /dev/null +++ b/sphinx/locale/ko/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "ko", "plural_expr": "0", "messages": {"Hide Search Matches": "\uac80\uc0c9 \uacb0\uacfc \uc228\uae30\uae30", "Permalink to this definition": "\uc815\uc758 \uc8fc\uc18c", "Expand sidebar": "\uc0ac\uc774\ub4dc\ubc14 \uc5f4\uae30", "Permalink to this headline": "\uc81c\ubaa9 \uc8fc\uc18c", "Collapse sidebar": "\uc0ac\uc774\ub4dc\ubc14 \ub2eb\uae30"}});
\ No newline at end of file diff --git a/sphinx/locale/ko/LC_MESSAGES/sphinx.mo b/sphinx/locale/ko/LC_MESSAGES/sphinx.mo Binary files differnew file mode 100644 index 00000000..d671331a --- /dev/null +++ b/sphinx/locale/ko/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/ko/LC_MESSAGES/sphinx.po b/sphinx/locale/ko/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..8c0dd3d8 --- /dev/null +++ b/sphinx/locale/ko/LC_MESSAGES/sphinx.po @@ -0,0 +1,777 @@ +# Koreantranslations for Sphinx. +# Copyright (C) 2008 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# Channy Yun <channy@mozilla.or.kr> +# +msgid "" +msgstr "" +"Project-Id-Version: Sphinx 1.1pre\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-06-09 21:25+0900\n" +"Last-Translator: Channy Yun <channy@mozilla.or.kr>\n" +"Language-Team: Korean\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.6\n" + +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 +#, python-format +msgid "%B %d, %Y" +msgstr "%Y년 %m월 %d일" + +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "%s 문서" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "%s 참조" + +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 +msgid "Builtins" +msgstr "기본" + +#: sphinx/builders/changes.py:75 +msgid "Module level" +msgstr "모듈 수준" + +#: sphinx/builders/html.py:274 +#, python-format +msgid "%b %d, %Y" +msgstr "%Y년 %m월 %d일" + +#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "전체 색인" + +#: sphinx/builders/html.py:293 +msgid "index" +msgstr "색인" + +#: sphinx/builders/html.py:353 +msgid "next" +msgstr "다음" + +#: sphinx/builders/html.py:362 +msgid "previous" +msgstr "이전" + +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 +#, fuzzy +msgid " (in " +msgstr "(" + +#: sphinx/directives/other.py:136 +#, fuzzy +msgid "Section author: " +msgstr "항목 저자:" + +#: sphinx/directives/other.py:138 +#, fuzzy +msgid "Module author: " +msgstr "모듈 개발자:" + +#: sphinx/directives/other.py:140 +#, fuzzy +msgid "Code author: " +msgstr "코드 개발자:" + +#: sphinx/directives/other.py:142 +#, fuzzy +msgid "Author: " +msgstr "저자:" + +#: sphinx/directives/other.py:215 +msgid "See also" +msgstr "더 보기" + +#: sphinx/domains/__init__.py:244 +#, python-format +msgid "%s %s" +msgstr "" + +#: sphinx/domains/c.py:51 sphinx/domains/python.py:95 +msgid "Parameters" +msgstr "매개 변수" + +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128 +#: sphinx/domains/python.py:107 +msgid "Returns" +msgstr "반환" + +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 +msgid "Return type" +msgstr "반환 형식" + +#: sphinx/domains/c.py:141 +#, python-format +msgid "%s (C function)" +msgstr "%s (C 함수)" + +#: sphinx/domains/c.py:143 +#, python-format +msgid "%s (C member)" +msgstr "%s (C 멤버 변수)" + +#: sphinx/domains/c.py:145 +#, python-format +msgid "%s (C macro)" +msgstr "%s (C 매크로)" + +#: sphinx/domains/c.py:147 +#, python-format +msgid "%s (C type)" +msgstr "%s (C 데이터 형식)" + +#: sphinx/domains/c.py:149 +#, python-format +msgid "%s (C variable)" +msgstr "%s (C 변수)" + +#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 +msgid "function" +msgstr "함수" + +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 +msgid "member" +msgstr "멤버 변수" + +#: sphinx/domains/c.py:206 +msgid "macro" +msgstr "매크로" + +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 +msgid "type" +msgstr "데이터 형식" + +#: sphinx/domains/c.py:208 +msgid "variable" +msgstr "변수" + +#: sphinx/domains/cpp.py:904 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (C++ 클래스)" + +#: sphinx/domains/cpp.py:919 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (C++ 데이터 형식)" + +#: sphinx/domains/cpp.py:938 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (C++의 멤버 변수)" + +#: sphinx/domains/cpp.py:990 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (C++ 함수)" + +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 +msgid "class" +msgstr "클래스" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 +#, python-format +msgid "%s() (built-in function)" +msgstr "%s() 내장 함수)" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (%s 메서드)" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (클래스)" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "%s (전역 변수 또는 상수)" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (%s의 속성)" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "인수" + +#: sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "예외" + +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 +msgid "data" +msgstr "데이터" + +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 +msgid "attribute" +msgstr "속성" + +#: sphinx/domains/python.py:100 +msgid "Variables" +msgstr "변수" + +#: sphinx/domains/python.py:104 +msgid "Raises" +msgstr "예외" + +#: sphinx/domains/python.py:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 +#, python-format +msgid "%s() (in module %s)" +msgstr "%s() (%s 모듈)" + +#: sphinx/domains/python.py:258 +#, python-format +msgid "%s (built-in variable)" +msgstr "%s (내장 변수)" + +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 +#, python-format +msgid "%s (in module %s)" +msgstr "%s (%s 모듈)" + +#: sphinx/domains/python.py:275 +#, python-format +msgid "%s (built-in class)" +msgstr "%s (내장 변수)" + +#: sphinx/domains/python.py:276 +#, python-format +msgid "%s (class in %s)" +msgstr "%s (%s 종류)" + +#: sphinx/domains/python.py:316 +#, fuzzy, python-format +msgid "%s() (%s.%s method)" +msgstr "%s() (%s. %s 메서드)" + +#: sphinx/domains/python.py:328 +#, fuzzy, python-format +msgid "%s() (%s.%s static method)" +msgstr "%s() (%s. %s의 정적 메서드)" + +#: sphinx/domains/python.py:331 +#, python-format +msgid "%s() (%s static method)" +msgstr "%s() (%s의 정적 메서드)" + +#: sphinx/domains/python.py:341 +#, fuzzy, python-format +msgid "%s() (%s.%s class method)" +msgstr "%s() (%s. %s 클래스 메서드)" + +#: sphinx/domains/python.py:344 +#, python-format +msgid "%s() (%s class method)" +msgstr "%s() (%s 클래스 메서드)" + +#: sphinx/domains/python.py:354 +#, fuzzy, python-format +msgid "%s (%s.%s attribute)" +msgstr "%s (%s. %s의 속성)" + +#: sphinx/domains/python.py:434 +#, python-format +msgid "%s (module)" +msgstr "%s (모듈)" + +#: sphinx/domains/python.py:491 +msgid "Python Module Index" +msgstr "Python 모듈 목록" + +#: sphinx/domains/python.py:492 +msgid "modules" +msgstr "모듈" + +#: sphinx/domains/python.py:537 +msgid "Deprecated" +msgstr "폐지" + +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 +msgid "exception" +msgstr "예외" + +#: sphinx/domains/python.py:563 +msgid "method" +msgstr "메소드" + +#: sphinx/domains/python.py:564 +msgid "class method" +msgstr "클래스 메소드" + +#: sphinx/domains/python.py:565 +msgid "static method" +msgstr "정적 메서드" + +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 +msgid "module" +msgstr "모듈" + +#: sphinx/domains/python.py:695 +#, fuzzy +msgid " (deprecated)" +msgstr "(폐지)" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "%s (지시문)" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "%s (역할)" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "지시자" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "역할" + +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 +#, python-format +msgid "environment variable; %s" +msgstr "환경 변수; %s" + +#: sphinx/domains/std.py:162 +#, python-format +msgid "%scommand line option; %s" +msgstr "%s 명령; %s" + +#: sphinx/domains/std.py:393 +msgid "glossary term" +msgstr "용어의 항목" + +#: sphinx/domains/std.py:394 +msgid "grammar token" +msgstr "문법 토큰" + +#: sphinx/domains/std.py:395 +msgid "reference label" +msgstr "참조 레이블" + +#: sphinx/domains/std.py:396 +msgid "environment variable" +msgstr "환경 변수" + +#: sphinx/domains/std.py:397 +msgid "program option" +msgstr "프로그램 옵션" + +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 +msgid "Index" +msgstr "색인" + +#: sphinx/domains/std.py:428 +msgid "Module Index" +msgstr "모듈 목록" + +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "검색 페이지" + +#: sphinx/ext/autodoc.py:1002 +#, fuzzy, python-format +msgid " Bases: %s" +msgstr "기본 클래스: %s" + +#: sphinx/ext/autodoc.py:1038 +#, fuzzy, python-format +msgid "alias of :class:`%s`" +msgstr ": class:`%s`의 별칭" + +#: sphinx/ext/todo.py:41 +msgid "Todo" +msgstr "과제" + +#: 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 +msgid "Module code" +msgstr "모듈 코드" + +#: sphinx/ext/viewcode.py:137 +#, fuzzy, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "<h1>%s의 소스 코드</ h1>" + +#: sphinx/ext/viewcode.py:164 +msgid "Overview: module code" +msgstr "설명: 모듈 코드" + +#: sphinx/ext/viewcode.py:165 +#, fuzzy +msgid "<h1>All modules for which code is available</h1>" +msgstr "<h1>코드가 제공되는 모든 모듈 </ h1>" + +#: sphinx/locale/__init__.py:155 +msgid "Attention" +msgstr "주의" + +#: sphinx/locale/__init__.py:156 +msgid "Caution" +msgstr "조심" + +#: sphinx/locale/__init__.py:157 +msgid "Danger" +msgstr "위험" + +#: sphinx/locale/__init__.py:158 +msgid "Error" +msgstr "오류" + +#: sphinx/locale/__init__.py:159 +msgid "Hint" +msgstr "힌트" + +#: sphinx/locale/__init__.py:160 +msgid "Important" +msgstr "중요" + +#: sphinx/locale/__init__.py:161 +msgid "Note" +msgstr "주석" + +#: sphinx/locale/__init__.py:162 +msgid "See Also" +msgstr "더 보기" + +#: sphinx/locale/__init__.py:163 +msgid "Tip" +msgstr "참고" + +#: sphinx/locale/__init__.py:164 +msgid "Warning" +msgstr "경고" + +#: sphinx/locale/__init__.py:168 +#, python-format +msgid "New in version %s" +msgstr "버전 %s에 추가" + +#: sphinx/locale/__init__.py:169 +#, python-format +msgid "Changed in version %s" +msgstr "버전 %s으로 변경" + +#: sphinx/locale/__init__.py:170 +#, python-format +msgid "Deprecated since version %s" +msgstr "버전 %s 폐지" + +#: sphinx/locale/__init__.py:176 +msgid "keyword" +msgstr "키워드" + +#: sphinx/locale/__init__.py:177 +msgid "operator" +msgstr "연산자" + +#: sphinx/locale/__init__.py:178 +msgid "object" +msgstr "객체" + +#: sphinx/locale/__init__.py:180 +msgid "statement" +msgstr "글" + +#: sphinx/locale/__init__.py:181 +msgid "built-in function" +msgstr "내장 함수" + +#: 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:137 +#: 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:20 +msgid "Indices and tables:" +msgstr "색인 및 표 목록:" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "종합 목차" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "영역별 목차" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "문서 검색" + +#: 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:31 +msgid "all functions, classes, terms" +msgstr "함수, 클래스 및 용어 개관" + +#: sphinx/themes/basic/genindex-single.html:35 +#, fuzzy, python-format +msgid "Index – %(key)s" +msgstr "색인-%(key)s" + +#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:74 +msgid "Full index on one page" +msgstr "일반 색인" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "알파벳별 색인" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "큰 경우가 있으므로 주의" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "탐색" + +#: sphinx/themes/basic/layout.html:122 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "%(docstitle)s에서 찾기" + +#: sphinx/themes/basic/layout.html:131 +msgid "About these documents" +msgstr "이 문서 정보" + +#: sphinx/themes/basic/layout.html:140 +msgid "Copyright" +msgstr "저작권" + +#: sphinx/themes/basic/layout.html:189 +#, fuzzy, 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:191 +#, fuzzy, python-format +msgid "© Copyright %(copyright)s." +msgstr "©Copyright %(copyright)s." + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "최종 업데이트: %(last_updated)s" + +#: sphinx/themes/basic/layout.html:198 +#, fuzzy, 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/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "%(docstitle)s에서 찾기" + +#: 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 +#, fuzzy +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "검색 기능을 사용하려면 JavaScript를 활성화하십시오." + +#: sphinx/themes/basic/search.html:29 +#, fuzzy +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 "" +"이 문서에서 문서를 검색할 수 있습니다. 키워드를 아래 입력란에 입력하고 '검색'을 클릭하세요. 입력된 모든 키워드를 포함하는 " +"페이지가 검색됩니다. 일부 키워드 밖에 없는 페이지는 검색 결과에 표시되지 않으므로 주의하십시오. " + +#: sphinx/themes/basic/search.html:36 +msgid "search" +msgstr "검색" + +#: sphinx/themes/basic/search.html:40 +msgid "Search Results" +msgstr "검색 결과" + +#: 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 +#, fuzzy, python-format +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "버전 %(version)s의 변경 사항-%(docstitle)s" + +#: sphinx/themes/basic/changes/rstsource.html:5 +#, fuzzy, 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 "버전 %(version)s의 변경 사항 (이 목록은 자동으로 생성합니다)" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "라이브러리에 대한 변경" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "C API에 대한 변경" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "다른 변경 사항" + +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504 +#: sphinx/writers/html.py:510 +msgid "Permalink to this headline" +msgstr "제목 주소" + +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92 +msgid "Permalink to this definition" +msgstr "정의 주소" + +#: sphinx/themes/basic/static/doctools.js:189 +msgid "Hide Search Matches" +msgstr "검색 결과 숨기기" + +#: sphinx/themes/default/static/sidebar.js:69 +msgid "Expand sidebar" +msgstr "사이드바 열기" + +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 +msgid "Collapse sidebar" +msgstr "사이드바 닫기" + +#: sphinx/themes/haiku/layout.html:26 +msgid "Contents" +msgstr "내용" + +#: sphinx/writers/latex.py:177 +msgid "Release" +msgstr "출시" + +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 +msgid "Footnotes" +msgstr "참고" + +#: sphinx/writers/latex.py:676 +msgid "continued from previous page" +msgstr "이전 페이지에서 계속" + +#: sphinx/writers/latex.py:681 +msgid "Continued on next page" +msgstr "일반 색인" + +#: sphinx/writers/text.py:437 +msgid "[image]" +msgstr "[그림]" + diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.js b/sphinx/locale/lt/LC_MESSAGES/sphinx.js index daf4f89b..2ab4266b 100644 --- a/sphinx/locale/lt/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "lt", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Search Results": "Paie\u0161kos rezultatai", "Preparing search...": "Ruo\u0161iama paie\u0161ka...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "J\u016bs\u0173 paie\u0161ka neatitiko joki\u0173 dokument\u0173. Pra\u0161om patikrinti ar visi \u017eod\u017eiai teisingai \u012fvesti ir ar pasirinkote pakankamai kategorij\u0173.", "Search finished, found %s page(s) matching the search query.": "Paie\u0161ka baigta, paie\u0161kos rezultatus atitiko %s puslapis(-iai,-i\u0173)", ", in ": ", kuris yra ", "Expand sidebar": "I\u0161pl\u0117sti \u0161onin\u0119 juost\u0105", "Permalink to this headline": "Nuoroda \u012f \u0161i\u0105 antra\u0161t\u0119", "Searching": "Ie\u0161koma", "Collapse sidebar": "Pasl\u0117pti \u0161onin\u0119 juost\u0105", "Permalink to this definition": "Nuoroda \u012f \u0161\u012f apibr\u0117\u017eim\u0105", "Hide Search Matches": "Pasl\u0117pti paie\u0161kos rezultatus"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "lt", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "Pasl\u0117pti paie\u0161kos rezultatus", "Permalink to this definition": "Nuoroda \u012f \u0161\u012f apibr\u0117\u017eim\u0105", "Expand sidebar": "I\u0161pl\u0117sti \u0161onin\u0119 juost\u0105", "Permalink to this headline": "Nuoroda \u012f \u0161i\u0105 antra\u0161t\u0119", "Collapse sidebar": "Pasl\u0117pti \u0161onin\u0119 juost\u0105"}});
\ No newline at end of file diff --git a/sphinx/locale/lt/LC_MESSAGES/sphinx.mo b/sphinx/locale/lt/LC_MESSAGES/sphinx.mo Binary files differindex 794ae655..9efc6d77 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..b331d52a 100644 --- a/sphinx/locale/lt/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/lt/LC_MESSAGES/sphinx.po @@ -6,380 +6,402 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.5\n" +"Generated-By: Babel 0.9.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%Y-%m-%d" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment.py:1628 #, python-format -msgid "Python Enhancement Proposals!PEP %s" +msgid "see also %s" msgstr "" -#: sphinx/builders/changes.py:72 +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Įtaisytieji" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Modulio lygis" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Bendras indeksas" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "indeksas" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "kitas" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "praeitas" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr " (kuris yra " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Skyriaus autorius: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Modulio autorius: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 msgid "Code author: " msgstr "Kodo autorius: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Autorius: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Taip pat žiūrėkite" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 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:109 msgid "Return type" msgstr "Grąžinamos reikšmės tipas" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C funkcija)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C narys)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C makrokomanda)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C tipas)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "funkcija" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "narys" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "makrokomanda" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "tipas" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 msgid "variable" msgstr "kintamasis" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tipas)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ narys)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkcija)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "klasė" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metodas)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (klasė)" + +#: sphinx/domains/javascript.py:111 #, 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:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atributas)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 msgid "Arguments" msgstr "Argumentais" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Išmeta" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "duomenys" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "atribudas" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 msgid "Variables" msgstr "Kintamieji" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (modulyje %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (modulje %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (įtaisytoji klasė)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (klasė iš %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metodas)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statinis metodas)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statinis metodas)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s klasės metodas)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s klasės metodas)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atributas)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Platformos: " - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (modulis)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "moduliai" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Atmestas" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "išimtis" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "metodas" -#: sphinx/domains/python.py:502 +#: sphinx/domains/python.py:564 msgid "class method" msgstr "klasės metodas" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "statinis metodas" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "modulis" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +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ė" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "aplinkos kintamasis; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%skomandinės eilutės parinktis; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "aiškinamasis terminas" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "gramatinė leksema" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "nuorodos požymis" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "aplinkos kintamasis" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "programos parinktis" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Indeksas" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Modulio indeksas" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Paieškos puslapis" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " Bazės: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr ":class:`%s` alternatyvus vardas" @@ -397,103 +419,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:176 msgid "keyword" msgstr "bazinis žodis" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "operatorius" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "objektas" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "sakinis" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "įtaisytoji funkcija" @@ -502,8 +524,8 @@ msgstr "įtaisytoji funkcija" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Paieška" @@ -551,15 +573,15 @@ msgstr "greitas visų modulių pasiekimas" msgid "all functions, classes, terms" msgstr "visos funkcijos, klasės ir terminai" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Indeksas – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Pilnas indeksas viename puslapyje" @@ -571,39 +593,39 @@ msgstr "Indekso puslapiai pagal raidę" msgid "can be huge" msgstr "gali būti didelis" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navigacija" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Ieškoti tarp %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "Apie šiuos dokumentus" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Autoriaus teisės" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, python-format msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "© <a href=\"%(path)s\">Autoriaus teisės</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:182 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Autoriaus teisės %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Paskutinis atnaujinimas %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -633,7 +655,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 +663,28 @@ 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 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 +724,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Nuoroda į šį apibrėžimą" @@ -712,35 +737,12 @@ msgstr "Nuoroda į šį apibrėžimą" msgid "Hide Search Matches" msgstr "Paslėpti paieškos rezultatus" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Ieškoma" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Ruošiama paieška..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr ", kuris yra " - -#: 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 "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 -#, 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ų)" - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 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:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "Paslėpti šoninę juostą" @@ -748,23 +750,24 @@ msgstr "Paslėpti šoninę juostą" msgid "Contents" msgstr "Turinys" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Leidimas" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "Išnašos" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "tęsinys iš praeito puslapio" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" msgstr "Tęsinys kitame puslapyje" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[paveiksliukas]" diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.js b/sphinx/locale/lv/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000..7809a810 --- /dev/null +++ b/sphinx/locale/lv/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "lv", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "Pasl\u0113pt atlases v\u0101rdus", "Permalink to this definition": "Past\u0101v\u012bga nor\u0101de uz \u0161o defin\u012bciju", "Expand sidebar": "Izplest s\u0101njoslu", "Permalink to this headline": "Past\u0101v\u012bga nor\u0101de \u0161o virsrakstu", "Collapse sidebar": "Sav\u0113rst s\u0101njoslu"}});
\ No newline at end of file diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.mo b/sphinx/locale/lv/LC_MESSAGES/sphinx.mo Binary files differnew file mode 100644 index 00000000..e6e713a5 --- /dev/null +++ b/sphinx/locale/lv/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/lv/LC_MESSAGES/sphinx.po b/sphinx/locale/lv/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..ec19bbee --- /dev/null +++ b/sphinx/locale/lv/LC_MESSAGES/sphinx.po @@ -0,0 +1,771 @@ +# Latvian translations for Sphinx. +# This file is distributed under the same license as the Sphinx project. +# +msgid "" +msgstr "" +"Project-Id-Version: Sphinx 1.0.7\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-05-10 16:40+0200\n" +"Last-Translator: alexander smishlajev <alex@gorka.lv>\n" +"Language-Team: lv <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" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 0.9.6\n" + +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 +#, python-format +msgid "%B %d, %Y" +msgstr "%d.%m.%Y" + +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "" + +#: sphinx/builders/changes.py:73 +msgid "Builtins" +msgstr "Iebūvētie" + +#: sphinx/builders/changes.py:75 +msgid "Module level" +msgstr "Moduļu līmenis" + +#: sphinx/builders/html.py:274 +#, python-format +msgid "%b %d, %Y" +msgstr "%d.%m.%Y" + +#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "Vispārējs indekss" + +#: sphinx/builders/html.py:293 +msgid "index" +msgstr "indekss" + +#: sphinx/builders/html.py:353 +msgid "next" +msgstr "nākošais" + +#: sphinx/builders/html.py:362 +msgid "previous" +msgstr "iepriekšējs" + +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 +msgid " (in " +msgstr " (iekš " + +#: sphinx/directives/other.py:136 +msgid "Section author: " +msgstr "Sekcijas autors: " + +#: sphinx/directives/other.py:138 +msgid "Module author: " +msgstr "Moduļa autors: " + +#: sphinx/directives/other.py:140 +msgid "Code author: " +msgstr "Koda autors: " + +#: sphinx/directives/other.py:142 +msgid "Author: " +msgstr "Autors: " + +#: sphinx/directives/other.py:215 +msgid "See also" +msgstr "Skat.arī" + +#: sphinx/domains/__init__.py:244 +#, python-format +msgid "%s %s" +msgstr "%s %s" + +#: sphinx/domains/c.py:51 sphinx/domains/python.py:95 +msgid "Parameters" +msgstr "Parametri" + +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128 +#: sphinx/domains/python.py:107 +msgid "Returns" +msgstr "Atgriež" + +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 +msgid "Return type" +msgstr "Atgriežamais tips" + +#: sphinx/domains/c.py:141 +#, python-format +msgid "%s (C function)" +msgstr "%s (C funkcija)" + +#: sphinx/domains/c.py:143 +#, python-format +msgid "%s (C member)" +msgstr "%s (C loceklis)" + +#: sphinx/domains/c.py:145 +#, python-format +msgid "%s (C macro)" +msgstr "%s (C makross)" + +#: sphinx/domains/c.py:147 +#, python-format +msgid "%s (C type)" +msgstr "%s (C tips)" + +#: sphinx/domains/c.py:149 +#, python-format +msgid "%s (C variable)" +msgstr "%s (C mainīgais)" + +#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 +msgid "function" +msgstr "funkcija" + +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 +msgid "member" +msgstr "loceklis" + +#: sphinx/domains/c.py:206 +msgid "macro" +msgstr "makross" + +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 +msgid "type" +msgstr "tips" + +#: sphinx/domains/c.py:208 +msgid "variable" +msgstr "mainīgais" + +#: sphinx/domains/cpp.py:904 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (C++ klase)" + +#: sphinx/domains/cpp.py:919 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (C++ tips)" + +#: sphinx/domains/cpp.py:938 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (C++ loceklis)" + +#: sphinx/domains/cpp.py:990 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (C++ funkcija)" + +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 +msgid "class" +msgstr "klase" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 +#, python-format +msgid "%s() (built-in function)" +msgstr "%s() (iebūvēta funkcija)" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (%s metods)" + +#: sphinx/domains/javascript.py:109 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (C++ klase)" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "%s (globālais mainīgais vai konstanta)" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (%s atributs)" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "Argumenti" + +#: sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "Izmet" + +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 +msgid "data" +msgstr "dati" + +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 +msgid "attribute" +msgstr "atributs" + +#: sphinx/domains/python.py:100 +msgid "Variables" +msgstr "Mainīgie" + +#: sphinx/domains/python.py:104 +msgid "Raises" +msgstr "Ceļ" + +#: sphinx/domains/python.py:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 +#, python-format +msgid "%s() (in module %s)" +msgstr "%s() (moduļī %s)" + +#: sphinx/domains/python.py:258 +#, python-format +msgid "%s (built-in variable)" +msgstr "%s (iebūvētais mainīgais)" + +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 +#, python-format +msgid "%s (in module %s)" +msgstr "%s (moduļī %s)" + +#: sphinx/domains/python.py:275 +#, python-format +msgid "%s (built-in class)" +msgstr "%s (iebūvēta klase)" + +#: sphinx/domains/python.py:276 +#, python-format +msgid "%s (class in %s)" +msgstr "%s (klase iekš %s)" + +#: sphinx/domains/python.py:316 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "%s() (%s.%s metods)" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "%s() (%s.%s statiskais metods)" + +#: sphinx/domains/python.py:331 +#, python-format +msgid "%s() (%s static method)" +msgstr "%s() (%s statiskais metods)" + +#: sphinx/domains/python.py:341 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "%s() (%s.%s klases metods)" + +#: sphinx/domains/python.py:344 +#, python-format +msgid "%s() (%s class method)" +msgstr "%s() (%s klases metods)" + +#: sphinx/domains/python.py:354 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "%s (%s.%s atributs)" + +#: sphinx/domains/python.py:434 +#, python-format +msgid "%s (module)" +msgstr "%s (modulis)" + +#: sphinx/domains/python.py:491 +msgid "Python Module Index" +msgstr "" + +#: sphinx/domains/python.py:492 +msgid "modules" +msgstr "moduļi" + +#: sphinx/domains/python.py:537 +msgid "Deprecated" +msgstr "Nav ieteicams" + +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 +msgid "exception" +msgstr "izņēmums" + +#: sphinx/domains/python.py:563 +msgid "method" +msgstr "metods" + +#: sphinx/domains/python.py:564 +msgid "class method" +msgstr "klases metods" + +#: sphinx/domains/python.py:565 +msgid "static method" +msgstr "statiskais metods" + +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 +msgid "module" +msgstr "modulis" + +#: sphinx/domains/python.py:695 +#, fuzzy +msgid " (deprecated)" +msgstr "Nav ieteicams" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "%s (direktīva)" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "%s (role)" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "direktīva" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "role" + +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 +#, python-format +msgid "environment variable; %s" +msgstr "apkārtnes mainīgais; %s" + +#: sphinx/domains/std.py:162 +#, python-format +msgid "%scommand line option; %s" +msgstr "%skomandrindas opcija; %s" + +#: sphinx/domains/std.py:393 +msgid "glossary term" +msgstr "glosārija termins" + +#: sphinx/domains/std.py:394 +msgid "grammar token" +msgstr "gramatiskais marķieris" + +#: sphinx/domains/std.py:395 +msgid "reference label" +msgstr "atsauces virsraksts" + +#: sphinx/domains/std.py:396 +msgid "environment variable" +msgstr "apkārtnes mainīgais" + +#: sphinx/domains/std.py:397 +msgid "program option" +msgstr "programmas opcija" + +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 +msgid "Index" +msgstr "Indekss" + +#: sphinx/domains/std.py:428 +msgid "Module Index" +msgstr "Moduļu indekss" + +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "Atlases lapa" + +#: sphinx/ext/autodoc.py:1002 +#, python-format +msgid " Bases: %s" +msgstr " Bāzes: %s" + +#: sphinx/ext/autodoc.py:1038 +#, python-format +msgid "alias of :class:`%s`" +msgstr "aizstājvārds klasei :class:`%s`" + +#: sphinx/ext/todo.py:41 +msgid "Todo" +msgstr "Jāizdara" + +#: sphinx/ext/todo.py:109 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(<<original entry>> atrodas iekš %s, rinda %d.)" + +#: sphinx/ext/todo.py:117 +msgid "original entry" +msgstr "sākotnējs ieraksts" + +#: sphinx/ext/viewcode.py:70 +msgid "[source]" +msgstr "[kods]" + +#: sphinx/ext/viewcode.py:117 +msgid "[docs]" +msgstr "[dokumenti]" + +#: sphinx/ext/viewcode.py:131 +msgid "Module code" +msgstr "Moduļa teksts" + +#: sphinx/ext/viewcode.py:137 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "<h1>%s izejas teksts</h1>" + +#: sphinx/ext/viewcode.py:164 +msgid "Overview: module code" +msgstr "Apskats: moduļa teksts" + +#: sphinx/ext/viewcode.py:165 +msgid "<h1>All modules for which code is available</h1>" +msgstr "<h1>Visi moduļi, kuriem ir izejas teksti</h1>" + +#: sphinx/locale/__init__.py:155 +msgid "Attention" +msgstr "Uzmanību" + +#: sphinx/locale/__init__.py:156 +msgid "Caution" +msgstr "Uzmanies" + +#: sphinx/locale/__init__.py:157 +msgid "Danger" +msgstr "Bīstami" + +#: sphinx/locale/__init__.py:158 +msgid "Error" +msgstr "Kļūda" + +#: sphinx/locale/__init__.py:159 +msgid "Hint" +msgstr "Mājiens" + +#: sphinx/locale/__init__.py:160 +msgid "Important" +msgstr "Svarīgi" + +#: sphinx/locale/__init__.py:161 +msgid "Note" +msgstr "Piezīme" + +#: sphinx/locale/__init__.py:162 +msgid "See Also" +msgstr "Skat.arī" + +#: sphinx/locale/__init__.py:163 +msgid "Tip" +msgstr "Padoms" + +#: sphinx/locale/__init__.py:164 +msgid "Warning" +msgstr "Brīdinājums" + +#: sphinx/locale/__init__.py:168 +#, python-format +msgid "New in version %s" +msgstr "Jauns versijā %s" + +#: sphinx/locale/__init__.py:169 +#, python-format +msgid "Changed in version %s" +msgstr "Mainīts versijā %s" + +#: sphinx/locale/__init__.py:170 +#, python-format +msgid "Deprecated since version %s" +msgstr "Neieteicams no versijas %s" + +#: sphinx/locale/__init__.py:176 +msgid "keyword" +msgstr "atslēgas vārds" + +#: sphinx/locale/__init__.py:177 +msgid "operator" +msgstr "operators" + +#: sphinx/locale/__init__.py:178 +msgid "object" +msgstr "objekts" + +#: sphinx/locale/__init__.py:180 +msgid "statement" +msgstr "priekšraksts" + +#: sphinx/locale/__init__.py:181 +msgid "built-in function" +msgstr "iebūvēta funkcija" + +#: sphinx/themes/agogo/layout.html:45 sphinx/themes/basic/globaltoc.html:10 +#: sphinx/themes/basic/localtoc.html:11 +msgid "Table Of Contents" +msgstr "Saturs" + +#: sphinx/themes/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 +msgid "Search" +msgstr "Meklēt" + +#: sphinx/themes/agogo/layout.html:52 sphinx/themes/basic/searchbox.html:15 +msgid "Go" +msgstr "Izpildīt" + +#: sphinx/themes/agogo/layout.html:57 sphinx/themes/basic/searchbox.html:20 +msgid "Enter search terms or a module, class or function name." +msgstr "Ievadiet meklējamus terminus vai moduļa, klases vai funkcijas vārdu." + +#: sphinx/themes/agogo/layout.html:78 sphinx/themes/basic/sourcelink.html:14 +msgid "Show Source" +msgstr "Rādīt izejas tekstu" + +#: sphinx/themes/basic/defindex.html:11 +msgid "Overview" +msgstr "Apskats" + +#: sphinx/themes/basic/defindex.html:20 +msgid "Indices and tables:" +msgstr "Indeksi un tabulas:" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "Pilns saturs" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "rāda visas sekcijas un apakšsekcijas" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "meklēt šajā dokumentācijā" + +#: sphinx/themes/basic/defindex.html:28 +msgid "Global Module Index" +msgstr "Vispārējs moduļu indekss" + +#: sphinx/themes/basic/defindex.html:29 +msgid "quick access to all modules" +msgstr "ātra piekļuve visiem moduliem" + +#: sphinx/themes/basic/defindex.html:31 +msgid "all functions, classes, terms" +msgstr "visas funkcijas, klases un termini" + +#: sphinx/themes/basic/genindex-single.html:35 +#, python-format +msgid "Index – %(key)s" +msgstr "Indekss – %(key)s" + +#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:74 +msgid "Full index on one page" +msgstr "Pilns indekss vienā lappusē" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "Lappušu indekss pēc burtiem" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "var būt milzīgs" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "Navigācija" + +#: sphinx/themes/basic/layout.html:122 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Meklēt iekš %(docstitle)s" + +#: sphinx/themes/basic/layout.html:131 +msgid "About these documents" +msgstr "Par šiem dokumentiem" + +#: sphinx/themes/basic/layout.html:140 +msgid "Copyright" +msgstr "Copyright" + +#: sphinx/themes/basic/layout.html:189 +#, 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:191 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Pēdējas izmaiņas %(last_updated)s." + +#: sphinx/themes/basic/layout.html:198 +#, python-format +msgid "" +"Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " +"%(sphinx_version)s." +msgstr "" +"Sagatavots izmantojot <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 meklēšana" + +#: sphinx/themes/basic/relations.html:11 +msgid "Previous topic" +msgstr "iepriekšēja tēma" + +#: sphinx/themes/basic/relations.html:13 +msgid "previous chapter" +msgstr "iepriekšēja sadaļa" + +#: sphinx/themes/basic/relations.html:16 +msgid "Next topic" +msgstr "nākoša tēma" + +#: sphinx/themes/basic/relations.html:18 +msgid "next chapter" +msgstr "nākoša sadaļa" + +#: sphinx/themes/basic/search.html:24 +msgid "" +"Please activate JavaScript to enable the search\n" +" functionality." +msgstr "Lai iespējotu meklēšanu, lūdzu aktivizēt JavaScript." + +#: 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 "" +"Šeit Jūs varat meklēt šajos dokumentos. Norādiet meklējamus vārdus\n" +" ievada lauka un uzklikšķiniet pogu \"meklēt\". Lūdzu ievērojiet,\n" +" ka meklēšanas programma atradīs tikai tos dokumentus, kuros ir\n" +" visi ievadītie vārdi. Dokumenti, kuros ir tikai daļa no ievadītiem\n" +" vārdiem, netiks atlasīti." + +#: sphinx/themes/basic/search.html:36 +msgid "search" +msgstr "meklēt" + +#: sphinx/themes/basic/search.html:40 +msgid "Search Results" +msgstr "Atlases rezultāti" + +#: sphinx/themes/basic/search.html:42 +msgid "Your search did not match any results." +msgstr "Nav rezultātu, atbilstošu Jūsu atlasei." + +#: sphinx/themes/basic/searchbox.html:12 +msgid "Quick search" +msgstr "Ātra meklēšana" + +#: sphinx/themes/basic/sourcelink.html:11 +msgid "This Page" +msgstr "Šī lappuse" + +#: 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 "Izmaiņas versijā %(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 "Automātiski sagatavots izmaiņu saraksts versijai %(version)s" + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "Bibliotēkas izmaiņas" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "Izmaiņas iekš C API" + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "Citas izmaiņas" + +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504 +#: sphinx/writers/html.py:510 +msgid "Permalink to this headline" +msgstr "Pastāvīga norāde šo virsrakstu" + +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92 +msgid "Permalink to this definition" +msgstr "Pastāvīga norāde uz šo definīciju" + +#: sphinx/themes/basic/static/doctools.js:189 +msgid "Hide Search Matches" +msgstr "Paslēpt atlases vārdus" + +#: sphinx/themes/default/static/sidebar.js:69 +msgid "Expand sidebar" +msgstr "Izplest sānjoslu" + +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 +msgid "Collapse sidebar" +msgstr "Savērst sānjoslu" + +#: sphinx/themes/haiku/layout.html:26 +msgid "Contents" +msgstr "Saturs" + +#: sphinx/writers/latex.py:177 +msgid "Release" +msgstr "Izlaidums" + +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 +msgid "Footnotes" +msgstr "Vēres" + +#: sphinx/writers/latex.py:676 +msgid "continued from previous page" +msgstr "turpinājums no iepriekšējās lappuses" + +#: sphinx/writers/latex.py:681 +msgid "Continued on next page" +msgstr "Turpnājums nākošā lappusē" + +#: sphinx/writers/text.py:437 +msgid "[image]" +msgstr "[attēls]" + diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.js b/sphinx/locale/ne/LC_MESSAGES/sphinx.js new file mode 100644 index 00000000..d45d217e --- /dev/null +++ b/sphinx/locale/ne/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "ne", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "\u0916\u094b\u091c\u0947\u0915\u094b \u0928\u0924\u093f\u091c\u093e\u0939\u0930\u0941 \u0932\u0941\u0915\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "Permalink to this definition": "\u092f\u094b \u0905\u0930\u094d\u0925\u0915\u094b \u0932\u093e\u0917\u093f \u092a\u0930\u094d\u092e\u093e\u0932\u093f\u0928\u094d\u0915", "Expand sidebar": "\u0938\u093e\u0907\u0921\u092c\u0930 \u0920\u0941\u0932\u094b \u092c\u0928\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d", "Permalink to this headline": "\u092f\u094b \u0936\u093f\u0930\u094d\u0937\u0915\u0915\u094b \u0932\u093e\u0917\u093f \u092a\u0930\u094d\u092e\u093e\u0932\u093f\u0928\u094d\u0915 \u0964 ", "Collapse sidebar": "\u0938\u093e\u0907\u0921\u092c\u0930 \u0938\u093e\u0928\u094b \u092c\u0928\u093e\u0909\u0928\u0941\u0939\u094b\u0938\u094d"}});
\ No newline at end of file diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.mo b/sphinx/locale/ne/LC_MESSAGES/sphinx.mo Binary files differnew file mode 100644 index 00000000..05be753d --- /dev/null +++ b/sphinx/locale/ne/LC_MESSAGES/sphinx.mo diff --git a/sphinx/locale/ne/LC_MESSAGES/sphinx.po b/sphinx/locale/ne/LC_MESSAGES/sphinx.po new file mode 100644 index 00000000..5cb11e20 --- /dev/null +++ b/sphinx/locale/ne/LC_MESSAGES/sphinx.po @@ -0,0 +1,768 @@ +# Nepali (Nepal) translations for Sphinx. +# Copyright (C) 2011 ORGANIZATION +# This file is distributed under the same license as the Sphinx project. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Sphinx 1.1pre/47a94f723e80+\n" +"Report-Msgid-Bugs-To: sharma.arati11@gmail.com\n" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-09-21 10:13+0200\n" +"Last-Translator: Tika Karki <tikaraj.karki@olenepal.org>\n" +"Language-Team: ne_NP <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.6\n" + +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 +#, python-format +msgid "%B %d, %Y" +msgstr "%B %d, %Y" + +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "%s हेर्नुहोस्" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "%s पनि हेर्नुहोस् " + +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 +msgid "Builtins" +msgstr "बिइल्टिन्स" + +#: sphinx/builders/changes.py:75 +msgid "Module level" +msgstr "मडुलको तह" + +#: sphinx/builders/html.py:274 +#, python-format +msgid "%b %d, %Y" +msgstr "%b %d, %Y" + +#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "सामान्य अनुसुची" + +#: sphinx/builders/html.py:293 +msgid "index" +msgstr "अनुसुची" + +#: sphinx/builders/html.py:353 +msgid "next" +msgstr "पछिल्लो" + +#: sphinx/builders/html.py:362 +msgid "previous" +msgstr "अघिल्लो" + +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 +msgid " (in " +msgstr "(in" + +#: sphinx/directives/other.py:136 +msgid "Section author: " +msgstr "सेक्सनको लेखक" + +#: sphinx/directives/other.py:138 +msgid "Module author: " +msgstr "मडुलको लेखक" + +#: sphinx/directives/other.py:140 +msgid "Code author: " +msgstr "Codeको लेखक " + +#: sphinx/directives/other.py:142 +msgid "Author: " +msgstr "लेखक" + +#: sphinx/directives/other.py:215 +msgid "See also" +msgstr "पनि हेर्नुहोस" + +#: sphinx/domains/__init__.py:244 +#, python-format +msgid "%s %s" +msgstr "%s %s" + +#: sphinx/domains/c.py:51 sphinx/domains/python.py:95 +msgid "Parameters" +msgstr "Parameters" + +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128 +#: sphinx/domains/python.py:107 +msgid "Returns" +msgstr "Returns" + +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 +msgid "Return type" +msgstr "Return type" + +#: sphinx/domains/c.py:141 +#, python-format +msgid "%s (C function)" +msgstr "%s (C कार्य)" + +#: sphinx/domains/c.py:143 +#, python-format +msgid "%s (C member)" +msgstr "%s (C सदस्य)" + +#: sphinx/domains/c.py:145 +#, python-format +msgid "%s (C macro)" +msgstr "%s (C बृहत)" + +#: sphinx/domains/c.py:147 +#, python-format +msgid "%s (C type)" +msgstr "%s (C किसिम)" + +#: sphinx/domains/c.py:149 +#, python-format +msgid "%s (C variable)" +msgstr "%s (C चल)" + +#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 +msgid "function" +msgstr "फन्क्सन" + +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 +msgid "member" +msgstr "सदस्य" + +#: sphinx/domains/c.py:206 +msgid "macro" +msgstr "बृहत" + +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 +msgid "type" +msgstr "किसिम" + +#: sphinx/domains/c.py:208 +msgid "variable" +msgstr "चल" + +#: sphinx/domains/cpp.py:904 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (C++ कक्षा)" + +#: sphinx/domains/cpp.py:919 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (C++ किसिम)" + +#: sphinx/domains/cpp.py:938 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (C++ सदस्य)" + +#: sphinx/domains/cpp.py:990 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (C++कार्य)" + +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 +msgid "class" +msgstr "कक्षा" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 +#, python-format +msgid "%s() (built-in function)" +msgstr "%s() (built-in function)" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (%s विधी)" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (कक्षा)" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "%s (global variable or constant)" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (%s attribute)" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "Arguments" + +#: sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "Throws" + +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 +msgid "data" +msgstr "data" + +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 +msgid "attribute" +msgstr "attribute" + +#: sphinx/domains/python.py:100 +msgid "Variables" +msgstr "चलहरू" + +#: sphinx/domains/python.py:104 +msgid "Raises" +msgstr "Raises" + +#: sphinx/domains/python.py:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 +#, python-format +msgid "%s() (in module %s)" +msgstr "%s() (in मडुल %s)" + +#: sphinx/domains/python.py:258 +#, python-format +msgid "%s (built-in variable)" +msgstr "%s (built-in चल)" + +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 +#, python-format +msgid "%s (in module %s)" +msgstr "%s (in मडुल %s)" + +#: sphinx/domains/python.py:275 +#, python-format +msgid "%s (built-in class)" +msgstr "%s (built-in कक्षा)" + +#: sphinx/domains/python.py:276 +#, python-format +msgid "%s (class in %s)" +msgstr "%s (कक्षा in %s)" + +#: sphinx/domains/python.py:316 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "%s() (%s.%s विधी)" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "%s() (%s.%s static विधी)" + +#: sphinx/domains/python.py:331 +#, python-format +msgid "%s() (%s static method)" +msgstr "%s() (%s static विधी)" + +#: sphinx/domains/python.py:341 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "%s() (%s.%s कक्षा विधी)" + +#: sphinx/domains/python.py:344 +#, python-format +msgid "%s() (%s class method)" +msgstr "%s() (%s कक्षा विधी)" + +#: sphinx/domains/python.py:354 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "%s (%s.%s attribute)" + +#: sphinx/domains/python.py:434 +#, python-format +msgid "%s (module)" +msgstr "%s (मडुल)" + +#: sphinx/domains/python.py:491 +msgid "Python Module Index" +msgstr "Python Module Index" + +#: sphinx/domains/python.py:492 +msgid "modules" +msgstr "modules" + +#: sphinx/domains/python.py:537 +msgid "Deprecated" +msgstr "Deprecated" + +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 +msgid "exception" +msgstr "अपबाद" + +#: sphinx/domains/python.py:563 +msgid "method" +msgstr "विधी" + +#: sphinx/domains/python.py:564 +msgid "class method" +msgstr "कक्षा विधी" + +#: sphinx/domains/python.py:565 +msgid "static method" +msgstr "static विधी" + +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 +msgid "module" +msgstr "मडुल" + +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr "(deprecated)" + +#: sphinx/domains/rst.py:55 +#, python-format +msgid "%s (directive)" +msgstr "%s (निर्देशिक)" + +#: sphinx/domains/rst.py:57 +#, python-format +msgid "%s (role)" +msgstr "%s (भूमिका)" + +#: sphinx/domains/rst.py:106 +msgid "directive" +msgstr "निर्देशिक" + +#: sphinx/domains/rst.py:107 +msgid "role" +msgstr "भूमिका" + +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 +#, python-format +msgid "environment variable; %s" +msgstr "environment variable; %s" + +#: sphinx/domains/std.py:162 +#, python-format +msgid "%scommand line option; %s" +msgstr "%scommand line option; %s" + +#: sphinx/domains/std.py:393 +msgid "glossary term" +msgstr "शब्द-अर्थमा भएको" + +#: sphinx/domains/std.py:394 +msgid "grammar token" +msgstr "grammar token" + +#: sphinx/domains/std.py:395 +msgid "reference label" +msgstr "सन्दर्व सामग्री" + +#: sphinx/domains/std.py:396 +msgid "environment variable" +msgstr "environment variable" + +#: sphinx/domains/std.py:397 +msgid "program option" +msgstr "कार्यक्रमका बिकल्प" + +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 +msgid "Index" +msgstr "अनुसुची" + +#: sphinx/domains/std.py:428 +msgid "Module Index" +msgstr "मडुल अनुसुची" + +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "पानामा खोज्नुहोस्" + +#: sphinx/ext/autodoc.py:1002 +#, python-format +msgid " Bases: %s" +msgstr "Bases: %s" + +#: sphinx/ext/autodoc.py:1038 +#, python-format +msgid "alias of :class:`%s`" +msgstr "alias of :class:`%s`" + +#: sphinx/ext/todo.py:41 +msgid "Todo" +msgstr "Todo" + +#: sphinx/ext/todo.py:109 +#, python-format +msgid "(The <<original entry>> is located in %s, line %d.)" +msgstr "(<<original entry>> यहाँ %s, line %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 "[docs]" + +#: sphinx/ext/viewcode.py:131 +msgid "Module code" +msgstr "Module code" + +#: sphinx/ext/viewcode.py:137 +#, python-format +msgid "<h1>Source code for %s</h1>" +msgstr "<h1>Source code for %s</h1>" + +#: sphinx/ext/viewcode.py:164 +msgid "Overview: module code" +msgstr "पुनरावलोकन: module code" + +#: sphinx/ext/viewcode.py:165 +msgid "<h1>All modules for which code is available</h1>" +msgstr "<h1>All modules for which code is available</h1>" + +#: sphinx/locale/__init__.py:155 +msgid "Attention" +msgstr "ध्यानाकर्षण" + +#: sphinx/locale/__init__.py:156 +msgid "Caution" +msgstr "होसियार " + +#: sphinx/locale/__init__.py:157 +msgid "Danger" +msgstr "खतरा" + +#: sphinx/locale/__init__.py:158 +msgid "Error" +msgstr "गलत" + +#: sphinx/locale/__init__.py:159 +msgid "Hint" +msgstr "सङ्केत" + +#: sphinx/locale/__init__.py:160 +msgid "Important" +msgstr "जरुरी" + +#: sphinx/locale/__init__.py:161 +msgid "Note" +msgstr "टिप्पणी" + +#: sphinx/locale/__init__.py:162 +msgid "See Also" +msgstr "पनि हेर्नुहोस्" + +#: sphinx/locale/__init__.py:163 +msgid "Tip" +msgstr "Tip" + +#: sphinx/locale/__init__.py:164 +msgid "Warning" +msgstr "साबधान" + +#: sphinx/locale/__init__.py:168 +#, python-format +msgid "New in version %s" +msgstr "भर्सन %s मा नयाँ" + +#: sphinx/locale/__init__.py:169 +#, python-format +msgid "Changed in version %s" +msgstr "भर्सन %s मा बदलिएको" + +#: sphinx/locale/__init__.py:170 +#, python-format +msgid "Deprecated since version %s" +msgstr "Deprecated since version %s" + +#: sphinx/locale/__init__.py:176 +msgid "keyword" +msgstr "मुख्य शब्द" + +#: sphinx/locale/__init__.py:177 +msgid "operator" +msgstr "सन्चालक" + +#: sphinx/locale/__init__.py:178 +msgid "object" +msgstr "object" + +#: sphinx/locale/__init__.py:180 +msgid "statement" +msgstr "भनाई" + +#: sphinx/locale/__init__.py:181 +msgid "built-in function" +msgstr "built-in फन्क्सन" + +#: 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:137 +#: 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:20 +msgid "Indices and tables:" +msgstr "इन्डीसीस्स र तलिका" + +#: sphinx/themes/basic/defindex.html:23 +msgid "Complete Table of Contents" +msgstr "पुरा विषयसूची" + +#: sphinx/themes/basic/defindex.html:24 +msgid "lists all sections and subsections" +msgstr "सबै सेक्सन र सवसेक्सन देखाउनुहोस्" + +#: sphinx/themes/basic/defindex.html:26 +msgid "search this documentation" +msgstr "यो डकुमेन्ट खोज्नुहोस्" + +#: 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:31 +msgid "all functions, classes, terms" +msgstr "सबै फन्क्सनस्, कक्षाहरू र टर्मस्" + +#: sphinx/themes/basic/genindex-single.html:35 +#, python-format +msgid "Index – %(key)s" +msgstr "Index – %(key)s" + +#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:74 +msgid "Full index on one page" +msgstr "पुरा अनुसुची एकै पानामा" + +#: sphinx/themes/basic/genindex-split.html:16 +msgid "Index pages by letter" +msgstr "अक्षर अनुसार अनुसुचीका पाना" + +#: sphinx/themes/basic/genindex-split.html:25 +msgid "can be huge" +msgstr "धेरै ठुलो हुन सक्छ" + +#: sphinx/themes/basic/layout.html:29 +msgid "Navigation" +msgstr "नेभिगेसन " + +#: sphinx/themes/basic/layout.html:122 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "भित्र-भित्रै खोज्नुहोस्" + +#: sphinx/themes/basic/layout.html:131 +msgid "About these documents" +msgstr "यी डकुमेन्टहरुको बारेमा" + +#: sphinx/themes/basic/layout.html:140 +msgid "Copyright" +msgstr "कपिराइट " + +#: sphinx/themes/basic/layout.html:189 +#, 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:191 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "यो भन्दा अगाडी %(last_updated)s मा अपडेट भएको" + +#: sphinx/themes/basic/layout.html:198 +#, 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/themes/basic/opensearch.xml:4 +#, python-format +msgid "Search %(docstitle)s" +msgstr "खोज्नुहोस्" + +#: 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." +msgstr "खोज्ने कार्य आगाडी बढाउनको लागि जाभास्कृप्ट चलाईदिनुहोस " + +#: 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 "" +"यहाँबाट तपाईंले यी ड्कुमेन्टहरु खोज्नसक्नु हुन्छ । खोज्न शब्दहरु\n" +"तलको बक्समा लेख्नुहोस र \"खोज्नुहोस्\"थिच्नुहोस । खोज्नुहोस्\n" +"फन्क्सनले आफै सबै शब्दहरु खोज्छ । \n" +"थोरै शब्दहरु भएको पानाहरु नतिजामा देखिन्न । " + +#: sphinx/themes/basic/search.html:36 +msgid "search" +msgstr "खोज्नुहोस्" + +#: sphinx/themes/basic/search.html:40 +msgid "Search Results" +msgstr "खोजेको नतिजा" + +#: 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 +msgid "Changes in Version %(version)s — %(docstitle)s" +msgstr "%(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 "भर्सन %(version)s मा भएका फरक हरु आफै जेनेरेट भए " + +#: sphinx/themes/basic/changes/versionchanges.html:18 +msgid "Library changes" +msgstr "लाईब्रेरीका परिवर्तनहरु" + +#: sphinx/themes/basic/changes/versionchanges.html:23 +msgid "C API changes" +msgstr "C API का परिवर्तनहरु " + +#: sphinx/themes/basic/changes/versionchanges.html:25 +msgid "Other changes" +msgstr "अरु परिवर्तनहरु " + +#: sphinx/themes/basic/static/doctools.js:154 sphinx/writers/html.py:504 +#: sphinx/writers/html.py:510 +msgid "Permalink to this headline" +msgstr "यो शिर्षकको लागि पर्मालिन्क । " + +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92 +msgid "Permalink to this definition" +msgstr "यो अर्थको लागि पर्मालिन्क" + +#: sphinx/themes/basic/static/doctools.js:189 +msgid "Hide Search Matches" +msgstr "खोजेको नतिजाहरु लुकाउनुहोस्" + +#: sphinx/themes/default/static/sidebar.js:69 +msgid "Expand sidebar" +msgstr "साइडबर ठुलो बनाउनुहोस्" + +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 +msgid "Collapse sidebar" +msgstr "साइडबर सानो बनाउनुहोस्" + +#: sphinx/themes/haiku/layout.html:26 +msgid "Contents" +msgstr "विषयसूची" + +#: sphinx/writers/latex.py:177 +msgid "Release" +msgstr "रीलीज" + +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 +msgid "Footnotes" +msgstr "फूट्नोट्स" + +#: sphinx/writers/latex.py:676 +msgid "continued from previous page" +msgstr "अघिल्लो पानासँग जोडीएको" + +#: sphinx/writers/latex.py:681 +msgid "Continued on next page" +msgstr "अर्को पानासँग जोडीएको" + +#: sphinx/writers/text.py:437 +msgid "[image]" +msgstr "[चित्र]" + diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.js b/sphinx/locale/nl/LC_MESSAGES/sphinx.js index e21ff948..e33900af 100644 --- a/sphinx/locale/nl/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/nl/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "nl", "plural_expr": "(n != 1)", "messages": {"Search Results": "Zoekresultaten", "Preparing search...": "Het zoeken wordt voorbereid...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Uw zoekopdracht leverde geen resultaten op. Controleer of alle woorden correct gespeld zijn en dat u genoeg categori\u00ebn hebt geselecteerd.", "Search finished, found %s page(s) matching the search query.": "Zoeken voltooid, %s pagina(s) gevonden.", ", in ": ", in ", "Expand sidebar": "", "Permalink to this headline": "Permalink naar deze titel", "Searching": "Zoeken", "Collapse sidebar": "", "Permalink to this definition": "Permalink naar deze definitie", "Hide Search Matches": "Zoekresultaten verbergen"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "nl", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "Zoekresultaten verbergen", "Permalink to this definition": "Permalink naar deze definitie", "Expand sidebar": "", "Permalink to this headline": "Permalink naar deze titel", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/nl/LC_MESSAGES/sphinx.mo b/sphinx/locale/nl/LC_MESSAGES/sphinx.mo Binary files differindex 2002607f..05ee5662 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..473baadc 100644 --- a/sphinx/locale/nl/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/nl/LC_MESSAGES/sphinx.po @@ -6,412 +6,406 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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.6\n" -#: sphinx/environment.py:106 -#: sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "%s %s documentatie" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d. %B %Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "zie %s" + +#: sphinx/environment.py:1628 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "see also %s" +msgstr "zie %s" -#: sphinx/builders/changes.py:72 +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Builtins" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Moduleniveau" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Algemene index" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "Index" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "volgende" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "vorige" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Auteur van deze sectie: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Auteur van deze module: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "Auteur van deze module: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Auteur: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Zie ook" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Returns" -#: sphinx/domains/c.py:56 -#: sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Return type" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C-functie)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C member)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C-macro)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C type)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "functie" -#: sphinx/domains/c.py:172 -#: sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "member" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:174 -#: sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "type" -#: sphinx/domains/c.py:175 -#, fuzzy +#: sphinx/domains/c.py:208 msgid "variable" msgstr "variabele" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ klasse)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ type)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ member)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ functie)" -#: sphinx/domains/cpp.py:1030 -#: sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "klasse" -#: sphinx/domains/javascript.py:117 -#: sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s methode)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (klasse)" + +#: sphinx/domains/javascript.py:111 #, 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:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s attribuut)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "Parameters" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 -#: sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 -#: sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "attribuut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "Variabele" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (in module %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (in module %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (geïntegreerde klasse)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (klasse in %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s methode)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statische methode)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statische methode)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s methode)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s methode)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s attribuut)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Platformen: " - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (module)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "Module-index" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "modules" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Verouderd" -#: sphinx/domains/python.py:500 -#: sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "exceptie" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 msgid "class method" -msgstr "%s() (%s methode)" +msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "statische methode" -#: sphinx/domains/python.py:505 -#: sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "module" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +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)" +msgstr "%s (rolle)" -#: 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" +msgstr "rolle" -#: sphinx/domains/std.py:68 -#: sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "omgevingsvariabele; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%sopdrachtregel optie; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "omgevingsvariabele" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 -#: sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Index" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Module-index" -#: sphinx/domains/std.py:362 -#: sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Zoekpagina" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -429,132 +423,125 @@ 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 -#, fuzzy +#: sphinx/ext/viewcode.py:131 msgid "Module code" -msgstr "module" +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 "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:176 msgid "keyword" msgstr "trefwoord" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "object" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "statement" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 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:137 +#: 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" @@ -590,15 +577,15 @@ msgstr "sneltoegang naar alle modules" msgid "all functions, classes, terms" msgstr "alle functies, klasses en begrippen" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Index – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Volledige index op een pagina" @@ -610,42 +597,46 @@ msgstr "Index pagineerd per letter" msgid "can be huge" msgstr "kan heel groot zijn" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navigatie" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Zoeken in %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "Over deze documenten" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Laatste aanpassing op %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, 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 +659,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 +673,21 @@ 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 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 +727,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Permalink naar deze definitie" @@ -750,33 +740,12 @@ msgstr "Permalink naar deze definitie" msgid "Hide Search Matches" msgstr "Zoekresultaten verbergen" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Zoeken" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Het zoeken wordt voorbereid..." - -#: sphinx/themes/basic/static/searchtools.js:364 -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:493 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "Zoeken voltooid, %s pagina(s) gevonden." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -784,33 +753,24 @@ msgstr "" msgid "Contents" msgstr "Inhoud" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Release" -#: sphinx/writers/latex.py:572 -#: sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "Voetnoten" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "Vervolgd van vorige pagina" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" msgstr "Vervolgd op volgende pagina" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 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.js b/sphinx/locale/pl/LC_MESSAGES/sphinx.js index 5823053f..6a3f5f31 100644 --- a/sphinx/locale/pl/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "pl", "plural_expr": "(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Search Results": "Wyniki wyszukiwania", "Preparing search...": "Przygotowanie wyszukiwania...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Nie znaleziono \u017cadnych pasuj\u0105cych dokument\u00f3w. Upewnij si\u0119, \u017ce wszystkie s\u0142owa s\u0105 poprawnie wpisane i \u017ce wybra\u0142e\u015b wystarczaj\u0105c\u0105liczb\u0119 kategorii.", "Search finished, found %s page(s) matching the search query.": "Przeszukiwanie zako\u0144czone, znaleziono %s pasuj\u0105cych stron.", ", in ": ", w ", "Expand sidebar": "", "Permalink to this headline": "Sta\u0142y odno\u015bnik do tego nag\u0142\u00f3wka", "Searching": "Wyszukiwanie", "Collapse sidebar": "", "Permalink to this definition": "Sta\u0142y odno\u015bnik do tej definicji", "Hide Search Matches": "Ukryj wyniki wyszukiwania"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "pl", "plural_expr": "(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "Ukryj wyniki wyszukiwania", "Permalink to this definition": "Sta\u0142y odno\u015bnik do tej definicji", "Expand sidebar": "Rozwi\u0144 pasek boczny", "Permalink to this headline": "Sta\u0142y odno\u015bnik do tego nag\u0142\u00f3wka", "Collapse sidebar": "Zwi\u0144 pasek boczny"}});
\ No newline at end of file diff --git a/sphinx/locale/pl/LC_MESSAGES/sphinx.mo b/sphinx/locale/pl/LC_MESSAGES/sphinx.mo Binary files differindex 3c6105cd..bdceda43 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..957d23e9 100644 --- a/sphinx/locale/pl/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/pl/LC_MESSAGES/sphinx.po @@ -3,505 +3,516 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-09-21 10:14+0200\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%B %d %Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, fuzzy, python-format +msgid "see %s" +msgstr "zobacz %s" + +#: sphinx/environment.py:1628 +#, fuzzy, python-format +msgid "see also %s" +msgstr "zobacz także %s" + +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Wbudowane" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Poziom modułu" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Indeks ogólny" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "indeks" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "dalej" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "wstecz" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr " (w " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Autor rozdziału: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Autor modułu: " -#: sphinx/directives/other.py:131 -#, fuzzy +#: sphinx/directives/other.py:140 msgid "Code author: " -msgstr "Autor modułu: " +msgstr "Autor kodu: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Autor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Zobacz także" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Zwraca" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Typ zwracany" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (funkcja C)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (pole C)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (makro C)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (typ C)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "funkcja" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "pole" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" -msgstr "" +msgstr "makro" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "typ" -#: sphinx/domains/c.py:175 -#, fuzzy +#: sphinx/domains/c.py:208 msgid "variable" -msgstr "Zmienna" +msgstr "zmienna" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" -msgstr "%s (klasie C++)" +msgstr "%s (klasa C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (typ C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (pole C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (funkcja C++)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" -msgstr "klasie" +msgstr "klasa" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metoda)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (klasa)" + +#: sphinx/domains/javascript.py:111 #, 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:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atrybut)" -#: sphinx/domains/javascript.py:131 -#, fuzzy +#: sphinx/domains/javascript.py:122 msgid "Arguments" -msgstr "Parametry" +msgstr "Argumenty" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" -msgstr "" +msgstr "Wyrzuca" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" -msgstr "" +msgstr "dane" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "atrybut" -#: sphinx/domains/python.py:53 -#, fuzzy +#: sphinx/domains/python.py:100 msgid "Variables" -msgstr "Zmienna" +msgstr "Zmienne" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (w module %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (w module %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (klasa wbudowana)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, 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:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, 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:331 #, python-format msgid "%s() (%s static method)" -msgstr "%s() (%s statyczna metoda)" +msgstr "%s() (%s metoda statyczna)" -#: sphinx/domains/python.py:308 -#, fuzzy, python-format +#: sphinx/domains/python.py:341 +#, python-format msgid "%s() (%s.%s class method)" -msgstr "%s() (%s.%s metoda)" +msgstr "%s() (%s.%s metoda klasy)" -#: sphinx/domains/python.py:311 -#, fuzzy, python-format +#: sphinx/domains/python.py:344 +#, 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:354 #, python-format msgid "%s (%s.%s attribute)" -msgstr "%s (%s.%s atrybut)" - -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Platformy: " +msgstr "%s (atrybut %s.%s)" -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (moduł)" -#: sphinx/domains/python.py:429 -#, fuzzy +#: sphinx/domains/python.py:491 msgid "Python Module Index" -msgstr "Indeks modułów" +msgstr "Indeks modułów pythona" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "moduły" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Niezalecane" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "wyjątek" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" -msgstr "" +msgstr "metoda" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 msgid "class method" -msgstr "%s() (%s metoda)" +msgstr "metoda klasy" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "statyczna metoda" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "moduł" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr " (niezalecane)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" -msgstr "" +msgstr "%s (dyrektywa)" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, 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 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "moduł" +msgstr "rola" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "zmienna środowiskowa; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%sopcja linii komend; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" -msgstr "" +msgstr "termin glosariusza" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" -msgstr "" +msgstr "symbol gramatyki" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" -msgstr "" +msgstr "etykieta odsyłacza" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "zmienna środowiskowa" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" -msgstr "" +msgstr "opcja programu" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Indeks" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Indeks modułów" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Wyszukiwanie" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " Klasy bazowe: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, 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 +#, 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 -#, fuzzy +#: sphinx/ext/viewcode.py:131 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:176 msgid "keyword" msgstr "słowo kluczowe" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "obiekt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "instrukcja" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "funkcja wbudowana" @@ -510,8 +521,8 @@ msgstr "funkcja wbudowana" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Szukaj" @@ -541,15 +552,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" @@ -559,15 +570,15 @@ msgstr "szybki dostęp do wszystkich modułów" msgid "all functions, classes, terms" msgstr "wszystkie funkcje, klasy, terminy" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Indeks – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Cały indeks na jednej stronie" @@ -579,39 +590,39 @@ msgstr "Strony indeksu alfabetycznie" msgid "can be huge" msgstr "może być ogromny" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Nawigacja" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Szukaj pośród %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "O tych dokumentach" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Ostatnia modyfikacja %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -641,13 +652,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 +672,15 @@ 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 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 +720,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Stały odnośnik do tej definicji" @@ -723,73 +733,37 @@ msgstr "Stały odnośnik do tej definicji" msgid "Hide Search Matches" msgstr "Ukryj wyniki wyszukiwania" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Wyszukiwanie" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Przygotowanie wyszukiwania..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr ", w " - -#: 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 "" -"Nie znaleziono żadnych pasujących dokumentów. Upewnij się, że wszystkie " -"słowa są poprawnie wpisane i że wybrałeś wystarczającąliczbę kategorii." - -#: sphinx/themes/basic/static/searchtools.js:493 -#, 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 +#: sphinx/themes/default/static/sidebar.js:69 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:82 +#: sphinx/themes/default/static/sidebar.js:110 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:177 msgid "Release" msgstr "Wydanie" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "Przypisy" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "kontynuacja poprzedniej strony" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" msgstr "Kontynuacja na następnej stronie" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 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.js b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js index 312d0fc7..288c9692 100644 --- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "pt_BR", "plural_expr": "(n > 1)", "messages": {"Search Results": "Resultados da Pesquisa", "Preparing search...": "Preparando pesquisa...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Sua pesquisa n\u00e3o encontrou nenhum documento. Por favor assegure-se de que todas as palavras foram digitadas corretamente e de que voc\u00ea tenha selecionado o m\u00ednimo de categorias.", "Search finished, found %s page(s) matching the search query.": "Pesquisa finalizada, foram encontrada(s) %s p\u00e1gina(s) que conferem com o crit\u00e9rio de pesquisa.", ", in ": ", em ", "Expand sidebar": "Expandir painel lateral", "Permalink to this headline": "Link permanente para este t\u00edtulo", "Searching": "Pesquisando", "Collapse sidebar": "Recolher painel lateral", "Permalink to this definition": "Link permanente para esta defini\u00e7\u00e3o", "Hide Search Matches": "Esconder Resultados da Pesquisa"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "pt_BR", "plural_expr": "(n > 1)", "messages": {"Hide Search Matches": "Esconder Resultados da Pesquisa", "Permalink to this definition": "Link permanente para esta defini\u00e7\u00e3o", "Expand sidebar": "Expandir painel lateral", "Permalink to this headline": "Link permanente para este t\u00edtulo", "Collapse sidebar": "Recolher painel lateral"}});
\ No newline at end of file diff --git a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo Binary files differindex 67c1ce54..3016d5ef 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..b41b5ad1 100644 --- a/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po @@ -7,406 +7,401 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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.6\n" -#: sphinx/environment.py:106 -#: sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, fuzzy, python-format +msgid "%s %s documentation" +msgstr "%s %s documentação" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d/%m/%Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, fuzzy, python-format +msgid "see %s" +msgstr "veja %s" + +#: sphinx/environment.py:1628 +#, fuzzy, python-format +msgid "see also %s" +msgstr "veja também %s" + +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Internos" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Módulo" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Índice Geral" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "índice" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "próximo" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "anterior" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr " (em " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Autor da seção: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Autor do módulo: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 msgid "Code author: " msgstr "Autor do código: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Autor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Veja também" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Retorna" -#: sphinx/domains/c.py:56 -#: sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Tipo de retorno" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (função C)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (membro C)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (macro C)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (tipo C)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "função" -#: sphinx/domains/c.py:172 -#: sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "membro" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "macro" -#: sphinx/domains/c.py:174 -#: sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "tipo" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 msgid "variable" msgstr "variável" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (classe C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (tipo C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (membro C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, 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:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "classe" -#: sphinx/domains/javascript.py:117 -#: sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (método %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (classe)" + +#: sphinx/domains/javascript.py:111 #, 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:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (atributo %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 msgid "Arguments" msgstr "Parâmetros" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Gera" -#: sphinx/domains/javascript.py:167 -#: sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "dado" -#: sphinx/domains/javascript.py:168 -#: sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "atributo" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 msgid "Variables" msgstr "Variáveis" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (no módulo %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (no módulo %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (classe interna)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (classe em %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (método %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, 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:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (método estático %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, 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:344 #, python-format msgid "%s() (%s class method)" msgstr "%s() (método de classe %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (atributo %s.%s)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Plataformas: " - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (módulo)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 msgid "Python Module Index" msgstr "Índice de Módulos do Python" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "módulos" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Obsoleto" -#: sphinx/domains/python.py:500 -#: sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "exceção" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "método" -#: sphinx/domains/python.py:502 -#, python-format +#: sphinx/domains/python.py:564 msgid "class method" msgstr "método de classe" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "método estático" -#: sphinx/domains/python.py:505 -#: sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "módulo" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +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:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "váriavel de ambiente; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%sopção de linha de comando; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "Termo de glossário" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "token de gramática" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "rótulo de referência" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "váriavel de ambiente" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "opção de programa" -#: sphinx/domains/std.py:360 -#: sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Índice" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Índice do Módulo" -#: sphinx/domains/std.py:362 -#: sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Página de Pesquisa" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " Bases: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "apelido de :class:`%s`" @@ -424,131 +419,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:176 msgid "keyword" msgstr "palavra-chave" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "operador" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "objeto" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "comando" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 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:137 +#: 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" @@ -584,15 +573,15 @@ msgstr "acesso rápido para todos os módulos" msgid "all functions, classes, terms" msgstr "todas funções, classes, termos" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Índice – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Índice completo em uma página" @@ -604,42 +593,46 @@ msgstr "Paginas de índice por letra" msgid "can be huge" msgstr "pode ser enorme" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navegação" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Pesquisar dentro de %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "Sobre estes documentos" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Última atualização em %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, 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 +655,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 +669,21 @@ 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 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 +723,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Link permanente para esta definição" @@ -744,33 +736,12 @@ msgstr "Link permanente para esta definição" msgid "Hide Search Matches" msgstr "Esconder Resultados da Pesquisa" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Pesquisando" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Preparando pesquisa..." - -#: sphinx/themes/basic/static/searchtools.js:364 -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:493 -#, 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." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 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:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "Recolher painel lateral" @@ -778,24 +749,24 @@ msgstr "Recolher painel lateral" msgid "Contents" msgstr "Conteúdo" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Versão" -#: sphinx/writers/latex.py:572 -#: sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "Notas de rodapé" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "continuação da página anterior" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" msgstr "Continua na próxima página" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[imagem]" diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.js b/sphinx/locale/ru/LC_MESSAGES/sphinx.js index e597cfad..ca0376ac 100644 --- a/sphinx/locale/ru/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "ru", "plural_expr": "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", "messages": {"Search Results": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430", "Preparing search...": "\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u043f\u043e\u0438\u0441\u043a\u0443...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u041d\u0435\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u0430\u0448\u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u044b \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0438 \u043d\u0435\u0442 \u043b\u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435.", "Search finished, found %s page(s) matching the search query.": "\u041f\u043e\u0438\u0441\u043a \u043e\u043a\u043e\u043d\u0447\u0435\u043d, \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446: %s.", ", in ": ", \u0432 ", "Expand sidebar": "", "Permalink to this headline": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Searching": "\u041f\u043e\u0438\u0441\u043a", "Collapse sidebar": "", "Permalink to this definition": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Hide Search Matches": "\u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "ru", "plural_expr": "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", "messages": {"Hide Search Matches": "\u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Permalink to this definition": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435", "Expand sidebar": "", "Permalink to this headline": "\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/ru/LC_MESSAGES/sphinx.mo b/sphinx/locale/ru/LC_MESSAGES/sphinx.mo Binary files differindex ecdc6860..593350d3 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..b6374d81 100644 --- a/sphinx/locale/ru/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/ru/LC_MESSAGES/sphinx.po @@ -6,8 +6,8 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-09-21 10:14+0200\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,379 +15,399 @@ 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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d %B %Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "see %s" +msgstr "" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "" -#: sphinx/builders/changes.py:72 +#: sphinx/roles.py:175 +#, fuzzy, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Встроенные функции" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Модуль" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Словарь-указатель" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "словарь" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "следующий" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "предыдущий" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr " (в " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Автор секции: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Автор модуля: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "Автор модуля: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Автор: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "См.также" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Результат" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Тип результата" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (функция C)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (поле C)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (макроподстановка C)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (тип C)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "функция" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "поле" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "тип" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 #, fuzzy msgid "variable" msgstr "Переменная" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (класс C++)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (тип C++)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (поле C++)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (функция C++)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "класс" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, python-format msgid "%s() (built-in function)" msgstr "%s() (встроенная функция)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (метод %s)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (класс)" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (атрибут %s)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "Параметры" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "атрибут" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "Переменная" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (в модуле %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, python-format msgid "%s (built-in variable)" msgstr "%s (встроенная переменная)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (в модуле %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (встроенный класс)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (класс в %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (метод %s.%s)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (статический метод %s.%s)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (статический метод %s)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (метод %s.%s)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (метод %s)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (атрибут %s.%s)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Платформы: " - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (модуль)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "Состав модуля" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "модули" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Не рекомендуется" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "исключение" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 msgid "class method" -msgstr "%s() (метод %s)" +msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "статический метод" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "модуль" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +#, fuzzy +msgid " (deprecated)" +msgstr " (не рекомендуется)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, python-format msgid "%s (role)" -msgstr "%s (модуль)" +msgstr "" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "модуль" +msgstr "" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "переменная окружения; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "Опция командной строки %s; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "переменная окружения" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Алфавитный указатель" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Состав модуля" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Поиск" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " Базовые классы: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "псевдоним класса :class:`%s`" @@ -399,110 +419,110 @@ msgstr "План" #: sphinx/ext/todo.py:109 #, fuzzy, python-format msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(Исходный элемент находится в %s, в строке %d, и может быть найден " +msgstr "(Исходный элемент находится в %s, в строке %d.)" #: sphinx/ext/todo.py:117 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:176 msgid "keyword" msgstr "ключевое слово" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "оператор" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "объект" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "команда" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "базовая функция" @@ -511,8 +531,8 @@ msgstr "базовая функция" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Поиск" @@ -560,15 +580,15 @@ msgstr "сводный список всех модулей" msgid "all functions, classes, terms" msgstr "все функции, классы, переменные и константы" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Алфавитный указатель – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Полный алфавитный указатель на одной странице" @@ -580,39 +600,39 @@ msgstr "Указатели по буквам алфавита" msgid "can be huge" msgstr "может быть очень большим" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Просмотр" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Поиск в документе «%(docstitle)s»" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "Об этих документах…" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Дата последнего обновления: %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -642,13 +662,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 +681,15 @@ 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 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 +729,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Ссылка на это определение" @@ -723,37 +742,12 @@ msgstr "Ссылка на это определение" msgid "Hide Search Matches" msgstr "Снять выделение" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Поиск" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Подготовка к поиску..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr ", в " - -#: 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 "" -"Нет документов, соответствующих вашему запросу. Проверьте, правильно ли " -"выбраны категории и нет ли опечаток в запросе." - -#: sphinx/themes/basic/static/searchtools.js:493 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "Поиск окончен, найдено страниц: %s." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -761,23 +755,25 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Выпуск" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 #, fuzzy msgid "Continued on next page" msgstr "Полный алфавитный указатель на одной странице" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[рисунок]" + diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.js b/sphinx/locale/sl/LC_MESSAGES/sphinx.js index 2a2f960a..2bcb33da 100644 --- a/sphinx/locale/sl/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "sl", "plural_expr": "0", "messages": {"Search Results": "Rezultati Iskanja", "Preparing search...": "Pripravljam iskanje...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Za va\u0161e iskanje ni rezultatov. Prosimo preglejte ali so vse besede pravilno \u010drkovane in ali ste izbrali dovolj kategorij.", "Search finished, found %s page(s) matching the search query.": "Iskanje kon\u010dano, najdeno %s strani, ki ustrezajo iskalnemu nizu.", ", in ": ", v ", "Expand sidebar": "", "Permalink to this headline": "Povezava na naslov", "Searching": "I\u0161\u010dem", "Collapse sidebar": "", "Permalink to this definition": "Povezava na to definicijo", "Hide Search Matches": "Skrij resultate iskanja"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "sl", "plural_expr": "0", "messages": {"Hide Search Matches": "Skrij resultate iskanja", "Permalink to this definition": "Povezava na to definicijo", "Expand sidebar": "", "Permalink to this headline": "Povezava na naslov", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/sl/LC_MESSAGES/sphinx.mo b/sphinx/locale/sl/LC_MESSAGES/sphinx.mo Binary files differindex 21e64ffd..79f7f4eb 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..6f6e49ac 100644 --- a/sphinx/locale/sl/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/sl/LC_MESSAGES/sphinx.po @@ -3,387 +3,406 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-09-21 10:14+0200\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d %B, %Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Vgrajeni deli" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Nivo modula" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Splošni abecedni seznam" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "abecedni seznam" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "naprej" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "nazaj" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr " (v " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Avtor sekcije: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Avtor modula: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "Avtor modula: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Avtor: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Poglej Tudi" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Vrne" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Vrne tip" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C funkcija)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C član)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C makro)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C tip)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "funkcija" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "član" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "tip" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 #, fuzzy msgid "variable" msgstr "Spremenljivka" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ razred)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tip)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ član)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ funkcija)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "razred" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metoda)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (razred)" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s atribut)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "Parametri" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "atribut" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "Spremenljivka" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (v modulu %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (v modulu %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (vgrajen razred)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (razred v %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statična metoda)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statična metoda)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s metoda)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s metoda)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s atribut)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Platforme:" - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (modul)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "Seznam modulov" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "Moduli" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Zastarelo" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "izjema" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 msgid "class method" -msgstr "%s() (%s metoda)" +msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "statična metoda" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "modul" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr " (zastarelo)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, python-format msgid "%s (role)" -msgstr "%s (modul)" +msgstr "" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "modul" +msgstr "" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "okoljska spremenljivka; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%scommand line parameter; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "okoljska spremenljivka" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Abecedni seznam" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Seznam modulov" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Iskalnik" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " Baza: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "vzdevek za :class:`%s`" @@ -395,110 +414,110 @@ msgstr "Todo" #: sphinx/ext/todo.py:109 #, fuzzy, python-format msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(Originalen vnos se nahaja v %s, v vrstici %d, in ga je moč poiskati " +msgstr "(<<Originalen vnos>> se nahaja v %s, v vrstici %d.)" #: sphinx/ext/todo.py:117 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:176 msgid "keyword" msgstr "ključna beseda" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "operator" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "objekt" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "izjava" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "vgrajene funkcije" @@ -507,8 +526,8 @@ msgstr "vgrajene funkcije" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Išči" @@ -556,15 +575,15 @@ msgstr "hiter dostop do vseh modulov" msgid "all functions, classes, terms" msgstr "vse funkcije, razredi, izrazi" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Seznam – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Poln indeks na eni strani" @@ -576,39 +595,39 @@ msgstr "Indeksiraj strani po črki" msgid "can be huge" msgstr "lahko je veliko" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Navigacija" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Išči med %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "O dokumentih" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Vse pravice pridržane" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, python-format msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "© <a href=\"%(path)s\">Vse pravice pridržane</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:182 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Vse pravice pridržane %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Zadnjič posodobljeno %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -638,7 +657,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 +665,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 +677,15 @@ 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 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 +725,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Povezava na to definicijo" @@ -720,37 +738,12 @@ msgstr "Povezava na to definicijo" msgid "Hide Search Matches" msgstr "Skrij resultate iskanja" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Iščem" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Pripravljam iskanje..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr ", v " - -#: 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 "" -"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 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "Iskanje končano, najdeno %s strani, ki ustrezajo iskalnemu nizu." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -758,22 +751,24 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Izdaja" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "Opombe" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "nadaljevanje iz prejšnje strani" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" msgstr "Nadaljevanje na naslednji strani" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[slika]" + diff --git a/sphinx/locale/sphinx.pot b/sphinx/locale/sphinx.pot index 955663aa..9ddde4c2 100644 --- a/sphinx/locale/sphinx.pot +++ b/sphinx/locale/sphinx.pot @@ -1,386 +1,407 @@ # Translations template for Sphinx. -# Copyright (C) 2010 ORGANIZATION +# Copyright (C) 2011 ORGANIZATION # This file is distributed under the same license as the Sphinx project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Sphinx 1.0pre/8b971dbc7d36\n" +"Project-Id-Version: Sphinx 1.1pre/9523af9ba9aa+\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2010-05-24 23:53+0200\n" +"POT-Creation-Date: 2011-09-21 10:06+0200\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 #, python-format -msgid "Python Enhancement Proposals!PEP %s" +msgid "see %s" msgstr "" -#: sphinx/builders/changes.py:72 +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "" + +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, python-format msgid "%b %d, %Y" msgstr "" -#: sphinx/builders/html.py:285 sphinx/themes/basic/defindex.html:30 +#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "" -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "" -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 msgid "Code author: " msgstr "" -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "" -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 msgid "variable" msgstr "" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, python-format msgid "%s() (built-in function)" msgstr "" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 msgid "Arguments" msgstr "" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 msgid "Variables" msgstr "" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, python-format msgid "%s (built-in variable)" msgstr "" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, python-format msgid "%s() (%s.%s class method)" msgstr "" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, python-format msgid "%s() (%s class method)" msgstr "" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "" - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 msgid "Python Module Index" msgstr "" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 +#: sphinx/domains/python.py:564 msgid "class method" msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +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 "" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -398,103 +419,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:176 msgid "keyword" msgstr "" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "" @@ -503,8 +524,8 @@ msgstr "" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "" @@ -552,15 +573,15 @@ msgstr "" msgid "all functions, classes, terms" msgstr "" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "" @@ -572,39 +593,39 @@ msgstr "" msgid "can be huge" msgstr "" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, python-format msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:182 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "" -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -632,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 "" -#: 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 +667,15 @@ 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 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 +715,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "" @@ -708,35 +728,12 @@ msgstr "" msgid "Hide Search Matches" msgstr "" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "" - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr "" - -#: 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 "" - -#: sphinx/themes/basic/static/searchtools.js:493 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "" - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -744,23 +741,24 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" msgstr "" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" 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..15821aba --- /dev/null +++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.js @@ -0,0 +1 @@ +Documentation.addTranslations({"locale": "sv", "plural_expr": "(n != 1)", "messages": {"Hide Search Matches": "D\u00f6lj S\u00f6kresultat", "Permalink to this definition": "Permalink till denna definition", "Expand sidebar": "Expandera sidolist", "Permalink to this headline": "Permalink till denna rubrik", "Collapse sidebar": "D\u00f6lj sidolist"}});
\ 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..11b18023 --- /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..9967bdd7 --- /dev/null +++ b/sphinx/locale/sv/LC_MESSAGES/sphinx.po @@ -0,0 +1,766 @@ + +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-09-21 10:14+0200\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.6\n" + +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 +#, python-format +msgid "%B %d, %Y" +msgstr "%B %d, %Y" + +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "se %s" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "se även %s" + +#: sphinx/roles.py:175 +#, python-format +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" + +#: sphinx/builders/changes.py:73 +msgid "Builtins" +msgstr "Inbyggda" + +#: sphinx/builders/changes.py:75 +msgid "Module level" +msgstr "Modulnivå" + +#: sphinx/builders/html.py:274 +#, python-format +msgid "%b %d, %Y" +msgstr "%b %d, %Y" + +#: sphinx/builders/html.py:293 sphinx/themes/basic/defindex.html:30 +msgid "General Index" +msgstr "Huvudindex" + +#: sphinx/builders/html.py:293 +msgid "index" +msgstr "index" + +#: sphinx/builders/html.py:353 +msgid "next" +msgstr "nästa" + +#: sphinx/builders/html.py:362 +msgid "previous" +msgstr "föregående" + +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 +msgid " (in " +msgstr "(i " + +#: sphinx/directives/other.py:136 +msgid "Section author: " +msgstr "Sektionsförfattare" + +#: sphinx/directives/other.py:138 +msgid "Module author: " +msgstr "Modulförfattare" + +#: sphinx/directives/other.py:140 +msgid "Code author: " +msgstr "Källkodsförfattare" + +#: sphinx/directives/other.py:142 +msgid "Author: " +msgstr "Upphovsman:" + +#: sphinx/directives/other.py:215 +msgid "See also" +msgstr "Se även" + +#: sphinx/domains/__init__.py:244 +#, python-format +msgid "%s %s" +msgstr "%s %s" + +#: sphinx/domains/c.py:51 sphinx/domains/python.py:95 +msgid "Parameters" +msgstr "Parametrar" + +#: sphinx/domains/c.py:54 sphinx/domains/javascript.py:128 +#: sphinx/domains/python.py:107 +msgid "Returns" +msgstr "Returnerar" + +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 +msgid "Return type" +msgstr "Returtyp" + +#: sphinx/domains/c.py:141 +#, python-format +msgid "%s (C function)" +msgstr "%s (C-funktion)" + +#: sphinx/domains/c.py:143 +#, python-format +msgid "%s (C member)" +msgstr "%s (C-medlem)" + +#: sphinx/domains/c.py:145 +#, python-format +msgid "%s (C macro)" +msgstr "%s (C-makro)" + +#: sphinx/domains/c.py:147 +#, python-format +msgid "%s (C type)" +msgstr "%s (C-typ)" + +#: sphinx/domains/c.py:149 +#, python-format +msgid "%s (C variable)" +msgstr "%s (C-variabel)" + +#: sphinx/domains/c.py:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 +msgid "function" +msgstr "funktion" + +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 +msgid "member" +msgstr "medlem" + +#: sphinx/domains/c.py:206 +msgid "macro" +msgstr "makro" + +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 +msgid "type" +msgstr "typ" + +#: sphinx/domains/c.py:208 +msgid "variable" +msgstr "variabel" + +#: sphinx/domains/cpp.py:904 +#, python-format +msgid "%s (C++ class)" +msgstr "%s (C++-klass)" + +#: sphinx/domains/cpp.py:919 +#, python-format +msgid "%s (C++ type)" +msgstr "%s (C++-typ)" + +#: sphinx/domains/cpp.py:938 +#, python-format +msgid "%s (C++ member)" +msgstr "%s (C++-medlem)" + +#: sphinx/domains/cpp.py:990 +#, python-format +msgid "%s (C++ function)" +msgstr "%s (C++-funktion)" + +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 +msgid "class" +msgstr "klass" + +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 +#, python-format +msgid "%s() (built-in function)" +msgstr "%s() (inbyggd funktion)" + +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 +#, python-format +msgid "%s() (%s method)" +msgstr "%s() (%s metod)" + +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (klass)" + +#: sphinx/domains/javascript.py:111 +#, python-format +msgid "%s (global variable or constant)" +msgstr "%s (global variabel eller konstant)" + +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 +#, python-format +msgid "%s (%s attribute)" +msgstr "%s (%s attribut)" + +#: sphinx/domains/javascript.py:122 +msgid "Arguments" +msgstr "Argument" + +#: sphinx/domains/javascript.py:125 +msgid "Throws" +msgstr "Kastar" + +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 +msgid "data" +msgstr "data" + +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 +msgid "attribute" +msgstr "attribut" + +#: sphinx/domains/python.py:100 +msgid "Variables" +msgstr "Variabler" + +#: sphinx/domains/python.py:104 +msgid "Raises" +msgstr "Väcker" + +#: sphinx/domains/python.py:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 +#, python-format +msgid "%s() (in module %s)" +msgstr "%s() (i modul %s)" + +#: sphinx/domains/python.py:258 +#, python-format +msgid "%s (built-in variable)" +msgstr "%s (inbyggd variabel)" + +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 +#, python-format +msgid "%s (in module %s)" +msgstr "%s (i modul %s)" + +#: sphinx/domains/python.py:275 +#, python-format +msgid "%s (built-in class)" +msgstr "%s (inbyggd klass)" + +#: sphinx/domains/python.py:276 +#, python-format +msgid "%s (class in %s)" +msgstr "%s (klass i %s)" + +#: sphinx/domains/python.py:316 +#, python-format +msgid "%s() (%s.%s method)" +msgstr "%s() (%s.%s metod)" + +#: sphinx/domains/python.py:328 +#, python-format +msgid "%s() (%s.%s static method)" +msgstr "%s() (%s.%s statisk metod)" + +#: sphinx/domains/python.py:331 +#, python-format +msgid "%s() (%s static method)" +msgstr "%s() (%s statisk metod)" + +#: sphinx/domains/python.py:341 +#, python-format +msgid "%s() (%s.%s class method)" +msgstr "%s() (%s.%s klassmetod)" + +#: sphinx/domains/python.py:344 +#, python-format +msgid "%s() (%s class method)" +msgstr "%s() (%s klassmetod)" + +#: sphinx/domains/python.py:354 +#, python-format +msgid "%s (%s.%s attribute)" +msgstr "%s (%s.%s attribut)" + +#: sphinx/domains/python.py:434 +#, python-format +msgid "%s (module)" +msgstr "%s (modul)" + +#: sphinx/domains/python.py:491 +msgid "Python Module Index" +msgstr "Python Modulindex" + +#: sphinx/domains/python.py:492 +msgid "modules" +msgstr "moduler" + +#: sphinx/domains/python.py:537 +msgid "Deprecated" +msgstr "Ersatt" + +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 +msgid "exception" +msgstr "undantag" + +#: sphinx/domains/python.py:563 +msgid "method" +msgstr "metod" + +#: sphinx/domains/python.py:564 +msgid "class method" +msgstr "klassmetod" + +#: sphinx/domains/python.py:565 +msgid "static method" +msgstr "statisk metod" + +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 +msgid "module" +msgstr "modul" + +#: sphinx/domains/python.py:695 +#, 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:70 sphinx/domains/std.py:86 +#, python-format +msgid "environment variable; %s" +msgstr "miljövariabel; %s" + +#: sphinx/domains/std.py:162 +#, python-format +msgid "%scommand line option; %s" +msgstr "%skommandorad växel; %s" + +#: sphinx/domains/std.py:393 +msgid "glossary term" +msgstr "ordlista" + +#: sphinx/domains/std.py:394 +msgid "grammar token" +msgstr "grammatisk token" + +#: sphinx/domains/std.py:395 +msgid "reference label" +msgstr "referensetikett" + +#: sphinx/domains/std.py:396 +msgid "environment variable" +msgstr "miljövariabel" + +#: sphinx/domains/std.py:397 +msgid "program option" +msgstr "programväxel" + +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 +#: sphinx/themes/basic/genindex-split.html:11 +#: sphinx/themes/basic/genindex-split.html:14 +#: sphinx/themes/basic/genindex.html:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 +msgid "Index" +msgstr "Index" + +#: sphinx/domains/std.py:428 +msgid "Module Index" +msgstr "Modulindex" + +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 +msgid "Search Page" +msgstr "Söksida" + +#: sphinx/ext/autodoc.py:1002 +#, python-format +msgid " Bases: %s" +msgstr " Baserad: %s" + +#: sphinx/ext/autodoc.py:1038 +#, 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:176 +msgid "keyword" +msgstr "nyckelord" + +#: sphinx/locale/__init__.py:177 +msgid "operator" +msgstr "operator" + +#: sphinx/locale/__init__.py:178 +msgid "object" +msgstr "objekt" + +#: sphinx/locale/__init__.py:180 +msgid "statement" +msgstr "uttryck" + +#: sphinx/locale/__init__.py:181 +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:137 +#: 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:35 +#, python-format +msgid "Index – %(key)s" +msgstr "Index – %(key)s" + +#: sphinx/themes/basic/genindex-single.html:63 +#: sphinx/themes/basic/genindex-split.html:24 +#: sphinx/themes/basic/genindex-split.html:38 +#: sphinx/themes/basic/genindex.html:74 +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:29 +msgid "Navigation" +msgstr "Navigation" + +#: sphinx/themes/basic/layout.html:122 +#, python-format +msgid "Search within %(docstitle)s" +msgstr "Sök bland %(docstitle)s" + +#: sphinx/themes/basic/layout.html:131 +msgid "About these documents" +msgstr "Om dessa dokument" + +#: sphinx/themes/basic/layout.html:140 +msgid "Copyright" +msgstr "Copyright" + +#: sphinx/themes/basic/layout.html:189 +#, 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:191 +#, python-format +msgid "© Copyright %(copyright)s." +msgstr "© Copyright %(copyright)s." + +#: sphinx/themes/basic/layout.html:195 +#, python-format +msgid "Last updated on %(last_updated)s." +msgstr "Senast uppdaterad %(last_updated)s." + +#: sphinx/themes/basic/layout.html:198 +#, 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 +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:504 +#: sphinx/writers/html.py:510 +msgid "Permalink to this headline" +msgstr "Permalink till denna rubrik" + +#: sphinx/themes/basic/static/doctools.js:160 sphinx/writers/html.py:92 +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/default/static/sidebar.js:69 +msgid "Expand sidebar" +msgstr "Expandera sidolist" + +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 +msgid "Collapse sidebar" +msgstr "Dölj sidolist" + +#: sphinx/themes/haiku/layout.html:26 +msgid "Contents" +msgstr "Innehåll" + +#: sphinx/writers/latex.py:177 +msgid "Release" +msgstr "Utgåva" + +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 +msgid "Footnotes" +msgstr "Fotnoter" + +#: sphinx/writers/latex.py:676 +msgid "continued from previous page" +msgstr "fortsättning från föregående sida" + +#: sphinx/writers/latex.py:681 +msgid "Continued on next page" +msgstr "Fortsätter på nästa sida" + +#: sphinx/writers/text.py:437 +msgid "[image]" +msgstr "[image]" + diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.js b/sphinx/locale/tr/LC_MESSAGES/sphinx.js index 3cb91177..4ba20a32 100644 --- a/sphinx/locale/tr/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "tr", "plural_expr": "0", "messages": {"Search Results": "Arama Sonu\u00e7lar\u0131", "Preparing search...": "Aramaya haz\u0131rlan\u0131yor...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Arama sonucunda hi\u00e7bir belge bulunamad\u0131. B\u00fct\u00fcn kelimeleri do\u011fru yazd\u0131\u011f\u0131n\u0131zdan ve gereken kategorileri se\u00e7ti\u011finizden emin olun.", "Search finished, found %s page(s) matching the search query.": "Arama sonu\u00e7land\u0131, aramayla e\u015fle\u015fen %s sayfa bulundu.", ", in ": ", \u015funun i\u00e7inde: ", "Expand sidebar": "Yan \u00e7ubu\u011fu geni\u015flet", "Permalink to this headline": "Bu ba\u015fl\u0131\u011f\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "Searching": "Ar\u0131yor", "Collapse sidebar": "Yan \u00e7ubu\u011fu daralt", "Permalink to this definition": "Bu tan\u0131m\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "Hide Search Matches": "Arama Sonu\u00e7lar\u0131n\u0131 Gizle"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "tr", "plural_expr": "0", "messages": {"Hide Search Matches": "Arama Sonu\u00e7lar\u0131n\u0131 Gizle", "Permalink to this definition": "Bu tan\u0131m\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "Expand sidebar": "Yan \u00e7ubu\u011fu geni\u015flet", "Permalink to this headline": "Bu ba\u015fl\u0131\u011f\u0131n kal\u0131c\u0131 ba\u011flant\u0131s\u0131", "Collapse sidebar": "Yan \u00e7ubu\u011fu daralt"}});
\ No newline at end of file diff --git a/sphinx/locale/tr/LC_MESSAGES/sphinx.mo b/sphinx/locale/tr/LC_MESSAGES/sphinx.mo Binary files differindex 5054199c..812b7cd9 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..bf5fd568 100644 --- a/sphinx/locale/tr/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/tr/LC_MESSAGES/sphinx.po @@ -1,412 +1,407 @@ # Turkish translations for Sphinx. -# Copyright (C) 2009 ORGANIZATION +# Copyright (C) 2011 ORGANIZATION # This file is distributed under the same license as the Sphinx project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2009. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. # msgid "" msgstr "" -"Project-Id-Version: Sphinx 0.6.2+/6b02a19ccf31\n" +"Project-Id-Version: Sphinx 1.1pre/339c7a794c1a\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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-09-21 10:14+0200\n" "Last-Translator: Firat Ozgul <ozgulfirat@gmail.com>\n" -"Language-Team: Turkish <kistihza@yahoo.com>\n" +"Language-Team: tr <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.6\n" -#: sphinx/environment.py:106 -#: sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%d %B %Y" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "bkz. %s" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "ayrıca bkz. %s" + +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python'u İyileştirme Önerileri!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python'u İyileştirme Önerileri; PEP %s" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Gömülüler" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Modül düzeyi" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Genel Dizin" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "dizin" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "sonraki" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "önceki" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr " (şunun içinde: " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Bölümü yazan: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Modülü yazan: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 msgid "Code author: " msgstr "Kodu yazan: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Yazan: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Ayrıca bkz." -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" -msgstr "Şunu döndürür:" +msgstr "Dönüş değeri:" -#: sphinx/domains/c.py:56 -#: sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Dönüş tipi" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C fonksiyonu)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C öğesi)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C makrosu)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C tipi)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "fonksiyonu" -#: sphinx/domains/c.py:172 -#: sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "öğesi" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "makrosu" -#: sphinx/domains/c.py:174 -#: sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "tipi" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 msgid "variable" msgstr "değişkeni" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ sınıfı)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ tipi)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ öğesi)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ fonksiyonu)" -#: sphinx/domains/cpp.py:1030 -#: sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "sınıfı" -#: sphinx/domains/javascript.py:117 -#: sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, 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:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s metodu)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (sınıfı)" + +#: sphinx/domains/javascript.py:111 #, 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:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s niteliği)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 msgid "Arguments" msgstr "Argümanlar" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "Şunu verir: " -#: sphinx/domains/javascript.py:167 -#: sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "verisi" -#: sphinx/domains/javascript.py:168 -#: sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "niteliği" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 msgid "Variables" msgstr "Değişkenler" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (%s modülü içinde)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, 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:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (%s modülü içinde)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (gömülü sınıf)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, 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:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s metodu)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s statik metodu)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s statik metodu)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, 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:344 #, python-format msgid "%s() (%s class method)" msgstr "%s() (%s sınıf metodu)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s niteliği)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Platformlar:" - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (modül)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 msgid "Python Module Index" msgstr "Python Modül Dizini" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "modüller" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Önerilmiyor" -#: sphinx/domains/python.py:500 -#: sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "istisnası" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "metodu" -#: sphinx/domains/python.py:502 -#, python-format +#: sphinx/domains/python.py:564 msgid "class method" msgstr "sınıf metodu" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "statik metodu" -#: sphinx/domains/python.py:505 -#: sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "modülü" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +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:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "çevre değişkeni; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%skomut satırı seçeneği; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "sözlük terimi" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "dilbilgisi girdisi" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "referans etiketi" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "çevre değişkeni" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "program seçeneği" -#: sphinx/domains/std.py:360 -#: sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Dizin" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Modül Dizini" -#: sphinx/domains/std.py:362 -#: sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Arama Sayfası" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " Taban: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "şunun takma adı: :class:`%s`" @@ -424,131 +419,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:176 msgid "keyword" -msgstr "anahtar kelime" +msgstr "anahtar sözcük" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "işleç" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "nesne" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "deyim" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 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:137 +#: 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" @@ -584,15 +573,15 @@ msgstr "bütün modüllere hızlı erişim" msgid "all functions, classes, terms" msgstr "bütün fonksiyonlar, sınıflar, terimler" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Dizin – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Bütün dizin tek sayfada" @@ -604,42 +593,46 @@ msgstr "Harfe göre dizin sayfaları" msgid "can be huge" msgstr "çok büyük olabilir" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Gezinti" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "%(docstitle)s içinde ara" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "Bu belgeler hakkında" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Copyright" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Son güncelleme: %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, 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 +655,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 +663,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 +675,15 @@ 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 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 +723,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Bu tanımın kalıcı bağlantısı" @@ -746,33 +736,12 @@ 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 -msgid "Searching" -msgstr "Arıyor" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Aramaya hazırlanıyor..." - -#: sphinx/themes/basic/static/searchtools.js:364 -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:493 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "Arama sonuçlandı, aramayla eşleşen %s sayfa bulundu." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 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:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "Yan çubuğu daralt" @@ -780,24 +749,24 @@ msgstr "Yan çubuğu daralt" msgid "Contents" msgstr "İçindekiler" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Sürüm" -#: sphinx/writers/latex.py:572 -#: sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "Dipnotları" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "önceki sayfadan devam" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" msgstr "Devamı sonraki sayfada" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[resim]" diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js index 7af42ca8..1c7babb7 100644 --- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "uk_UA", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Search Results": "\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438 \u043f\u043e\u0448\u0443\u043a\u0443", "Preparing search...": "\u041f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u043e \u043f\u043e\u0448\u0443\u043a\u0443...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u0412\u0430\u0448 \u043f\u043e\u0448\u0443\u043a \u043d\u0435 \u0432\u0438\u044f\u0432\u0438\u0432 \u0436\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043f\u0456\u0432\u043f\u0430\u0434\u0456\u043d\u043d\u044f. \u0411\u0443\u0434\u044c-\u043b\u0430\u0441\u043a\u0430 \u043f\u0435\u0440\u0435\u043a\u043e\u043d\u0430\u0439\u0442\u0435\u0441\u044f \u0449\u043e \u0432\u0441\u0456 \u0441\u043b\u043e\u0432\u0430 \u043d\u0430\u0431\u0440\u0430\u043d\u0456 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0456 \u0432\u0438 \u043e\u0431\u0440\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043d\u044c\u043e \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0456\u0439.", "Search finished, found %s page(s) matching the search query.": "\u041f\u043e\u0448\u0443\u043a \u0437\u0430\u043a\u0456\u043d\u0447\u0435\u043d\u043e, \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e %s \u0441\u0442\u043e\u0440\u0456\u043d\u043e\u043a \u044f\u043a\u0456 \u0441\u043f\u0456\u0432\u043f\u0430\u043b\u0438 \u0437 \u043f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u043c \u0437\u0430\u043f\u0438\u0442\u043e\u043c.", ", in ": ", \u0432 ", "Expand sidebar": "", "Permalink to this headline": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Searching": "\u0428\u0443\u043a\u0430\u044e", "Collapse sidebar": "", "Permalink to this definition": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435 \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f", "Hide Search Matches": "\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438 \u0441\u043f\u0456\u0432\u043f\u0430\u0434\u0456\u043d\u043d\u044f \u043f\u043e\u0448\u0443\u043a\u0443"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "uk_UA", "plural_expr": "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", "messages": {"Hide Search Matches": "\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u0442\u0438 \u0441\u043f\u0456\u0432\u043f\u0430\u0434\u0456\u043d\u043d\u044f \u043f\u043e\u0448\u0443\u043a\u0443", "Permalink to this definition": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435 \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f", "Expand sidebar": "", "Permalink to this headline": "\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0446\u0435\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo Binary files differindex cfa0b8e0..4bc58ee1 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 6871e412..32ce1dc4 100644 --- a/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po @@ -7,8 +7,8 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-09-21 10:15+0200\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,380 +16,398 @@ 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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment.py:1628 +#, fuzzy, python-format +msgid "see also %s" +msgstr "дивись також %s" + +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python Enhancement Proposals!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python Enhancement Proposals; PEP %s" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "Вбудовані елементи" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "Рівень модуля" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "Загальний індекс" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "індекс" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "наступний" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "попередній" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr " (в " -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Автор секції: " -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "Автор модуля: " -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "Автор модуля: " -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "Автор: " -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "Дивись також" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "Повертає" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "Тип повернення" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (С функція)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C член)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C макрос)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C тип)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "функція" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "член" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "макрос" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "тип" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 #, fuzzy msgid "variable" msgstr "Змінна" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, python-format msgid "%s (C++ class)" msgstr "%s (C++ клас)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ тип)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ член)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ функція)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "клас" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, python-format msgid "%s() (built-in function)" msgstr "%s() (вбудована функція)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s метод)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, python-format +msgid "%s() (class)" +msgstr "%s() (клас)" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s атрибут)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "Параметри" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 -#, python-format +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "атрибут" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "Змінна" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (в модулі %s)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, python-format msgid "%s (built-in variable)" msgstr "%s (вбудована змінна)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s (в модулі %s)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (вбудований клас)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "%s (клас в %s)" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s метод)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s статичний метод)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s статичний метод)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s метод)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s метод)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s атрибут)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "Платформи: " - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (модуль)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "Індекс модулів" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "модулі" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "Застарілий" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "виняткова ситуація" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 msgid "class method" -msgstr "%s() (%s метод)" +msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "статичний метод" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "модуль" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +msgid " (deprecated)" +msgstr " (застарілий)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, python-format msgid "%s (role)" -msgstr "%s (модуль)" +msgstr "" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "модуль" +msgstr "" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "змінна оточення; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%sопція командного рядка; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "змінна оточення" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "Індекс" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "Індекс модулів" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "Сторінка пошуку" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr " Базовий: %s" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "синонім :class:`%s`" @@ -401,110 +419,110 @@ msgstr "Доробити" #: sphinx/ext/todo.py:109 #, fuzzy, python-format msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(Початкове входження знаходиться в %s, рядок %d і може бути знайдений " +msgstr "(Початкове входження знаходиться в %s, рядок %d.)" #: sphinx/ext/todo.py:117 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:176 msgid "keyword" msgstr "ключове слово" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "оператор" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "об'єкт" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "вираз" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "вбудована функція" @@ -513,8 +531,8 @@ msgstr "вбудована функція" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "Пошук" @@ -562,15 +580,15 @@ msgstr "швидкий доступ до всіх модулів" msgid "all functions, classes, terms" msgstr "всі функції, класи, терміни" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "Індекс – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "Повний індекс на одній сторінці" @@ -582,39 +600,39 @@ msgstr "Індексні сторінки по символам" msgid "can be huge" msgstr "може бути величезним" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "Навігація" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "Шукати в %(docstitle)s" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "Про ці документи" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "Авторські права" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, 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 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© Copyright %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "Востаннє оновлено %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -644,7 +662,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 +671,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 +683,15 @@ 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 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 +731,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "Постійне посилання на це визначення" @@ -727,37 +744,12 @@ msgstr "Постійне посилання на це визначення" msgid "Hide Search Matches" msgstr "Приховати співпадіння пошуку" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "Шукаю" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "Підготовка до пошуку..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr ", в " - -#: 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 "" -"Ваш пошук не виявив жодного співпадіння. Будь-ласка переконайтеся що всі " -"слова набрані правильно і ви обрали достатньо категорій." - -#: sphinx/themes/basic/static/searchtools.js:493 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "Пошук закінчено, знайдено %s сторінок які співпали з пошуковим запитом." - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -765,23 +757,25 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "Реліз" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 #, fuzzy msgid "Continued on next page" msgstr "Повний індекс на одній сторінці" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "" + diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js index bf0de29d..a59a8b24 100644 --- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "zh_CN", "plural_expr": "0", "messages": {"Search Results": "\u641c\u7d22\u7ed3\u679c", "Preparing search...": "\u51c6\u5907\u641c\u7d22...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "\u4f60\u7684\u641c\u7d22\u6ca1\u6709\u5339\u914d\u5230\u4efb\u4f55\u6587\u6863\u3002\u8bf7\u786e\u8ba4\u4f60\u6240\u641c\u7d22\u7684\u5173\u952e\u5b57.", "Search finished, found %s page(s) matching the search query.": "\u641c\u7d22\u5b8c\u6210\uff0c \u627e\u5230\u4e86 %s \u9875\u5339\u914d\u6240\u641c\u7d22\u7684\u5173\u952e\u5b57", ", in ": ", \u4f4d\u4e8e", "Expand sidebar": "", "Permalink to this headline": "\u6c38\u4e45\u94fe\u63a5\u81f3\u6807\u9898", "Searching": "\u641c\u7d22\u4e2d", "Collapse sidebar": "", "Permalink to this definition": "\u6c38\u4e45\u94fe\u63a5\u81f3\u76ee\u6807", "Hide Search Matches": "\u9690\u85cf\u641c\u7d22\u7ed3\u679c"}});
\ No newline at end of file +Documentation.addTranslations({"locale": "zh_CN", "plural_expr": "0", "messages": {"Hide Search Matches": "\u9690\u85cf\u641c\u7d22\u7ed3\u679c", "Permalink to this definition": "\u6c38\u4e45\u94fe\u63a5\u81f3\u76ee\u6807", "Expand sidebar": "", "Permalink to this headline": "\u6c38\u4e45\u94fe\u63a5\u81f3\u6807\u9898", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo Binary files differindex b62c4c5b..3d9dac2b 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 7afde026..cb7b3e6f 100644 --- a/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po @@ -8,387 +8,407 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-09-21 10:15+0200\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%Y 年 %m 月 %d 日" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 +#, python-format +msgid "see %s" +msgstr "" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "也可以参考 %s" + +#: sphinx/roles.py:175 #, python-format -msgid "Python Enhancement Proposals!PEP %s" -msgstr "Python 建议文件!PEP %s" +msgid "Python Enhancement Proposals; PEP %s" +msgstr "Python 建议文件; PEP %s" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "内置" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "模块级别" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "总目录" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "索引" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "下一页" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "上一页" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Section 作者:" -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "模块作者:" -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "模块作者:" -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "作者:" -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "也可以参考" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "返回" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "返回类型" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C 函数)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C 成员)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C 宏)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C 类型)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "函数" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "成员" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 #, fuzzy msgid "variable" msgstr "变量" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, fuzzy, python-format msgid "%s (C++ class)" -msgstr "%s (內置类)" +msgstr "%s (C++ 內置类)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ 类型)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ 成员)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ 函数)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, python-format msgid "%s() (built-in function)" msgstr "%s() (內置函数)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s 方法)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s() (內置类)" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s 属性)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "参数" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "属性" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "变量" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (在 %s 模块中)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, python-format msgid "%s (built-in variable)" msgstr "%s (內置变量)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s() (在 %s 模块中)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (內置类)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s 方法)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s 静态方法)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s 静态方法)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s 方法)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s 方法)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s 属性)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "平台" - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (模块)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "模块索引" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "模块" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "已移除" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "例外" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 msgid "class method" -msgstr "%s() (%s 方法)" +msgstr "" -#: sphinx/domains/python.py:503 +#: sphinx/domains/python.py:565 msgid "static method" msgstr "静态方法" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "模块" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +#, fuzzy +msgid " (deprecated)" +msgstr " (已移除)" + +#: sphinx/domains/rst.py:55 #, python-format msgid "%s (directive)" msgstr "" -#: sphinx/domains/rst.py:55 -#, fuzzy, python-format +#: sphinx/domains/rst.py:57 +#, python-format msgid "%s (role)" -msgstr "%s (模块)" +msgstr "" -#: sphinx/domains/rst.py:103 +#: sphinx/domains/rst.py:106 msgid "directive" msgstr "" -#: sphinx/domains/rst.py:104 -#, fuzzy +#: sphinx/domains/rst.py:107 msgid "role" -msgstr "模块" +msgstr "" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "环境变量; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%s命令行选项; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "环境变量" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "索引" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "模块索引" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "搜索页面" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -398,112 +418,112 @@ msgid "Todo" msgstr "待处理" #: sphinx/ext/todo.py:109 -#, fuzzy, python-format +#, python-format msgid "(The <<original entry>> is located in %s, line %d.)" -msgstr "(最初的入口位于%s 的第%d行" +msgstr "" #: sphinx/ext/todo.py:117 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:176 msgid "keyword" msgstr "关键字" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "操作数" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "对象" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "语句" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "內置函数" @@ -512,8 +532,8 @@ msgstr "內置函数" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "搜索" @@ -561,15 +581,15 @@ msgstr "快速查看所有的模块" msgid "all functions, classes, terms" msgstr "所的函数,类,术语" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "索引 – %(key)s" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "一页的全部索引" @@ -581,39 +601,39 @@ msgstr "按照字母的索引页" msgid "can be huge" msgstr "可能会很多" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "导航" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "在 %(docstitle)s 中搜索" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "关于这些文档" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "版权所有" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, python-format msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "© <a href=\"%(path)s\">版权所有</a> %(copyright)s." -#: sphinx/themes/basic/layout.html:182 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "© 版权所有 %(copyright)s." -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "最后更新日期是 %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -641,13 +661,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 +675,15 @@ 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 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 +723,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "永久链接至目标" @@ -717,35 +736,12 @@ msgstr "永久链接至目标" msgid "Hide Search Matches" msgstr "隐藏搜索结果" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "搜索中" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "准备搜索..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr ", 位于" - -#: 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 "你的搜索没有匹配到任何文档。请确认你所搜索的关键字." - -#: sphinx/themes/basic/static/searchtools.js:493 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "搜索完成, 找到了 %s 页匹配所搜索的关键字" - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -753,23 +749,25 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "发布" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 #, fuzzy msgid "Continued on next page" msgstr "一页的全部索引" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[图片]" + diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js index ac64cd0b..9bfcec76 100644 --- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js +++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js @@ -1 +1 @@ -Documentation.addTranslations({"locale": "zh_TW", "plural_expr": "0", "messages": {"Search Results": "\u641c\u5c0b\u7d50\u679c", "Preparing search...": "\u6e96\u5099\u641c\u5c0b...", "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "", "Search finished, found %s page(s) matching the search query.": "", ", in ": "", "Expand sidebar": "", "Permalink to this headline": "", "Searching": "\u641c\u5c0b\u4e2d", "Collapse sidebar": "", "Permalink to this definition": "", "Hide Search Matches": ""}});
\ No newline at end of file +Documentation.addTranslations({"locale": "zh_TW", "plural_expr": "0", "messages": {"Hide Search Matches": "", "Permalink to this definition": "", "Expand sidebar": "", "Permalink to this headline": "", "Collapse sidebar": ""}});
\ No newline at end of file diff --git a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo Binary files differindex 008ecec0..9dd86da5 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..2a4fbef0 100644 --- a/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po +++ b/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po @@ -7,390 +7,409 @@ msgid "" 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" +"POT-Creation-Date: 2011-09-21 10:06+0200\n" +"PO-Revision-Date: 2011-01-22 14:41+0100\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.6\n" -#: sphinx/environment.py:106 sphinx/writers/latex.py:184 -#: sphinx/writers/manpage.py:67 +#: sphinx/config.py:81 +#, python-format +msgid "%s %s documentation" +msgstr "" + +#: sphinx/environment.py:119 sphinx/writers/latex.py:190 +#: sphinx/writers/manpage.py:67 sphinx/writers/texinfo.py:203 #, python-format msgid "%B %d, %Y" msgstr "%Y 年 %m 月 %d 日" -#: sphinx/roles.py:174 +#: sphinx/environment.py:1625 #, python-format -msgid "Python Enhancement Proposals!PEP %s" +msgid "see %s" +msgstr "" + +#: sphinx/environment.py:1628 +#, python-format +msgid "see also %s" +msgstr "" + +#: sphinx/roles.py:175 +#, fuzzy, python-format +msgid "Python Enhancement Proposals; PEP %s" msgstr "Python 建議文件!PEP %s" -#: sphinx/builders/changes.py:72 +#: sphinx/builders/changes.py:73 msgid "Builtins" msgstr "" -#: sphinx/builders/changes.py:74 +#: sphinx/builders/changes.py:75 msgid "Module level" msgstr "" -#: sphinx/builders/html.py:266 +#: sphinx/builders/html.py:274 #, 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:293 sphinx/themes/basic/defindex.html:30 msgid "General Index" msgstr "總索引" -#: sphinx/builders/html.py:285 +#: sphinx/builders/html.py:293 msgid "index" msgstr "索引" -#: sphinx/builders/html.py:345 +#: sphinx/builders/html.py:353 msgid "next" msgstr "下一頁" -#: sphinx/builders/html.py:354 +#: sphinx/builders/html.py:362 msgid "previous" msgstr "上一頁" -#: sphinx/builders/latex.py:151 +#: sphinx/builders/latex.py:141 sphinx/builders/texinfo.py:196 msgid " (in " msgstr "" -#: sphinx/directives/other.py:127 +#: sphinx/directives/other.py:136 msgid "Section author: " msgstr "Section 作者:" -#: sphinx/directives/other.py:129 +#: sphinx/directives/other.py:138 msgid "Module author: " msgstr "模組作者:" -#: sphinx/directives/other.py:131 +#: sphinx/directives/other.py:140 #, fuzzy msgid "Code author: " msgstr "模組作者:" -#: sphinx/directives/other.py:133 +#: sphinx/directives/other.py:142 msgid "Author: " msgstr "作者:" -#: sphinx/directives/other.py:238 +#: sphinx/directives/other.py:215 msgid "See also" msgstr "" -#: sphinx/domains/__init__.py:253 +#: sphinx/domains/__init__.py:244 #, 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:95 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:128 +#: sphinx/domains/python.py:107 msgid "Returns" msgstr "返回" -#: sphinx/domains/c.py:56 sphinx/domains/python.py:61 +#: sphinx/domains/c.py:56 sphinx/domains/python.py:109 msgid "Return type" msgstr "返回類別" -#: sphinx/domains/c.py:133 +#: sphinx/domains/c.py:141 #, python-format msgid "%s (C function)" msgstr "%s (C 函式)" -#: sphinx/domains/c.py:135 +#: sphinx/domains/c.py:143 #, python-format msgid "%s (C member)" msgstr "%s (C 成員)" -#: sphinx/domains/c.py:137 +#: sphinx/domains/c.py:145 #, python-format msgid "%s (C macro)" msgstr "%s (C 巨集)" -#: sphinx/domains/c.py:139 +#: sphinx/domains/c.py:147 #, python-format msgid "%s (C type)" msgstr "%s (C 類別)" -#: sphinx/domains/c.py:141 +#: sphinx/domains/c.py:149 #, python-format 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:204 sphinx/domains/cpp.py:1060 +#: sphinx/domains/javascript.py:162 sphinx/domains/python.py:559 msgid "function" msgstr "函式" -#: sphinx/domains/c.py:172 sphinx/domains/cpp.py:1032 +#: sphinx/domains/c.py:205 sphinx/domains/cpp.py:1061 msgid "member" msgstr "成員" -#: sphinx/domains/c.py:173 +#: sphinx/domains/c.py:206 msgid "macro" msgstr "巨集" -#: sphinx/domains/c.py:174 sphinx/domains/cpp.py:1033 +#: sphinx/domains/c.py:207 sphinx/domains/cpp.py:1062 msgid "type" msgstr "類別" -#: sphinx/domains/c.py:175 +#: sphinx/domains/c.py:208 #, fuzzy msgid "variable" msgstr "變數" -#: sphinx/domains/cpp.py:876 +#: sphinx/domains/cpp.py:904 #, fuzzy, python-format msgid "%s (C++ class)" msgstr "%s (內建類別)" -#: sphinx/domains/cpp.py:891 +#: sphinx/domains/cpp.py:919 #, python-format msgid "%s (C++ type)" msgstr "%s (C++ 類別)" -#: sphinx/domains/cpp.py:910 +#: sphinx/domains/cpp.py:938 #, python-format msgid "%s (C++ member)" msgstr "%s (C++ 成員)" -#: sphinx/domains/cpp.py:962 +#: sphinx/domains/cpp.py:990 #, python-format msgid "%s (C++ function)" msgstr "%s (C++ 函式)" -#: sphinx/domains/cpp.py:1030 sphinx/domains/python.py:499 +#: sphinx/domains/cpp.py:1059 sphinx/domains/javascript.py:163 +#: sphinx/domains/python.py:561 msgid "class" msgstr "" -#: sphinx/domains/javascript.py:117 sphinx/domains/python.py:221 +#: sphinx/domains/javascript.py:106 sphinx/domains/python.py:254 #, python-format msgid "%s() (built-in function)" msgstr "%s() (內建函式)" -#: sphinx/domains/javascript.py:118 sphinx/domains/python.py:285 +#: sphinx/domains/javascript.py:107 sphinx/domains/python.py:318 #, python-format msgid "%s() (%s method)" msgstr "%s() (%s 方法)" -#: sphinx/domains/javascript.py:120 +#: sphinx/domains/javascript.py:109 +#, fuzzy, python-format +msgid "%s() (class)" +msgstr "%s (內建類別)" + +#: sphinx/domains/javascript.py:111 #, python-format msgid "%s (global variable or constant)" msgstr "" -#: sphinx/domains/javascript.py:122 sphinx/domains/python.py:323 +#: sphinx/domains/javascript.py:113 sphinx/domains/python.py:356 #, python-format msgid "%s (%s attribute)" msgstr "%s (%s 屬性)" -#: sphinx/domains/javascript.py:131 +#: sphinx/domains/javascript.py:122 #, fuzzy msgid "Arguments" msgstr "參數" -#: sphinx/domains/javascript.py:134 +#: sphinx/domains/javascript.py:125 msgid "Throws" msgstr "" -#: sphinx/domains/javascript.py:167 sphinx/domains/python.py:498 +#: sphinx/domains/javascript.py:164 sphinx/domains/python.py:560 msgid "data" msgstr "" -#: sphinx/domains/javascript.py:168 sphinx/domains/python.py:504 -#, python-format +#: sphinx/domains/javascript.py:165 sphinx/domains/python.py:566 msgid "attribute" msgstr "屬性" -#: sphinx/domains/python.py:53 +#: sphinx/domains/python.py:100 #, fuzzy msgid "Variables" msgstr "變數" -#: sphinx/domains/python.py:56 +#: sphinx/domains/python.py:104 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:255 sphinx/domains/python.py:312 +#: sphinx/domains/python.py:324 sphinx/domains/python.py:337 #, python-format msgid "%s() (in module %s)" msgstr "%s() (在 %s 模組中)" -#: sphinx/domains/python.py:225 +#: sphinx/domains/python.py:258 #, python-format msgid "%s (built-in variable)" msgstr "%s (內建變數)" -#: sphinx/domains/python.py:226 sphinx/domains/python.py:317 +#: sphinx/domains/python.py:259 sphinx/domains/python.py:350 #, python-format msgid "%s (in module %s)" msgstr "%s() (在 %s 模組中)" -#: sphinx/domains/python.py:242 +#: sphinx/domains/python.py:275 #, python-format msgid "%s (built-in class)" msgstr "%s (內建類別)" -#: sphinx/domains/python.py:243 +#: sphinx/domains/python.py:276 #, python-format msgid "%s (class in %s)" msgstr "" -#: sphinx/domains/python.py:283 +#: sphinx/domains/python.py:316 #, python-format msgid "%s() (%s.%s method)" msgstr "%s() (%s.%s 方法)" -#: sphinx/domains/python.py:295 +#: sphinx/domains/python.py:328 #, python-format msgid "%s() (%s.%s static method)" msgstr "%s() (%s.%s 靜態方法)" -#: sphinx/domains/python.py:298 +#: sphinx/domains/python.py:331 #, python-format msgid "%s() (%s static method)" msgstr "%s() (%s 靜態方法)" -#: sphinx/domains/python.py:308 +#: sphinx/domains/python.py:341 #, fuzzy, python-format msgid "%s() (%s.%s class method)" msgstr "%s() (%s.%s 方法)" -#: sphinx/domains/python.py:311 +#: sphinx/domains/python.py:344 #, fuzzy, python-format msgid "%s() (%s class method)" msgstr "%s() (%s 方法)" -#: sphinx/domains/python.py:321 +#: sphinx/domains/python.py:354 #, python-format msgid "%s (%s.%s attribute)" msgstr "%s (%s.%s 屬性)" -#: sphinx/domains/python.py:366 -msgid "Platforms: " -msgstr "平台" - -#: sphinx/domains/python.py:372 +#: sphinx/domains/python.py:434 #, python-format msgid "%s (module)" msgstr "%s (模組)" -#: sphinx/domains/python.py:429 +#: sphinx/domains/python.py:491 #, fuzzy msgid "Python Module Index" msgstr "模組索引" -#: sphinx/domains/python.py:430 +#: sphinx/domains/python.py:492 msgid "modules" msgstr "模組" -#: sphinx/domains/python.py:475 +#: sphinx/domains/python.py:537 msgid "Deprecated" msgstr "已移除" -#: sphinx/domains/python.py:500 sphinx/locale/__init__.py:162 +#: sphinx/domains/python.py:562 sphinx/locale/__init__.py:179 msgid "exception" msgstr "例外" -#: sphinx/domains/python.py:501 +#: sphinx/domains/python.py:563 msgid "method" msgstr "" -#: sphinx/domains/python.py:502 -#, fuzzy, python-format +#: sphinx/domains/python.py:564 +#, fuzzy msgid "class method" msgstr "%s() (%s 方法)" -#: sphinx/domains/python.py:503 -#, python-format +#: sphinx/domains/python.py:565 msgid "static method" msgstr "靜態方法" -#: sphinx/domains/python.py:505 sphinx/locale/__init__.py:158 +#: sphinx/domains/python.py:567 sphinx/locale/__init__.py:175 msgid "module" msgstr "模組" -#: sphinx/domains/rst.py:53 +#: sphinx/domains/python.py:695 +#, 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 "模組" -#: sphinx/domains/std.py:68 sphinx/domains/std.py:84 +#: sphinx/domains/std.py:70 sphinx/domains/std.py:86 #, python-format msgid "environment variable; %s" msgstr "環境變數; %s" -#: sphinx/domains/std.py:160 +#: sphinx/domains/std.py:162 #, python-format msgid "%scommand line option; %s" msgstr "%s命令列選項; %s" -#: sphinx/domains/std.py:328 +#: sphinx/domains/std.py:393 msgid "glossary term" msgstr "" -#: sphinx/domains/std.py:329 +#: sphinx/domains/std.py:394 msgid "grammar token" msgstr "" -#: sphinx/domains/std.py:330 +#: sphinx/domains/std.py:395 msgid "reference label" msgstr "" -#: sphinx/domains/std.py:331 +#: sphinx/domains/std.py:396 msgid "environment variable" msgstr "環境變數" -#: sphinx/domains/std.py:332 +#: sphinx/domains/std.py:397 msgid "program option" msgstr "" -#: sphinx/domains/std.py:360 sphinx/themes/basic/genindex-single.html:11 +#: sphinx/domains/std.py:427 sphinx/themes/basic/genindex-single.html:32 #: 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:32 sphinx/themes/basic/genindex.html:35 +#: sphinx/themes/basic/genindex.html:68 sphinx/themes/basic/layout.html:134 +#: sphinx/writers/latex.py:179 sphinx/writers/texinfo.py:456 msgid "Index" msgstr "索引" -#: sphinx/domains/std.py:361 +#: sphinx/domains/std.py:428 msgid "Module Index" msgstr "模組索引" -#: sphinx/domains/std.py:362 sphinx/themes/basic/defindex.html:25 +#: sphinx/domains/std.py:429 sphinx/themes/basic/defindex.html:25 msgid "Search Page" msgstr "搜尋頁面" -#: sphinx/ext/autodoc.py:917 +#: sphinx/ext/autodoc.py:1002 #, python-format msgid " Bases: %s" msgstr "" -#: sphinx/ext/autodoc.py:950 +#: sphinx/ext/autodoc.py:1038 #, python-format msgid "alias of :class:`%s`" msgstr "" @@ -408,104 +427,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:176 msgid "keyword" msgstr "關鍵字" -#: sphinx/locale/__init__.py:160 +#: sphinx/locale/__init__.py:177 msgid "operator" msgstr "運算子" -#: sphinx/locale/__init__.py:161 +#: sphinx/locale/__init__.py:178 msgid "object" msgstr "物件" -#: sphinx/locale/__init__.py:163 +#: sphinx/locale/__init__.py:180 msgid "statement" msgstr "" -#: sphinx/locale/__init__.py:164 +#: sphinx/locale/__init__.py:181 msgid "built-in function" msgstr "內建函式" @@ -514,8 +533,8 @@ msgstr "內建函式" 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/agogo/layout.html:49 sphinx/themes/basic/layout.html:137 +#: sphinx/themes/basic/search.html:11 sphinx/themes/basic/search.html:20 msgid "Search" msgstr "搜尋" @@ -564,15 +583,15 @@ msgstr "" msgid "all functions, classes, terms" msgstr "" -#: sphinx/themes/basic/genindex-single.html:14 +#: sphinx/themes/basic/genindex-single.html:35 #, python-format msgid "Index – %(key)s" msgstr "" -#: sphinx/themes/basic/genindex-single.html:46 +#: sphinx/themes/basic/genindex-single.html:63 #: sphinx/themes/basic/genindex-split.html:24 #: sphinx/themes/basic/genindex-split.html:38 -#: sphinx/themes/basic/genindex.html:56 +#: sphinx/themes/basic/genindex.html:74 msgid "Full index on one page" msgstr "" @@ -584,39 +603,39 @@ msgstr "" msgid "can be huge" msgstr "" -#: sphinx/themes/basic/layout.html:23 +#: sphinx/themes/basic/layout.html:29 msgid "Navigation" msgstr "瀏覽" -#: sphinx/themes/basic/layout.html:113 +#: sphinx/themes/basic/layout.html:122 #, python-format msgid "Search within %(docstitle)s" msgstr "在 %(docstitle)s 中搜尋" -#: sphinx/themes/basic/layout.html:122 +#: sphinx/themes/basic/layout.html:131 msgid "About these documents" msgstr "" -#: sphinx/themes/basic/layout.html:131 +#: sphinx/themes/basic/layout.html:140 msgid "Copyright" msgstr "版權所有" -#: sphinx/themes/basic/layout.html:180 +#: sphinx/themes/basic/layout.html:189 #, python-format msgid "© <a href=\"%(path)s\">Copyright</a> %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:182 +#: sphinx/themes/basic/layout.html:191 #, python-format msgid "© Copyright %(copyright)s." msgstr "" -#: sphinx/themes/basic/layout.html:186 +#: sphinx/themes/basic/layout.html:195 #, python-format msgid "Last updated on %(last_updated)s." msgstr "最後更新日期是 %(last_updated)s." -#: sphinx/themes/basic/layout.html:189 +#: sphinx/themes/basic/layout.html:198 #, python-format msgid "" "Created using <a href=\"http://sphinx.pocoo.org/\">Sphinx</a> " @@ -644,13 +663,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 +677,15 @@ 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 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 +725,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:504 +#: sphinx/writers/html.py:510 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:92 msgid "Permalink to this definition" msgstr "" @@ -720,35 +738,12 @@ msgstr "" msgid "Hide Search Matches" msgstr "" -#: sphinx/themes/basic/static/searchtools.js:285 -msgid "Searching" -msgstr "搜尋中" - -#: sphinx/themes/basic/static/searchtools.js:290 -msgid "Preparing search..." -msgstr "準備搜尋..." - -#: sphinx/themes/basic/static/searchtools.js:364 -msgid ", in " -msgstr "" - -#: 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 "" - -#: sphinx/themes/basic/static/searchtools.js:493 -#, python-format -msgid "Search finished, found %s page(s) matching the search query." -msgstr "" - -#: sphinx/themes/default/static/sidebar.js:66 +#: sphinx/themes/default/static/sidebar.js:69 msgid "Expand sidebar" msgstr "" -#: sphinx/themes/default/static/sidebar.js:79 -#: sphinx/themes/default/static/sidebar.js:106 +#: sphinx/themes/default/static/sidebar.js:82 +#: sphinx/themes/default/static/sidebar.js:110 msgid "Collapse sidebar" msgstr "" @@ -756,22 +751,24 @@ msgstr "" msgid "Contents" msgstr "" -#: sphinx/writers/latex.py:171 +#: sphinx/writers/latex.py:177 msgid "Release" msgstr "釋出" -#: sphinx/writers/latex.py:572 sphinx/writers/manpage.py:178 +#: sphinx/writers/latex.py:594 sphinx/writers/manpage.py:182 +#: sphinx/writers/texinfo.py:589 msgid "Footnotes" msgstr "" -#: sphinx/writers/latex.py:641 +#: sphinx/writers/latex.py:676 msgid "continued from previous page" msgstr "" -#: sphinx/writers/latex.py:646 +#: sphinx/writers/latex.py:681 msgid "Continued on next page" msgstr "" -#: sphinx/writers/text.py:422 +#: sphinx/writers/text.py:437 msgid "[image]" msgstr "[圖片]" + diff --git a/sphinx/pycode/__init__.py b/sphinx/pycode/__init__.py index 8271b299..ac840750 100644 --- a/sphinx/pycode/__init__.py +++ b/sphinx/pycode/__init__.py @@ -9,15 +9,13 @@ :license: BSD, see LICENSE for details. """ -import re -import sys from os import path -from cStringIO import StringIO 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, detect_encoding +from sphinx.util.pycompat import next, StringIO, BytesIO, TextIOWrapper from sphinx.util.docstrings import prepare_docstring, prepare_commentdoc @@ -80,10 +78,30 @@ class AttrDocVisitor(nodes.NodeVisitor): self.in_init -= 1 def visit_expr_stmt(self, node): - """Visit an assignment which may have a special comment before it.""" + """Visit an assignment which may have a special comment before (or + after) it. + """ if _eq not in node.children: # not an assignment (we don't care for augmented assignments) return + # look *after* the node; there may be a comment prefixing the NEWLINE + # of the simple_stmt + parent = node.parent + idx = parent.children.index(node) + 1 + while idx < len(parent): + if parent[idx].type == sym.SEMI: + idx += 1 + continue # skip over semicolon + if parent[idx].type == sym.NEWLINE: + prefix = parent[idx].get_prefix() + if not isinstance(prefix, unicode): + prefix = prefix.decode(self.encoding) + docstring = prepare_commentdoc(prefix) + if docstring: + self.add_docstring(node, docstring) + return # don't allow docstrings both before and after + break + # now look *before* the node pnode = node[0] prefix = pnode.get_prefix() # if the assignment is the first statement on a new indentation @@ -94,7 +112,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) @@ -150,14 +169,16 @@ class ModuleAnalyzer(object): @classmethod def for_string(cls, string, modname, srcname='<string>'): - return cls(StringIO(string), modname, srcname) + if isinstance(string, bytes): + return cls(BytesIO(string), modname, srcname) + return cls(StringIO(string), modname, srcname, decoded=True) @classmethod def for_file(cls, filename, modname): if ('file', filename) in cls.cache: return cls.cache['file', filename] try: - fileobj = open(filename, 'r') + fileobj = open(filename, 'rb') except Exception, err: raise PycodeError('error opening %r' % filename, err) obj = cls(fileobj, modname, filename) @@ -184,7 +205,7 @@ class ModuleAnalyzer(object): cls.cache['module', modname] = obj return obj - def __init__(self, source, modname, srcname): + def __init__(self, source, modname, srcname, decoded=False): # name of the module self.modname = modname # name of the source file @@ -194,9 +215,15 @@ class ModuleAnalyzer(object): # cache the source code as well pos = self.source.tell() - self.encoding = detect_encoding(self.source.readline) - self.code = self.source.read() - self.source.seek(pos) + if not decoded: + self.encoding = detect_encoding(self.source.readline) + self.code = self.source.read().decode(self.encoding) + self.source.seek(pos) + self.source = TextIOWrapper(self.source, self.encoding) + else: + self.encoding = None + self.code = self.source.read() + self.source.seek(pos) # will be filled by tokenize() self.tokens = None @@ -266,7 +293,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 27189a66..c7b3aaf8 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 @@ -195,11 +209,16 @@ htmlhelp_basename = '%(project_fn)sdoc' # -- Options for LaTeX output -------------------------------------------------- -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). @@ -222,9 +241,6 @@ latex_documents = [ # If true, show URL addresses after external links. #latex_show_urls = False -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - # Documents to append as an appendix to all manuals. #latex_appendices = [] @@ -237,9 +253,32 @@ latex_documents = [ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ - ('%(master_str)s', '%(project_manpage)s', u'%(project_doc)s', + ('%(master_str)s', '%(project_manpage)s', u'%(project_doc_str)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_str)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 = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' ''' EPUB_CONFIG = ''' @@ -266,6 +305,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 = [] @@ -328,9 +370,11 @@ PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) \ $(SPHINXOPTS) %(rsrcdir)s +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(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 +391,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 +480,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 $(I18NSPHINXOPTS) $(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 @@ -460,8 +525,10 @@ if "%%SPHINXBUILD%%" == "" ( ) set BUILDDIR=%(rbuilddir)s set ALLSPHINXOPTS=-d %%BUILDDIR%%/doctrees %%SPHINXOPTS%% %(rsrcdir)s +set I18NSPHINXOPTS=%%SPHINXOPTS%% %(rsrcdir)s if NOT "%%PAPER%%" == "" ( \tset ALLSPHINXOPTS=-D latex_paper_size=%%PAPER%% %%ALLSPHINXOPTS%% +\tset I18NSPHINXOPTS=-D latex_paper_size=%%PAPER%% %%I18NSPHINXOPTS%% ) if "%%1" == "" goto help @@ -481,6 +548,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 +663,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 %%I18NSPHINXOPTS%% %%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 +756,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 +781,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 +800,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')): @@ -823,8 +932,9 @@ directly.''' # escape backslashes and single quotes in strings that are put into # a Python string literal - for key in ('project', 'copyright', 'author', 'author_texescaped', - 'project_doc_texescaped', 'version', 'release', 'master'): + for key in ('project', 'project_doc', 'project_doc_texescaped', + 'author', 'author_texescaped', 'copyright', + 'version', 'release', 'master'): d[key + '_str'] = d[key].replace('\\', '\\\\').replace("'", "\\'") if not path.isdir(d['path']): @@ -849,28 +959,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 @@ -895,4 +1005,3 @@ def main(argv=sys.argv): print print '[Interrupted.]' return - diff --git a/sphinx/roles.py b/sphinx/roles.py index 32d02da1..30743914 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 = { @@ -141,16 +141,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). @@ -173,8 +172,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: @@ -193,8 +192,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: @@ -271,11 +269,38 @@ 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), # links to documents - 'doc': XRefRole(), + 'doc': XRefRole(warn_dangling=True), 'pep': indexmarkup_role, 'rfc': indexmarkup_role, @@ -284,6 +309,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..1f3c3731 --- /dev/null +++ b/sphinx/search/en.py @@ -0,0 +1,244 @@ +# -*- coding: utf-8 -*- +""" + sphinx.search.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..0a7d83a1 --- /dev/null +++ b/sphinx/search/ja.py @@ -0,0 +1,273 @@ +# -*- coding: utf-8 -*- +""" + sphinx.search.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-Za-zA-Z]': u'A', + u'[0-90-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 34da039b..ebbcf27b 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 47881094..ef7b891b 100644 --- a/sphinx/texinputs/sphinx.sty +++ b/sphinx/texinputs/sphinx.sty @@ -128,7 +128,6 @@ \newcommand{\strong}[1]{{\bf #1}} \newcommand{\code}[1]{\texttt{#1}} \newcommand{\bfcode}[1]{\code{\bfseries#1}} -\newcommand{\samp}[1]{`\code{#1}'} \newcommand{\email}[1]{\textsf{#1}} % Redefine the Verbatim environment to allow border and background colors. @@ -175,23 +174,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/agogo/layout.html b/sphinx/themes/agogo/layout.html index 3c427ed1..d063194a 100644 --- a/sphinx/themes/agogo/layout.html +++ b/sphinx/themes/agogo/layout.html @@ -19,7 +19,8 @@ </a></p> {%- endif %} {%- block headertitle %} - <h1><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a></h1> + <div class="headertitle"><a + href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a></div> {%- endblock %} <div class="rel"> {%- for rellink in rellinks|reverse %} diff --git a/sphinx/themes/agogo/static/agogo.css_t b/sphinx/themes/agogo/static/agogo.css_t index fe60145d..5d9a1eb7 100644 --- a/sphinx/themes/agogo/static/agogo.css_t +++ b/sphinx/themes/agogo/static/agogo.css_t @@ -128,14 +128,15 @@ div.header { padding-bottom: 10px; } -div.header h1 { +div.header .headertitle { font-family: {{ theme_headerfont }}; font-weight: normal; font-size: 180%; letter-spacing: .08em; + margin-bottom: .8em; } -div.header h1 a { +div.header .headertitle a { color: white; } diff --git a/sphinx/themes/basic/genindex-single.html b/sphinx/themes/basic/genindex-single.html index 0f2cad23..eff8c1ce 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 style="width: 100%" class="indextable"><tr> {%- for column in entries|slice(2) if column %} <td style="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 182bbf8e..7bc002b6 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 style="width: 100%" class="indextable genindextable"><tr> {%- for column in entries|slice(2) if column %} <td style="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/basic.css b/sphinx/themes/basic/static/basic.css_t index eb22a942..9459201e 100644 --- a/sphinx/themes/basic/static/basic.css +++ b/sphinx/themes/basic/static/basic.css_t @@ -49,7 +49,7 @@ div.sphinxsidebarwrapper { div.sphinxsidebar { float: left; - width: 230px; + width: {{ theme_sidebarwidth|toint }}px; margin-left: -100%; font-size: 90%; } @@ -447,6 +447,11 @@ dl.glossary dt { font-style: oblique; } +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + /* -- code displays --------------------------------------------------------- */ pre { 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 9308c6d5..fbb3bb65 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,20 +119,20 @@ 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 = []; var tmp = query.split(/\s+/); - var object = (tmp.length == 1) ? tmp[0].toLowerCase() : null; + var objectterms = []; for (var i = 0; i < tmp.length; i++) { + if (tmp[i] != "") { + objectterms.push(tmp[i].toLowerCase()); + } + if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) || tmp[i] == "") { // skip this "word" @@ -344,9 +163,6 @@ var Search = { var filenames = this._index.filenames; var titles = this._index.titles; var terms = this._index.terms; - var objects = this._index.objects; - var objtypes = this._index.objtypes; - var objnames = this._index.objnames; var fileMap = {}; var files = null; // different result priorities @@ -357,40 +173,19 @@ var Search = { $('#search-progress').empty(); // lookup as object - if (object != null) { - for (var prefix in objects) { - for (var name in objects[prefix]) { - var fullname = (prefix ? prefix + '.' : '') + name; - if (fullname.toLowerCase().indexOf(object) > -1) { - match = objects[prefix][name]; - descr = objnames[match[1]] + _(', in ') + titles[match[0]]; - // XXX the generated anchors are not generally correct - // XXX there may be custom prefixes - result = [filenames[match[0]], fullname, '#'+fullname, descr]; - switch (match[2]) { - case 1: objectResults.push(result); break; - case 0: importantResults.push(result); break; - case 2: unimportantResults.push(result); break; - } - } - } - } + for (var i = 0; i < objectterms.length; i++) { + var others = [].concat(objectterms.slice(0,i), + objectterms.slice(i+1, objectterms.length)) + var results = this.performObjectSearch(objectterms[i], others); + // Assume first word is most likely to be the object, + // other words more likely to be in description. + // Therefore put matches for earlier words first. + // (Results are eventually used in reverse order). + objectResults = results[0].concat(objectResults); + importantResults = results[1].concat(importantResults); + unimportantResults = results[2].concat(unimportantResults); } - // sort results descending - objectResults.sort(function(a, b) { - return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0); - }); - - importantResults.sort(function(a, b) { - return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0); - }); - - unimportantResults.sort(function(a, b) { - return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0); - }); - - // perform the search on the required terms for (var i = 0; i < searchterms.length; i++) { var word = searchterms[i]; @@ -510,6 +305,67 @@ var Search = { } } displayNextItem(); + }, + + performObjectSearch : function(object, otherterms) { + var filenames = this._index.filenames; + var objects = this._index.objects; + var objnames = this._index.objnames; + var titles = this._index.titles; + + var importantResults = []; + var objectResults = []; + var unimportantResults = []; + + for (var prefix in objects) { + for (var name in objects[prefix]) { + var fullname = (prefix ? prefix + '.' : '') + name; + if (fullname.toLowerCase().indexOf(object) > -1) { + var match = objects[prefix][name]; + var objname = objnames[match[1]]; + var title = titles[match[0]]; + // If more than one term searched for, we require other words to be + // found in the name/title/description + if (otherterms.length > 0) { + var haystack = (prefix + ' ' + name + ' ' + objname + ' ' + title).toLowerCase(); + var allfound = true; + for (var i = 0; i < otherterms.length; i++) { + if (haystack.indexOf(otherterms[i]) == -1) { + allfound = false; + break; + } + } + if (!allfound) { + continue; + } + } + var descr = objname + _(', in ') + title; + // XXX the generated anchors are not generally correct + // XXX there may be custom prefixes + result = [filenames[match[0]], fullname, '#'+fullname, descr]; + switch (match[2]) { + case 1: objectResults.push(result); break; + case 0: importantResults.push(result); break; + case 2: unimportantResults.push(result); break; + } + } + } + } + + // sort results descending + objectResults.sort(function(a, b) { + return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0); + }); + + importantResults.sort(function(a, b) { + return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0); + }); + + unimportantResults.sort(function(a, b) { + return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0); + }); + + return [importantResults, objectResults, unimportantResults] } } diff --git a/sphinx/themes/basic/static/underscore.js b/sphinx/themes/basic/static/underscore.js index 9146e086..5d899143 100644 --- a/sphinx/themes/basic/static/underscore.js +++ b/sphinx/themes/basic/static/underscore.js @@ -1,3 +1,10 @@ +// Underscore.js 0.5.5 +// (c) 2009 Jeremy Ashkenas, DocumentCloud Inc. +// Underscore is freely distributable under the terms of the MIT license. +// Portions of Underscore are inspired by or borrowed from Prototype.js, +// Oliver Steele's Functional, and John Resig's Micro-Templating. +// For all details and documentation: +// http://documentcloud.github.com/underscore/ (function(){var j=this,n=j._,i=function(a){this._wrapped=a},m=typeof StopIteration!=="undefined"?StopIteration:"__break__",b=j._=function(a){return new i(a)};if(typeof exports!=="undefined")exports._=b;var k=Array.prototype.slice,o=Array.prototype.unshift,p=Object.prototype.toString,q=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;b.VERSION="0.5.5";b.each=function(a,c,d){try{if(a.forEach)a.forEach(c,d);else if(b.isArray(a)||b.isArguments(a))for(var e=0,f=a.length;e<f;e++)c.call(d, a[e],e,a);else{var g=b.keys(a);f=g.length;for(e=0;e<f;e++)c.call(d,a[g[e]],g[e],a)}}catch(h){if(h!=m)throw h;}return a};b.map=function(a,c,d){if(a&&b.isFunction(a.map))return a.map(c,d);var e=[];b.each(a,function(f,g,h){e.push(c.call(d,f,g,h))});return e};b.reduce=function(a,c,d,e){if(a&&b.isFunction(a.reduce))return a.reduce(b.bind(d,e),c);b.each(a,function(f,g,h){c=d.call(e,c,f,g,h)});return c};b.reduceRight=function(a,c,d,e){if(a&&b.isFunction(a.reduceRight))return a.reduceRight(b.bind(d,e),c); var f=b.clone(b.toArray(a)).reverse();b.each(f,function(g,h){c=d.call(e,c,g,h,a)});return c};b.detect=function(a,c,d){var e;b.each(a,function(f,g,h){if(c.call(d,f,g,h)){e=f;b.breakLoop()}});return e};b.select=function(a,c,d){if(a&&b.isFunction(a.filter))return a.filter(c,d);var e=[];b.each(a,function(f,g,h){c.call(d,f,g,h)&&e.push(f)});return e};b.reject=function(a,c,d){var e=[];b.each(a,function(f,g,h){!c.call(d,f,g,h)&&e.push(f)});return e};b.all=function(a,c,d){c=c||b.identity;if(a&&b.isFunction(a.every))return a.every(c, 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/basic/theme.conf b/sphinx/themes/basic/theme.conf index d1fe6d1f..f7283730 100644 --- a/sphinx/themes/basic/theme.conf +++ b/sphinx/themes/basic/theme.conf @@ -5,3 +5,4 @@ pygments_style = none [options] nosidebar = false +sidebarwidth = 230
\ No newline at end of file diff --git a/sphinx/themes/default/static/default.css_t b/sphinx/themes/default/static/default.css_t index ba20dca7..85c9436a 100644 --- a/sphinx/themes/default/static/default.css_t +++ b/sphinx/themes/default/static/default.css_t @@ -32,7 +32,7 @@ div.documentwrapper { } div.bodywrapper { - margin: 0 0 0 230px; + margin: 0 0 0 {{ theme_sidebarwidth|toint }}px; } div.body { @@ -43,7 +43,7 @@ div.body { {%- if theme_rightsidebar|tobool %} div.bodywrapper { - margin: 0 230px 0 0; + margin: 0 {{ theme_sidebarwidth|toint }}px 0 0; } {%- endif %} 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/nature/static/nature.css_t b/sphinx/themes/nature/static/nature.css_t index f9986c90..a98bd420 100644 --- a/sphinx/themes/nature/static/nature.css_t +++ b/sphinx/themes/nature/static/nature.css_t @@ -28,7 +28,7 @@ div.documentwrapper { } div.bodywrapper { - margin: 0 0 0 230px; + margin: 0 0 0 {{ theme_sidebarwidth|toint }}px; } hr { 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..442cbec0 --- /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 {{ theme_sidebarwidth }}px; +} + +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: {{ theme_sidebarwidth|toint + 10 }}px; +} + +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/themes/sphinxdoc/static/sphinxdoc.css b/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t index 0a428074..f535696b 100644 --- a/sphinx/themes/sphinxdoc/static/sphinxdoc.css +++ b/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t @@ -38,7 +38,7 @@ div.document { } div.bodywrapper { - margin: 0 240px 0 0; + margin: 0 {{ theme_sidebarwidth|toint + 10 }}px 0 0; border-right: 1px solid #ccc; } @@ -88,7 +88,7 @@ div.sphinxsidebarwrapper { div.sphinxsidebar { margin: 0; padding: 0.5em 15px 15px 0; - width: 210px; + width: {{ theme_sidebarwidth|toint - 20 }}px; float: right; font-size: 1em; text-align: left; diff --git a/sphinx/themes/traditional/static/traditional.css b/sphinx/themes/traditional/static/traditional.css_t index bac58c0d..51567255 100644 --- a/sphinx/themes/traditional/static/traditional.css +++ b/sphinx/themes/traditional/static/traditional.css_t @@ -23,7 +23,7 @@ div.documentwrapper { } div.bodywrapper { - margin: 0 230px 0 0; + margin: 0 {{ theme_sidebarwidth }}px 0 0; } div.body { @@ -40,7 +40,7 @@ div.sphinxsidebarwrapper { div.sphinxsidebar { float: right; margin-left: -100%; - width: 230px; + width: {{ theme_sidebarwidth }}px; } div.clearer { @@ -667,38 +667,6 @@ h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { font-style: italic; } -form.comment { - margin: 0; - padding: 10px 30px 10px 30px; - background-color: #eee; -} - -form.comment h3 { - background-color: #326591; - color: white; - margin: -10px -30px 10px -30px; - padding: 5px; - font-size: 1.4em; -} - -form.comment input, -form.comment textarea { - border: 1px solid #ccc; - padding: 2px; - font-family: sans-serif; - font-size: 13px; -} - -form.comment input[type="text"] { - width: 240px; -} - -form.comment textarea { - width: 100%; - height: 200px; - margin-bottom: 10px; -} - /* :::: PRINT :::: */ @media print { div.documentwrapper { 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 b7e64b11..0721118e 100644 --- a/sphinx/util/__init__.py +++ b/sphinx/util/__init__.py @@ -18,7 +18,8 @@ import tempfile import posixpath import traceback from os import path -from codecs import BOM_UTF8 +from codecs import open, BOM_UTF8 +from collections import deque import docutils from docutils.utils import relative_path @@ -49,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*. """ @@ -76,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*. """ @@ -141,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() @@ -163,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 @@ -283,8 +287,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() @@ -337,10 +340,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 = [] @@ -348,3 +357,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/inspect.py b/sphinx/util/inspect.py index a0574003..ff6c222d 100644 --- a/sphinx/util/inspect.py +++ b/sphinx/util/inspect.py @@ -9,6 +9,44 @@ :license: BSD, see LICENSE for details. """ +import sys + +# this imports the standard library inspect module without resorting to +# relatively import this module +inspect = __import__('inspect') + + +if sys.version_info >= (2, 5): + from functools import partial + def getargspec(func): + """Like inspect.getargspec but supports functools.partial as well.""" + if inspect.ismethod(func): + func = func.im_func + parts = 0, () + if type(func) is partial: + parts = len(func.args), func.keywords.keys() + func = func.func + if not inspect.isfunction(func): + raise TypeError('%r is not a Python function' % func) + args, varargs, varkw = inspect.getargs(func.func_code) + func_defaults = func.func_defaults + if func_defaults: + func_defaults = list(func_defaults) + if parts[0]: + args = args[parts[0]:] + if parts[1]: + for arg in parts[1]: + i = args.index(arg) - len(args) + del args[i] + try: + del func_defaults[i] + except IndexError: + pass + return inspect.ArgSpec(args, varargs, varkw, func_defaults) +else: + getargspec = inspect.getargspec + + def isdescriptor(x): """Check if the object is some kind of descriptor.""" for item in '__get__', '__set__', '__delete__': @@ -41,3 +79,12 @@ def safe_getmembers(object, predicate=None): results.append((key, value)) results.sort() return results + + +def safe_repr(object): + """A repr() implementation that returns text safe to use in reST context.""" + try: + s = repr(object) + except Exception: + raise ValueError + return s.replace('\n', ' ') 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..682ea77b 100644 --- a/sphinx/util/nodes.py +++ b/sphinx/util/nodes.py @@ -10,19 +10,50 @@ """ 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 explicit_title_re = re.compile(r'^(.+?)\s*(?<!\x00)<(.*?)>$', re.DOTALL) caption_ref_re = explicit_title_re # b/w compat alias +IGNORED_NODES = ( + nodes.Invisible, + nodes.Inline, + nodes.literal_block, + nodes.doctest_block, + #XXX there are probably more +) +def extract_messages(doctree): + """Extract translatable messages from a document tree.""" + for node in doctree.traverse(nodes.TextElement): + if not node.source: + continue # built-in message + if isinstance(node, IGNORED_NODES): + 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 +82,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 +186,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..b07fa6ab 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 @@ -20,6 +21,7 @@ from os import path EEXIST = getattr(errno, 'EEXIST', 0) ENOENT = getattr(errno, 'ENOENT', 0) EPIPE = getattr(errno, 'EPIPE', 0) +EINVAL = getattr(errno, 'EINVAL', 0) # SEP separates path elements in the canonical file names # @@ -58,8 +60,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 +126,17 @@ no_fn_re = re.compile(r'[^a-zA-Z0-9_-]') def make_filename(string): return no_fn_re.sub('', string) +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 + -def ustrftime(format, *args): - # strftime for unicode strings - return time.strftime(unicode(format).encode('utf-8'), *args).decode('utf-8') +def safe_relpath(path, start=None): + try: + return os.path.relpath(path, start) + except ValueError: + return path 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..cd9f6e2f 100644 --- a/sphinx/util/pycompat.py +++ b/sphinx/util/pycompat.py @@ -13,11 +13,116 @@ 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 = '' + # StringIO/BytesIO classes + from io import StringIO, BytesIO, TextIOWrapper + # safely encode a string for printing to the terminal + def terminal_safe(s): + return s.encode('ascii', 'backslashreplace').decode('ascii') + # 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' + from StringIO import StringIO + BytesIO = StringIO + # no need to refactor on 2.x versions + convert_with_2to3 = None + def TextIOWrapper(stream, encoding): + return codecs.lookup(encoding or 'ascii')[2](stream) + # safely encode a string for printing to the terminal + def terminal_safe(s): + return s.encode('ascii', 'backslashreplace') + + +# ------------------------------------------------------------------------------ +# 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 +135,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..d45ed1d3 --- /dev/null +++ b/sphinx/versioning.py @@ -0,0 +1,127 @@ +# -*- 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 sphinx.util.pycompat import product, zip_longest, all + + +# 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 = {} + 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..e054812e --- /dev/null +++ b/sphinx/websupport/__init__.py @@ -0,0 +1,456 @@ +# -*- 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, + 'raw_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..385c3fa9 --- /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([context_start > 0 and '...' or '', + text[context_start:context_end], + context_end < len(text) and '...' or '']) + + 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..33fe54f3 --- /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 = prefix == '+' and 'ins' or 'del' + text = self._highlight_text(text, next, tag) + css_class = prefix == '+' and 'prop-added' or '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..e6eccfe9 --- /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 bool(node) + + 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 f8770264..7872dabe 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): @@ -181,7 +186,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']))) @@ -203,14 +208,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) @@ -233,10 +238,12 @@ class HTMLTranslator(BaseTranslator): lang = node['language'] if node.has_key('linenos'): linenos = node['linenos'] + highlight_args = node.get('highlight_args', {}) def warner(msg): self.builder.warn(msg, (self.builder.current_docname, node.line)) highlighted = self.highlighter.highlight_block( - node.rawsource, lang, linenos, warn=warner) + node.rawsource, lang, warn=warner, linenos=linenos, + **highlight_args) starttag = self.starttag(node, 'div', suffix='', CLASS='highlight-%s' % lang) self.body.append(starttag + highlighted + '</div>\n') @@ -253,9 +260,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 @@ -334,22 +338,20 @@ class HTMLTranslator(BaseTranslator): if node['uri'].lower().endswith('svg') or \ node['uri'].lower().endswith('svgz'): - atts = {'data': node['uri'], 'type': 'image/svg+xml'} + atts = {'src': node['uri']} if node.has_key('width'): atts['width'] = node['width'] if node.has_key('height'): atts['height'] = node['height'] + if node.has_key('alt'): + atts['alt'] = node['alt'] if node.has_key('align'): self.body.append('<div align="%s" class="align-%s">' % (node['align'], node['align'])) self.context.append('</div>\n') else: self.context.append('') - embatts = atts.copy() - embatts['src'] = embatts.pop('data') - self.body.append(self.starttag(node, 'object', '', **atts)) - self.body.append(self.emptytag(node, 'embed', '', **embatts)) - self.body.append('</object>\n') + self.body.append(self.emptytag(node, 'img', '', **atts)) return if node.has_key('scale'): @@ -488,24 +490,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 9fa85b3f..14e24cfb 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 @@ -39,6 +40,7 @@ HEADER = r'''%% Generated by Sphinx. %(fncychap)s %(longtable)s \usepackage{sphinx} +\usepackage{multirow} %(preamble)s \title{%(title)s} @@ -250,6 +252,9 @@ class LaTeXTranslator(nodes.NodeVisitor): self.no_contractions = 0 self.compact_list = 0 self.first_param = 0 + self.previous_spanning_row = 0 + self.previous_spanning_column = 0 + self.remember_multirow = {} def astext(self): return (HEADER % self.elements + @@ -330,7 +335,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 @@ -621,6 +626,7 @@ class LaTeXTranslator(nodes.NodeVisitor): self.table = Table() self.table.longtable = 'longtable' in node['classes'] self.tablebody = [] + self.tableheaders = [] # Redirect body output until table is finished. self._body = self.body self.body = self.tablebody @@ -665,11 +671,13 @@ class LaTeXTranslator(nodes.NodeVisitor): self.next_table_ids.clear() if self.table.longtable: self.body.append('\\hline\n') + self.body.extend(self.tableheaders) self.body.append('\\endfirsthead\n\n') self.body.append('\\multicolumn{%s}{c}%%\n' % self.table.colcount) self.body.append(r'{{\bfseries \tablename\ \thetable{} -- %s}} \\' % _('continued from previous page')) self.body.append('\n\\hline\n') + self.body.extend(self.tableheaders) self.body.append('\\endhead\n\n') self.body.append(ur'\hline \multicolumn{%s}{|r|}{{%s}} \\ \hline' % (self.table.colcount, @@ -679,6 +687,7 @@ class LaTeXTranslator(nodes.NodeVisitor): self.body.append('\\endlastfoot\n\n') else: self.body.append('\\hline\n') + self.body.extend(self.tableheaders) self.body.extend(self.tablebody) self.body.append(endmacro) if not self.table.longtable and self.table.caption is not None: @@ -697,39 +706,60 @@ class LaTeXTranslator(nodes.NodeVisitor): pass def visit_thead(self, node): + self.table.had_head = True if self.next_table_colspec: self.table.colspec = '{%s}\n' % self.next_table_colspec self.next_table_colspec = None -# self.body.append('\\hline\n') -# self.table.had_head = True + # Redirect head output until header is finished. see visit_tbody. + self.body = self.tableheaders def depart_thead(self, node): - self.body.append('\\hline\n') + pass def visit_tbody(self, node): if not self.table.had_head: self.visit_thead(node) + self.body = self.tablebody def depart_tbody(self, node): - self.body.append('\\hline\n') + pass def visit_row(self, node): self.table.col = 0 def depart_row(self, node): - self.body.append('\\\\\n') + if self.previous_spanning_row == 1: + self.previous_spanning_row = 0 + self.body.append('\\\\\n') + else: + self.body.append('\\\\\\hline\n') self.table.rowcount += 1 def visit_entry(self, node): - if node.has_key('morerows') or node.has_key('morecols'): - raise UnsupportedError('%s:%s: column or row spanning cells are ' - 'not yet implemented.' % - (self.curfilestack[-1], node.line or '')) + if self.remember_multirow.get(0, 0) > 1: + self.body.append(' & ') if self.table.col > 0: self.body.append(' & ') self.table.col += 1 + self.context.append('') + if 'morerows' in node: + self.body.append(' \multirow{') + self.previous_spanning_row = 1 + self.body.append(str(node.get('morerows') + 1)) + self.body.append('}{*}{') + self.context.append('}') + self.remember_multirow[self.table.col] = node.get('morerows') + 1 + if 'morecols' in node: + self.body.append(' \multicolumn{') + self.body.append(str(node.get('morecols') + 1)) + if self.table.col == 1: + self.body.append('}{|l|}{') + else: + self.body.append('}{l|}{') + self.context.append('}') if isinstance(node.parent.parent, nodes.thead): self.body.append('\\textbf{') self.context.append('}') - else: - self.context.append('') + if self.remember_multirow.get(self.table.col + 1, 0) > 1: + self.remember_multirow[self.table.col + 1] -= 1 + self.context.append(' & ') def depart_entry(self, node): self.body.append(self.context.pop()) # header @@ -781,13 +811,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 +903,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 +961,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' @@ -1063,29 +1097,39 @@ 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}' + r'\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): @@ -1103,11 +1147,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('#'): @@ -1206,15 +1256,13 @@ class LaTeXTranslator(nodes.NodeVisitor): def visit_literal(self, node): self.no_contractions += 1 - content = self.encode(node.astext().strip()) - self.no_contractions -= 1 if self.in_title: - self.body.append(r'\texttt{%s}' % content) - elif node.has_key('role') and node['role'] == 'samp': - self.body.append(r'\samp{%s}' % content) + self.body.append(r'\texttt{') else: - self.body.append(r'\code{%s}' % content) - raise nodes.SkipNode + self.body.append(r'\code{') + def depart_literal(self, node): + self.no_contractions -= 1 + self.body.append('}') def visit_footnote_reference(self, node): num = node.astext().strip() @@ -1243,15 +1291,16 @@ 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'] + highlight_args = node.get('highlight_args', {}) def warner(msg): self.builder.warn(msg, (self.curfilestack[-1], node.line)) - hlcode = self.highlighter.highlight_block(code, lang, linenos, - warn=warner) + hlcode = self.highlighter.highlight_block(code, lang, warn=warner, + linenos=linenos, **highlight_args) # workaround for Unicode issue hlcode = hlcode.replace(u'€', u'@texteuro[]') # must use original Verbatim environment and "tabular" environment @@ -1431,7 +1480,9 @@ class LaTeXTranslator(nodes.NodeVisitor): self.verbatim += node.astext() else: text = self.encode(node.astext()) - self.body.append(educate_quotes_latex(text)) + if not self.no_contractions: + text = educate_quotes_latex(text) + self.body.append(text) def depart_Text(self, node): pass diff --git a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py index 5377ee58..620873bb 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 @@ -193,7 +197,7 @@ class ManualPageTranslator(BaseTranslator): def visit_admonition(self, node, name=None): if name: self.body.append('.IP %s\n' % - admonitionlabels.get(name, name)) + self.deunicode(admonitionlabels.get(name, name))) def visit_productionlist(self, node): self.ensure_eol() @@ -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..5799e023 --- /dev/null +++ b/sphinx/writers/texinfo.py @@ -0,0 +1,1372 @@ +# -*- 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 +import string +import textwrap +from os import path + +from docutils import nodes, writers + +from sphinx import addnodes, __version__ +from sphinx.locale import versionlabels, _ +from sphinx.util import ustrftime +from sphinx.writers.latex import collected_footnote + + +COPYING = """\ +@quotation +%(project)s %(release)s, %(date)s + +%(author)s + +Copyright @copyright{} %(copyright)s +@end quotation +""" + +TEMPLATE = """\ +\\input texinfo @c -*-texinfo-*- +@c %%**start of header +@setfilename %(filename)s +@documentencoding UTF-8 +@ifinfo +@*Generated by Sphinx """ + __version__ + """.@* +@end ifinfo +@settitle %(title)s +@defindex ge +@paragraphindent %(paragraphindent)s +@exampleindent %(exampleindent)s +@afourlatex +%(direntry)s +@c %%**end of header + +@copying +%(copying)s +@end copying + +@titlepage +@title %(title)s +@insertcopying +@end titlepage +@contents + +@c %%** start of user preamble +%(preamble)s +@c %%** end of user preamble + +@ifnottex +@node Top +@top %(title)s +@insertcopying +@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 + + +class TexinfoWriter(writers.Writer): + """Texinfo writer for generating Texinfo documents.""" + supported = ('texinfo', 'texi') + + settings_spec = ( + 'Texinfo Specific Options', None, ( + ("Name of the Info file", ['--texinfo-filename'], {'default': ''}), + ('Dir entry', ['--texinfo-dir-entry'], {'default': ''}), + ('Description', ['--texinfo-dir-description'], {'default': ''}), + ('Category', ['--texinfo-dir-category'], {'default': + 'Miscellaneous'}))) + + settings_defaults = {} + + 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 = { + 'author': '', + 'body': '', + 'copying': '', + 'date': '', + 'direntry': '', + 'exampleindent': 4, + 'filename': '', + 'paragraphindent': 2, + 'preamble': '', + 'project': '', + 'release': '', + 'title': '', + } + + 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.indices = [] # (node name, content) + self.short_ids = {} # anchors --> short ids + 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_indices() + self.collect_node_names() + self.collect_node_menus() + self.collect_rellinks() + + self.body = [] + self.context = [] + self.previous_section = None + self.section_level = 0 + self.seen_title = False + self.next_section_ids = set() + self.escape_newlines = 0 + self.curfilestack = [] + self.footnotestack = [] + self.in_footnote = 0 + self.handled_abbrs = set() + + def finish(self): + if self.previous_section is None: + self.add_menu('Top') + for index in self.indices: + name, content = index + pointers = tuple([name] + self.rellinks[name]) + self.body.append('\n@node %s,%s,%s,%s\n' % pointers) + self.body.append('@unnumbered %s\n\n%s\n' % (name, content)) + + while self.referenced_ids: + # handle xrefs with missing anchors + r = self.referenced_ids.pop() + if r not in self.written_ids: + self.body.append('@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': settings.author, + # if empty, use basename of input file + 'filename': settings.texinfo_filename, + 'release': self.escape(self.builder.config.release), + 'project': self.escape(self.builder.config.project), + 'copyright': self.escape(self.builder.config.copyright), + 'date': self.escape(self.builder.config.today or + ustrftime(self.builder.config.today_fmt + or _('%B %d, %Y'))) + }) + # title + title = elements['title'] + if not title: + title = self.document.next_node(nodes.title) + title = (title and title.astext()) or '<untitled>' + elements['title'] = self.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: + entry = self.format_menu_entry( + self.escape_menu(settings.texinfo_dir_entry), + '(%s)' % elements['filename'], + self.escape_arg(settings.texinfo_dir_description)) + elements['direntry'] = ('@dircategory %s\n' + '@direntry\n' + '%s' + '@end direntry\n') % ( + self.escape_id(settings.texinfo_dir_category), entry) + elements['copying'] = COPYING % elements + # 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.""" + # must have a "Top" node + self.document['node_name'] = 'Top' + self.node_names['Top'] = 'Top' + self.written_ids.update(('Top', 'top')) + # each index is a node + for name, content in self.indices: + self.node_names[name] = name + self.written_ids.add(name) + # each section is also a node + for section in self.document.traverse(nodes.section): + title = section.next_node(nodes.Titular) + name = (title and title.astext()) or '<untitled>' + node_id = self.escape_id(name) or '<untitled>' + assert node_id and name + nth, suffix = 1, '' + while node_id + suffix 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 + section['node_name'] = node_id + self.node_names[node_id] = name + self.written_ids.add(node_id) + + 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 = [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' + # handle the indices + for name, content in self.indices: + node_menus[name] = () + node_menus['Top'].append(name) + + 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' + + ## 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(self, s): + """Return a string with Texinfo command characters escaped.""" + s = s.replace('@', '@@') + s = s.replace('{', '@{') + s = s.replace('}', '@}') + # prevent `` and '' quote conversion + s = s.replace('``', "`@w{`}") + s = s.replace("''", "'@w{'}") + # prevent "--" from being converted to an "em dash" + # s = s.replace('-', '@w{-}') + return s + + def escape_arg(self, s): + """Return an escaped string suitable for use as an argument + to a Texinfo command.""" + s = self.escape(s) + # commas are the argument delimeters + s = s.replace(',', '@comma{}') + # normalize white space + s = ' '.join(s.split()).strip() + return s + + def escape_id(self, s): + """Return an escaped string suitable for node names and anchors.""" + bad_chars = ',:.()' + for bc in bad_chars: + s = s.replace(bc, ' ') + s = ' '.join(s.split()).strip() + return self.escape(s) + + def escape_menu(self, s): + """Return an escaped string suitable for menu entries.""" + s = self.escape_arg(s) + s = s.replace(':', ';') + s = ' '.join(s.split()).strip() + return s + + def ensure_eol(self): + """Ensure the last line in body is terminated by new line.""" + if self.body and self.body[-1][-1:] != '\n': + self.body.append('\n') + + def format_menu_entry(self, name, node_name, desc): + if name == node_name: + s = '* %s:: ' % (name,) + else: + s = '* %s: %s. ' % (name, node_name) + offset = max((24, (len(name) + 4) % 78)) + wdesc = '\n'.join(' ' * offset + l for l in + textwrap.wrap(desc, width=78-offset)) + return s + wdesc.strip() + '\n' + + def add_menu_entries(self, entries, reg=re.compile(r'\s+---?\s+')): + for entry in entries: + name = self.node_names[entry] + # special formatting for entries that are divided by an em-dash + parts = reg.split(name, 1) + if len(parts) == 2: + name, desc = parts + else: + desc = '' + name = self.escape_menu(name) + desc = self.escape(desc) + self.body.append(self.format_menu_entry(name, entry, desc)) + + def add_menu(self, node_name): + entries = self.node_menus[node_name] + if not entries: + return + self.body.append('\n@menu\n') + self.add_menu_entries(entries) + if not self.node_menus[entries[0]]: + self.body.append('\n@end menu\n') + return + + def _add_detailed_menu(name): + entries = self.node_menus[name] + if not entries: + return + self.body.append('\n%s\n\n' % (self.escape(self.node_names[name],))) + self.add_menu_entries(entries) + for subentry in entries: + _add_detailed_menu(subentry) + + if node_name == 'Top': + self.body.append('\n@detailmenu\n' + ' --- The Detailed Node Listing ---\n') + for entry in entries: + _add_detailed_menu(entry) + if node_name == 'Top': + self.body.append('\n@end detailmenu') + self.body.append('\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 + + def collect_indices(self): + def generate(content, collapsed): + ret = ['\n@menu\n'] + for letter, entries in content: + for entry in entries: + if not entry[3]: + continue + name = self.escape_menu(entry[0]) + sid = self.get_short_id('%s:%s' % (entry[2], entry[3])) + desc = self.escape_arg(entry[6]) + me = self.format_menu_entry(name, sid, desc) + ret.append(me) + ret.append('@end menu\n') + return ''.join(ret) + + indices_config = self.builder.config.texinfo_domain_indices + if indices_config: + for domain in self.builder.env.domains.itervalues(): + for indexcls in domain.indices: + indexname = '%s-%s' % (domain.name, indexcls.name) + if isinstance(indices_config, list): + if indexname not in indices_config: + continue + content, collapsed = indexcls(domain).generate( + self.builder.docnames) + if not content: + continue + node_name = self.escape_id(indexcls.localname) + self.indices.append((node_name, + generate(content, collapsed))) + self.indices.append((_('Index'), '\n@printindex ge\n')) + + # this is copied from the latex writer + # TODO: move this to sphinx.util + + def collect_footnotes(self, node): + fnotes = {} + def footnotes_under(n): + if isinstance(n, nodes.footnote): + yield n + else: + for c in n.children: + if isinstance(c, addnodes.start_of_file): + continue + for k in footnotes_under(c): + yield k + for fn in footnotes_under(node): + num = fn.children[0].astext().strip() + fnotes[num] = [collected_footnote(*fn.children), False] + return fnotes + + ## 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, node): + if id.startswith('index-'): + return + id = self.curfilestack[-1] + ':' + id + eid = self.escape_id(id) + sid = self.get_short_id(id) + for id in (eid, sid): + if id not in self.written_ids: + self.body.append('@anchor{%s}' % id) + self.written_ids.add(id) + + def add_xref(self, id, name, node): + name = self.escape_menu(name) + sid = self.get_short_id(id) + self.body.append('@pxref{%s,,%s}' % (sid, name)) + self.referenced_ids.add(sid) + self.referenced_ids.add(self.escape_id(id)) + + ## Visiting + + def visit_document(self, node): + self.footnotestack.append(self.collect_footnotes(node)) + self.curfilestack.append(node.get('docname', '')) + if 'docname' in node: + self.add_anchor(':doc', node) + def depart_document(self, node): + self.footnotestack.pop() + self.curfilestack.pop() + + def visit_Text(self, node): + s = self.escape(node.astext()) + if self.escape_newlines: + s = s.replace('\n', ' ') + self.body.append(s) + def depart_Text(self, node): + pass + + def visit_section(self, node): + self.next_section_ids.update(node.get('ids', [])) + if not self.seen_title: + return + if self.previous_section: + self.add_menu(self.previous_section['node_name']) + else: + self.add_menu('Top') + + node_name = node['node_name'] + pointers = tuple([node_name] + self.rellinks[node_name]) + self.body.append('\n@node %s,%s,%s,%s\n' % pointers) + for id in self.next_section_ids: + self.add_anchor(id, node) + + self.next_section_ids.clear() + 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, nodes.sidebar, nodes.topic)): + raise nodes.SkipNode + elif not isinstance(parent, nodes.section): + self.builder.warn( + 'encountered title node not in section, topic, table, ' + 'admonition or sidebar', (self.curfilestack[-1], node.line)) + self.visit_rubric(node) + else: + try: + heading = self.headings[self.section_level] + except IndexError: + heading = self.headings[-1] + self.body.append('\n%s ' % heading) + + def depart_title(self, node): + self.body.append('\n\n') + + def visit_rubric(self, node): + if len(node.children) == 1 and node.children[0].astext() in \ + ('Footnotes', _('Footnotes')): + raise nodes.SkipNode + try: + rubric = self.rubrics[self.section_level] + except IndexError: + rubric = self.rubrics[-1] + self.body.append('\n%s ' % rubric) + def depart_rubric(self, node): + self.body.append('\n\n') + + def visit_subtitle(self, node): + self.body.append('\n\n@noindent\n') + def depart_subtitle(self, node): + self.body.append('\n\n') + + ## References + + def visit_target(self, node): + # postpone the labels until after the sectioning command + parindex = node.parent.index(node) + try: + try: + next = node.parent[parindex+1] + except IndexError: + # last node in parent, look at next after parent + # (for section of equal level) + next = node.parent.parent[node.parent.parent.index(node.parent)] + if isinstance(next, nodes.section): + if node.get('refid'): + self.next_section_ids.add(node['refid']) + self.next_section_ids.update(node['ids']) + return + except IndexError: + pass + if 'refuri' in node: + return + if node.get('refid'): + self.add_anchor(node['refid'], node) + for id in node['ids']: + self.add_anchor(id, node) + def depart_target(self, node): + pass + + def visit_reference(self, node): + # an xref's target is displayed in Info so we ignore a few + # cases for the sake of appearance + if isinstance(node.parent, (nodes.title, addnodes.desc_type,)): + return + if isinstance(node[0], nodes.image): + return + name = node.get('name', node.astext()).strip() + uri = node.get('refuri', '') + if not uri and node.get('refid'): + uri = '%' + self.curfilestack[-1] + '#' + node['refid'] + if not uri: + return + if uri.startswith('mailto:'): + uri = self.escape_arg(uri[7:]) + name = self.escape_arg(name) + if not name or name == uri: + self.body.append('@email{%s}' % uri) + else: + self.body.append('@email{%s,%s}' % (uri, name)) + elif uri.startswith('#'): + # references to labels in the same document + id = self.curfilestack[-1] + ':' + uri[1:] + self.add_xref(id, name, node) + elif uri.startswith('%'): + # references to documents or labels inside documents + hashindex = uri.find('#') + if hashindex == -1: + # reference to the document + id = uri[1:] + '::doc' + else: + # reference to a label + id = uri[1:].replace('#', ':') + self.add_xref(id, name, node) + elif uri.startswith('info:'): + # references to an external Info file + uri = uri[5:].replace('_', ' ') + uri = self.escape_arg(uri) + id = 'Top' + if '#' in uri: + uri, id = uri.split('#', 1) + id = self.escape_id(id) + name = self.escape_menu(name) + if name == id: + self.body.append('@pxref{%s,,,%s}' % (id, uri)) + else: + self.body.append('@pxref{%s,,%s,%s}' % (id, name, uri)) + else: + uri = self.escape_arg(uri) + name = self.escape_arg(name) + show_urls = self.builder.config.texinfo_show_urls + if self.in_footnote: + show_urls = 'inline' + if not name or uri == name: + self.body.append('@indicateurl{%s}' % uri) + elif show_urls == 'inline': + self.body.append('@uref{%s,%s}' % (uri, name)) + elif show_urls == 'no': + self.body.append('@uref{%s,,%s}' % (uri, name)) + else: + self.body.append('%s@footnote{%s}' % (name, uri)) + raise nodes.SkipNode + + def depart_reference(self, node): + pass + + def visit_title_reference(self, node): + text = node.astext() + self.body.append('@cite{%s}' % self.escape_arg(text)) + raise nodes.SkipNode + + ## Blocks + + def visit_paragraph(self, node): + if 'continued' in node or isinstance(node.parent, nodes.compound): + self.body.append('\n@noindent') + self.body.append('\n') + def depart_paragraph(self, node): + self.body.append('\n') + + def visit_block_quote(self, node): + self.body.append('\n@quotation\n') + def depart_block_quote(self, node): + self.ensure_eol() + self.body.append('@end quotation\n') + + def visit_literal_block(self, node): + self.body.append('\n@example\n') + def depart_literal_block(self, node): + self.body.append('\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): + if not isinstance(node.parent, nodes.line_block): + self.body.append('\n\n') + self.body.append('@display\n') + def depart_line_block(self, node): + self.body.append('@end display\n') + if not isinstance(node.parent, nodes.line_block): + self.body.append('\n\n') + + def visit_line(self, node): + self.escape_newlines += 1 + def depart_line(self, node): + self.body.append('@w{ }\n') + self.escape_newlines -= 1 + + ## Inline + + def visit_strong(self, node): + self.body.append('@strong{') + def depart_strong(self, node): + self.body.append('}') + + def visit_emphasis(self, node): + self.body.append('@emph{') + def depart_emphasis(self, node): + self.body.append('}') + + def visit_literal(self, node): + self.body.append('@code{') + def depart_literal(self, node): + self.body.append('}') + + def visit_superscript(self, node): + self.body.append('@w{^') + def depart_superscript(self, node): + self.body.append('}') + + def visit_subscript(self, node): + self.body.append('@w{[') + def depart_subscript(self, node): + self.body.append(']}') + + ## Footnotes + + def visit_footnote(self, node): + raise nodes.SkipNode + + def visit_collected_footnote(self, node): + self.in_footnote += 1 + self.body.append('@footnote{') + def depart_collected_footnote(self, node): + self.body.append('}') + self.in_footnote -= 1 + + def visit_footnote_reference(self, node): + num = node.astext().strip() + try: + footnode, used = self.footnotestack[-1][num] + except (KeyError, IndexError): + raise nodes.SkipNode + # footnotes are repeated for each reference + footnode.walkabout(self) + raise nodes.SkipChildren + + def visit_citation(self, node): + for id in node.get('ids'): + self.add_anchor(id, node) + def depart_citation(self, node): + pass + + def visit_citation_reference(self, node): + self.body.append('@w{[') + def depart_citation_reference(self, node): + self.body.append(']}') + + ## Lists + + def visit_bullet_list(self, node): + bullet = node.get('bullet', '*') + self.body.append('\n\n@itemize %s\n' % bullet) + def depart_bullet_list(self, node): + self.ensure_eol() + self.body.append('@end itemize\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.body.append('\n\n@enumerate %s\n' % start) + def depart_enumerated_list(self, node): + self.ensure_eol() + self.body.append('@end enumerate\n') + + def visit_list_item(self, node): + self.body.append('\n@item ') + def depart_list_item(self, node): + pass + + ## Option List + + def visit_option_list(self, node): + self.body.append('\n\n@table @option\n') + def depart_option_list(self, node): + self.ensure_eol() + self.body.append('@end table\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.body.append('\n%s ' % self.at_item_x) + 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.body.append(node.get('delimiter', ' ')) + def depart_option_argument(self, node): + pass + + def visit_description(self, node): + self.body.append('\n') + def depart_description(self, node): + pass + + ## Definitions + + def visit_definition_list(self, node): + self.body.append('\n\n@table @asis\n') + def depart_definition_list(self, node): + self.ensure_eol() + self.body.append('@end table\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): + for id in node.get('ids'): + self.add_anchor(id, node) + # anchors and indexes need to go in front + for n in node[::]: + if isinstance(n, (addnodes.index, nodes.target)): + n.walkabout(self) + node.remove(n) + self.body.append('\n%s ' % self.at_item_x) + self.at_item_x = '@itemx' + def depart_term(self, node): + pass + + def visit_termsep(self, node): + self.body.append('\n%s ' % self.at_item_x) + def depart_termsep(self, node): + pass + + def visit_classifier(self, node): + self.body.append(' : ') + def depart_classifier(self, node): + pass + + def visit_definition(self, node): + self.body.append('\n') + def depart_definition(self, node): + pass + + ## Tables + + def visit_table(self, node): + self.entry_sep = '@item' + def depart_table(self, node): + self.body.append('\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.body.append('\n\n@multitable ') + for i, n in enumerate(self.colwidths): + self.body.append('{%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.body.append('\n%s\n' % self.entry_sep) + self.entry_sep = '@tab' + def depart_entry(self, node): + for i in xrange(node.get('morecols', 0)): + self.body.append('\n@tab\n') + + ## Field Lists + + def visit_field_list(self, node): + self.body.append('\n\n@itemize @w\n') + def depart_field_list(self, node): + self.ensure_eol() + self.body.append('@end itemize\n') + + def visit_field(self, node): + if not isinstance(node.parent, nodes.field_list): + self.visit_field_list(node) + def depart_field(self, node): + if not isinstance(node.parent, nodes.field_list): + self.depart_field_list(node) + + def visit_field_name(self, node): + self.body.append('\n@item ') + def depart_field_name(self, node): + self.body.append(': ') + + def visit_field_body(self, node): + pass + def depart_field_body(self, node): + pass + + ## Admonitions + + def visit_admonition(self, node, name=''): + if not name: + name = self.escape(node[0].astext()) + self.body.append('\n@cartouche\n' + '@quotation %s ' % name) + def depart_admonition(self, node): + self.ensure_eol() + self.body.append('@end quotation\n' + '@end cartouche\n') + + def _make_visit_admonition(typ): + def visit(self, node): + self.visit_admonition(node, self.escape(_(typ))) + return visit + + visit_attention = _make_visit_admonition('Attention') + depart_attention = depart_admonition + visit_caution = _make_visit_admonition('Caution') + depart_caution = depart_admonition + visit_danger = _make_visit_admonition('Danger') + depart_danger = depart_admonition + visit_error = _make_visit_admonition('Error') + depart_error = depart_admonition + visit_important = _make_visit_admonition('Important') + depart_important = depart_admonition + visit_note = _make_visit_admonition('Note') + depart_note = depart_admonition + visit_tip = _make_visit_admonition('Tip') + depart_tip = depart_admonition + visit_hint = _make_visit_admonition('Hint') + depart_hint = depart_admonition + visit_warning = _make_visit_admonition('Warning') + depart_warning = depart_admonition + + ## Misc + + def visit_docinfo(self, node): + raise nodes.SkipNode + + def visit_generated(self, node): + raise nodes.SkipNode + + def visit_header(self, node): + raise nodes.SkipNode + + def visit_footer(self, node): + raise nodes.SkipNode + + def visit_container(self, node): + pass + def depart_container(self, node): + pass + + def visit_decoration(self, node): + pass + def depart_decoration(self, node): + pass + + 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.body.append('%s\n' % self.escape(title.astext())) + def depart_topic(self, node): + pass + + def visit_transition(self, node): + self.body.append('\n\n@exdent @w{ %s}\n\n' % ('* ' * 30)) + def depart_transition(self, node): + pass + + def visit_attribution(self, node): + self.body.append('\n\n@center --- ') + def depart_attribution(self, node): + self.body.append('\n\n') + + def visit_raw(self, node): + format = node.get('format', '').split() + if 'texinfo' in format or 'texi' in format: + self.body.append(node.astext()) + raise nodes.SkipNode + + def visit_figure(self, node): + self.body.append('\n\n@float Figure\n') + def depart_figure(self, node): + self.body.append('\n@end float\n\n') + + def visit_caption(self, node): + if not isinstance(node.parent, nodes.figure): + self.builder.warn('caption not inside a figure.', + (self.curfilestack[-1], node.line)) + return + self.body.append('\n@caption{') + def depart_caption(self, node): + if isinstance(node.parent, nodes.figure): + self.body.append('}\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 + # width and height ignored in non-tex output + width = self.tex_image_length(attrs.get('width', '')) + height = self.tex_image_length(attrs.get('height', '')) + alt = self.escape_arg(attrs.get('alt', '')) + self.body.append('\n@image{%s,%s,%s,%s,%s}\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): + self.visit_topic(node) + def depart_sidebar(self, node): + self.depart_topic(node) + + def visit_label(self, node): + self.body.append('@w{(') + def depart_label(self, node): + self.body.append(')} ') + + 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 visit_system_message(self, node): + self.body.append('\n@w{----------- System Message: %s/%s -----------} ' + '(%s, line %s)\n' % ( + node.get('type', '?'), + node.get('level', '?'), + self.escape(node.get('source', '?')), + node.get('line', '?'))) + def depart_system_message(self, node): + pass + + def visit_comment(self, node): + self.body.append('\n') + for line in node.astext().splitlines(): + self.body.append('@c %s\n' % line) + raise nodes.SkipNode + + def visit_problematic(self, node): + self.body.append('>') + def depart_problematic(self, node): + self.body.append('<') + + def unimplemented_visit(self, node): + self.builder.warn("unimplemented node type: %r" % node, + (self.curfilestack[-1], node.line)) + + def unknown_visit(self, node): + self.builder.warn("unknown node type: %r" % node, + (self.curfilestack[-1], node.line)) + 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']: + for id in production.get('ids'): + self.add_anchor(id, production) + s = production['tokenname'].ljust(maxlen) + ' ::=' + lastname = production['tokenname'] + else: + s = '%s ' % (' '*maxlen) + self.body.append(self.escape(s)) + self.body.append(self.escape(production.astext() + '\n')) + self.depart_literal_block(None) + raise nodes.SkipNode + + def visit_production(self, node): + pass + def depart_production(self, node): + pass + + def visit_literal_emphasis(self, node): + self.body.append('@code{') + def depart_literal_emphasis(self, node): + self.body.append('}') + + def visit_index(self, node): + # terminate the line but don't prevent paragraph breaks + if isinstance(node.parent, nodes.paragraph): + self.ensure_eol() + else: + self.body.append('\n') + for entry in node['entries']: + typ, text, tid, text2 = entry + text = self.escape_menu(text) + self.body.append('@geindex %s\n' % text) + + def visit_refcount(self, node): + self.body.append('\n') + def depart_refcount(self, node): + self.body.append('\n') + + def visit_versionmodified(self, node): + intro = versionlabels[node['type']] % node['version'] + if node.children: + intro += ': ' + else: + intro += '.' + self.body.append('\n%s' % self.escape(intro)) + def depart_versionmodified(self, node): + self.body.append('\n') + + def visit_start_of_file(self, node): + # add a document target + self.next_section_ids.add(':doc') + self.curfilestack.append(node['docname']) + self.footnotestack.append(self.collect_footnotes(node)) + def depart_start_of_file(self, node): + self.curfilestack.pop() + self.footnotestack.pop() + + def visit_centered(self, node): + txt = self.escape_arg(node.astext()) + self.body.append('\n\n@center %s\n\n' % txt) + raise nodes.SkipNode + + def visit_seealso(self, node): + self.visit_topic(node) + def depart_seealso(self, node): + self.depart_topic(node) + + def visit_meta(self, node): + raise nodes.SkipNode + + def visit_glossary(self, node): + pass + def depart_glossary(self, node): + pass + + def visit_acks(self, node): + self.body.append('\n\n') + self.body.append(', '.join(n.astext() + for n in node.children[0].children) + '.') + self.body.append('\n\n') + raise nodes.SkipNode + + def visit_highlightlang(self, node): + pass + def depart_highlightlang(self, node): + pass + + ## Desc + + def visit_desc(self, node): + self.at_deffnx = '@deffn' + def depart_desc(self, node): + self.ensure_eol() + self.body.append('@end deffn\n') + + def visit_desc_signature(self, node): + objtype = node.parent['objtype'] + if objtype != 'describe': + for id in node.get('ids'): + self.add_anchor(id, node) + # use the full name of the objtype for the category + try: + domain = self.builder.env.domains[node.parent['domain']] + primary = self.builder.config.primary_domain + name = domain.get_type_name(domain.object_types[objtype], + primary == domain.name) + except KeyError: + name = objtype + category = self.escape_arg(string.capwords(name)) + self.body.append('\n%s {%s} ' % (self.at_deffnx, category)) + self.at_deffnx = '@deffnx' + def depart_desc_signature(self, node): + self.body.append("\n") + + 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.body.append(' -> ') + def depart_desc_returns(self, node): + pass + + def visit_desc_parameterlist(self, node): + self.body.append(' (') + self.first_param = 1 + def depart_desc_parameterlist(self, node): + self.body.append(')') + + def visit_desc_parameter(self, node): + if not self.first_param: + self.body.append(', ') + else: + self.first_param = 0 + text = self.escape(node.astext()) + # replace no-break spaces with normal ones + text = text.replace(u' ', '@w{ }') + self.body.append(text) + raise nodes.SkipNode + + def visit_desc_optional(self, node): + self.body.append('[') + def depart_desc_optional(self, node): + self.body.append(']') + + def visit_desc_annotation(self, node): + raise nodes.SkipNode + + def visit_desc_content(self, node): + pass + def depart_desc_content(self, node): + pass + + def visit_inline(self, node): + pass + def depart_inline(self, node): + pass + + def visit_abbreviation(self, node): + abbr = node.astext() + self.body.append('@abbr{') + if node.hasattr('explanation') and abbr not in self.handled_abbrs: + self.context.append(',%s}' % self.escape_arg(node['explanation'])) + self.handled_abbrs.add(abbr) + 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): + 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 + + def visit_pending_xref(self, node): + pass + def depart_pending_xref(self, node): + pass diff --git a/sphinx/writers/text.py b/sphinx/writers/text.py index b82bfcdb..5d6f49ec 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 @@ -59,6 +59,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 = [] @@ -105,9 +113,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): @@ -232,7 +240,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() @@ -258,7 +266,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 @@ -358,7 +366,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) @@ -394,10 +402,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): @@ -406,7 +414,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: @@ -482,6 +490,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): @@ -658,9 +670,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()) |
