Docs: update examples for 2.8x
[blender.git] / doc / manpage / blender.1.py
1 #!/usr/bin/env python3
2
3 # ##### BEGIN GPL LICENSE BLOCK #####
4 #
5 #  This program is free software; you can redistribute it and/or
6 #  modify it under the terms of the GNU General Public License
7 #  as published by the Free Software Foundation; either version 2
8 #  of the License, or (at your option) any later version.
9 #
10 #  This program is distributed in the hope that it will be useful,
11 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #  GNU General Public License for more details.
14 #
15 #  You should have received a copy of the GNU General Public License
16 #  along with this program; if not, write to the Free Software Foundation,
17 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 #
19 # ##### END GPL LICENSE BLOCK #####
20
21 '''
22 This script generates the blender.1 man page, embedding the help text
23 from the Blender executable itself. Invoke it as follows:
24
25     blender.1.py <path-to-blender> <output-filename>
26
27 where <path-to-blender> is the path to the Blender executable,
28 and <output-filename> is where to write the generated man page.
29 '''
30
31 # <pep8 compliant>
32
33 import subprocess
34 import sys
35
36 import time
37 import datetime
38
39
40 def man_format(data):
41     data = data.replace("-", "\\-")
42     data = data.replace("\t", "  ")
43     return data
44
45
46 if len(sys.argv) != 3:
47     import getopt
48     raise getopt.GetoptError("Usage: %s <path-to-blender> <output-filename>" % sys.argv[0])
49
50 blender_bin = sys.argv[1]
51 outfilename = sys.argv[2]
52
53 cmd = [blender_bin, "--help"]
54 print("  executing:", " ".join(cmd))
55 blender_help = subprocess.check_output(cmd).decode(encoding="utf-8")
56 blender_version = subprocess.check_output([blender_bin, "--version"]).decode(encoding="utf-8").strip()
57 blender_version = blender_version.split("build")[0].rstrip()
58 blender_version = blender_version.partition(" ")[2]  # remove 'Blender' prefix.
59 date_string = datetime.date.fromtimestamp(time.time()).strftime("%B %d, %Y")
60
61 outfile = open(outfilename, "w")
62 fw = outfile.write
63
64 fw('.TH "BLENDER" "1" "%s" "Blender %s"\n' % (date_string, blender_version.replace(".", "\\&.")))
65
66 fw('''
67 .SH NAME
68 blender \- a full-featured 3D application''')
69
70 fw('''
71 .SH SYNOPSIS
72 .B blender [args ...] [file] [args ...]''')
73
74 fw('''
75 .br
76 .SH DESCRIPTION
77 .PP
78 .B blender
79 is a full-featured 3D application. It supports the entirety of the 3D pipeline - modeling, rigging, animation, simulation, rendering, compositing, motion tracking, and video editing.
80
81 Use Blender to create 3D images and animations, films and commercials, content for games, architectural and industrial visualizatons, and scientific visualizations.
82
83 http://www.blender.org''')
84
85 fw('''
86 .SH OPTIONS''')
87
88 fw("\n\n")
89
90 lines = [line.rstrip() for line in blender_help.split("\n")]
91
92 while lines:
93     l = lines.pop(0)
94     if l.startswith("Environment Variables:"):
95         fw('.SH "ENVIRONMENT VARIABLES"\n')
96     elif l.endswith(":"):  # one line
97         fw('.SS "%s"\n\n' % l)
98     elif l.startswith("-") or l.startswith("/"):  # can be multi line
99
100         fw('.TP\n')
101         fw('.B %s\n' % man_format(l))
102
103         while lines:
104             # line with no
105             if lines[0].strip() and len(lines[0].lstrip()) == len(lines[0]):  # no white space
106                 break
107
108             if not l:  # second blank line
109                 fw('.IP\n')
110             else:
111                 fw('.br\n')
112
113             l = lines.pop(0)
114             l = l[1:]  # remove first whitespace (tab)
115
116             fw('%s\n' % man_format(l))
117
118     else:
119         if not l.strip():
120             fw('.br\n')
121         else:
122             fw('%s\n' % man_format(l))
123
124 # footer
125
126 fw('''
127 .br
128 .SH SEE ALSO
129 .B luxrender(1)
130
131 .br
132 .SH AUTHORS
133 This manpage was written for a Debian GNU/Linux system by Daniel Mester
134 <mester@uni-bremen.de> and updated by Cyril Brulebois
135 <cyril.brulebois@enst-bretagne.fr> and Dan Eicher <dan@trollwerks.org>.
136 ''')
137
138 outfile.close()
139 print("written:", outfilename)