#!/bin/sh

##  Inline DirXML Trace Highlighting
##  Remco de Vreugd, April 2005
##  Copyright (c) 2005 Novell, Inc.  All rights reserved.

# Low-level effects
RED=[31m
GREEN=[32m
YELLOW=[33m
MAGENTA=[35m
CYAN=[36m
PLAIN=[0m
BOLD=[1m

# High-level effects
SUCCESS=$GREEN$BOLD
WARNING=$YELLOW$BOLD
ERROR=$RED$BOLD
MESSAGE=$MAGENTA

# Spaced end
SPDE=" .*"
# Spaced line
SPDL="$SPDE\n"
# Non-spaced end
NSPE="[^ ].*"
# Non-spaced line
NSPL="$NSPE\n"
# Multi-line patterns
FOURLINE="^\($NSPL$SPDL$SPDL$SPDL\)\($NSPL$NSPE\)$"
FIVELINE="^\($NSPL$SPDL$SPDL$SPDL$SPDL\)\($NSPE\)$"
SIXLINE="^$NSPL$SPDL$SPDL$SPDL$SPDL$SPDE$"

sed -u "
# Removal of tracer's own attempts to highlight xsl:messages
s/%13C//g
# Driver state transitioning
s/%+C%14C/$BOLD/g
s/%-C/$PLAIN/g
# DirXML Log Event blocks
/DirXML Log Event/{
    N
    N
    N
    N
    N
    /$FOURLINE/ {
        s/$FOURLINE/\1$PLAIN\2/g
        /Success/s/^/$SUCCESS/g
        /Warning/s/^/$WARNING/g
        /Error/s/^/$ERROR/g
        /Fatal/s/^/$ERROR/g
    }
    /$FIVELINE/ {
        s/$FIVELINE/\1$PLAIN\2/g
        /Success/s/^/$SUCCESS/g
        /Warning/s/^/$WARNING/g
        /Error/s/^/$ERROR/g
        /Fatal/s/^/$ERROR/g
    }
    /$SIXLINE/ {
        /Success/s/^/$SUCCESS/g
        /Warning/s/^/$WARNING/g
        /Error/s/^/$ERROR/g
        /Fatal/s/^/$ERROR/g
        s/$/$PLAIN/g
    }
}
# xsl:message coloring
s/^.*xsl:message.*$/$MESSAGE&$PLAIN/g
# XDS coloring
s/<nds/$CYAN&/g
s/<\/nds>/&$PLAIN/g
s/^\(.*<status[^>]*>\)\(.*\)\(<\/status>.*\)$/\1$BOLD\2$PLAIN$CYAN\3/g
"
