importation initiale dans git

This commit is contained in:
2013-08-27 15:14:44 +04:00
commit 39f9ee159c
687 changed files with 125329 additions and 0 deletions

155
lib/templates/auto Executable file
View File

@@ -0,0 +1,155 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
function display_help() {
uecho "$scriptname: sélectionner le template approprié pour générer un fichier
USAGE
$scriptname <file> [template options]
Si aucun template ne correspond au nom ou à l'extension du fichier, les options
sont analysées à la recherche d'un argument de la forme '-t template' ou
'--template template'. Si un tel argument est trouvé, le template spécifié est
utilisé."
}
if [ $# -eq 2 ]; then
if [ "$1" == "--matches-template" ]; then
exit 1
elif [ "$1" == "--matches-name" ]; then
exit 1
elif [ "$1" == "--matches-ext" ]; then
exit 1
fi
fi
#source /etc/ulib &&
source "$(dirname "$0")/../../ulib/ulib" &&
urequire DEFAULTS ||
exit 1
[ $# -eq 1 -a "$1" == "--help" ] && exit_with display_help
function __find_template() {
if [ -z "$template" ]; then
for nt in "${NAMES[@]}"; do
splitpair "$nt" n t
if [ "$name" == "$n" ]; then
template="$t"
break
fi
done
fi
if [ -z "$template" ]; then
for et in "${EXTS[@]}"; do
splitpair "$et" e t
if [ "$ext" == "$e" ]; then
template="$t"
break
fi
done
fi
found=1
templ="$templdir/$template"
if [ -z "$template" -o ! -f "$templ" ]; then
found=
if [ -n "$template" ] ; then
for at in "${TEMPLS[@]}"; do
splitpair "$at" a t
if [ "$template" == "$a" ]; then
templ="$templdir/$t"
found=1
break
fi
[ -n "$found" ] || templ=
done
fi
if [ -z "$found" -a -n "$template" ]; then
for templ in "${templs[@]}"; do
if [ -x "$templ" ] && "$templ" --matches-template "$template"; then
found=1
break
fi
done
[ -n "$found" ] || templ=
fi
if [ -z "$found" ]; then
for templ in "${templs[@]}"; do
if [ -x "$templ" ] && "$templ" --matches-name "$name"; then
found=1
break
fi
done
[ -n "$found" ] || templ=
fi
if [ -z "$found" ]; then
for templ in "${templs[@]}"; do
if [ -x "$templ" ] && "$templ" --matches-ext "$ext"; then
found=1
break
fi
done
[ -n "$found" ] || templ=
fi
fi
# template trouvé?
[ -n "$found" -a -x "$templ" ]
}
NAMES=()
EXTS=()
TEMPLATES=()
TEMPLS=()
templdir="$scriptdir"
[ -f "$templdir/templates.conf" ] && source "$templdir/templates.conf"
array_lsfiles templs "$templdir"
file="$1"; shift
name="$(basename "$file")"
splitlsep "$name" . basename ext
template=
if ! __find_template; then
# template pas trouvé par rapport au nom du fichier. analyser les arguments
# manuellement à la recherche d'une option -t ou --template
args=()
while [ $# -gt 0 ]; do
case "$1" in
-t|--template)
shift
template="$1"
shift
break
;;
-t*)
template="${1#-t}"
shift
break
;;
esac
args=("${args[@]}" "$1")
shift
done
[ -n "$template" ] || die "$file: impossible de trouver le template approprié (essayer avec -t)"
# restaurer les arguments sans l'option analysée manuellement
set -- "${args[@]}" "$@"
# corriger éventuellement si un alias de template est utilisé
for at in "${TEMPLATES[@]}"; do
splitpair "$at" a t
if [ "$template" == "$a" ]; then
template="$t"
break
fi
done
# puis réessayer de trouver le template approprié
__find_template || die "$file: Impossible de trouver le template $template${templ:+ ($(basename "$templ"))}"
fi
args=()
[ -n "$template" ] && args=("${args[@]}" --template "$template")
exec "$templ" "${args[@]}" "$file" "$@"

285
lib/templates/java Executable file
View File

@@ -0,0 +1,285 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
function display_help() {
uecho "$scriptname: générer un fichier $NAME
USAGE
$scriptname [options]
OPTIONS
-t TEMPLATE
Indiquer, le cas échéant, le modèle de fichier à utiliser pour la
génération. Les valeurs valides sont:
${TEMPLATES[*]}
-e, --edit
-g, --no-edit
Editer (resp. ne pas éditer) le fichier après l'avoir généré.
Par défaut, l'éditeur n'est pas lancé après la génération.
-f, --overwrite
Ecraser le fichier s'il existe déjà
-E, --encoding ENCODING
Spécifier l'encoding à utiliser pour la génération du fichier"
}
NAME=java
TEMPLATES=(javaproperties java woapi wosrc wosrccomp)
NAMES=(Properties)
EXTS=(properties java api wosrc)
if [ $# -eq 2 ]; then
if [ "$1" == "--matches-template" ]; then
for template in "${TEMPLATES[@]}"; do
[ "$template" == "$2" ] && exit 0
done
exit 1
elif [ "$1" == "--matches-name" ]; then
for name in "${NAMES[@]}"; do
[ "$name" == "$2" ] && exit 0
done
exit 1
elif [ "$1" == "--matches-ext" ]; then
for ext in "${EXTS[@]}"; do
[ "$ext" == "$2" ] && exit 0
done
exit 1
fi
fi
#source /etc/ulib &&
source "$(dirname "$0")/../../ulib/ulib" &&
urequire DEFAULTS ||
exit 1
function check_overwrite() {
if [ -e "$1" -a -z "$overwrite" ]; then
eerror "$1: refus d'écraser un fichier déjà existant (utiliser -f)"
return 1
fi
return 0
}
function generate_javaproperties() {
local file="$1"
local encoding=iso-8859-1
local mode=
check_overwrite "$file" || return
estep "$(ppath "$file")"
echo >"$file" "# -*- coding: $encoding ${mode:+mode: $mode }-*- vim:sw=4:sts=4:et:ai:si:sta:fenc=$encoding"
[ -n "$2" ] && array_add "$2" "$file"
return 0
}
function guess_package() {
local dir="$(abspath "$1")"
local -a files
local file
array_lsfiles files "$dir" "*.java"
if [ ${#files[*]} -gt 0 ]; then
# récupérer le package dans un fichier existant
file="${files[0]}"
awk <"$file" '
/^[ \t]*package[ \t]/ {
if (match($0, /[ \t]*package[ \t]*(.*)[ \t]*;/, vs) != 0) {
print vs[1];
exit 0
}
}
# stop quand on arrive à import ou class
/^(import|class)/ { exit 0 }'
elif [[ "$dir" == */Sources/* ]]; then
local package="${dir##*/Sources/}"
package="${package//\//.}"
echo "$package"
fi
}
function generate_java() {
local file="$1"
local dir="$(dirname "$file")"
local name="$(basename "$file")"
local basename="${name%.*}"
local mode=
[ -n "$package" ] || local package="$(guess_package "$dir")"
local packline
[ -n "$package" ] && packline="package $package;"
local -a implines
for import in "${imports[@]}"; do
array_add implines "import $import;"
done
implines="$(array_to_lines implines)"
local exts
[ -n "$extends" ] && exts=" extends $extends"
local impls
if [ "${#implements[*]}" -gt 0 ]; then
impls=" implements $(array_join implements ", ")"
fi
check_overwrite "$file" || return
estep "$(ppath "$file")"
cat >"$file" <<EOF
/* -*- coding: $encoding ${mode:+mode: $mode }-*- vim:sw=4:sts=4:et:ai:si:sta:fenc=$encoding
* $name
* Créé le $(date +%d/%m/%Y)
*/
${packline:+$packline
}${implines:+
$implines
}
/**
* @author $USER
*/
public class $basename${exts}${impls} {
${body:+$body
}}
EOF
[ -n "$2" ] && array_add "$2" "$file"
return 0
}
function generate_woapi() {
local file="$1"
local dir="$(dirname "$file")"
local name="$(basename "$file")"
local basename="${name%.*}"
local encoding=utf-8
check_overwrite "$file" || return
estep "$(ppath "$file")"
cat >"$file" <<EOF
<?xml version="1.0" encoding="$encoding" standalone="yes"?>
<wodefinitions>
<wo wocomponentcontent="false" class="$basename">
</wo>
</wodefinitions>
EOF
[ -n "$2" ] && array_add "$2" "$file"
return 0
}
function generate_wosrc() {
local file="$1"
local dtattr
[ -n "$doctype" ] && dtattr=" doctype=\"$doctype\""
check_overwrite "$file" || return
estep "$(ppath "$file")"
cat >"$file" <<EOF
<?sox encoding="$encoding"$dtattr namespaces="wo,wo.qattrs" modeline="-*- coding: $encoding -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=$encoding"?>
EOF
if [ -n "$html" ]; then
cat >>"$file" <<EOF
html>
head>
title>
body>
h1>
EOF
fi
if [ -n "$blueprint" ]; then
cat >>"$file" <<EOF
wo:blueprintm> menu="menu" q:title=""
EOF
fi
[ -n "$2" ] && array_add "$2" "$file"
return 0
}
function generate_wosrccomp() {
local file="$1"
local dir="$(dirname "$file")"
local name="$(basename "$file")"
local basename="${name%.*}"
local ext="${name##*.}"
case "$ext" in
wosrc|api|java|"") file="$dir/$basename";;
*) die "Destination name should not have an extension"
esac
etitle "$(ppath "$file")"
generate_wosrc "$file.wosrc"; [ -n "$2" ] && array_add "$2" "$file.wosrc"
generate_woapi "$file.api"; [ -n "$2" ] && array_add "$2" "$file.api"
local -a imports implements
local extends body
imports=(com.webobjects.appserver.WOComponent com.webobjects.appserver.WOContext)
extends=WOComponent
implements=()
body="\
private static final long serialVersionUID = 1L;
public ${basename}(WOContext context) {
super(context);
}"
generate_java "$file.java"; [ -n "$2" ] && array_add "$2" "$file.java"
eend
return 0
}
template=
edit=
overwrite=
encoding=
package=
imports=()
extends=
implements=()
body=
doctype=
html=
blueprint=1
parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \
-t:,--template: template= \
-e,--edit edit=1 \
-g,--no-edit edit= \
-f,--overwrite overwrite=1 \
-E:,--encoding: encoding= \
--package: package= \
--imports: imports \
--extends: extends= \
--implements: implements \
--body: body= \
--doctype: doctype= \
--html '$html=1; doctype=html4; blueprint=' \
--blueprint,--bp '$blueprint=1; html=' \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
[ -n "$encoding" ] || encoding=utf-8
array_fix_paths imports
array_fix_paths implements
files2edit=()
r=0
for file in "$@"; do
t="$template"
if [ -z "$t" ]; then
# Le cas échéant, si template n'est pas spécifié, le déterminer à partir du
# nom de fichier
case "$(basename "$file")" in
Properties) t=javaproperties;;
esac
fi
if [ "$t" == javaproperties ]; then
generate_javaproperties "$file" files2edit || r=$?
elif [ "$t" == java ]; then
generate_java "$file" files2edit || r=$?
elif [ "$t" == woapi ]; then
generate_woapi "$file" files2edit || r=$?
elif [ "$t" == wosrc ]; then
generate_wosrc "$file" files2edit || r=$?
elif [ "$t" == wosrccomp ]; then
generate_wosrccomp "$file" files2edit || r=$?
else
die "java: template invalide: $t"
fi
done
if [ -n "$edit" -a "${#files2edit[*]}" -gt 0 ]; then
"${EDITOR:-vi}" "${files2edit[@]}"
fi
exit $r

View File

@@ -0,0 +1,117 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# copier ce fichier, le rendre exécutable, et remplacer ci-dessous XXX par le nom
# du modèle généré par ce script
function display_help() {
uecho "$scriptname: générer un fichier $NAME
USAGE
$scriptname [options] <file>
OPTIONS
-t TEMPLATE
Indiquer, le cas échéant, le modèle de fichier à utiliser pour la
génération. Les valeurs valides sont:
${TEMPLATES[*]}
-e, --edit
-g, --no-edit
Editer (resp. ne pas éditer) le fichier après l'avoir généré.
Par défaut, l'éditeur n'est pas lancé après la génération.
-f, --overwrite
Ecraser le fichier s'il existe déjà
-E, --encoding ENCODING
Spécifier l'encoding à utiliser pour la génération du fichier"
}
NAME=XXX
TEMPLATES=(XXX)
NAMES=()
EXTS=()
if [ $# -eq 2 ]; then
if [ "$1" == "--matches-template" ]; then
for template in "${TEMPLATES[@]}"; do
[ "$template" == "$2" ] && exit 0
done
exit 1
elif [ "$1" == "--matches-name" ]; then
for name in "${NAMES[@]}"; do
[ "$name" == "$2" ] && exit 0
done
exit 1
elif [ "$1" == "--matches-ext" ]; then
for ext in "${EXTS[@]}"; do
[ "$ext" == "$2" ] && exit 0
done
exit 1
fi
fi
#source /etc/ulib &&
source "$(dirname "$0")/../../ulib/ulib" &&
urequire DEFAULTS ||
exit 1
function check_overwrite() {
if [ -e "$1" -a -z "$overwrite" ]; then
eerror "$1: refus d'écraser un fichier déjà existant (utiliser -f)"
return 1
fi
return 0
}
function generate_XXX() {
local file="$1"
local mode=
check_overwrite "$1" || return
estep "$(ppath "$file")"
echo >"$file" "# -*- coding: $encoding ${mode:+mode: $mode }-*- vim:sw=4:sts=4:et:ai:si:sta:fenc=$encoding"
[ -n "$2" ] && array_add "$2" "$file"
return 0
}
template=
edit=
overwrite=
encoding=
#executable=
parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \
-t:,--template: template= \
-e,--edit edit=1 \
-g,--no-edit edit= \
-f,--overwrite overwrite=1 \
-E:,--encoding: encoding= \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
# à rajouter ci-dessus si les fichiers peuvent être exécutables:
#-x,--executable executable=1 \
#-n,--no-executable executable= \
[ -n "$encoding" ] || encoding=utf-8
files2edit=()
r=0
for file in "$@"; do
t="$template"
if [ -z "$t" ]; then
# Le cas échéant, si template n'est pas spécifié, le déterminer à partir du
# nom de fichier
dir="$(dirname "$file")"
name="$(basename "$file")"
fi
if [ "$t" == XXX ]; then
generate_XXX "$file" files2edit || r=$?
else
die "XXX: template invalide: $t"
fi
done
if [ -n "$edit" -a "${#files2edit[*]}" -gt 0 ]; then
"${EDITOR:-vi}" "${files2edit[@]}"
fi
exit $r

205
lib/templates/shell Executable file
View File

@@ -0,0 +1,205 @@
#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
function display_help() {
uecho "$scriptname: générer un fichier $NAME
USAGE
$scriptname [options] <file>
OPTIONS
-t TEMPLATE
Indiquer, le cas échéant, le modèle de fichier à utiliser pour la
génération. Les valeurs valides sont:
${TEMPLATES[*]}
-e, --edit
-g, --no-edit
Editer (resp. ne pas éditer) le fichier après l'avoir généré.
Par défaut, l'éditeur est lancé après la génération.
-f, --overwrite
Ecraser le fichier s'il existe déjà
-E, --encoding ENCODING
Spécifier l'encoding à utiliser pour la génération du fichier"
}
NAME=shell
TEMPLATES=(shell)
NAMES=()
EXTS=(sh)
if [ $# -eq 2 ]; then
if [ "$1" == "--matches-template" ]; then
for template in "${TEMPLATES[@]}"; do
[ "$template" == "$2" ] && exit 0
done
exit 1
elif [ "$1" == "--matches-name" ]; then
for name in "${NAMES[@]}"; do
[ "$name" == "$2" ] && exit 0
done
exit 1
elif [ "$1" == "--matches-ext" ]; then
for ext in "${EXTS[@]}"; do
[ "$ext" == "$2" ] && exit 0
done
exit 1
fi
fi
#source /etc/ulib &&
source "$(dirname "$0")/../../ulib/ulib" &&
urequire DEFAULTS ||
exit 1
function check_overwrite() {
if [ -e "$1" -a -z "$overwrite" ]; then
eerror "$1: refus d'écraser un fichier déjà existant (utiliser -f)"
return 1
fi
return 0
}
function generate_shell() {
local file="$1"
local dir="$(dirname "$file")"
local mode=sh
check_overwrite "$1" || return
local modeline="# -*- coding: $encoding ${mode:+mode: $mode }-*- vim:sw=4:sts=4:et:ai:si:sta:fenc=$encoding"
if [ -n "$executable" ]; then
etitle "$(ppath "$file")"
local type=
if [ -d "$dir/ulib" ]; then
ask_yesno "\
Le type de script 'system-or-local' a été sélectionné automatiquement
Une librairie ulib locale est présente. En chargeant ulib/auto, la librairie
système /etc/ulib sera utilisée si elle est disponible. Sinon, la librairie
locale ulib/ulib sera utilisée.
Voulez-vous générer un script avec cette configuration?" X &&
type=system-or-local
elif [ -f /etc/ulibauto ]; then
ask_yesno "\
Le type de script 'default' a été sélectionné automatiquement
En chargeant /etc/ulibauto, la librairie ulib système sera utilisée, et les
paramètres par défaut seront utilisés.
Voulez-vous générer un script avec cette configuration?" X &&
type=default
else
ask_yesno "\
Le type de script 'manual' a été sélectionné automatiquement
Une vieille version de nutools est installée. Il faut charger /etc/ulib et
définir manuellement les paramètres à utiliser.
Voulez-vous générer un script avec cette configuration?" X &&
type=manual
fi
if [ -z "$type" ]; then
enote "Plusieurs type de scripts peuvent être générés:
- Avec le type 'system-or-local', on assume qu'une librairie ulib locale est
présente. Le fichier ulib/auto est chargé, ce qui a pour conséquence que la
librairie système /etc/ulib est utilisée si elle est disponible. Sinon, la
librairie locale ulib/ulib est utilisée.
- Avec le type 'default', le fichier /etc/ulibauto est chargé. Les paramètres
par défaut sont utilisés: urequire DEFAULTS et genparse() pour l'analyse des
arguments.
- Avec le type 'manual', le fichier /etc/ulib est chargé. Les paramètres par
défaut sont utilisés manuellement: urequire DEFAULTS et parse_opts() pour
l'analyse des arguments.
- Avec le type 'vanilla', un script simple est généré."
local -a types
types=(system-or-local default manual vanilla)
simple_menu type types \
-t "Choix du type de script" \
-m "Veuillez choisir le type de script à générer" \
-d manual
fi
if [ "$type" == system-or-local ]; then
echo >"$file" '#!/bin/bash
'"$modeline"'
source "$(dirname "$0")/ulib/auto"
eval "$(genparse)"
'
elif [ "$type" == default ]; then
echo >"$file" '#!/bin/bash
'"$modeline"'
source /etc/ulibauto
eval "$(genparse)"
'
elif [ "$type" == manual ]; then
echo >"$file" '#!/bin/bash
'"$modeline"'
function display_help() {
uecho "$scriptname:
USAGE
$scriptname [options]
OPTIONS"
}
source /etc/ulib &&
urequire DEFAULTS ||
exit 1
parse_opts "${PRETTYOPTS[@]}" \
--help '\''$exit_with display_help'\'' \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
'
elif [ "$type" == vanilla ]; then
echo >"$file" "#!/bin/bash
$modeline"
fi
chmod +x "$file"
eend
else
estep "$(ppath "$file")"
echo >"$file" "$modeline"
fi
[ -n "$2" ] && array_add "$2" "$file"
return 0
}
template=
edit=1
overwrite=
encoding=
executable=1
parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \
-t:,--template: template= \
-e,--edit edit=1 \
-g,--no-edit edit= \
-f,--overwrite overwrite=1 \
-E:,--encoding: encoding= \
-x,--executable executable=1 \
-n,--no-executable executable= \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
[ -n "$encoding" ] || encoding=utf-8
files2edit=()
r=0
for file in "$@"; do
t="$template"
if [ -z "$t" ]; then
# Le cas échéant, si template n'est pas spécifié, le déterminer à partir du
# nom de fichier
dir="$(dirname "$file")"
name="$(basename "$file")"
fi
if [ "$t" == shell ]; then
generate_shell "$file" files2edit || r=$?
else
die "shell: template invalide: $t"
fi
done
if [ -n "$edit" -a "${#files2edit[*]}" -gt 0 ]; then
"${EDITOR:-vi}" "${files2edit[@]}"
fi
exit $r

View File

@@ -0,0 +1,47 @@
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
# Noms et extensions reconnus
NAMES=(
Properties:javaproperties
)
EXTS=(
txt:text
conf:conf
sql:sql
mdt:markdown mdwn:markdown md:markdown text:markdown
twp:twpage
puml:puml
iuml:iuml
sh:shell
py:pyfile pyw:pyfile
css:css
js:javascript
html:html4
php:php phps:php
ctp:ctp
java:java api:wosrccomp wosrc:wosrccomp properties:javaproperties
)
# Aliases de templates
TEMPLATES=(
t:text c:conf
md:markdown twp:twpage
plantuml:puml
sh:shell
python:pyfile pyf:pyfile py:pyfile
pym:pymodule
js:javascript
html:html4
properties:javaproperties jprops:javaproperties props:javaproperties
)
# Scripts à utiliser pour générer les templates
TEMPLS=(
text:text conf:text sql:text
markdown:wiki twpage:wiki
puml:plantuml iuml:plantuml
shell:shell
pyfile:python pymodule:python
css:www javascript:www html4:www php:www ctp:www
javaproperties:java java:java woapi:java wosrc:java wosrccomp:java
)