mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
NEWS: Reformat at generation time
Instead of encoding formatting information inside the corresponding XSLT stylesheet, use a Python script to reformat the text appropriately based on a few simple markers. Splitting the task between the XSLT stylesheet and the Python script allows us to keep both parts very simple.
This commit is contained in:
parent
be36ea4b52
commit
6a5b312730
23
Makefile.am
23
Makefile.am
@ -48,16 +48,23 @@ pkgconfig_DATA = libvirt.pc libvirt-qemu.pc libvirt-lxc.pc libvirt-admin.pc
|
||||
|
||||
NEWS: \
|
||||
$(srcdir)/docs/news.xml \
|
||||
$(srcdir)/docs/news-ascii.xsl
|
||||
$(AM_V_GEN)if [ -x $(XSLTPROC) ] ; then \
|
||||
$(XSLTPROC) --nonet $(srcdir)/docs/news-ascii.xsl \
|
||||
$(srcdir)/docs/news.xml \
|
||||
| perl -0777 -pe 's/\n\n+$$/\n/' \
|
||||
| perl -pe 's/[ \t]+$$//' \
|
||||
> $@-t && mv $@-t $@ ; fi
|
||||
$(srcdir)/docs/news-ascii.xsl \
|
||||
$(srcdir)/docs/reformat-news.py
|
||||
$(AM_V_GEN) \
|
||||
if [ -x $(XSLTPROC) ]; then \
|
||||
$(XSLTPROC) --nonet \
|
||||
$(srcdir)/docs/news-ascii.xsl \
|
||||
$(srcdir)/docs/news.xml \
|
||||
>$@-tmp \
|
||||
|| { rm -f $@-tmp; exit 1; }; \
|
||||
$(srcdir)/docs/reformat-news.py $@-tmp >$@ \
|
||||
|| { rm -f $@-tmp; exit 1; }; \
|
||||
rm -f $@-tmp; \
|
||||
fi
|
||||
EXTRA_DIST += \
|
||||
$(srcdir)/docs/news.xml \
|
||||
$(srcdir)/docs/news-ascii.xsl
|
||||
$(srcdir)/docs/news-ascii.xsl \
|
||||
$(srcdir)/docs/reformat-news.py
|
||||
|
||||
$(top_srcdir)/HACKING: $(top_srcdir)/docs/hacking1.xsl \
|
||||
$(top_srcdir)/docs/hacking2.xsl \
|
||||
|
104
docs/reformat-news.py
Executable file
104
docs/reformat-news.py
Executable file
@ -0,0 +1,104 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# reformat-news.py: Reformat the NEWS file properly
|
||||
#
|
||||
# Copyright (C) 2017 Red Hat, Inc.
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2.1 of the License, or (at your option) any later version.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Authors:
|
||||
# Andrea Bolognani <abologna@redhat.com>
|
||||
|
||||
import sys
|
||||
|
||||
COLUMNS = 80
|
||||
|
||||
def reformat_with_indent(text, initial_indent, indent):
|
||||
|
||||
res = ""
|
||||
line = initial_indent
|
||||
|
||||
for word in text.split():
|
||||
|
||||
# If adding one more word (plus a whitespace, plus a newline)
|
||||
# to the current line would push us over the desired number
|
||||
# of columns we start a new line instead
|
||||
if len(line) + len(word) > (COLUMNS - 2):
|
||||
res = res + line + "\n"
|
||||
line = indent
|
||||
|
||||
# We need to take care when we've just started a new line,
|
||||
# as we don't want to add any additional leading whitespace
|
||||
# in that case
|
||||
if line == indent or line == initial_indent:
|
||||
line = line + word
|
||||
else:
|
||||
line = line + " " + word
|
||||
|
||||
# Append whatever's left
|
||||
res = res + line
|
||||
|
||||
return res
|
||||
|
||||
|
||||
def reformat(line):
|
||||
|
||||
# Empty lines don't need to be reformatted or even inspected
|
||||
if len(line) == 0:
|
||||
return line
|
||||
|
||||
# For all non-empty lines, we decide the indentation level based
|
||||
# on the first character
|
||||
marker = line[0]
|
||||
|
||||
# Release
|
||||
if marker == '#':
|
||||
initial_indent = 0
|
||||
indent = 2
|
||||
# Section
|
||||
elif marker == '*':
|
||||
initial_indent = 2
|
||||
indent = 4
|
||||
# Change summary
|
||||
elif marker == '-':
|
||||
initial_indent = 4
|
||||
indent = 6
|
||||
# Change description
|
||||
elif marker == '|':
|
||||
initial_indent = 8
|
||||
indent = 8
|
||||
# In this one case, the marker should not ultimately show
|
||||
# up in the output file, so we strip it before moving on
|
||||
line = line[1:]
|
||||
# Anything else should be left as-is
|
||||
else:
|
||||
return line
|
||||
|
||||
return reformat_with_indent(line, " " * initial_indent, " " * indent)
|
||||
|
||||
|
||||
def main(args):
|
||||
|
||||
if len(args) < 2:
|
||||
sys.stdout.write("Usage: " + args[0] + " FILE\n")
|
||||
sys.exit(1)
|
||||
|
||||
with open(args[1], 'r') as f:
|
||||
for line in f:
|
||||
print(reformat(line.strip()))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv)
|
Loading…
Reference in New Issue
Block a user