]> git.phdru.name Git - phdru.name/phdru.name.git/blob - dotfiles2html/dotfiles2html.py
Refactor(dotfiles2html.py)
[phdru.name/phdru.name.git] / dotfiles2html / dotfiles2html.py
1 #! /usr/bin/env python
2
3 __author__ = "Oleg Broytman <phd@phdru.name>"
4 __copyright__ = "Copyright (C) 2004-2023 PhiloSoft Design"
5
6 import filecmp
7 import os
8 import re
9 import shutil
10
11 from m_lib.m_path import get_homedir
12
13 home_dir = get_homedir()
14 os.umask(0o022)  # octal; -rw-r--r--
15
16
17 home_file_types = (
18      ("bashrc", "sh"), ("profile", "sh"), ("shellrc", "sh"),
19      ("mailcap", "conf"), ("mime.types", "conf"),
20      ("muttrc", "muttrc"), ("procmailrc", "procmail"),
21      ("gitconfig", "gitconfig"), ("vimrc", "vim"),
22 )
23
24 mc_file_types = (("mc.ext", "conf"), ("menu", "conf"))
25
26 python_file_types = (
27     ("init.py", "python"),
28     ("pdbrc", "python"), ("pdbrc.py", "python")
29 )
30
31
32 def add_headers(fname, first, prev, next, last):
33     head_fname = os.path.join(home_dir, fname + ".head")
34     head_file = open(head_fname, 'r')
35     head = head_file.read()
36     head_file.close()
37
38     html_fname = fname + ".html"
39     html_file = open(html_fname, 'r')
40     html = html_file.read()
41     html_file.close()
42
43     if fname in ("init.py", "pdbrc.py"):
44         dot_name = fname
45         txt_name = fname + '.txt'
46     else:
47         dot_name = '.' + fname
48         txt_name = fname
49
50     html_file = open(html_fname, 'w')
51     if fname in ("muttrc", "procmailrc", "vimrc"):
52         html_file.write("#encoding koi8-r\n")
53     html_file.write("#extends phd_site\n")
54     html_file.write("#implements respond\n")
55     html_file.write("#attr $Title = \"%s\"\n" % dot_name)
56     html_file.write("#attr $Copyright = 2003\n")
57     html_file.write("#attr $First = \"%s.html\"\n" % first)
58     if prev:
59         html_file.write("#attr $Prev = \"%s.html\"\n" % prev)
60     if next:
61         html_file.write("#attr $Next = \"%s.html\"\n" % next)
62     html_file.write("#attr $Last = \"%s.html\"\n" % last)
63     html_file.write(
64         '#attr $alternates = (("Plain text version", "text/plain", "%s"),)'
65         % txt_name
66     )
67     html_file.write("\n")
68     html_file.write("#def body_html\n")
69     html_file.write("#raw\n")
70     html_file.write(head)
71     html_file.write("\n")
72     html_file.write(html)
73     html_file.write("#end raw\n")
74     html_file.write("#end def\n")
75     html_file.write("$phd_site.respond(self)\n")
76     html_file.close()
77
78
79 def process_dotfile(i, fname, ftype, file_types):
80     file = open(fname, 'r')
81     text = file.read()
82     file.close()
83
84     text = re.sub('cgmem_nice \\d+ ', '', text)
85
86     if fname in ('mailcap', 'mc.ext', 'menu'):
87         text = text.replace('mplay', 'mplayer')
88         text = text.replace('mplayerer', 'mplayer')
89         if fname == 'mailcap':
90             text = text.replace(
91              '-a -n "`which mplayer 2>/dev/null`" '
92              '-a -n "`which mplayer 2>/dev/null`"',
93              '-a -n "`which mplayer 2>/dev/null`"')
94         file = open(fname, 'w')
95         file.write(text)
96         file.close()
97
98     os.system(
99         'exec gvim -f -c "set filetype=%s" '
100         '-c ":source %s/dotfile2html.vim" "%s"'
101         % (ftype, home_dir, fname)
102     )
103
104     first = file_types[0][0]
105     if i == 0:
106         prev = None
107     else:
108         prev = file_types[i-1][0]
109     if i >= len(file_types) - 1:
110         next = None
111     else:
112         next = file_types[i+1][0]
113     last = file_types[-1][0]
114     add_headers(fname, first, prev, next, last)
115
116     if os.path.exists(fname + ".tmpl") \
117             and filecmp.cmp(fname + ".html", fname + ".tmpl"):
118         os.remove(fname + ".html")
119     else:
120         os.rename(fname + ".html", fname + ".tmpl")
121
122     if fname.endswith('.py'):
123         new_name = fname + '.txt'
124         os.rename(fname, new_name)
125         fname = new_name
126
127     if os.path.exists(fname):
128         os.chmod(fname, 0o644)
129
130
131 def process_files(file_types):
132     for i, (fname, ftype) in enumerate(file_types):
133         if os.path.exists('.' + fname) and not os.path.exists(fname):
134             shutil.copy2('.' + fname, fname)
135
136         if not os.path.exists(fname):
137             continue
138
139         process_dotfile(i, fname, ftype, file_types)
140
141
142 process_files(home_file_types + mc_file_types + python_file_types)