170 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
 | 
						|
## Fonctions pour gérer les modelines dans les fichiers
 | 
						|
##@cooked nocomments
 | 
						|
##@require base
 | 
						|
uprovide modeline
 | 
						|
urequire base
 | 
						|
 | 
						|
MODELINE="@prefix@-*- coding: utf-8 @mode@-*- vim:sw=@tabsize@:sts=@tabsize@:et:ai:si:sta:fenc=utf-8"
 | 
						|
 | 
						|
# modèles de modes à copier dans les fonctions __ml_* ci-dessous
 | 
						|
#CSS=.css|css
 | 
						|
#JS=.js|js|javascript
 | 
						|
#JAVA=.java|java
 | 
						|
#HTML=.html|.htm|html|html4|html5
 | 
						|
#XML=.xml|xml
 | 
						|
#PHP=.php|.phps|php|php4|php5
 | 
						|
#SH=.sh|sh|shell
 | 
						|
#PYTHON=.py|.pyw|py|python
 | 
						|
#TEXT=.txt|txt|text
 | 
						|
#CONF=.conf|conf
 | 
						|
#MARKDOWN=.mdt|.mdwn|.md|.text|.twp|markdown
 | 
						|
#PUML=.puml|puml|plantuml
 | 
						|
#IUML=.iuml|iuml|plantumlinc
 | 
						|
#SQL=.sql|sql
 | 
						|
 | 
						|
function __ml_getprefix() {
 | 
						|
    case "$1" in
 | 
						|
    .css|css|.js|js|javascript|.java|java) echo "/* ";;
 | 
						|
    .html|.htm|html|html4|html5) echo "<!-- ";;
 | 
						|
    .php|.phps|php|php4|php5) echo "<?php # ";;
 | 
						|
    .sh|sh|shell|.py|.pyw|py|python|.txt|txt|text|.conf|conf) echo "# ";;
 | 
						|
    .mdt|.mdwn|.md|.text|.twp|markdown|.puml|puml|plantuml) echo "# ";;
 | 
						|
    .iuml|iuml|plantumlinc) echo "'' ";;
 | 
						|
    .sql|sql) echo "-- ";;
 | 
						|
    *)  # par défaut, utiliser le préfixe '# ', même si ce n'est pas forcément
 | 
						|
        # approprié
 | 
						|
        echo "# "
 | 
						|
        ;;
 | 
						|
    esac
 | 
						|
}
 | 
						|
function __ml_getmode() {
 | 
						|
    case "$1" in
 | 
						|
    .html|.htm|html|html4|html5) echo html;;
 | 
						|
    .php|.phps|php|php5) echo php;;
 | 
						|
    .sh|sh|shell) echo sh;;
 | 
						|
    .py|.pyw|py|python) echo python;;
 | 
						|
    .txt|txt|text) echo text;;
 | 
						|
    .conf|conf) echo conf;;
 | 
						|
    .mdt|.mdwn|.md|.text|.twp|markdown) echo markdown;;
 | 
						|
    .puml|puml|plantuml|.iuml|iuml|plantumlinc) echo text;;
 | 
						|
    .sql|sql) echo sql;;
 | 
						|
    esac
 | 
						|
}
 | 
						|
function __ml_gettabsize() {
 | 
						|
    case "$1" in
 | 
						|
    .php|.phps|php|php5) echo 2;;
 | 
						|
    *) echo 4;;
 | 
						|
    esac
 | 
						|
}
 | 
						|
function __ml_getmodeline() {
 | 
						|
    local prefix="$(__ml_getprefix "$1")"
 | 
						|
    local mode="$(__ml_getmode "$1")"
 | 
						|
    local tabsize="$(__ml_gettabsize "$1")"
 | 
						|
    [ -n "$mode" ] && mode="mode: $mode "
 | 
						|
    local modeline="$MODELINE"
 | 
						|
    modeline="${modeline//@prefix@/$prefix}"
 | 
						|
    modeline="${modeline//@mode@/$mode}"
 | 
						|
    modeline="${modeline//@tabsize@/$tabsize}"
 | 
						|
    echo "$modeline"
 | 
						|
}
 | 
						|
function __ml_getsuffix() {
 | 
						|
    case "$1" in
 | 
						|
    .css|css|.js|js|javascript|.java|java) echo "*/";;
 | 
						|
    .html|.htm|html|html4|html5) echo "-->";;
 | 
						|
    .php|.phps|php|php4|php5) echo "?>";;
 | 
						|
    esac
 | 
						|
}
 | 
						|
 | 
						|
function printml() {
 | 
						|
    local atype=auto
 | 
						|
    parse_opts "${PRETTYOPTS[@]}" \
 | 
						|
        --help '$exit_with display_help' \
 | 
						|
        -t:,--type: atype= \
 | 
						|
        @ args -- "$@" && set -- "${args[@]}" || die "$args"
 | 
						|
 | 
						|
    local mode modeline suffix type
 | 
						|
    if [ "$atype" == "auto" ]; then
 | 
						|
        local basename ext
 | 
						|
        splitname "$(basename "$1")" basename ext
 | 
						|
        type="${ext:+.$ext}"
 | 
						|
        type="${type:-shell}"
 | 
						|
    else
 | 
						|
        type="$atype"
 | 
						|
    fi
 | 
						|
    modeline="$(__ml_getmodeline "$type")"
 | 
						|
    suffix="$(__ml_getsuffix "$type")"
 | 
						|
 | 
						|
    echo "$modeline${suffix:+
 | 
						|
$suffix}"
 | 
						|
}
 | 
						|
 | 
						|
function addml() {
 | 
						|
    local atype=auto
 | 
						|
    local edit=auto
 | 
						|
    parse_opts "${PRETTYOPTS[@]}" \
 | 
						|
        --help '$exit_with display_help' \
 | 
						|
        -t:,--type: atype= \
 | 
						|
        -e,--edit edit=1 \
 | 
						|
        -n,--noedit edit= \
 | 
						|
        @ args -- "$@" && set -- "${args[@]}" || die "$args"
 | 
						|
 | 
						|
    if [ "$edit" == "auto" ]; then
 | 
						|
        [ $# -eq 1 ] && edit=1 || edit=
 | 
						|
    fi
 | 
						|
 | 
						|
    local mode modeline suffix type
 | 
						|
    local -a edits
 | 
						|
    for file in "$@"; do
 | 
						|
        if [ "$atype" == "auto" ]; then
 | 
						|
            local basename ext
 | 
						|
            splitname "$(basename "$file")" basename ext
 | 
						|
            type="${ext:+.$ext}"
 | 
						|
            type="${type:-shell}"
 | 
						|
        else
 | 
						|
            type="$atype"
 | 
						|
        fi
 | 
						|
        mode="$(__ml_getmode "$type")"
 | 
						|
        modeline="$(__ml_getmodeline "$type")"
 | 
						|
        suffix="$(__ml_getsuffix "$type")"
 | 
						|
 | 
						|
        if [ ! -e "$file" ]; then
 | 
						|
            ask_yesno "Le fichier $file n'existe pas. Faut-il le créer?" O || continue
 | 
						|
            touch "$file"
 | 
						|
        fi
 | 
						|
        array_add edits "$file"
 | 
						|
        doinplacef "$file" awkrun mode="$mode" modeline="$modeline" suffix="$suffix" '
 | 
						|
BEGIN { run = 1; done = 0; nextline = 0 }
 | 
						|
run == 1 {
 | 
						|
  if (substr($0, length($0) - length(modeline) + 1) == modeline) {
 | 
						|
    run = 0; done = 1; nextline = 0
 | 
						|
  } else if (nextline) {
 | 
						|
    print modeline
 | 
						|
    if (suffix != "") print suffix
 | 
						|
    run = 0; done = 1; nextline = 0
 | 
						|
  } else if (mode == "shell" && $0 ~ /^#!/) {
 | 
						|
    nextline = 1
 | 
						|
  } else if (mode == "shell" && $0 ~ /^#/) {
 | 
						|
    print modeline
 | 
						|
    if (suffix != "") print suffix
 | 
						|
    done = 1; run = 0
 | 
						|
  } else if (!done) {
 | 
						|
    print modeline
 | 
						|
    if (suffix != "") print suffix
 | 
						|
    done = 1; run = 0
 | 
						|
  } else {
 | 
						|
    run = 0
 | 
						|
  }
 | 
						|
}
 | 
						|
{ print }
 | 
						|
END {
 | 
						|
  if (run || nextline) {
 | 
						|
    print modeline
 | 
						|
    if (suffix != "") print suffix
 | 
						|
  }
 | 
						|
}
 | 
						|
'
 | 
						|
    done
 | 
						|
    [ -n "$edit" ] && "${EDITOR:-vi}" "${edits[@]}"
 | 
						|
}
 |