[comp.windows.x] Format for .Xdefaults files

sanders@peyote.cactus.org (Tony Sanders) (02/26/91)

Here is a filter to format app-defaults files.
If your system supports '#!' you could make it '#!/bin/awk -f'.
You may wish to post process with "tab".  You may need a recent version
of awk, but you could change the sub() in the main body and work around it.

For now I don't do anything with continuation lines but you could
special case translations without much trouble, or uncomment the
sub/printf in 'contline==1'.  It tries not to format comments, while
formatting resource lines that are commented.

enjoy,
-- sanders@peyote.cactus.org
First rule of software:  Throw the first one away.
and so on...
---------------------------- xfmt ---------------------------
#!/bin/sh
awk '
    BEGIN { FS=" "; contline=0; }

    # Format continuation line
    contline==1 {
        if (!match($0,/\\$/))
            contline=0;         # last continuation line
        # sub(/^[ \t]*/,"",$0); # strip leading spaces
        # printf("    %s\n",$0);
        print;
        next;
    }

    # Special case for #define for future use
    /^#[ \t]*define/ { print; next; }
    # Skip cpp lines and obvious comments
    /^#/ || /^!#/ || /^!.*XConsortium/ || /^! @/ { print; next; }

    # Format line if it contains a colon (resource line)
    /:/ {
        if (match($0,/\\$/))
            contline=1;         # set continuation flag, format this line
        i=index($0,":");
        one=substr($0,0,i);
        sub(/[ \t]*:/,":",one);
	if (i==length) {
	    # emtpy resource spec
	    printf("%s\n",one);
	    next;
	}
        two=substr($0,i+1,length-i);
        ac=split(two,al," ");
        printf("%-40s",one);
        for (i=1;i<=ac;i++) {
            printf("%s",al[i]);
            if (i != ac) printf(" ");
        }
        printf("\n");
        next;
    }

    { print; next; }
    '
exit 0