youtube/0000775000175000017500000000000012337403762011605 5ustar thomithomiyoutube/setup.cfg0000664000175000017500000000012112337403761013417 0ustar thomithomi[egg_info] tag_build = dev tag_date = true [aliases] release = egg_info -RDb '' youtube/setup.py0000664000175000017500000000221212337403761013313 0ustar thomithomi# -*- coding: utf-8 -*- from setuptools import setup, find_packages long_desc = ''' This package contains the youtube Sphinx extension. The extension defines a directive, "youtube", for embedding YouTube videos. ''' requires = ['Sphinx>=0.6'] setup( name='sphinxcontrib-youtube', version='1.0', url='http://bitbucket.org/birkenfeld/sphinx-contrib', download_url='http://pypi.python.org/pypi/sphinxcontrib-youtube', license='BSD', author='Chris Pickel', author_email='sfiera@gmail.com', description='Sphinx "youtube" extension', long_description=long_desc, zip_safe=False, classifiers=[ 'Development Status :: 4 - Beta', 'Environment :: Console', 'Environment :: Web Environment', 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Topic :: Documentation', 'Topic :: Utilities', ], platforms='any', packages=find_packages(), include_package_data=True, install_requires=requires, namespace_packages=['sphinxcontrib'], ) youtube/LICENSE0000664000175000017500000000261212337403762012613 0ustar thomithomiIf not otherwise noted, the extensions in this package are licensed under the following license. Copyright (c) 2009 by the contributors (see AUTHORS file). All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. youtube/sphinxcontrib/0000775000175000017500000000000012337403761014476 5ustar thomithomiyoutube/sphinxcontrib/__init__.py0000664000175000017500000000055612337403761016615 0ustar thomithomi# -*- coding: utf-8 -*- """ sphinxcontrib ~~~~~~~~~~~~~ This package is a namespace package that contains all extensions distributed in the ``sphinx-contrib`` distribution. :copyright: Copyright 2007-2009 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ __import__('pkg_resources').declare_namespace(__name__) youtube/sphinxcontrib/youtube.py0000664000175000017500000000621312337403761016546 0ustar thomithomi#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import division import re from docutils import nodes from docutils.parsers.rst import directives from sphinx.util.compat import Directive CONTROL_HEIGHT = 30 def get_size(d, key): if key not in d: return None m = re.match("(\d+)(|%|px)$", d[key]) if not m: raise ValueError("invalid size %r" % d[key]) return int(m.group(1)), m.group(2) or "px" def css(d): return "; ".join(sorted("%s: %s" % kv for kv in d.iteritems())) class youtube(nodes.General, nodes.Element): pass def visit_youtube_node(self, node): aspect = node["aspect"] width = node["width"] height = node["height"] if aspect is None: aspect = 16, 9 if (height is None) and (width is not None) and (width[1] == "%"): style = { "padding-top": "%dpx" % CONTROL_HEIGHT, "padding-bottom": "%f%%" % (width[0] * aspect[1] / aspect[0]), "width": "%d%s" % width, "position": "relative", } self.body.append(self.starttag(node, "div", style=css(style))) style = { "position": "absolute", "top": "0", "left": "0", "width": "100%", "height": "100%", "border": "0", } attrs = { "src": "http://www.youtube.com/embed/%s" % node["id"], "style": css(style), } self.body.append(self.starttag(node, "iframe", **attrs)) self.body.append("") else: if width is None: if height is None: width = 560, "px" else: width = height[0] * aspect[0] / aspect[1], "px" if height is None: height = width[0] * aspect[1] / aspect[0], "px" style = { "width": "%d%s" % width, "height": "%d%s" % (height[0] + CONTROL_HEIGHT, height[1]), "border": "0", } attrs = { "src": "http://www.youtube.com/embed/%s" % node["id"], "style": css(style), } self.body.append(self.starttag(node, "iframe", **attrs)) self.body.append("") def depart_youtube_node(self, node): pass class YouTube(Directive): has_content = True required_arguments = 1 optional_arguments = 0 final_argument_whitespace = False option_spec = { "width": directives.unchanged, "height": directives.unchanged, "aspect": directives.unchanged, } def run(self): if "aspect" in self.options: aspect = self.options.get("aspect") m = re.match("(\d+):(\d+)", aspect) if m is None: raise ValueError("invalid aspect ratio %r" % aspect) aspect = tuple(int(x) for x in m.groups()) else: aspect = None width = get_size(self.options, "width") height = get_size(self.options, "height") return [youtube(id=self.arguments[0], aspect=aspect, width=width, height=height)] def setup(app): app.add_node(youtube, html=(visit_youtube_node, depart_youtube_node)) app.add_directive("youtube", YouTube) youtube/tox.ini0000664000175000017500000000154412337403761013123 0ustar thomithomi## configuration for tox ## tox automates running certain tasks within virtualenvs. The following ## tox configuration outlines a basic setup for running unit tests and ## building sphinx docs in separate virtual environments. Give it a try! [tox] envlist=python,doc # test running [testenv:python] deps= ## if you use nose for test running # nose ## if you use py.test for test running # pytest commands= ## run tests with py.test # py.test [] ## run tests with nose # nose [testenv:doc] deps= sphinx # add all Sphinx extensions and other dependencies required to build your docs commands= ## test links # sphinx-build -W -b linkcheck -d {envtmpdir}/doctrees doc {envtmpdir}/linkcheck ## test html output # sphinx-build -W -b html -d {envtmpdir}/doctrees doc {envtmpdir}/html youtube/MANIFEST.in0000664000175000017500000000006112337403761013337 0ustar thomithomiinclude README include LICENSE include CHANGES.* youtube/README.rst0000664000175000017500000000123112337403761013270 0ustar thomithomisphinxcontrib.youtube ===================== This module defines a directive, `youtube`. It takes a single, required argument, a YouTube video ID:: .. youtube:: oHg5SJYRHA0 The referenced video will be embedded into HTML output. By default, the embedded video will be sized for 720p content. To control this, the parameters "aspect", "width", and "height" may optionally be provided:: .. youtube:: oHg5SJYRHA0 :width: 640 :height: 480 .. youtube:: oHg5SJYRHA0 :aspect: 4:3 .. youtube:: oHg5SJYRHA0 :width: 100% .. youtube:: oHg5SJYRHA0 :height: 200px .. -*- mode: rst; fill-column: 72 -*-