356 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			356 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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 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=www
 | 
						|
TEMPLATES=(html javadoc-package javadoc-overview php cakephp-ctp css javascript)
 | 
						|
NAMES=(package.html overview.html)
 | 
						|
EXTS=(html htm php phps ctp css js)
 | 
						|
 | 
						|
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 || exit 1
 | 
						|
source "$(dirname "$0")/../ulib/ulib" || exit 1
 | 
						|
urequire DEFAULTS
 | 
						|
 | 
						|
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 __update_title() {
 | 
						|
    titlehl="$(strlower "$titlehl")"
 | 
						|
    [ -n "$titlehl" ] || titlehl=h1
 | 
						|
    [ "${titlehl:0:1}" == "h" ] || titlehl="h$titlehl"
 | 
						|
 | 
						|
    [ -n "$title" ] || {
 | 
						|
        title="$(basename "$file")"
 | 
						|
        title="${title%.*}"
 | 
						|
    }
 | 
						|
    [ -n "$head_title" ] || head_title="$title"
 | 
						|
}
 | 
						|
function __generate_html() {
 | 
						|
    # $file et $mode doivent être initialisés
 | 
						|
 | 
						|
    local dir="$(dirname "$file")"
 | 
						|
    local nobpsuppl nobplocal nobpmobile
 | 
						|
    if [ "$blueprint" == auto ]; then
 | 
						|
        if [ -d "$dir/blueprint" ]; then
 | 
						|
            blueprint=1
 | 
						|
            [ -f "$dir/bpsuppl.css" ] || nobpsuppl=1
 | 
						|
            [ -f "$dir/bplocal.css" ] || nobplocal=1
 | 
						|
            [ -f "$dir/bpmobile.css" ] || nobpmobile=1
 | 
						|
        else
 | 
						|
            blueprint=
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
    local jquerymin
 | 
						|
    if [ "$jquery" == auto ]; then
 | 
						|
        if [ -f "$dir/jquery.min.js" ]; then
 | 
						|
            jquery=1
 | 
						|
            jquerymin=1
 | 
						|
        elif [ -d "$dir/jquery.js" ]; then
 | 
						|
            jquery=1
 | 
						|
        else
 | 
						|
            jquery=
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
 | 
						|
    case "$doctype" in
 | 
						|
    html4)
 | 
						|
        doctype='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
 | 
						|
        html='<html lang="fr" xmlns="http://www.w3.org/TR/REC-html40">'
 | 
						|
        ;;
 | 
						|
    html5)
 | 
						|
        doctype='<!DOCTYPE html>'
 | 
						|
        html='<html lang="fr">'
 | 
						|
        ;;
 | 
						|
    *)
 | 
						|
        doctype=
 | 
						|
        html='<html>'
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
    head='<head>
 | 
						|
<meta http-equiv="Content-Type" content="text/html; charset='"$encoding"'" />
 | 
						|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
						|
<link rel="shortcut" href="'"$baseurl"'favicon.ico" />
 | 
						|
<link rel="icon apple-touch-icon" href="'"$baseurl"'icon.png" />'
 | 
						|
    [ -n "$blueprint" ] && blueprint='<link rel="stylesheet" href="'"$bpurl"'screen.css" type="text/css" media="screen, projection" />
 | 
						|
<link rel="stylesheet" href="'"$bpurl"'print.css" type="text/css" media="print" />
 | 
						|
<!--[if lt IE 8]>
 | 
						|
<link rel="stylesheet" href="'"$bpurl"'ie.css" type="text/css" media="screen, projection" />
 | 
						|
<![endif]-->
 | 
						|
<'"${nobpsuppl:+!--}"'link rel="stylesheet" href="bpsuppl.css" type="text/css" media="screen, projection" /'"${nobpsuppl:+--}"'>
 | 
						|
<'"${nobplocal:+!--}"'link rel="stylesheet" href="bplocal.css" type="text/css" media="screen, projection" /'"${nobplocal:+--}"'>
 | 
						|
<'"${nobpmobile:+!--}"'link rel="stylesheet" href="bpmobile.css" type="text/css" media="handheld, only screen and (max-device-width: 480px)" /'"${nobpmobile:+--}"'>'
 | 
						|
    [ -n "$jquery" ] && jquery='<script src="'"${baseurl}jquery${jquerymin:+.min}.js"'"></script>'
 | 
						|
    start='<title>'"$head_title"'</title>
 | 
						|
</head>
 | 
						|
<body>'
 | 
						|
    startbp='<div class="container">'
 | 
						|
    endbp='</div>'
 | 
						|
    end='</body>
 | 
						|
</html>'
 | 
						|
}
 | 
						|
function __before_write_html() {
 | 
						|
    doctype="$doctype<!-- -*- coding: $encoding ${mode:+mode: $mode }-*- vim:sw=4:sts=4:et:ai:si:sta:fenc=$encoding
 | 
						|
-->"
 | 
						|
}
 | 
						|
function __write_html() {
 | 
						|
    # $file et $mode doivent être initialisés
 | 
						|
    check_overwrite "$1" || return
 | 
						|
    estep "$(ppath "$file")"
 | 
						|
    echo >"$file" "$doctype$html
 | 
						|
$head
 | 
						|
${blueprint:+$blueprint
 | 
						|
}${jquery:+$jquery
 | 
						|
}$start
 | 
						|
${blueprint:+$startbp
 | 
						|
}${title:+<$titlehl>$title</$titlehl>
 | 
						|
}${blueprint:+$endbp
 | 
						|
}$end"
 | 
						|
}
 | 
						|
 | 
						|
function generate_html() {
 | 
						|
    local file="$1"
 | 
						|
    local mode=html
 | 
						|
 | 
						|
    local titlehl="${titlehl:-h1}"
 | 
						|
    local title="$title"
 | 
						|
    __update_title
 | 
						|
 | 
						|
    local doctype="$doctype"
 | 
						|
    local blueprint="$blueprint"
 | 
						|
    local jquery="$jquery"
 | 
						|
    local html head start startbp endbp end
 | 
						|
    __generate_html
 | 
						|
    __before_write_html
 | 
						|
    __write_html
 | 
						|
 | 
						|
    [ -n "$2" ] && array_add "$2" "$file"
 | 
						|
    return 0
 | 
						|
}
 | 
						|
 | 
						|
function generate_javadoc_package() {
 | 
						|
    local file="$1"
 | 
						|
    local mode=html
 | 
						|
 | 
						|
    local titlehl="${titlehl:-h2}"
 | 
						|
    local title="$title"
 | 
						|
    __update_title
 | 
						|
    # title doit se terminer par un point
 | 
						|
    [ "${title:$((-1)):1}" == / ] || title="$title."
 | 
						|
    # Mettre un préfixe au titre
 | 
						|
    title="Package: $title"
 | 
						|
 | 
						|
    local doctype="$doctype"
 | 
						|
    local blueprint=
 | 
						|
    local jquery=
 | 
						|
    local html head start startbp endbp end
 | 
						|
    __generate_html
 | 
						|
    __before_write_html
 | 
						|
    __write_html
 | 
						|
 | 
						|
    [ -n "$2" ] && array_add "$2" "$file"
 | 
						|
    return 0
 | 
						|
}
 | 
						|
 | 
						|
function generate_javadoc_overview() {
 | 
						|
    local file="$1"
 | 
						|
    local mode=html
 | 
						|
 | 
						|
    local titlehl="${titlehl:-h2}"
 | 
						|
    local title="$title"
 | 
						|
    __update_title
 | 
						|
    # title doit se terminer par un point
 | 
						|
    [ "${title:$((-1)):1}" == / ] || title="$title."
 | 
						|
    # Mettre un préfixe au titre
 | 
						|
    title="Projet: $title"
 | 
						|
 | 
						|
    local doctype="$doctype"
 | 
						|
    local blueprint=
 | 
						|
    local jquery=
 | 
						|
    local html head start startbp endbp end
 | 
						|
    __generate_html
 | 
						|
    __before_write_html
 | 
						|
    __write_html
 | 
						|
 | 
						|
    [ -n "$2" ] && array_add "$2" "$file"
 | 
						|
    return 0
 | 
						|
}
 | 
						|
 | 
						|
function generate_php() {
 | 
						|
    local file="$1"
 | 
						|
    local mode=php
 | 
						|
 | 
						|
    local titlehl="${titlehl:-h1}"
 | 
						|
    local title="$title"
 | 
						|
    __update_title
 | 
						|
 | 
						|
    local doctype="$doctype"
 | 
						|
    local blueprint="$blueprint"
 | 
						|
    local jquery="$jquery"
 | 
						|
    local html head start startbp endbp end
 | 
						|
    __generate_html
 | 
						|
    doctype="<?php # -*- coding: $encoding ${mode:+mode: $mode }-*- vim:sw=2:sts=2:et:ai:si:sta:fenc=$encoding
 | 
						|
?>${doctype:+$doctype
 | 
						|
}"
 | 
						|
    __write_html
 | 
						|
 | 
						|
    [ -n "$2" ] && array_add "$2" "$file"
 | 
						|
    return 0
 | 
						|
}
 | 
						|
 | 
						|
function generate_cakephp_ctp() {
 | 
						|
    local file="$1"
 | 
						|
    local mode=php
 | 
						|
 | 
						|
    check_overwrite "$1" || return
 | 
						|
    estep "$(ppath "$file")"
 | 
						|
    echo >"$file" "<?php # -*- coding: $encoding ${mode:+mode: $mode }-*- vim:sw=2:sts=2:et:ai:si:sta:fenc=$encoding"
 | 
						|
 | 
						|
    [ -n "$2" ] && array_add "$2" "$file"
 | 
						|
    return 0
 | 
						|
}
 | 
						|
 | 
						|
function generate_css() {
 | 
						|
    local file="$1"
 | 
						|
    local mode=css
 | 
						|
 | 
						|
    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
 | 
						|
*/@CHARSET \"$encoding\";"
 | 
						|
 | 
						|
    [ -n "$2" ] && array_add "$2" "$file"
 | 
						|
    return 0
 | 
						|
}
 | 
						|
 | 
						|
function generate_javascript() {
 | 
						|
    local file="$1"
 | 
						|
    local mode=javascript
 | 
						|
 | 
						|
    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=1
 | 
						|
overwrite=
 | 
						|
encoding=
 | 
						|
#executable=
 | 
						|
baseurl=/
 | 
						|
doctype=html4
 | 
						|
blueprint=auto
 | 
						|
jquery=auto
 | 
						|
bpurl=
 | 
						|
titlehl=
 | 
						|
title=
 | 
						|
head_title=
 | 
						|
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= \
 | 
						|
    --doctype: doctype= \
 | 
						|
    -4,--html4 doctype=html4 \
 | 
						|
    -5,--html5 doctype=html5 \
 | 
						|
    -U:,--baseurl: baseurl= \
 | 
						|
    -b,--blueprint,--bp blueprint=1 \
 | 
						|
    -n,--no-blueprint,--noblueprint,--nobp blueprint= \
 | 
						|
    -j,--jquery jquery=1 \
 | 
						|
    -k,--no-jquery,--nojquery jquery= \
 | 
						|
    -B:,--bpurl: bpurl= \
 | 
						|
    --titlehl:,--hl: titlehl= \
 | 
						|
    -T:,--title: title= \
 | 
						|
    --head-title: head_title= \
 | 
						|
    @ 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
 | 
						|
[ -z "$baseurl" -o "${baseurl:$((-1)):1}" == / ] || baseurl="$baseurl/"
 | 
						|
[ -n "$bpurl" ] || bpurl="${baseurl}blueprint/"
 | 
						|
[ "${bpurl:$((-1)):1}" == / ] || bpurl="$bpurl/"
 | 
						|
 | 
						|
files2edit=()
 | 
						|
r=0
 | 
						|
for file in "$@"; do
 | 
						|
    t="$template"
 | 
						|
    if [ -z "$t" ]; then
 | 
						|
        dir="$(dirname "$file")"
 | 
						|
        name="$(basename "$file")"
 | 
						|
        # Si template n'est pas spécifié, le déterminer le cas échéant à partir
 | 
						|
        # du nom de fichier. Rajouter ici le code approprié
 | 
						|
        case "$name" in
 | 
						|
        overview.html) t=javadoc-overview;;
 | 
						|
        package.html) t=javadoc-package;;
 | 
						|
        esac
 | 
						|
    fi
 | 
						|
 | 
						|
    case "$t" in
 | 
						|
    html|htm) generate_html "$file" files2edit || r=$?;;
 | 
						|
    javadoc-package|jdp) generate_javadoc_package "$file" files2edit || r=$?;;
 | 
						|
    jadadoc-overview|jdo) generate_javadoc_overview "$file" files2edit || r=$?;;
 | 
						|
    php|phps) generate_php "$file" files2edit || r=$?;;
 | 
						|
    cakephp-ctp|ctp) generate_cakephp_ctp "$file" files2edit || r=$?;;
 | 
						|
    css) generate_css "$file" files2edit || r=$?;;
 | 
						|
    javascript|js) generate_javascript "$file" files2edit || r=$?;;
 | 
						|
    *) die "$NAME: template invalide: $t";;
 | 
						|
    esac
 | 
						|
done
 | 
						|
 | 
						|
if [ -n "$edit" -a "${#files2edit[*]}" -gt 0 ]; then
 | 
						|
    "${EDITOR:-vi}" "${files2edit[@]}"
 | 
						|
fi
 | 
						|
 | 
						|
exit $r
 |