1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-10-30 08:27:17 -04:00
elinks/doc/tools/help2doc

161 lines
3.0 KiB
Bash
Executable File

#!/bin/sh
#
#
# Script used to generate doc/book/config/cmdoptions.xml
# and hopefully other in the future.
# Updated by option handlind via --elinks=path/to/elinks option
elinks="$1"
option="$2"
# Option handling {{{1
command=
case "$option" in
*command*)
filter="sed 0,/^Options:/d"
option=--long-help
;;
*config*)
filter="sed 0,/^Configuration/d"
option=--config-help
;;
esac
print_description_line()
{
line="$1"
number="$2"
case "$line" in
-eval*)
echo
;;
*)
line="$(echo $line | sed 's,\(-touch-files\|-no-connect\|-session-ring\|-dump\|-default-mime-type\|text/html\|~/\.elinks\),\`\1\`,g')"
line=$(echo $line | sed "s,'\([^']*\)',\\\'\1\\\',")
line=$(echo $line | sed "s,ELinks,'ELinks',g")
line=$(echo $line | sed "s,HOME,'HOME',g")
line="$(echo $line | sed 's/^\([a-zA-Z]*([^)]*)\).*:/- \`\1\`:/')"
if test -n "$number";
then
echo -n " - $number:"
fi
esac
echo " $line"
}
print_option_tree()
{
title="$1"
path="$2"
echo "$path::"
}
print_option_type()
{
path="$1"
typeid="$2"
default="$3"
typestring="$path"
if test -n "$typeid" && test "$typeid" != "$path";
then
if test "$typeid" = "(alias";
then
typestring="$typestring ($default)"
default=
else
typestring="$typestring $typeid"
fi
fi
if test -n "$default" && test "$default" != "$path";
then
typestring="$typestring ($default)"
fi
if test "$default" = "-?, -h, -help";
then
typestring="$default"
fi
echo "$typestring::"
}
# The main loop {{{1
# State variables
parse_description=
parse_int_option=
use_log=
"$elinks" $option | $filter | while read line
do
if test -n "$parse_description"
then
# If the line is empty it is our clue that
# the desciption is over.
if test -z "$line"
then
echo
parse_description=
parse_int_option=
continue
fi
line=`echo "$line" | sed -e "s/[ ]*(DISABLED)//"`
line=`echo "$line" | sed 's/\([{}]\)/\\\\\1/g'`
number=
if test -n "$parse_int_option";
then
case "$line" in
-[0-9]*)
number="`echo $line | sed -e 's/\(-[0-9-]*\).*/\1/'`"
line=`echo "$line" | sed -e "s/$number[ ]*//"`
;;
[0-9]*)
number="`echo $line | sed -e 's/\([0-9-]*\).*/\1/'`"
line=`echo "$line" | sed -e "s/$number[ ]*//"`
;;
esac
fi
print_description_line "$line" "$number"
continue
fi
case "$line" in
Features:*)
;;
[A-Z]*:" ("*[a-z]*)
parse_description=1
title="`echo $line | sed -e 's/\([A-Z]*\):.*/\1/'`"
path="`echo $line | sed -e 's/.*: (\([a-z_].*\))/\1/'`"
print_option_tree "$title" "$path"
;;
[a-z_-]*[.a-z_-]*)
parse_description=1
path="`echo $line | sed -e 's/\([a-z-][^ ]*\).*/\1/'`"
typeid="`echo $line | sed -e 's/[ ]*[a-z-][^ ]* \([^ ]*\).*/\1/'`"
default="`echo \"$line\" | sed -e 's/[^(]*(\(.*\))/\1/'`"
print_option_type "$path" "$typeid" "$default"
if test "$typeid" = "<num>";
then
parse_int_option=1
fi
;;
*)
;;
esac
done
version="`$elinks -version | head -n 1 | sed -e 's/ELinks \([0-9][^ ]*\).*/\1/'`"
echo "Generated using output from ELinks version $version."
# vim: tabstop=4 shiftwidth=4