diff --git a/src/pl/plpgsql/src/scan.l b/src/pl/plpgsql/src/scan.l
index 7256ba78707cfaae70068c257a980bc456a8bffb..a3eae579205268cbba543b9adfdc446c40c50e68 100644
--- a/src/pl/plpgsql/src/scan.l
+++ b/src/pl/plpgsql/src/scan.l
@@ -4,7 +4,7 @@
  *			  procedural language
  *
  * IDENTIFICATION
- *    $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.4 2000/06/20 16:40:10 petere Exp $
+ *    $Header: /cvsroot/pgsql/src/pl/plpgsql/src/Attic/scan.l,v 1.5 2000/08/22 14:59:28 tgl Exp $
  *
  *    This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -40,11 +40,13 @@ static char	*plpgsql_source;
 static int	plpgsql_bytes_left;
 static int	scanner_functype;
 static int	scanner_typereported;
+
 int	plpgsql_SpaceScanned = 0;
 
 extern int yylineno;
 
 static void plpgsql_input(char *buf, int *result, int max);
+
 #define YY_INPUT(buf,res,max)	plpgsql_input(buf, &res, max)
 #define YY_NO_UNPUT
 %}
@@ -74,37 +76,38 @@ WC	[[:alnum:]_"]
      * functions type (T_FUNCTION or T_TRIGGER)
      * ----------
      */
-    if (!scanner_typereported) {
-        scanner_typereported = 1;
-	return scanner_functype;
-    }
+	if (!scanner_typereported)
+	{
+		scanner_typereported = 1;
+		return scanner_functype;
+	}
 
     /* ----------
      * The keyword rules
      * ----------
      */
-:=			{ return K_ASSIGN;			}
-=			{ return K_ASSIGN;			}
+:=				{ return K_ASSIGN;			}
+=				{ return K_ASSIGN;			}
 \.\.			{ return K_DOTDOT;			}
 alias			{ return K_ALIAS;			}
 begin			{ return K_BEGIN;			}
 bpchar			{ return T_BPCHAR;			}
 char			{ return T_CHAR;			}
-constant		{ return K_CONSTANT;			}
+constant		{ return K_CONSTANT;		}
 debug			{ return K_DEBUG;			}
 declare			{ return K_DECLARE;			}
 default			{ return K_DEFAULT;			}
 else			{ return K_ELSE;			}
-end			{ return K_END;				}
-exception		{ return K_EXCEPTION;			}
+end				{ return K_END;				}
+exception		{ return K_EXCEPTION;		}
 exit			{ return K_EXIT;			}
-for			{ return K_FOR;				}
+for				{ return K_FOR;				}
 from			{ return K_FROM;			}
-if			{ return K_IF;				}
-in			{ return K_IN;				}
+if				{ return K_IF;				}
+in				{ return K_IN;				}
 into			{ return K_INTO;			}
 loop			{ return K_LOOP;			}
-not			{ return K_NOT;				}
+not				{ return K_NOT;				}
 notice			{ return K_NOTICE;			}
 null			{ return K_NULL;			}
 perform			{ return K_PERFORM;			}
@@ -115,7 +118,7 @@ return			{ return K_RETURN;			}
 reverse			{ return K_REVERSE;			}
 select			{ return K_SELECT;			}
 then			{ return K_THEN;			}
-to			{ return K_TO;				}
+to				{ return K_TO;				}
 type			{ return K_TYPE;			}
 varchar			{ return T_VARCHAR;			}
 when			{ return K_WHEN;			}
@@ -143,13 +146,13 @@ dump			{ return O_DUMP;			}
      * Ignore whitespaces but remember this happened
      * ----------
      */
-[ \t\n]+		{ plpgsql_SpaceScanned = 1;		}
+[ \t\r\n]+		{ plpgsql_SpaceScanned = 1;		}
 
     /* ----------
      * Eat up comments
      * ----------
      */
---[^\n]*		;
+--[^\r\n]*		;
 \/\*			{ start_lineno = yylineno;
 			  BEGIN IN_COMMENT;
 			}
@@ -188,22 +191,25 @@ dump			{ return O_DUMP;			}
 
 %%
 
-int yywrap()
+int
+yywrap()
 {
     return 1;
 }
 
 
-static void plpgsql_input(char *buf, int *result, int max)
+static void
+plpgsql_input(char *buf, int *result, int max)
 {
-    int n = max;
-    if (n > plpgsql_bytes_left) {
+    int		n = max;
+
+    if (n > plpgsql_bytes_left)
         n = plpgsql_bytes_left;
-    }
 
-    if (n == 0) {
+    if (n == 0)
+	{
         *result = YY_NULL;
-	return;
+		return;
     }
 
     *result = n;
@@ -213,18 +219,29 @@ static void plpgsql_input(char *buf, int *result, int max)
 }
 
 
-void plpgsql_setinput(char *source, int functype)
+void
+plpgsql_setinput(char *source, int functype)
 {
     yyrestart(NULL);
     yylineno = 1;
 
     plpgsql_source = source;
+
+	/*----------
+	 * Hack: skip any initial newline, so that in the common coding layout
+	 *		CREATE FUNCTION ... AS '
+	 *			code body
+	 *		' LANGUAGE 'plpgsql';
+	 * we will think "line 1" is what the programmer thinks of as line 1.
+	 *----------
+	 */
+    if (*plpgsql_source == '\r')
+        plpgsql_source++;
     if (*plpgsql_source == '\n')
         plpgsql_source++;
+
     plpgsql_bytes_left = strlen(plpgsql_source);
 
     scanner_functype     = functype;
     scanner_typereported = 0;
 }
-
-