1
0
Fork 0
repo2html/msgfmt

73 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
#
# Formats a Git commit message
#
# Copyright (C) 2012 Mike Gerwitz
#
# This file is part of repo2html.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# HTML replacements (default)
lquo='\&ldquo;'
rquo='\&rdquo;'
mdash='\&mdash;'
# redefines replacements to yield plain text (instead of HTML entities)
nohtml()
{
lquo=\"
rquo=\"
mdash=---
}
while getopts n opt; do
case "$opt" in
n) nohtml;;
esac
done
# format the commit message, stopping at the diff (if any)
awk '/^diff --git/ { exit } { print }' \
| sed ':a;N;$!ba;
# escaping
s/</\&lt;/g;
s/>/\&gt;/g;
s/\&/\&amp;/g;
# unfortunately, non-greedy matches make it difficult to exclude punctuation
# at the end of a link, so we will not be handling it here (since links
# should always be in the footer as references (ideally), this should not
# happen
s#[fh]ttps\?://[^]\n )]\+#<a href="&">&</a>#g;
# reference definitions (footnotes)
s#\n\[\([0-9]\+\)\]#</p><p id="ref-\1">&#g;
# references in text
s|\[\([^]]\+\)\]\[\([0-9]\+\)\]|<a href="#ref-\2">\1</a>\[\2\]|g
s|\[\([0-9]\+\)\]|<sup><a href="#ref-\1">&</a></sup>|g
# paragraphs
s#\n\n#</p>&<p>#g;
# basic formatting
s/---/'"$mdash"'/g;
s#``#'"$lquo"'#g;
s#'\'\''#'"$rquo"'#g;
'