142
|
1 #!/usr/bin/env python
|
|
2 # -*- coding: utf-8 -*-
|
|
3 #
|
|
4 # Copyright (C) 2007 Edgewall Software
|
|
5 # All rights reserved.
|
|
6 #
|
|
7 # This software is licensed as described in the file COPYING, which
|
|
8 # you should have received as part of this distribution. The terms
|
|
9 # are also available at http://babel.edgewall.org/wiki/License.
|
|
10 #
|
|
11 # This software consists of voluntary contributions made by many
|
|
12 # individuals. For the exact contribution history, see the revision
|
|
13 # history and logs, available at http://babel.edgewall.org/log/.
|
|
14
|
|
15 from distutils.cmd import Command
|
|
16 import doctest
|
|
17 from glob import glob
|
|
18 import os
|
|
19 try:
|
|
20 from setuptools import setup
|
|
21 except ImportError:
|
|
22 from distutils.core import setup
|
|
23 import sys
|
|
24
|
|
25
|
|
26 class build_doc(Command):
|
|
27 description = 'Builds the documentation'
|
|
28 user_options = [
|
|
29 ('force', None,
|
|
30 "force regeneration even if no reStructuredText files have changed"),
|
|
31 ('without-apidocs', None,
|
|
32 "whether to skip the generation of API documentaton"),
|
|
33 ]
|
|
34 boolean_options = ['force', 'without-apidocs']
|
|
35
|
|
36 def initialize_options(self):
|
|
37 self.force = False
|
|
38 self.without_apidocs = False
|
|
39
|
|
40 def finalize_options(self):
|
|
41 pass
|
|
42
|
|
43 def run(self):
|
|
44 from docutils.core import publish_cmdline
|
|
45 from docutils.nodes import raw
|
|
46 from docutils.parsers import rst
|
|
47
|
|
48 docutils_conf = os.path.join('doc', 'conf', 'docutils.ini')
|
|
49 epydoc_conf = os.path.join('doc', 'conf', 'epydoc.ini')
|
|
50
|
|
51 try:
|
|
52 from pygments import highlight
|
|
53 from pygments.lexers import get_lexer_by_name
|
|
54 from pygments.formatters import HtmlFormatter
|
|
55
|
|
56 def code_block(name, arguments, options, content, lineno,
|
|
57 content_offset, block_text, state, state_machine):
|
|
58 lexer = get_lexer_by_name(arguments[0])
|
|
59 html = highlight('\n'.join(content), lexer, HtmlFormatter())
|
|
60 return [raw('', html, format='html')]
|
|
61 code_block.arguments = (1, 0, 0)
|
|
62 code_block.options = {'language' : rst.directives.unchanged}
|
|
63 code_block.content = 1
|
|
64 rst.directives.register_directive('code-block', code_block)
|
|
65 except ImportError:
|
|
66 print 'Pygments not installed, syntax highlighting disabled'
|
|
67
|
|
68 for source in glob('doc/*.txt'):
|
|
69 dest = os.path.splitext(source)[0] + '.html'
|
|
70 if self.force or not os.path.exists(dest) or \
|
|
71 os.path.getmtime(dest) < os.path.getmtime(source):
|
|
72 print 'building documentation file %s' % dest
|
|
73 publish_cmdline(writer_name='html',
|
|
74 argv=['--config=%s' % docutils_conf, source,
|
|
75 dest])
|
|
76
|
|
77 if not self.without_apidocs:
|
|
78 try:
|
|
79 from epydoc import cli
|
|
80 old_argv = sys.argv[1:]
|
|
81 sys.argv[1:] = [
|
|
82 '--config=%s' % epydoc_conf,
|
|
83 '--no-private', # epydoc bug, not read from config
|
|
84 '--simple-term',
|
|
85 '--verbose'
|
|
86 ]
|
|
87 cli.cli()
|
|
88 sys.argv[1:] = old_argv
|
|
89
|
|
90 except ImportError:
|
|
91 print 'epydoc not installed, skipping API documentation.'
|
|
92
|
|
93
|
|
94 class test_doc(Command):
|
|
95 description = 'Tests the code examples in the documentation'
|
|
96 user_options = []
|
|
97
|
|
98 def initialize_options(self):
|
|
99 pass
|
|
100
|
|
101 def finalize_options(self):
|
|
102 pass
|
|
103
|
|
104 def run(self):
|
|
105 for filename in glob('doc/*.txt'):
|
|
106 print 'testing documentation file %s' % filename
|
|
107 doctest.testfile(filename, False, optionflags=doctest.ELLIPSIS)
|
|
108
|
|
109
|
|
110 setup(
|
|
111 name = 'Babel',
|
|
112 version = '0.8',
|
|
113 description = 'Internationalization utilities',
|
|
114 long_description = \
|
|
115 """A collection of tools for internationalizing Python applications.""",
|
|
116 author = 'Edgewall Software',
|
|
117 author_email = 'info@edgewall.org',
|
|
118 license = 'BSD',
|
|
119 url = 'http://babel.edgewall.org/',
|
|
120 download_url = 'http://babel.edgewall.org/wiki/Download',
|
|
121 zip_safe = False,
|
|
122
|
|
123 classifiers = [
|
|
124 'Development Status :: 4 - Beta',
|
|
125 'Environment :: Web Environment',
|
|
126 'Intended Audience :: Developers',
|
|
127 'License :: OSI Approved :: BSD License',
|
|
128 'Operating System :: OS Independent',
|
|
129 'Programming Language :: Python',
|
|
130 'Topic :: Software Development :: Libraries :: Python Modules',
|
|
131 ],
|
|
132 packages = ['babel', 'babel.messages'],
|
|
133 package_data = {'babel': ['localedata/*.dat']},
|
|
134 test_suite = 'babel.tests.suite',
|
|
135
|
|
136 entry_points = """
|
|
137 [console_scripts]
|
|
138 babel = babel.messages.frontend:main
|
|
139
|
|
140 [distutils.commands]
|
|
141 extract_messages = babel.messages.frontend:extract_messages
|
|
142 new_catalog = babel.messages.frontend:new_catalog
|
|
143
|
|
144 [distutils.setup_keywords]
|
|
145 message_extractors = babel.messages.frontend:check_message_extractors
|
|
146
|
|
147 [babel.extractors]
|
|
148 ignore = babel.messages.extract:extract_nothing
|
|
149 python = babel.messages.extract:extract_python
|
|
150 """,
|
|
151
|
|
152 cmdclass = {'build_doc': build_doc, 'test_doc': test_doc}
|
|
153 )
|