##@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 "?>";; 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[@]}" }