#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8

TOOLS=(doinplacef doinplacex)
if [ "$#" -eq 1 -a "$1" == --nutools-makelinks ]; then
    # créer les liens
    scriptname="$(basename "$0")"
    for tool in "${TOOLS[@]}"; do
        ln -s "$scriptname" "$tool"
    done
    exit 0
fi

source "$(dirname "$0")/lib/ulib/ulib" || exit 1
urequire base

function display_help() {
    uecho "$scriptname: filtrer en place un fichier à travers une suite de commandes

USAGE
    $scriptname FILE COMMAND [ARGS...]

Si on utilise une commande avec des options, penser à utliser '--' pour séparer
les options de ce script des options de la commande

En plus des commandes systèmes, il est possible d'utiliser toute fonction de
nutools qui effectue des traitement sur un flux comme stripnl, filter_empty,
merge_contlines, filter_comment, filter_conf, etc. Les fonctions nl2lf, nl2crlf,
nl2cr, latin1compat et noaccents sont aussi disponibles par convenance.

OPTIONS
    -p, --evalp
        Evaluer la commande avec evalp(), ce qui permet de chainer plusieurs
        commandes en les séparant par //. Cette option est automatiquement
        activée si ce script est lancé avec le nom doinplacex
    -g, --ignore-error, --replace-always
        Normalement, le fichier n'est pas remplacé si la commande retourne une
        erreur. Avec cette option, le fichier est remplacé quel que soit le code
        de retour de la commande. A utiliser par exemple avec des commandes
        comme grep qui peuvent retourner FAUX s'ils ne trouvent pas le motif.
        Cette option est automatiquement activée si ce script est lancé avec le
        nom doinplacef"
}

function nl2lf() { _nl2lf; }
function nl2crlf() { _nl2crlf; }
function nl2cr() { _nl2cr; }
function latin1compat() { _latin1compat; }
function noaccents() { _noaccents; }

[ "$scriptname" == doinplacex ] && evalp=1 || evalp=
[ "$scriptname" == doinplacef ] && replace=1 || replace=
args=(
    --help '$exit_with display_help'
    -p,--evalp evalp=1
    -g,--ignore-error,--replace-always replace=1
)
parse_args "$@"; set -- "${args[@]}"

file="$1"; shift
if [ -n "$evalp" ]; then
    if [ -n "$replace" ]; then
        doinplacef "$file" evalp "$@"
    else
        doinplace "$file" evalp "$@"
    fi
else
    if [ -n "$replace" ]; then
        doinplacef "$file" "$@"
    else
        doinplace "$file" "$@"
    fi
fi
exit $?