Prevent indenting of 'extern "C"' blocks.
authorBruce Momjian
Wed, 7 Nov 2001 21:24:28 +0000 (21:24 +0000)
committerBruce Momjian
Wed, 7 Nov 2001 21:24:28 +0000 (21:24 +0000)
src/tools/pgindent/pgindent

index faa192c94f9064b209b3a20c9da1a93e1180cc56..913f09823dff73316ffde9feebc62f0b8fcac006 100755 (executable)
@@ -61,6 +61,37 @@ do
            if (NR >= 1)
                print line1;
        }' |
+# prevent indenting of code in 'extern "C"' blocks
+   awk '   BEGIN   {line1 = ""; line2 = ""; skips = 0}
+       {
+           line2 = $0;
+           if (skips > 0)
+               skips--;
+           if (line1 ~ "^extern[   ]*\"C\"" &&
+               line2 ~ "^{[    ]*$")
+           {
+               # don't print first line
+               print "/* Open extern \"C\" */";
+               line2 = "";
+               skips = 2;
+           }
+           else if (line1 ~ "^#ifdef[  ]*__cplusplus" &&
+               line2 ~ "^}[    ]*$")
+           {
+               print line1;
+               print "/* Close extern \"C\" */";
+               line2 = "";
+               skips = 2;
+           }
+           else
+               if (skips == 0 && NR >= 2)
+                   print line1;
+           line1 = line2;
+       }
+       END {
+           if (NR >= 1 && skips <= 1)
+               print line1;
+       }' |
 # protect backslashes in DATA()
    sed 's;^DATA(.*$;/*&*/;' |
 # protect wrapping in CATALOG()
@@ -1456,6 +1487,9 @@ do
    cat /tmp/$$a |
    sed 's;^/\*\(DATA(.*\)\*/$;\1;' |
    sed 's;^/\*\(CATALOG(.*\)\*/$;\1;' |
+   sed 's;^/\* Open extern \"C\" \*/$;extern    "C"\
+{;' |
+   sed 's;^/\* Close extern \"C\" \*/$;};' |
 # remove tabs and retab with four spaces
    detab -t8 -qc |
    entab -t4 -qc |