gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gawk-diffs] [SCM] gawk branch, feature/typed-regex-2, updated. gawk-4.1


From: Arnold Robbins
Subject: [gawk-diffs] [SCM] gawk branch, feature/typed-regex-2, updated. gawk-4.1.0-2135-g368923c
Date: Mon, 21 Nov 2016 18:08:51 +0000 (UTC)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, feature/typed-regex-2 has been updated
       via  368923c466adf597934755c506ede460c5bd18ae (commit)
      from  36f9d164c23e34b15fb3ca9f32ba6ba39b4ee6e3 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=368923c466adf597934755c506ede460c5bd18ae

commit 368923c466adf597934755c506ede460c5bd18ae
Author: Arnold D. Robbins <address@hidden>
Date:   Mon Nov 21 20:08:25 2016 +0200

    Revise doc for strongly typed regexp constants.

diff --git a/doc/ChangeLog b/doc/ChangeLog
index 74fc198..c948bcd 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,10 @@
+2016-11-21         Arnold D. Robbins     <address@hidden>
+
+       * gawktexi.in: Finish off discussion of strongly typed regexp
+       constants and put it in the right place in the manual. A few other
+       minor fixes.
+       * wordlist: Updated.
+
 2016-11-18         Arnold D. Robbins     <address@hidden>
 
        * gawktexi.in (Variable Typing): Rework and improve discussion
diff --git a/doc/gawk.info b/doc/gawk.info
index 412edf5..3bb2f35 100644
--- a/doc/gawk.info
+++ b/doc/gawk.info
@@ -175,7 +175,6 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Computed Regexps::                    Using Dynamic Regexps.
 * GNU Regexp Operators::                Operators specific to GNU software.
 * Case-sensitivity::                    How to do case-insensitive matching.
-* Strong Regexp Constants::             Strongly typed regexp constants.
 * Regexp Summary::                      Regular expressions summary.
 * Records::                             Controlling how data is split into
                                         records.
@@ -258,6 +257,9 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Nondecimal-numbers::                  What are octal and hex numbers.
 * Regexp Constants::                    Regular Expression constants.
 * Using Constant Regexps::              When and how to use a regexp constant.
+* Standard Regexp Constants::           Regexp constants in standard
+                                        'awk'.
+* Strong Regexp Constants::             Strongly typed regexp constants.
 * Variables::                           Variables give names to values for
                                         later use.
 * Using Variables::                     Using variables in your programs.
@@ -560,7 +562,8 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Array Functions::                     Functions for working with arrays.
 * Flattening Arrays::                   How to flatten arrays.
 * Creating Arrays::                     How to create and populate arrays.
-* Redirection API::                     How to access and manipulate 
redirections.
+* Redirection API::                     How to access and manipulate
+                                        redirections.
 * Extension API Variables::             Variables provided by the API.
 * Extension Versioning::                API Version information.
 * Extension API Informational Variables:: Variables providing information about
@@ -624,10 +627,11 @@ in (a) below.  A copy of the license is included in the 
section entitled
 * Configuration Philosophy::            How it's all supposed to work.
 * Non-Unix Installation::               Installation on Other Operating
                                         Systems.
-* PC Installation::                     Installing and Compiling 'gawk' on
-                                        Microsoft Windows.
+* PC Installation::                     Installing and Compiling
+                                        'gawk' on Microsoft Windows.
 * PC Binary Installation::              Installing a prepared distribution.
-* PC Compiling::                        Compiling 'gawk' for Windows32.
+* PC Compiling::                        Compiling 'gawk' for
+                                        Windows32.
 * PC Using::                            Running 'gawk' on Windows32.
 * Cygwin::                              Building and running 'gawk'
                                         for Cygwin.
@@ -3327,7 +3331,6 @@ you specify more complicated classes of strings.
 * Computed Regexps::            Using Dynamic Regexps.
 * GNU Regexp Operators::        Operators specific to GNU software.
 * Case-sensitivity::            How to do case-insensitive matching.
-* Strong Regexp Constants::     Strongly typed regexp constants.
 * Regexp Summary::              Regular expressions summary.
 
 
@@ -4042,7 +4045,7 @@ No options
      default.
 
 
-File: gawk.info,  Node: Case-sensitivity,  Next: Strong Regexp Constants,  
Prev: GNU Regexp Operators,  Up: Regexp
+File: gawk.info,  Node: Case-sensitivity,  Next: Regexp Summary,  Prev: GNU 
Regexp Operators,  Up: Regexp
 
 3.8 Case Sensitivity in Matching
 ================================
@@ -4116,29 +4119,10 @@ and we don't recommend it.
 that 'gawk' does the right thing.
 
 
-File: gawk.info,  Node: Strong Regexp Constants,  Next: Regexp Summary,  Prev: 
Case-sensitivity,  Up: Regexp
-
-3.9 Strongly Typed Regexp Constants
-===================================
-
-This minor node describes a 'gawk'-specific feature.
-
-   Regexp constants ('/.../') hold a strange position in the 'awk'
-language.  In most contexts, they act like an expression: '$0 ~ /.../'.
-In other contexts, they denote only a regexp to be matched.  In no case
-are they really a "first class citizen" of the language.  That is, you
-cannot define a scalar variable whose type is "regexp" in the same sense
-that you can define a variable to be a number or a string:
-
-     num = 42        Numeric variable
-     str = "hi"      String variable
-     re = /foo/      Wrong! re is the result of $0 ~ /foo/
-
-
-File: gawk.info,  Node: Regexp Summary,  Prev: Strong Regexp Constants,  Up: 
Regexp
+File: gawk.info,  Node: Regexp Summary,  Prev: Case-sensitivity,  Up: Regexp
 
-3.10 Summary
-============
+3.9 Summary
+===========
 
    * Regular expressions describe sets of strings to be matched.  In
      'awk', regular expression constants are written enclosed between
@@ -7486,9 +7470,9 @@ octal (base 8) and hexadecimal (base 16).  In octal, the 
numbers go 0,
 1 times 10 plus 1, so '11' in octal is 1 times 8 plus 1.  This equals 9
 in decimal.  In hexadecimal, there are 16 digits.  Because the everyday
 decimal number system only has ten digits ('0'-'9'), the letters 'a'
-through 'f' are used to represent the rest.  (Case in the letters is
-usually irrelevant; hexadecimal 'a' and 'A' have the same value.)  Thus,
-'11' in hexadecimal is 1 times 16 plus 1, which equals 17 in decimal.
+through 'f' represent the rest.  (Case in the letters is usually
+irrelevant; hexadecimal 'a' and 'A' have the same value.)  Thus, '11' in
+hexadecimal is 1 times 16 plus 1, which equals 17 in decimal.
 
    Just by looking at plain '11', you can't tell what base it's in.  So,
 in C, C++, and other languages derived from C, there is a special
@@ -7565,6 +7549,23 @@ File: gawk.info,  Node: Using Constant Regexps,  Next: 
Variables,  Prev: Constan
 6.1.2 Using Regular Expression Constants
 ----------------------------------------
 
+Regular expression constants consist of text describing a regular
+expression enclosed in slashes (such as '/the +answer/').  This minor
+node describes how such constants work in POSIX 'awk' and 'gawk', and
+then goes on to describe "strongly typed regexp constants", which are a
+'gawk' extension.
+
+* Menu:
+
+* Standard Regexp Constants::   Regexp constants in standard 'awk'.
+* Strong Regexp Constants::     Strongly typed regexp constants.
+
+
+File: gawk.info,  Node: Standard Regexp Constants,  Next: Strong Regexp 
Constants,  Up: Using Constant Regexps
+
+6.1.2.1 Standard Regular Expression Constants
+.............................................
+
 When used on the righthand side of the '~' or '!~' operators, a regexp
 constant merely stands for the regexp that is to be matched.  However,
 regexp constants (such as '/foo/') may be used like simple expressions.
@@ -7639,6 +7640,73 @@ function, because passing a truth value in this way is 
probably not what
 was intended.
 
 
+File: gawk.info,  Node: Strong Regexp Constants,  Prev: Standard Regexp 
Constants,  Up: Using Constant Regexps
+
+6.1.2.2 Strongly Typed Regexp Constants
+.......................................
+
+This minor node describes a 'gawk'-specific feature.
+
+   As we saw in the previous minor node, regexp constants ('/.../') hold
+a strange position in the 'awk' language.  In most contexts, they act
+like an expression: '$0 ~ /.../'.  In other contexts, they denote only a
+regexp to be matched.  In no case are they really a "first class
+citizen" of the language.  That is, you cannot define a scalar variable
+whose type is "regexp" in the same sense that you can define a variable
+to be a number or a string:
+
+     num = 42        Numeric variable
+     str = "hi"      String variable
+     re = /foo/      Wrong! re is the result of $0 ~ /foo/
+
+   For a number of more advanced use cases, it would be nice to have
+regexp constants that are "strongly typed"; in other words, that denote
+a regexp useful for matching, and not an expression.
+
+   'gawk' provides this feature.  A strongly typed regexp constant looks
+almost like a regular regexp constant, except that it is preceded by an
+'@' sign:
+
+     re = @/foo/     Regexp variable
+
+   Strongly typed regexp constants _cannot_ be used everywhere that a
+regular regexp constant can, because this would make the language even
+more confusing.  Instead, you may use them only in certain contexts:
+
+   * On the righthand side of the '~' and '!~' operators: 'some_var ~
+     @/foo/' (*note Regexp Usage::).
+
+   * In the 'case' part of a 'switch' statement (*note Switch
+     Statement::).
+
+   * As an argument to one of the built-in functions that accept regexp
+     constants: 'gensub()', 'gsub()', 'match()', 'patsplit()',
+     'split()', and 'sub()' (*note String Functions::).
+
+   * As a parameter in a call to a user-defined function (*note
+     User-defined::).
+
+   * On the righthand side of an assignment to a variable: 'some_var =
+     @/foo/'.  In this case, the type of 'some_var' is regexp.
+     Additionally, 'some_var' can be used with '~' and '!~', passed to
+     one of the built-in functions listed above, or passed as a
+     parameter to a user-defined function.
+
+   You may use the 'typeof()' built-in function (*note Type Functions::)
+to determine if a variable or function parameter is a regexp variable.
+
+   The true power of this feature comes from the ability to create
+variables that have regexp type.  Such variables can be passed on to
+user-defined functions, without the confusing aspects of computed
+regular expressions created from strings or string constants.  They may
+also be passed through indirect function calls (*note Indirect Calls::)
+and on to the built-in functions that accept regexp constants.
+
+   When used in numeric conversions, strongly typed regexp variables
+convert to zero.  When used in string conversions, they convert to the
+string value of the original regexp text.
+
+
 File: gawk.info,  Node: Variables,  Next: Conversion,  Prev: Using Constant 
Regexps,  Up: Values
 
 6.1.3 Variables
@@ -8418,6 +8486,8 @@ Scalar objects in 'awk' (variables, array elements, and 
fields) are
 _dynamically_ typed.  This means their type can change as the program
 runs, from "untyped" before any use,(1) to string or number, and then
 from string to number or number to string, as the program progresses.
+('gawk' also provides regexp-typed scalars, but let's ignore that for
+now; *note Strong Regexp Constants::.)
 
    You can't do much with untyped variables, other than tell that they
 are untyped.  The following program tests 'a' against '""' and '0'; the
@@ -13688,6 +13758,10 @@ contexts.
      '"array"'
           X is an array.
 
+     '"regexp"'
+          X is a strongly typed regexp (*note Strong Regexp
+          Constants::).
+
      '"number"'
           X is a number.
 
@@ -13735,7 +13809,8 @@ parameter is an array or not.
      turning it into a scalar.
 
    The 'typeof()' function is general; it allows you to determine if a
-variable or function parameter is a scalar, an array.
+variable or function parameter is a scalar, an array, or a strongly
+typed regexp.
 
    'isarray()' is deprecated; you should use 'typeof()' instead.  You
 should replace any existing uses of 'isarray(var)' in your code with
@@ -23360,7 +23435,8 @@ API in detail.
 * Symbol Table Access::                  Functions for accessing global
                                          variables.
 * Array Manipulation::                   Functions for working with arrays.
-* Redirection API::                      How to access and manipulate 
redirections.
+* Redirection API::                      How to access and manipulate
+                                         redirections.
 * Extension API Variables::              Variables provided by the API.
 * Extension API Boilerplate::            Boilerplate code for using the API.
 
@@ -33032,11 +33108,11 @@ Index
 * dark corner, OFMT variable:            OFMT.                (line  27)
 * dark corner, regexp as second argument to index(): String Functions.
                                                               (line 164)
-* dark corner, regexp constants:         Using Constant Regexps.
+* dark corner, regexp constants:         Standard Regexp Constants.
                                                               (line   6)
 * dark corner, regexp constants, /= operator and: Assignment Ops.
                                                               (line 149)
-* dark corner, regexp constants, as arguments to user-defined functions: Using 
Constant Regexps.
+* dark corner, regexp constants, as arguments to user-defined functions: 
Standard Regexp Constants.
                                                               (line  43)
 * dark corner, split() function:         String Functions.    (line 361)
 * dark corner, strings, storing:         gawk split records.  (line  82)
@@ -33243,7 +33319,7 @@ Index
 * differences in awk and gawk, read timeouts: Read Timeout.   (line   6)
 * differences in awk and gawk, record separators: awk split records.
                                                               (line 124)
-* differences in awk and gawk, regexp constants: Using Constant Regexps.
+* differences in awk and gawk, regexp constants: Standard Regexp Constants.
                                                               (line  43)
 * differences in awk and gawk, regular expressions: Case-sensitivity.
                                                               (line  26)
@@ -33745,7 +33821,7 @@ Index
 * gawk, PROCINFO array in:               Auto-set.            (line 148)
 * gawk, PROCINFO array in <1>:           Time Functions.      (line  47)
 * gawk, PROCINFO array in <2>:           Two-way I/O.         (line 114)
-* gawk, regexp constants and:            Using Constant Regexps.
+* gawk, regexp constants and:            Standard Regexp Constants.
                                                               (line  28)
 * gawk, regular expressions, case sensitivity: Case-sensitivity.
                                                               (line  26)
@@ -33778,7 +33854,7 @@ Index
 * General Public License (GPL):          Glossary.            (line 396)
 * General Public License, See GPL:       Manual History.      (line  11)
 * generate time values:                  Time Functions.      (line  25)
-* gensub:                                Using Constant Regexps.
+* gensub:                                Standard Regexp Constants.
                                                               (line  43)
 * gensub <1>:                            String Functions.    (line  89)
 * gensub() function (gawk), escape processing: Gory Details.  (line   6)
@@ -33858,7 +33934,7 @@ Index
 * group file:                            Group Functions.     (line   6)
 * group ID of gawk user:                 Auto-set.            (line 170)
 * groups, information about:             Group Functions.     (line   6)
-* gsub:                                  Using Constant Regexps.
+* gsub:                                  Standard Regexp Constants.
                                                               (line  43)
 * gsub <1>:                              String Functions.    (line 139)
 * gsub() function, arguments of:         String Functions.    (line 463)
@@ -34260,7 +34336,7 @@ Index
 * numeric constants:                     Scalar Constants.    (line   6)
 * numeric functions:                     Numeric Functions.   (line   6)
 * numeric, output format:                OFMT.                (line   6)
-* numeric, strings:                      Variable Typing.     (line  65)
+* numeric, strings:                      Variable Typing.     (line  67)
 * o debugger command (alias for option): Debugger Info.       (line  57)
 * obsolete features:                     Obsolete.            (line   6)
 * octal numbers:                         Nondecimal-numbers.  (line   6)
@@ -34456,7 +34532,7 @@ Index
 * POSIX awk, GNU long options and:       Options.             (line  15)
 * POSIX awk, interval expressions in:    Regexp Operators.    (line 135)
 * POSIX awk, next/nextfile statements and: Next Statement.    (line  44)
-* POSIX awk, numeric strings and:        Variable Typing.     (line  65)
+* POSIX awk, numeric strings and:        Variable Typing.     (line  67)
 * POSIX awk, OFMT variable and:          OFMT.                (line  27)
 * POSIX awk, OFMT variable and <1>:      Strings And Numbers. (line  56)
 * POSIX awk, period (.), using:          Regexp Operators.    (line  51)
@@ -34627,7 +34703,7 @@ Index
                                                               (line 103)
 * regexp constants, /=.../, /= operator and: Assignment Ops.  (line 149)
 * regexp constants, as patterns:         Expression Patterns. (line  34)
-* regexp constants, in gawk:             Using Constant Regexps.
+* regexp constants, in gawk:             Standard Regexp Constants.
                                                               (line  28)
 * regexp constants, slashes vs. quotes:  Computed Regexps.    (line  30)
 * regexp constants, vs. string constants: Computed Regexps.   (line  40)
@@ -34966,11 +35042,11 @@ Index
 * strings, merging arrays into:          Join Function.       (line   6)
 * strings, null:                         Regexp Field Splitting.
                                                               (line  43)
-* strings, numeric:                      Variable Typing.     (line  65)
+* strings, numeric:                      Variable Typing.     (line  67)
 * strtonum:                              String Functions.    (line 391)
 * strtonum() function (gawk), --non-decimal-data option and: Nondecimal Data.
                                                               (line  35)
-* sub:                                   Using Constant Regexps.
+* sub:                                   Standard Regexp Constants.
                                                               (line  43)
 * sub <1>:                               String Functions.    (line 409)
 * sub() function, arguments of:          String Functions.    (line 463)
@@ -35244,572 +35320,573 @@ Index
 
 Tag Table:
 Node: Top1200
-Node: Foreword342530
-Node: Foreword446972
-Node: Preface48504
-Ref: Preface-Footnote-151363
-Ref: Preface-Footnote-251470
-Ref: Preface-Footnote-351704
-Node: History51846
-Node: Names54198
-Ref: Names-Footnote-155292
-Node: This Manual55439
-Ref: This Manual-Footnote-161924
-Node: Conventions62024
-Node: Manual History64378
-Ref: Manual History-Footnote-167373
-Ref: Manual History-Footnote-267414
-Node: How To Contribute67488
-Node: Acknowledgments68617
-Node: Getting Started73503
-Node: Running gawk75942
-Node: One-shot77132
-Node: Read Terminal78395
-Node: Long80388
-Node: Executable Scripts81901
-Ref: Executable Scripts-Footnote-184696
-Node: Comments84799
-Node: Quoting87283
-Node: DOS Quoting92800
-Node: Sample Data Files93475
-Node: Very Simple96070
-Node: Two Rules100972
-Node: More Complex102857
-Node: Statements/Lines105723
-Ref: Statements/Lines-Footnote-1110182
-Node: Other Features110447
-Node: When111383
-Ref: When-Footnote-1113137
-Node: Intro Summary113202
-Node: Invoking Gawk114086
-Node: Command Line115600
-Node: Options116398
-Ref: Options-Footnote-1132497
-Ref: Options-Footnote-2132727
-Node: Other Arguments132752
-Node: Naming Standard Input135699
-Node: Environment Variables136792
-Node: AWKPATH Variable137350
-Ref: AWKPATH Variable-Footnote-1140761
-Ref: AWKPATH Variable-Footnote-2140795
-Node: AWKLIBPATH Variable141056
-Node: Other Environment Variables142313
-Node: Exit Status146134
-Node: Include Files146811
-Node: Loading Shared Libraries150406
-Node: Obsolete151834
-Node: Undocumented152526
-Node: Invoking Summary152823
-Node: Regexp154483
-Node: Regexp Usage156002
-Node: Escape Sequences158039
-Node: Regexp Operators164271
-Ref: Regexp Operators-Footnote-1171687
-Ref: Regexp Operators-Footnote-2171834
-Node: Bracket Expressions171932
-Ref: table-char-classes174408
-Node: Leftmost Longest177545
-Node: Computed Regexps178848
-Node: GNU Regexp Operators182275
-Node: Case-sensitivity185954
-Ref: Case-sensitivity-Footnote-1188850
-Ref: Case-sensitivity-Footnote-2189085
-Node: Strong Regexp Constants189193
-Node: Regexp Summary189982
-Node: Reading Files191457
-Node: Records193620
-Node: awk split records194353
-Node: gawk split records199284
-Ref: gawk split records-Footnote-1203824
-Node: Fields203861
-Node: Nonconstant Fields206602
-Ref: Nonconstant Fields-Footnote-1208838
-Node: Changing Fields209042
-Node: Field Separators214970
-Node: Default Field Splitting217668
-Node: Regexp Field Splitting218786
-Node: Single Character Fields222139
-Node: Command Line Field Separator223199
-Node: Full Line Fields226417
-Ref: Full Line Fields-Footnote-1227939
-Ref: Full Line Fields-Footnote-2227985
-Node: Field Splitting Summary228086
-Node: Constant Size230160
-Node: Splitting By Content234738
-Ref: Splitting By Content-Footnote-1238709
-Node: Multiple Line238872
-Ref: Multiple Line-Footnote-1244754
-Node: Getline244933
-Node: Plain Getline247400
-Node: Getline/Variable250039
-Node: Getline/File251188
-Node: Getline/Variable/File252574
-Ref: Getline/Variable/File-Footnote-1254177
-Node: Getline/Pipe254265
-Node: Getline/Variable/Pipe256970
-Node: Getline/Coprocess258103
-Node: Getline/Variable/Coprocess259368
-Node: Getline Notes260108
-Node: Getline Summary262903
-Ref: table-getline-variants263325
-Node: Read Timeout264073
-Ref: Read Timeout-Footnote-1267979
-Node: Retrying Input268037
-Node: Command-line directories269236
-Node: Input Summary270142
-Node: Input Exercises273314
-Node: Printing274042
-Node: Print275876
-Node: Print Examples277333
-Node: Output Separators280113
-Node: OFMT282130
-Node: Printf283486
-Node: Basic Printf284271
-Node: Control Letters285845
-Node: Format Modifiers289833
-Node: Printf Examples295848
-Node: Redirection298334
-Node: Special FD305175
-Ref: Special FD-Footnote-1308343
-Node: Special Files308417
-Node: Other Inherited Files309034
-Node: Special Network310035
-Node: Special Caveats310895
-Node: Close Files And Pipes311844
-Ref: table-close-pipe-return-values318751
-Ref: Close Files And Pipes-Footnote-1319534
-Ref: Close Files And Pipes-Footnote-2319682
-Node: Nonfatal319834
-Node: Output Summary322159
-Node: Output Exercises323381
-Node: Expressions324060
-Node: Values325248
-Node: Constants325926
-Node: Scalar Constants326617
-Ref: Scalar Constants-Footnote-1327481
-Node: Nondecimal-numbers327731
-Node: Regexp Constants330744
-Node: Using Constant Regexps331270
-Node: Variables334433
-Node: Using Variables335090
-Node: Assignment Options337000
-Node: Conversion338873
-Node: Strings And Numbers339397
-Ref: Strings And Numbers-Footnote-1342460
-Node: Locale influences conversions342569
-Ref: table-locale-affects345327
-Node: All Operators345945
-Node: Arithmetic Ops346574
-Node: Concatenation349080
-Ref: Concatenation-Footnote-1351927
-Node: Assignment Ops352034
-Ref: table-assign-ops357025
-Node: Increment Ops358338
-Node: Truth Values and Conditions361798
-Node: Truth Values362872
-Node: Typing and Comparison363920
-Node: Variable Typing364740
-Ref: Variable Typing-Footnote-1371094
-Ref: Variable Typing-Footnote-2371166
-Node: Comparison Operators371243
-Ref: table-relational-ops371662
-Node: POSIX String Comparison375157
-Ref: POSIX String Comparison-Footnote-1376852
-Ref: POSIX String Comparison-Footnote-2376991
-Node: Boolean Ops377075
-Ref: Boolean Ops-Footnote-1381557
-Node: Conditional Exp381649
-Node: Function Calls383385
-Node: Precedence387262
-Node: Locales390921
-Node: Expressions Summary392553
-Node: Patterns and Actions395126
-Node: Pattern Overview396246
-Node: Regexp Patterns397923
-Node: Expression Patterns398465
-Node: Ranges402246
-Node: BEGIN/END405354
-Node: Using BEGIN/END406115
-Ref: Using BEGIN/END-Footnote-1408851
-Node: I/O And BEGIN/END408957
-Node: BEGINFILE/ENDFILE411271
-Node: Empty414178
-Node: Using Shell Variables414495
-Node: Action Overview416769
-Node: Statements419094
-Node: If Statement420942
-Node: While Statement422437
-Node: Do Statement424465
-Node: For Statement425613
-Node: Switch Statement428771
-Node: Break Statement431157
-Node: Continue Statement433249
-Node: Next Statement435076
-Node: Nextfile Statement437459
-Node: Exit Statement440111
-Node: Built-in Variables442514
-Node: User-modified443647
-Node: Auto-set451233
-Ref: Auto-set-Footnote-1465886
-Ref: Auto-set-Footnote-2466092
-Node: ARGC and ARGV466148
-Node: Pattern Action Summary470361
-Node: Arrays472791
-Node: Array Basics474120
-Node: Array Intro474964
-Ref: figure-array-elements476939
-Ref: Array Intro-Footnote-1479643
-Node: Reference to Elements479771
-Node: Assigning Elements482235
-Node: Array Example482726
-Node: Scanning an Array484485
-Node: Controlling Scanning487507
-Ref: Controlling Scanning-Footnote-1492906
-Node: Numeric Array Subscripts493222
-Node: Uninitialized Subscripts495406
-Node: Delete497025
-Ref: Delete-Footnote-1499777
-Node: Multidimensional499834
-Node: Multiscanning502929
-Node: Arrays of Arrays504520
-Node: Arrays Summary509287
-Node: Functions511380
-Node: Built-in512418
-Node: Calling Built-in513499
-Node: Numeric Functions515495
-Ref: Numeric Functions-Footnote-1520328
-Ref: Numeric Functions-Footnote-2520685
-Ref: Numeric Functions-Footnote-3520733
-Node: String Functions521005
-Ref: String Functions-Footnote-1544509
-Ref: String Functions-Footnote-2544637
-Ref: String Functions-Footnote-3544885
-Node: Gory Details544972
-Ref: table-sub-escapes546763
-Ref: table-sub-proposed548282
-Ref: table-posix-sub549645
-Ref: table-gensub-escapes551186
-Ref: Gory Details-Footnote-1552009
-Node: I/O Functions552163
-Ref: table-system-return-values558745
-Ref: I/O Functions-Footnote-1560725
-Ref: I/O Functions-Footnote-2560873
-Node: Time Functions560993
-Ref: Time Functions-Footnote-1571515
-Ref: Time Functions-Footnote-2571583
-Ref: Time Functions-Footnote-3571741
-Ref: Time Functions-Footnote-4571852
-Ref: Time Functions-Footnote-5571964
-Ref: Time Functions-Footnote-6572191
-Node: Bitwise Functions572457
-Ref: table-bitwise-ops573051
-Ref: Bitwise Functions-Footnote-1579077
-Ref: Bitwise Functions-Footnote-2579250
-Node: Type Functions579441
-Node: I18N Functions581988
-Node: User-defined583639
-Node: Definition Syntax584444
-Ref: Definition Syntax-Footnote-1590131
-Node: Function Example590202
-Ref: Function Example-Footnote-1593124
-Node: Function Caveats593146
-Node: Calling A Function593664
-Node: Variable Scope594622
-Node: Pass By Value/Reference597616
-Node: Return Statement601115
-Node: Dynamic Typing604094
-Node: Indirect Calls605024
-Ref: Indirect Calls-Footnote-1615275
-Node: Functions Summary615403
-Node: Library Functions618108
-Ref: Library Functions-Footnote-1621715
-Ref: Library Functions-Footnote-2621858
-Node: Library Names622029
-Ref: Library Names-Footnote-1625489
-Ref: Library Names-Footnote-2625712
-Node: General Functions625798
-Node: Strtonum Function626901
-Node: Assert Function629923
-Node: Round Function633249
-Node: Cliff Random Function634790
-Node: Ordinal Functions635806
-Ref: Ordinal Functions-Footnote-1638869
-Ref: Ordinal Functions-Footnote-2639121
-Node: Join Function639331
-Ref: Join Function-Footnote-1641101
-Node: Getlocaltime Function641301
-Node: Readfile Function645043
-Node: Shell Quoting647015
-Node: Data File Management648416
-Node: Filetrans Function649048
-Node: Rewind Function653144
-Node: File Checking655050
-Ref: File Checking-Footnote-1656384
-Node: Empty Files656585
-Node: Ignoring Assigns658564
-Node: Getopt Function660114
-Ref: Getopt Function-Footnote-1671583
-Node: Passwd Functions671783
-Ref: Passwd Functions-Footnote-1680622
-Node: Group Functions680710
-Ref: Group Functions-Footnote-1688608
-Node: Walking Arrays688815
-Node: Library Functions Summary691823
-Node: Library Exercises693229
-Node: Sample Programs693694
-Node: Running Examples694464
-Node: Clones695192
-Node: Cut Program696416
-Node: Egrep Program706345
-Ref: Egrep Program-Footnote-1713857
-Node: Id Program713967
-Node: Split Program717647
-Ref: Split Program-Footnote-1721106
-Node: Tee Program721235
-Node: Uniq Program724025
-Node: Wc Program731451
-Ref: Wc Program-Footnote-1735706
-Node: Miscellaneous Programs735800
-Node: Dupword Program737013
-Node: Alarm Program739043
-Node: Translate Program743898
-Ref: Translate Program-Footnote-1748463
-Node: Labels Program748733
-Ref: Labels Program-Footnote-1752084
-Node: Word Sorting752168
-Node: History Sorting756240
-Node: Extract Program758075
-Node: Simple Sed765604
-Node: Igawk Program768678
-Ref: Igawk Program-Footnote-1783009
-Ref: Igawk Program-Footnote-2783211
-Ref: Igawk Program-Footnote-3783333
-Node: Anagram Program783448
-Node: Signature Program786510
-Node: Programs Summary787757
-Node: Programs Exercises788971
-Ref: Programs Exercises-Footnote-1793100
-Node: Advanced Features793191
-Node: Nondecimal Data795181
-Node: Array Sorting796772
-Node: Controlling Array Traversal797472
-Ref: Controlling Array Traversal-Footnote-1805839
-Node: Array Sorting Functions805957
-Ref: Array Sorting Functions-Footnote-1811048
-Node: Two-way I/O811244
-Ref: Two-way I/O-Footnote-1817794
-Ref: Two-way I/O-Footnote-2817981
-Node: TCP/IP Networking818063
-Node: Profiling821181
-Ref: Profiling-Footnote-1829674
-Node: Advanced Features Summary829997
-Node: Internationalization831841
-Node: I18N and L10N833321
-Node: Explaining gettext834008
-Ref: Explaining gettext-Footnote-1839900
-Ref: Explaining gettext-Footnote-2840085
-Node: Programmer i18n840250
-Ref: Programmer i18n-Footnote-1845199
-Node: Translator i18n845248
-Node: String Extraction846042
-Ref: String Extraction-Footnote-1847174
-Node: Printf Ordering847260
-Ref: Printf Ordering-Footnote-1850046
-Node: I18N Portability850110
-Ref: I18N Portability-Footnote-1852566
-Node: I18N Example852629
-Ref: I18N Example-Footnote-1855435
-Node: Gawk I18N855508
-Node: I18N Summary856153
-Node: Debugger857494
-Node: Debugging858516
-Node: Debugging Concepts858957
-Node: Debugging Terms860766
-Node: Awk Debugging863341
-Node: Sample Debugging Session864247
-Node: Debugger Invocation864781
-Node: Finding The Bug866167
-Node: List of Debugger Commands872645
-Node: Breakpoint Control873978
-Node: Debugger Execution Control877672
-Node: Viewing And Changing Data881034
-Node: Execution Stack884408
-Node: Debugger Info886045
-Node: Miscellaneous Debugger Commands890116
-Node: Readline Support895204
-Node: Limitations896100
-Node: Debugging Summary898209
-Node: Arbitrary Precision Arithmetic899488
-Node: Computer Arithmetic900904
-Ref: table-numeric-ranges904495
-Ref: Computer Arithmetic-Footnote-1905217
-Node: Math Definitions905274
-Ref: table-ieee-formats908588
-Ref: Math Definitions-Footnote-1909191
-Node: MPFR features909296
-Node: FP Math Caution911013
-Ref: FP Math Caution-Footnote-1912085
-Node: Inexactness of computations912454
-Node: Inexact representation913414
-Node: Comparing FP Values914774
-Node: Errors accumulate915856
-Node: Getting Accuracy917289
-Node: Try To Round919999
-Node: Setting precision920898
-Ref: table-predefined-precision-strings921595
-Node: Setting the rounding mode923425
-Ref: table-gawk-rounding-modes923799
-Ref: Setting the rounding mode-Footnote-1927207
-Node: Arbitrary Precision Integers927386
-Ref: Arbitrary Precision Integers-Footnote-1932303
-Node: POSIX Floating Point Problems932452
-Ref: POSIX Floating Point Problems-Footnote-1936334
-Node: Floating point summary936372
-Node: Dynamic Extensions938562
-Node: Extension Intro940115
-Node: Plugin License941381
-Node: Extension Mechanism Outline942178
-Ref: figure-load-extension942617
-Ref: figure-register-new-function944182
-Ref: figure-call-new-function945274
-Node: Extension API Description947336
-Node: Extension API Functions Introduction948868
-Node: General Data Types954179
-Ref: General Data Types-Footnote-1960134
-Node: Memory Allocation Functions960433
-Ref: Memory Allocation Functions-Footnote-1963278
-Node: Constructor Functions963377
-Node: Registration Functions965122
-Node: Extension Functions965807
-Node: Exit Callback Functions968430
-Node: Extension Version String969680
-Node: Input Parsers970343
-Node: Output Wrappers980225
-Node: Two-way processors984737
-Node: Printing Messages987002
-Ref: Printing Messages-Footnote-1988173
-Node: Updating ERRNO988326
-Node: Requesting Values989065
-Ref: table-value-types-returned989802
-Node: Accessing Parameters990685
-Node: Symbol Table Access991920
-Node: Symbol table by name992432
-Node: Symbol table by cookie994453
-Ref: Symbol table by cookie-Footnote-1998605
-Node: Cached values998669
-Ref: Cached values-Footnote-11002176
-Node: Array Manipulation1002267
-Ref: Array Manipulation-Footnote-11003358
-Node: Array Data Types1003395
-Ref: Array Data Types-Footnote-11006053
-Node: Array Functions1006145
-Node: Flattening Arrays1010003
-Node: Creating Arrays1016911
-Node: Redirection API1021680
-Node: Extension API Variables1024511
-Node: Extension Versioning1025144
-Ref: gawk-api-version1025581
-Node: Extension API Informational Variables1027337
-Node: Extension API Boilerplate1028401
-Node: Finding Extensions1032215
-Node: Extension Example1032774
-Node: Internal File Description1033572
-Node: Internal File Ops1037652
-Ref: Internal File Ops-Footnote-11049414
-Node: Using Internal File Ops1049554
-Ref: Using Internal File Ops-Footnote-11051937
-Node: Extension Samples1052211
-Node: Extension Sample File Functions1053740
-Node: Extension Sample Fnmatch1061389
-Node: Extension Sample Fork1062876
-Node: Extension Sample Inplace1064094
-Node: Extension Sample Ord1067304
-Node: Extension Sample Readdir1068140
-Ref: table-readdir-file-types1069029
-Node: Extension Sample Revout1069834
-Node: Extension Sample Rev2way1070423
-Node: Extension Sample Read write array1071163
-Node: Extension Sample Readfile1073105
-Node: Extension Sample Time1074200
-Node: Extension Sample API Tests1075548
-Node: gawkextlib1076040
-Node: Extension summary1078487
-Node: Extension Exercises1082189
-Node: Language History1083687
-Node: V7/SVR3.11085343
-Node: SVR41087495
-Node: POSIX1088929
-Node: BTL1090308
-Node: POSIX/GNU1091037
-Node: Feature History1096899
-Node: Common Extensions1111269
-Node: Ranges and Locales1112552
-Ref: Ranges and Locales-Footnote-11117168
-Ref: Ranges and Locales-Footnote-21117195
-Ref: Ranges and Locales-Footnote-31117430
-Node: Contributors1117651
-Node: History summary1123211
-Node: Installation1124591
-Node: Gawk Distribution1125535
-Node: Getting1126019
-Node: Extracting1126980
-Node: Distribution contents1128618
-Node: Unix Installation1134703
-Node: Quick Installation1135385
-Node: Shell Startup Files1137799
-Node: Additional Configuration Options1138877
-Node: Configuration Philosophy1140682
-Node: Non-Unix Installation1143051
-Node: PC Installation1143511
-Node: PC Binary Installation1144349
-Node: PC Compiling1144784
-Node: PC Using1145901
-Node: Cygwin1148946
-Node: MSYS1149716
-Node: VMS Installation1150217
-Node: VMS Compilation1151008
-Ref: VMS Compilation-Footnote-11152237
-Node: VMS Dynamic Extensions1152295
-Node: VMS Installation Details1153980
-Node: VMS Running1156233
-Node: VMS GNV1160512
-Node: VMS Old Gawk1161247
-Node: Bugs1161718
-Node: Bug address1162381
-Node: Usenet1164778
-Node: Maintainers1165553
-Node: Other Versions1166929
-Node: Installation summary1173513
-Node: Notes1174548
-Node: Compatibility Mode1175413
-Node: Additions1176195
-Node: Accessing The Source1177120
-Node: Adding Code1178555
-Node: New Ports1184774
-Node: Derived Files1189262
-Ref: Derived Files-Footnote-11194747
-Ref: Derived Files-Footnote-21194782
-Ref: Derived Files-Footnote-31195380
-Node: Future Extensions1195494
-Node: Implementation Limitations1196152
-Node: Extension Design1197335
-Node: Old Extension Problems1198489
-Ref: Old Extension Problems-Footnote-11200007
-Node: Extension New Mechanism Goals1200064
-Ref: Extension New Mechanism Goals-Footnote-11203428
-Node: Extension Other Design Decisions1203617
-Node: Extension Future Growth1205730
-Node: Old Extension Mechanism1206566
-Node: Notes summary1208329
-Node: Basic Concepts1209511
-Node: Basic High Level1210192
-Ref: figure-general-flow1210474
-Ref: figure-process-flow1211159
-Ref: Basic High Level-Footnote-11214460
-Node: Basic Data Typing1214645
-Node: Glossary1217973
-Node: Copying1249920
-Node: GNU Free Documentation License1287459
-Node: Index1312577
+Node: Foreword342726
+Node: Foreword447168
+Node: Preface48700
+Ref: Preface-Footnote-151559
+Ref: Preface-Footnote-251666
+Ref: Preface-Footnote-351900
+Node: History52042
+Node: Names54394
+Ref: Names-Footnote-155488
+Node: This Manual55635
+Ref: This Manual-Footnote-162120
+Node: Conventions62220
+Node: Manual History64574
+Ref: Manual History-Footnote-167569
+Ref: Manual History-Footnote-267610
+Node: How To Contribute67684
+Node: Acknowledgments68813
+Node: Getting Started73699
+Node: Running gawk76138
+Node: One-shot77328
+Node: Read Terminal78591
+Node: Long80584
+Node: Executable Scripts82097
+Ref: Executable Scripts-Footnote-184892
+Node: Comments84995
+Node: Quoting87479
+Node: DOS Quoting92996
+Node: Sample Data Files93671
+Node: Very Simple96266
+Node: Two Rules101168
+Node: More Complex103053
+Node: Statements/Lines105919
+Ref: Statements/Lines-Footnote-1110378
+Node: Other Features110643
+Node: When111579
+Ref: When-Footnote-1113333
+Node: Intro Summary113398
+Node: Invoking Gawk114282
+Node: Command Line115796
+Node: Options116594
+Ref: Options-Footnote-1132693
+Ref: Options-Footnote-2132923
+Node: Other Arguments132948
+Node: Naming Standard Input135895
+Node: Environment Variables136988
+Node: AWKPATH Variable137546
+Ref: AWKPATH Variable-Footnote-1140957
+Ref: AWKPATH Variable-Footnote-2140991
+Node: AWKLIBPATH Variable141252
+Node: Other Environment Variables142509
+Node: Exit Status146330
+Node: Include Files147007
+Node: Loading Shared Libraries150602
+Node: Obsolete152030
+Node: Undocumented152722
+Node: Invoking Summary153019
+Node: Regexp154679
+Node: Regexp Usage156133
+Node: Escape Sequences158170
+Node: Regexp Operators164402
+Ref: Regexp Operators-Footnote-1171818
+Ref: Regexp Operators-Footnote-2171965
+Node: Bracket Expressions172063
+Ref: table-char-classes174539
+Node: Leftmost Longest177676
+Node: Computed Regexps178979
+Node: GNU Regexp Operators182406
+Node: Case-sensitivity186085
+Ref: Case-sensitivity-Footnote-1188972
+Ref: Case-sensitivity-Footnote-2189207
+Node: Regexp Summary189315
+Node: Reading Files190781
+Node: Records192944
+Node: awk split records193677
+Node: gawk split records198608
+Ref: gawk split records-Footnote-1203148
+Node: Fields203185
+Node: Nonconstant Fields205926
+Ref: Nonconstant Fields-Footnote-1208162
+Node: Changing Fields208366
+Node: Field Separators214294
+Node: Default Field Splitting216992
+Node: Regexp Field Splitting218110
+Node: Single Character Fields221463
+Node: Command Line Field Separator222523
+Node: Full Line Fields225741
+Ref: Full Line Fields-Footnote-1227263
+Ref: Full Line Fields-Footnote-2227309
+Node: Field Splitting Summary227410
+Node: Constant Size229484
+Node: Splitting By Content234062
+Ref: Splitting By Content-Footnote-1238033
+Node: Multiple Line238196
+Ref: Multiple Line-Footnote-1244078
+Node: Getline244257
+Node: Plain Getline246724
+Node: Getline/Variable249363
+Node: Getline/File250512
+Node: Getline/Variable/File251898
+Ref: Getline/Variable/File-Footnote-1253501
+Node: Getline/Pipe253589
+Node: Getline/Variable/Pipe256294
+Node: Getline/Coprocess257427
+Node: Getline/Variable/Coprocess258692
+Node: Getline Notes259432
+Node: Getline Summary262227
+Ref: table-getline-variants262649
+Node: Read Timeout263397
+Ref: Read Timeout-Footnote-1267303
+Node: Retrying Input267361
+Node: Command-line directories268560
+Node: Input Summary269466
+Node: Input Exercises272638
+Node: Printing273366
+Node: Print275200
+Node: Print Examples276657
+Node: Output Separators279437
+Node: OFMT281454
+Node: Printf282810
+Node: Basic Printf283595
+Node: Control Letters285169
+Node: Format Modifiers289157
+Node: Printf Examples295172
+Node: Redirection297658
+Node: Special FD304499
+Ref: Special FD-Footnote-1307667
+Node: Special Files307741
+Node: Other Inherited Files308358
+Node: Special Network309359
+Node: Special Caveats310219
+Node: Close Files And Pipes311168
+Ref: table-close-pipe-return-values318075
+Ref: Close Files And Pipes-Footnote-1318858
+Ref: Close Files And Pipes-Footnote-2319006
+Node: Nonfatal319158
+Node: Output Summary321483
+Node: Output Exercises322705
+Node: Expressions323384
+Node: Values324572
+Node: Constants325250
+Node: Scalar Constants325941
+Ref: Scalar Constants-Footnote-1326805
+Node: Nondecimal-numbers327055
+Node: Regexp Constants330056
+Node: Using Constant Regexps330582
+Node: Standard Regexp Constants331204
+Node: Strong Regexp Constants334392
+Node: Variables337350
+Node: Using Variables338007
+Node: Assignment Options339917
+Node: Conversion341790
+Node: Strings And Numbers342314
+Ref: Strings And Numbers-Footnote-1345377
+Node: Locale influences conversions345486
+Ref: table-locale-affects348244
+Node: All Operators348862
+Node: Arithmetic Ops349491
+Node: Concatenation351997
+Ref: Concatenation-Footnote-1354844
+Node: Assignment Ops354951
+Ref: table-assign-ops359942
+Node: Increment Ops361255
+Node: Truth Values and Conditions364715
+Node: Truth Values365789
+Node: Typing and Comparison366837
+Node: Variable Typing367657
+Ref: Variable Typing-Footnote-1374120
+Ref: Variable Typing-Footnote-2374192
+Node: Comparison Operators374269
+Ref: table-relational-ops374688
+Node: POSIX String Comparison378183
+Ref: POSIX String Comparison-Footnote-1379878
+Ref: POSIX String Comparison-Footnote-2380017
+Node: Boolean Ops380101
+Ref: Boolean Ops-Footnote-1384583
+Node: Conditional Exp384675
+Node: Function Calls386411
+Node: Precedence390288
+Node: Locales393947
+Node: Expressions Summary395579
+Node: Patterns and Actions398152
+Node: Pattern Overview399272
+Node: Regexp Patterns400949
+Node: Expression Patterns401491
+Node: Ranges405272
+Node: BEGIN/END408380
+Node: Using BEGIN/END409141
+Ref: Using BEGIN/END-Footnote-1411877
+Node: I/O And BEGIN/END411983
+Node: BEGINFILE/ENDFILE414297
+Node: Empty417204
+Node: Using Shell Variables417521
+Node: Action Overview419795
+Node: Statements422120
+Node: If Statement423968
+Node: While Statement425463
+Node: Do Statement427491
+Node: For Statement428639
+Node: Switch Statement431797
+Node: Break Statement434183
+Node: Continue Statement436275
+Node: Next Statement438102
+Node: Nextfile Statement440485
+Node: Exit Statement443137
+Node: Built-in Variables445540
+Node: User-modified446673
+Node: Auto-set454259
+Ref: Auto-set-Footnote-1468912
+Ref: Auto-set-Footnote-2469118
+Node: ARGC and ARGV469174
+Node: Pattern Action Summary473387
+Node: Arrays475817
+Node: Array Basics477146
+Node: Array Intro477990
+Ref: figure-array-elements479965
+Ref: Array Intro-Footnote-1482669
+Node: Reference to Elements482797
+Node: Assigning Elements485261
+Node: Array Example485752
+Node: Scanning an Array487511
+Node: Controlling Scanning490533
+Ref: Controlling Scanning-Footnote-1495932
+Node: Numeric Array Subscripts496248
+Node: Uninitialized Subscripts498432
+Node: Delete500051
+Ref: Delete-Footnote-1502803
+Node: Multidimensional502860
+Node: Multiscanning505955
+Node: Arrays of Arrays507546
+Node: Arrays Summary512313
+Node: Functions514406
+Node: Built-in515444
+Node: Calling Built-in516525
+Node: Numeric Functions518521
+Ref: Numeric Functions-Footnote-1523354
+Ref: Numeric Functions-Footnote-2523711
+Ref: Numeric Functions-Footnote-3523759
+Node: String Functions524031
+Ref: String Functions-Footnote-1547535
+Ref: String Functions-Footnote-2547663
+Ref: String Functions-Footnote-3547911
+Node: Gory Details547998
+Ref: table-sub-escapes549789
+Ref: table-sub-proposed551308
+Ref: table-posix-sub552671
+Ref: table-gensub-escapes554212
+Ref: Gory Details-Footnote-1555035
+Node: I/O Functions555189
+Ref: table-system-return-values561771
+Ref: I/O Functions-Footnote-1563751
+Ref: I/O Functions-Footnote-2563899
+Node: Time Functions564019
+Ref: Time Functions-Footnote-1574541
+Ref: Time Functions-Footnote-2574609
+Ref: Time Functions-Footnote-3574767
+Ref: Time Functions-Footnote-4574878
+Ref: Time Functions-Footnote-5574990
+Ref: Time Functions-Footnote-6575217
+Node: Bitwise Functions575483
+Ref: table-bitwise-ops576077
+Ref: Bitwise Functions-Footnote-1582103
+Ref: Bitwise Functions-Footnote-2582276
+Node: Type Functions582467
+Node: I18N Functions585143
+Node: User-defined586794
+Node: Definition Syntax587599
+Ref: Definition Syntax-Footnote-1593286
+Node: Function Example593357
+Ref: Function Example-Footnote-1596279
+Node: Function Caveats596301
+Node: Calling A Function596819
+Node: Variable Scope597777
+Node: Pass By Value/Reference600771
+Node: Return Statement604270
+Node: Dynamic Typing607249
+Node: Indirect Calls608179
+Ref: Indirect Calls-Footnote-1618430
+Node: Functions Summary618558
+Node: Library Functions621263
+Ref: Library Functions-Footnote-1624870
+Ref: Library Functions-Footnote-2625013
+Node: Library Names625184
+Ref: Library Names-Footnote-1628644
+Ref: Library Names-Footnote-2628867
+Node: General Functions628953
+Node: Strtonum Function630056
+Node: Assert Function633078
+Node: Round Function636404
+Node: Cliff Random Function637945
+Node: Ordinal Functions638961
+Ref: Ordinal Functions-Footnote-1642024
+Ref: Ordinal Functions-Footnote-2642276
+Node: Join Function642486
+Ref: Join Function-Footnote-1644256
+Node: Getlocaltime Function644456
+Node: Readfile Function648198
+Node: Shell Quoting650170
+Node: Data File Management651571
+Node: Filetrans Function652203
+Node: Rewind Function656299
+Node: File Checking658205
+Ref: File Checking-Footnote-1659539
+Node: Empty Files659740
+Node: Ignoring Assigns661719
+Node: Getopt Function663269
+Ref: Getopt Function-Footnote-1674738
+Node: Passwd Functions674938
+Ref: Passwd Functions-Footnote-1683777
+Node: Group Functions683865
+Ref: Group Functions-Footnote-1691763
+Node: Walking Arrays691970
+Node: Library Functions Summary694978
+Node: Library Exercises696384
+Node: Sample Programs696849
+Node: Running Examples697619
+Node: Clones698347
+Node: Cut Program699571
+Node: Egrep Program709500
+Ref: Egrep Program-Footnote-1717012
+Node: Id Program717122
+Node: Split Program720802
+Ref: Split Program-Footnote-1724261
+Node: Tee Program724390
+Node: Uniq Program727180
+Node: Wc Program734606
+Ref: Wc Program-Footnote-1738861
+Node: Miscellaneous Programs738955
+Node: Dupword Program740168
+Node: Alarm Program742198
+Node: Translate Program747053
+Ref: Translate Program-Footnote-1751618
+Node: Labels Program751888
+Ref: Labels Program-Footnote-1755239
+Node: Word Sorting755323
+Node: History Sorting759395
+Node: Extract Program761230
+Node: Simple Sed768759
+Node: Igawk Program771833
+Ref: Igawk Program-Footnote-1786164
+Ref: Igawk Program-Footnote-2786366
+Ref: Igawk Program-Footnote-3786488
+Node: Anagram Program786603
+Node: Signature Program789665
+Node: Programs Summary790912
+Node: Programs Exercises792126
+Ref: Programs Exercises-Footnote-1796255
+Node: Advanced Features796346
+Node: Nondecimal Data798336
+Node: Array Sorting799927
+Node: Controlling Array Traversal800627
+Ref: Controlling Array Traversal-Footnote-1808994
+Node: Array Sorting Functions809112
+Ref: Array Sorting Functions-Footnote-1814203
+Node: Two-way I/O814399
+Ref: Two-way I/O-Footnote-1820949
+Ref: Two-way I/O-Footnote-2821136
+Node: TCP/IP Networking821218
+Node: Profiling824336
+Ref: Profiling-Footnote-1832829
+Node: Advanced Features Summary833152
+Node: Internationalization834996
+Node: I18N and L10N836476
+Node: Explaining gettext837163
+Ref: Explaining gettext-Footnote-1843055
+Ref: Explaining gettext-Footnote-2843240
+Node: Programmer i18n843405
+Ref: Programmer i18n-Footnote-1848354
+Node: Translator i18n848403
+Node: String Extraction849197
+Ref: String Extraction-Footnote-1850329
+Node: Printf Ordering850415
+Ref: Printf Ordering-Footnote-1853201
+Node: I18N Portability853265
+Ref: I18N Portability-Footnote-1855721
+Node: I18N Example855784
+Ref: I18N Example-Footnote-1858590
+Node: Gawk I18N858663
+Node: I18N Summary859308
+Node: Debugger860649
+Node: Debugging861671
+Node: Debugging Concepts862112
+Node: Debugging Terms863921
+Node: Awk Debugging866496
+Node: Sample Debugging Session867402
+Node: Debugger Invocation867936
+Node: Finding The Bug869322
+Node: List of Debugger Commands875800
+Node: Breakpoint Control877133
+Node: Debugger Execution Control880827
+Node: Viewing And Changing Data884189
+Node: Execution Stack887563
+Node: Debugger Info889200
+Node: Miscellaneous Debugger Commands893271
+Node: Readline Support898359
+Node: Limitations899255
+Node: Debugging Summary901364
+Node: Arbitrary Precision Arithmetic902643
+Node: Computer Arithmetic904059
+Ref: table-numeric-ranges907650
+Ref: Computer Arithmetic-Footnote-1908372
+Node: Math Definitions908429
+Ref: table-ieee-formats911743
+Ref: Math Definitions-Footnote-1912346
+Node: MPFR features912451
+Node: FP Math Caution914168
+Ref: FP Math Caution-Footnote-1915240
+Node: Inexactness of computations915609
+Node: Inexact representation916569
+Node: Comparing FP Values917929
+Node: Errors accumulate919011
+Node: Getting Accuracy920444
+Node: Try To Round923154
+Node: Setting precision924053
+Ref: table-predefined-precision-strings924750
+Node: Setting the rounding mode926580
+Ref: table-gawk-rounding-modes926954
+Ref: Setting the rounding mode-Footnote-1930362
+Node: Arbitrary Precision Integers930541
+Ref: Arbitrary Precision Integers-Footnote-1935458
+Node: POSIX Floating Point Problems935607
+Ref: POSIX Floating Point Problems-Footnote-1939489
+Node: Floating point summary939527
+Node: Dynamic Extensions941717
+Node: Extension Intro943270
+Node: Plugin License944536
+Node: Extension Mechanism Outline945333
+Ref: figure-load-extension945772
+Ref: figure-register-new-function947337
+Ref: figure-call-new-function948429
+Node: Extension API Description950491
+Node: Extension API Functions Introduction952064
+Node: General Data Types957375
+Ref: General Data Types-Footnote-1963330
+Node: Memory Allocation Functions963629
+Ref: Memory Allocation Functions-Footnote-1966474
+Node: Constructor Functions966573
+Node: Registration Functions968318
+Node: Extension Functions969003
+Node: Exit Callback Functions971626
+Node: Extension Version String972876
+Node: Input Parsers973539
+Node: Output Wrappers983421
+Node: Two-way processors987933
+Node: Printing Messages990198
+Ref: Printing Messages-Footnote-1991369
+Node: Updating ERRNO991522
+Node: Requesting Values992261
+Ref: table-value-types-returned992998
+Node: Accessing Parameters993881
+Node: Symbol Table Access995116
+Node: Symbol table by name995628
+Node: Symbol table by cookie997649
+Ref: Symbol table by cookie-Footnote-11001801
+Node: Cached values1001865
+Ref: Cached values-Footnote-11005372
+Node: Array Manipulation1005463
+Ref: Array Manipulation-Footnote-11006554
+Node: Array Data Types1006591
+Ref: Array Data Types-Footnote-11009249
+Node: Array Functions1009341
+Node: Flattening Arrays1013199
+Node: Creating Arrays1020107
+Node: Redirection API1024876
+Node: Extension API Variables1027707
+Node: Extension Versioning1028340
+Ref: gawk-api-version1028777
+Node: Extension API Informational Variables1030533
+Node: Extension API Boilerplate1031597
+Node: Finding Extensions1035411
+Node: Extension Example1035970
+Node: Internal File Description1036768
+Node: Internal File Ops1040848
+Ref: Internal File Ops-Footnote-11052610
+Node: Using Internal File Ops1052750
+Ref: Using Internal File Ops-Footnote-11055133
+Node: Extension Samples1055407
+Node: Extension Sample File Functions1056936
+Node: Extension Sample Fnmatch1064585
+Node: Extension Sample Fork1066072
+Node: Extension Sample Inplace1067290
+Node: Extension Sample Ord1070500
+Node: Extension Sample Readdir1071336
+Ref: table-readdir-file-types1072225
+Node: Extension Sample Revout1073030
+Node: Extension Sample Rev2way1073619
+Node: Extension Sample Read write array1074359
+Node: Extension Sample Readfile1076301
+Node: Extension Sample Time1077396
+Node: Extension Sample API Tests1078744
+Node: gawkextlib1079236
+Node: Extension summary1081683
+Node: Extension Exercises1085385
+Node: Language History1086883
+Node: V7/SVR3.11088539
+Node: SVR41090691
+Node: POSIX1092125
+Node: BTL1093504
+Node: POSIX/GNU1094233
+Node: Feature History1100095
+Node: Common Extensions1114465
+Node: Ranges and Locales1115748
+Ref: Ranges and Locales-Footnote-11120364
+Ref: Ranges and Locales-Footnote-21120391
+Ref: Ranges and Locales-Footnote-31120626
+Node: Contributors1120847
+Node: History summary1126407
+Node: Installation1127787
+Node: Gawk Distribution1128731
+Node: Getting1129215
+Node: Extracting1130176
+Node: Distribution contents1131814
+Node: Unix Installation1137899
+Node: Quick Installation1138581
+Node: Shell Startup Files1140995
+Node: Additional Configuration Options1142073
+Node: Configuration Philosophy1143878
+Node: Non-Unix Installation1146247
+Node: PC Installation1146707
+Node: PC Binary Installation1147545
+Node: PC Compiling1147980
+Node: PC Using1149097
+Node: Cygwin1152142
+Node: MSYS1152912
+Node: VMS Installation1153413
+Node: VMS Compilation1154204
+Ref: VMS Compilation-Footnote-11155433
+Node: VMS Dynamic Extensions1155491
+Node: VMS Installation Details1157176
+Node: VMS Running1159429
+Node: VMS GNV1163708
+Node: VMS Old Gawk1164443
+Node: Bugs1164914
+Node: Bug address1165577
+Node: Usenet1167974
+Node: Maintainers1168749
+Node: Other Versions1170125
+Node: Installation summary1176709
+Node: Notes1177744
+Node: Compatibility Mode1178609
+Node: Additions1179391
+Node: Accessing The Source1180316
+Node: Adding Code1181751
+Node: New Ports1187970
+Node: Derived Files1192458
+Ref: Derived Files-Footnote-11197943
+Ref: Derived Files-Footnote-21197978
+Ref: Derived Files-Footnote-31198576
+Node: Future Extensions1198690
+Node: Implementation Limitations1199348
+Node: Extension Design1200531
+Node: Old Extension Problems1201685
+Ref: Old Extension Problems-Footnote-11203203
+Node: Extension New Mechanism Goals1203260
+Ref: Extension New Mechanism Goals-Footnote-11206624
+Node: Extension Other Design Decisions1206813
+Node: Extension Future Growth1208926
+Node: Old Extension Mechanism1209762
+Node: Notes summary1211525
+Node: Basic Concepts1212707
+Node: Basic High Level1213388
+Ref: figure-general-flow1213670
+Ref: figure-process-flow1214355
+Ref: Basic High Level-Footnote-11217656
+Node: Basic Data Typing1217841
+Node: Glossary1221169
+Node: Copying1253116
+Node: GNU Free Documentation License1290655
+Node: Index1315773
 
 End Tag Table
diff --git a/doc/gawk.texi b/doc/gawk.texi
index 2be7d8f..5f3d6ef 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -539,7 +539,6 @@ particular records in a file and perform operations upon 
them.
 * Computed Regexps::                    Using Dynamic Regexps.
 * GNU Regexp Operators::                Operators specific to GNU software.
 * Case-sensitivity::                    How to do case-insensitive matching.
-* Strong Regexp Constants::             Strongly typed regexp constants.
 * Regexp Summary::                      Regular expressions summary.
 * Records::                             Controlling how data is split into
                                         records.
@@ -622,6 +621,9 @@ particular records in a file and perform operations upon 
them.
 * Nondecimal-numbers::                  What are octal and hex numbers.
 * Regexp Constants::                    Regular Expression constants.
 * Using Constant Regexps::              When and how to use a regexp constant.
+* Standard Regexp Constants::           Regexp constants in standard
+                                        @command{awk}.
+* Strong Regexp Constants::             Strongly typed regexp constants.
 * Variables::                           Variables give names to values for
                                         later use.
 * Using Variables::                     Using variables in your programs.
@@ -924,7 +926,8 @@ particular records in a file and perform operations upon 
them.
 * Array Functions::                     Functions for working with arrays.
 * Flattening Arrays::                   How to flatten arrays.
 * Creating Arrays::                     How to create and populate arrays.
-* Redirection API::                     How to access and manipulate 
redirections.
+* Redirection API::                     How to access and manipulate
+                                        redirections.
 * Extension API Variables::             Variables provided by the API.
 * Extension Versioning::                API Version information.
 * Extension API Informational Variables:: Variables providing information about
@@ -988,10 +991,11 @@ particular records in a file and perform operations upon 
them.
 * Configuration Philosophy::            How it's all supposed to work.
 * Non-Unix Installation::               Installation on Other Operating
                                         Systems.
-* PC Installation::                     Installing and Compiling 
@command{gawk} on
-                                        Microsoft Windows.
+* PC Installation::                     Installing and Compiling
+                                        @command{gawk} on Microsoft Windows.
 * PC Binary Installation::              Installing a prepared distribution.
-* PC Compiling::                        Compiling @command{gawk} for Windows32.
+* PC Compiling::                        Compiling @command{gawk} for
+                                        Windows32.
 * PC Using::                            Running @command{gawk} on Windows32.
 * Cygwin::                              Building and running @command{gawk}
                                         for Cygwin.
@@ -5004,7 +5008,6 @@ regular expressions work, we present more complicated 
instances.
 * Computed Regexps::            Using Dynamic Regexps.
 * GNU Regexp Operators::        Operators specific to GNU software.
 * Case-sensitivity::            How to do case-insensitive matching.
-* Strong Regexp Constants::     Strongly typed regexp constants.
 * Regexp Summary::              Regular expressions summary.
 @end menu
 
@@ -6265,25 +6268,6 @@ The value of @code{IGNORECASE} has no effect if 
@command{gawk} is in
 compatibility mode (@pxref{Options}).
 Case is always significant in compatibility mode.
 
address@hidden Strong Regexp Constants
address@hidden Strongly Typed Regexp Constants
-
-This @value{SECTION} describes a @command{gawk}-specific feature.
-
-Regexp constants (@code{/@dots{}/}) hold a strange position in the
address@hidden language. In most contexts, they act like an expression:
address@hidden ~ /@dots{}/}. In other contexts, they denote only a regexp to
-be matched. In no case are they really a ``first class citizen'' of the
-language. That is, you cannot define a scalar variable whose type is
-``regexp'' in the same sense that you can define a variable to be a
-number or a string:
-
address@hidden
-num = 42        @ii{Numeric variable}
-str = "hi"      @ii{String variable}
-re = /foo/      @ii{Wrong!} re @ii{is the result of} $0 ~ /foo/
address@hidden example
-
 @node Regexp Summary
 @section Summary
 
@@ -10794,7 +10778,7 @@ Just as @samp{11} in decimal is 1 times 10 plus 1, so
 @samp{11} in octal is 1 times 8 plus 1. This equals 9 in decimal.
 In hexadecimal, there are 16 digits. Because the everyday decimal
 number system only has ten digits (@address@hidden), the letters
address@hidden through @samp{f} are used to represent the rest.
address@hidden through @samp{f} represent the rest.
 (Case in the letters is usually irrelevant; hexadecimal @samp{a} and @samp{A}
 have the same value.)
 Thus, @samp{11} in
@@ -10926,6 +10910,20 @@ but could be more complex expressions).
 @node Using Constant Regexps
 @subsection Using Regular Expression Constants
 
+Regular expression constants consist of text describing
+a regular expression enclosed in slashes (such as @code{/the +answer/}).
+This @value{SECTION} describes how such constants work in
+POSIX @command{awk} and @command{gawk}, and then goes on to describe
address@hidden typed regexp constants}, which are a @command{gawk} extension.
+
address@hidden
+* Standard Regexp Constants::   Regexp constants in standard @command{awk}.
+* Strong Regexp Constants::     Strongly typed regexp constants.
address@hidden menu
+
address@hidden Standard Regexp Constants
address@hidden Standard Regular Expression Constants
+
 @cindex dark corner, regexp constants
 When used on the righthand side of the @samp{~} or @samp{!~}
 operators, a regexp constant merely stands for the regexp that is to be
@@ -11033,6 +11031,90 @@ or not @code{$0} matches @code{/hi/}.
 a parameter to a user-defined function, because passing a truth value in
 this way is probably not what was intended.
 
address@hidden Strong Regexp Constants
address@hidden Strongly Typed Regexp Constants
+
+This @value{SECTION} describes a @command{gawk}-specific feature.
+
+As we saw in the previous @value{SECTION},
+regexp constants (@code{/@dots{}/}) hold a strange position in the
address@hidden language. In most contexts, they act like an expression:
address@hidden ~ /@dots{}/}. In other contexts, they denote only a regexp to
+be matched. In no case are they really a ``first class citizen'' of the
+language. That is, you cannot define a scalar variable whose type is
+``regexp'' in the same sense that you can define a variable to be a
+number or a string:
+
address@hidden
+num = 42        @ii{Numeric variable}
+str = "hi"      @ii{String variable}
+re = /foo/      @ii{Wrong!} re @ii{is the result of} $0 ~ /foo/
address@hidden example
+
+For a number of more advanced use cases,
+it would be nice to have regexp constants that
+are @dfn{strongly typed}; in other words, that denote a regexp useful
+for matching, and not an expression.
+
address@hidden provides this feature.  A strongly typed regexp constant
+looks almost like a regular regexp constant, except that it is preceded
+by an @samp{@@} sign:
+
address@hidden
+re = @@/foo/     @ii{Regexp variable}
address@hidden example
+
+Strongly typed regexp constants @emph{cannot} be used everywhere that a
+regular regexp constant can, because this would make the language even more
+confusing.  Instead, you may use them only in certain contexts:
+
address@hidden @bullet
address@hidden
+On the righthand side of the @samp{~} and @samp{!~} operators: @samp{some_var 
~ @@/foo/}
+(@pxref{Regexp Usage}).
+
address@hidden
+In the @code{case} part of a @code{switch} statement
+(@pxref{Switch Statement}).
+
address@hidden
+As an argument to one of the built-in functions that accept regexp constants:
address@hidden()},
address@hidden()},
address@hidden()},
address@hidden()},
address@hidden()},
+and
address@hidden()}
+(@pxref{String Functions}).
+
address@hidden
+As a parameter in a call to a user-defined function
+(@pxref{User-defined}).
+
address@hidden
+On the righthand side of an assignment to a variable: @samp{some_var = 
@@/foo/}.
+In this case, the type of @code{some_var} is regexp. Additionally, 
@code{some_var}
+can be used with @samp{~} and @samp{!~}, passed to one of the built-in 
functions
+listed above, or passed as a parameter to a user-defined function.
address@hidden itemize
+
+You may use the @code{typeof()} built-in function
+(@pxref{Type Functions})
+to determine if a variable or function parameter is
+a regexp variable.
+
+The true power of this feature comes from the ability to create variables that
+have regexp type. Such variables can be passed on to user-defined functions,
+without the confusing aspects of computed regular expressions created from
+strings or string constants. They may also be passed through indirect function
+calls (@pxref{Indirect Calls})
+and on to the built-in functions that accept regexp constants.
+
+When used in numeric conversions, strongly typed regexp variables convert
+to zero. When used in string conversions, they convert to the string
+value of the original regexp text.
+
 @node Variables
 @subsection Variables
 
@@ -12213,7 +12295,8 @@ are @emph{dynamically} typed.  This means their type 
can change as the
 program runs, from @dfn{untyped} before any use,@address@hidden
 calls this @dfn{unassigned}, as the following example shows.} to string
 or number, and then from string to number or number to string, as the
-program progresses.
+program progresses.  (@command{gawk} also provides regexp-typed scalars,
+but let's ignore that for now; @pxref{Strong Regexp Constants}.)
 
 You can't do much with untyped variables, other than tell that they
 are untyped. The following program tests @code{a} against @code{""}
@@ -19727,6 +19810,9 @@ Return one of the following strings, depending upon the 
type of @var{x}:
 @item "array"
 @var{x} is an array.
 
address@hidden "regexp"
address@hidden is a strongly typed regexp (@pxref{Strong Regexp Constants}).
+
 @item "number"
 @var{x} is a number.
 
@@ -19784,7 +19870,8 @@ ends up turning it into a scalar.
 @end quotation
 
 The @code{typeof()} function is general; it allows you to determine
-if a variable or function parameter is a scalar, an array.
+if a variable or function parameter is a scalar, an array, or a strongly
+typed regexp.
 
 @code{isarray()} is deprecated; you should use @code{typeof()} instead.
 You should replace any existing uses of @samp{isarray(var)} in your
@@ -32232,7 +32319,8 @@ This (rather large) @value{SECTION} describes the API 
in detail.
 * Symbol Table Access::                  Functions for accessing global
                                          variables.
 * Array Manipulation::                   Functions for working with arrays.
-* Redirection API::                      How to access and manipulate 
redirections.
+* Redirection API::                      How to access and manipulate
+                                         redirections.
 * Extension API Variables::              Variables provided by the API.
 * Extension API Boilerplate::            Boilerplate code for using the API.
 @end menu
@@ -32379,9 +32467,9 @@ and output from files.
 
 @quotation NOTE
 String values passed to an extension by @command{gawk} are always
address@hidden  Thus it is safe to pass such string values to
address@hidden  Thus it is safe to pass such string values to
 standard library and system routines. However, because
address@hidden allows embedded @sc{NUL} characters in string data,
address@hidden allows embedded @sc{nul} characters in string data,
 you should check that @samp{strlen(@var{some_string})} matches
 the length for that string passed to the extension before using
 it as a regular C string.
diff --git a/doc/gawktexi.in b/doc/gawktexi.in
index 76c3a9b..857be3a 100644
--- a/doc/gawktexi.in
+++ b/doc/gawktexi.in
@@ -534,7 +534,6 @@ particular records in a file and perform operations upon 
them.
 * Computed Regexps::                    Using Dynamic Regexps.
 * GNU Regexp Operators::                Operators specific to GNU software.
 * Case-sensitivity::                    How to do case-insensitive matching.
-* Strong Regexp Constants::             Strongly typed regexp constants.
 * Regexp Summary::                      Regular expressions summary.
 * Records::                             Controlling how data is split into
                                         records.
@@ -617,6 +616,9 @@ particular records in a file and perform operations upon 
them.
 * Nondecimal-numbers::                  What are octal and hex numbers.
 * Regexp Constants::                    Regular Expression constants.
 * Using Constant Regexps::              When and how to use a regexp constant.
+* Standard Regexp Constants::           Regexp constants in standard
+                                        @command{awk}.
+* Strong Regexp Constants::             Strongly typed regexp constants.
 * Variables::                           Variables give names to values for
                                         later use.
 * Using Variables::                     Using variables in your programs.
@@ -919,7 +921,8 @@ particular records in a file and perform operations upon 
them.
 * Array Functions::                     Functions for working with arrays.
 * Flattening Arrays::                   How to flatten arrays.
 * Creating Arrays::                     How to create and populate arrays.
-* Redirection API::                     How to access and manipulate 
redirections.
+* Redirection API::                     How to access and manipulate
+                                        redirections.
 * Extension API Variables::             Variables provided by the API.
 * Extension Versioning::                API Version information.
 * Extension API Informational Variables:: Variables providing information about
@@ -983,10 +986,11 @@ particular records in a file and perform operations upon 
them.
 * Configuration Philosophy::            How it's all supposed to work.
 * Non-Unix Installation::               Installation on Other Operating
                                         Systems.
-* PC Installation::                     Installing and Compiling 
@command{gawk} on
-                                        Microsoft Windows.
+* PC Installation::                     Installing and Compiling
+                                        @command{gawk} on Microsoft Windows.
 * PC Binary Installation::              Installing a prepared distribution.
-* PC Compiling::                        Compiling @command{gawk} for Windows32.
+* PC Compiling::                        Compiling @command{gawk} for
+                                        Windows32.
 * PC Using::                            Running @command{gawk} on Windows32.
 * Cygwin::                              Building and running @command{gawk}
                                         for Cygwin.
@@ -4915,7 +4919,6 @@ regular expressions work, we present more complicated 
instances.
 * Computed Regexps::            Using Dynamic Regexps.
 * GNU Regexp Operators::        Operators specific to GNU software.
 * Case-sensitivity::            How to do case-insensitive matching.
-* Strong Regexp Constants::     Strongly typed regexp constants.
 * Regexp Summary::              Regular expressions summary.
 @end menu
 
@@ -6049,25 +6052,6 @@ The value of @code{IGNORECASE} has no effect if 
@command{gawk} is in
 compatibility mode (@pxref{Options}).
 Case is always significant in compatibility mode.
 
address@hidden Strong Regexp Constants
address@hidden Strongly Typed Regexp Constants
-
-This @value{SECTION} describes a @command{gawk}-specific feature.
-
-Regexp constants (@code{/@dots{}/}) hold a strange position in the
address@hidden language. In most contexts, they act like an expression:
address@hidden ~ /@dots{}/}. In other contexts, they denote only a regexp to
-be matched. In no case are they really a ``first class citizen'' of the
-language. That is, you cannot define a scalar variable whose type is
-``regexp'' in the same sense that you can define a variable to be a
-number or a string:
-
address@hidden
-num = 42        @ii{Numeric variable}
-str = "hi"      @ii{String variable}
-re = /foo/      @ii{Wrong!} re @ii{is the result of} $0 ~ /foo/
address@hidden example
-
 @node Regexp Summary
 @section Summary
 
@@ -10281,7 +10265,7 @@ Just as @samp{11} in decimal is 1 times 10 plus 1, so
 @samp{11} in octal is 1 times 8 plus 1. This equals 9 in decimal.
 In hexadecimal, there are 16 digits. Because the everyday decimal
 number system only has ten digits (@address@hidden), the letters
address@hidden through @samp{f} are used to represent the rest.
address@hidden through @samp{f} represent the rest.
 (Case in the letters is usually irrelevant; hexadecimal @samp{a} and @samp{A}
 have the same value.)
 Thus, @samp{11} in
@@ -10384,6 +10368,20 @@ but could be more complex expressions).
 @node Using Constant Regexps
 @subsection Using Regular Expression Constants
 
+Regular expression constants consist of text describing
+a regular expression enclosed in slashes (such as @code{/the +answer/}).
+This @value{SECTION} describes how such constants work in
+POSIX @command{awk} and @command{gawk}, and then goes on to describe
address@hidden typed regexp constants}, which are a @command{gawk} extension.
+
address@hidden
+* Standard Regexp Constants::   Regexp constants in standard @command{awk}.
+* Strong Regexp Constants::     Strongly typed regexp constants.
address@hidden menu
+
address@hidden Standard Regexp Constants
address@hidden Standard Regular Expression Constants
+
 @cindex dark corner, regexp constants
 When used on the righthand side of the @samp{~} or @samp{!~}
 operators, a regexp constant merely stands for the regexp that is to be
@@ -10491,6 +10489,90 @@ or not @code{$0} matches @code{/hi/}.
 a parameter to a user-defined function, because passing a truth value in
 this way is probably not what was intended.
 
address@hidden Strong Regexp Constants
address@hidden Strongly Typed Regexp Constants
+
+This @value{SECTION} describes a @command{gawk}-specific feature.
+
+As we saw in the previous @value{SECTION},
+regexp constants (@code{/@dots{}/}) hold a strange position in the
address@hidden language. In most contexts, they act like an expression:
address@hidden ~ /@dots{}/}. In other contexts, they denote only a regexp to
+be matched. In no case are they really a ``first class citizen'' of the
+language. That is, you cannot define a scalar variable whose type is
+``regexp'' in the same sense that you can define a variable to be a
+number or a string:
+
address@hidden
+num = 42        @ii{Numeric variable}
+str = "hi"      @ii{String variable}
+re = /foo/      @ii{Wrong!} re @ii{is the result of} $0 ~ /foo/
address@hidden example
+
+For a number of more advanced use cases,
+it would be nice to have regexp constants that
+are @dfn{strongly typed}; in other words, that denote a regexp useful
+for matching, and not an expression.
+
address@hidden provides this feature.  A strongly typed regexp constant
+looks almost like a regular regexp constant, except that it is preceded
+by an @samp{@@} sign:
+
address@hidden
+re = @@/foo/     @ii{Regexp variable}
address@hidden example
+
+Strongly typed regexp constants @emph{cannot} be used everywhere that a
+regular regexp constant can, because this would make the language even more
+confusing.  Instead, you may use them only in certain contexts:
+
address@hidden @bullet
address@hidden
+On the righthand side of the @samp{~} and @samp{!~} operators: @samp{some_var 
~ @@/foo/}
+(@pxref{Regexp Usage}).
+
address@hidden
+In the @code{case} part of a @code{switch} statement
+(@pxref{Switch Statement}).
+
address@hidden
+As an argument to one of the built-in functions that accept regexp constants:
address@hidden()},
address@hidden()},
address@hidden()},
address@hidden()},
address@hidden()},
+and
address@hidden()}
+(@pxref{String Functions}).
+
address@hidden
+As a parameter in a call to a user-defined function
+(@pxref{User-defined}).
+
address@hidden
+On the righthand side of an assignment to a variable: @samp{some_var = 
@@/foo/}.
+In this case, the type of @code{some_var} is regexp. Additionally, 
@code{some_var}
+can be used with @samp{~} and @samp{!~}, passed to one of the built-in 
functions
+listed above, or passed as a parameter to a user-defined function.
address@hidden itemize
+
+You may use the @code{typeof()} built-in function
+(@pxref{Type Functions})
+to determine if a variable or function parameter is
+a regexp variable.
+
+The true power of this feature comes from the ability to create variables that
+have regexp type. Such variables can be passed on to user-defined functions,
+without the confusing aspects of computed regular expressions created from
+strings or string constants. They may also be passed through indirect function
+calls (@pxref{Indirect Calls})
+and on to the built-in functions that accept regexp constants.
+
+When used in numeric conversions, strongly typed regexp variables convert
+to zero. When used in string conversions, they convert to the string
+value of the original regexp text.
+
 @node Variables
 @subsection Variables
 
@@ -11532,7 +11614,8 @@ are @emph{dynamically} typed.  This means their type 
can change as the
 program runs, from @dfn{untyped} before any use,@address@hidden
 calls this @dfn{unassigned}, as the following example shows.} to string
 or number, and then from string to number or number to string, as the
-program progresses.
+program progresses.  (@command{gawk} also provides regexp-typed scalars,
+but let's ignore that for now; @pxref{Strong Regexp Constants}.)
 
 You can't do much with untyped variables, other than tell that they
 are untyped. The following program tests @code{a} against @code{""}
@@ -18771,6 +18854,9 @@ Return one of the following strings, depending upon the 
type of @var{x}:
 @item "array"
 @var{x} is an array.
 
address@hidden "regexp"
address@hidden is a strongly typed regexp (@pxref{Strong Regexp Constants}).
+
 @item "number"
 @var{x} is a number.
 
@@ -18828,7 +18914,8 @@ ends up turning it into a scalar.
 @end quotation
 
 The @code{typeof()} function is general; it allows you to determine
-if a variable or function parameter is a scalar, an array.
+if a variable or function parameter is a scalar, an array, or a strongly
+typed regexp.
 
 @code{isarray()} is deprecated; you should use @code{typeof()} instead.
 You should replace any existing uses of @samp{isarray(var)} in your
@@ -31246,7 +31333,8 @@ This (rather large) @value{SECTION} describes the API 
in detail.
 * Symbol Table Access::                  Functions for accessing global
                                          variables.
 * Array Manipulation::                   Functions for working with arrays.
-* Redirection API::                      How to access and manipulate 
redirections.
+* Redirection API::                      How to access and manipulate
+                                         redirections.
 * Extension API Variables::              Variables provided by the API.
 * Extension API Boilerplate::            Boilerplate code for using the API.
 @end menu
@@ -31393,9 +31481,9 @@ and output from files.
 
 @quotation NOTE
 String values passed to an extension by @command{gawk} are always
address@hidden  Thus it is safe to pass such string values to
address@hidden  Thus it is safe to pass such string values to
 standard library and system routines. However, because
address@hidden allows embedded @sc{NUL} characters in string data,
address@hidden allows embedded @sc{nul} characters in string data,
 you should check that @samp{strlen(@var{some_string})} matches
 the length for that string passed to the extension before using
 it as a regular C string.
diff --git a/doc/regex-add-doc.diff b/doc/regex-add-doc.diff
deleted file mode 100644
index 93b2a6e..0000000
--- a/doc/regex-add-doc.diff
+++ /dev/null
@@ -1,107 +0,0 @@
-diff --git a/tmp/gawktexi.in b/doc/gawktexi.in
-index 14a1748..6159450 100644
---- a/tmp/gawktexi.in
-+++ b/doc/gawktexi.in
-@@ -6068,6 +6068,70 @@ str = "hi"      @ii{String variable}
- re = /foo/      @ii{Wrong!} re @ii{is the result of} $0 ~ /foo/
- @end example
- 
-+For a number of more advanced use cases (described later on in this
address@hidden), it would be nice to have regexp constants that
-+are @dfn{strongly typed}; in other words, that denote a regexp useful
-+for matching, and not an expression.
-+
address@hidden provides this feature.  A strongly typed regexp constant
-+looks almost like a regular regexp constant, except that it is preceded
-+by an @samp{@@} sign:
-+
address@hidden
-+re = @@/foo/     @ii{Regexp variable}
address@hidden example
-+
-+Strongly typed regexp constants @emph{cannot} be used eveywhere that a
-+regular regexp constant can, because this would make the language even more
-+confusing.  Instead, you may use them only in certain contexts:
-+
address@hidden @bullet
address@hidden
-+On the righthand side of the @samp{~} and @samp{!~} operators: @samp{some_var 
~ @@/foo/}
-+(@pxref{Regexp Usage}).
-+
address@hidden
-+In the @code{case} part of a @code{switch} statement
-+(@pxref{Switch Statement}).
-+
address@hidden
-+As an argument to one of the built-in functions that accept regexp constants:
address@hidden()},
address@hidden()},
address@hidden()},
address@hidden()},
address@hidden()},
-+and
address@hidden()}
-+(@pxref{String Functions}).
-+
address@hidden
-+As a parameter in a call to a user-defined function
-+(@pxref{User-defined}).
-+
address@hidden
-+On the righthand side of an assignment to a variable: @samp{some_var = 
@@/foo/}.
-+In this case, the type of @code{some_var} is regexp. Additionally, 
@code{some_var}
-+can be used with @samp{~} and @samp{!~}, passed to one of the built-in 
functions
-+listed above, or passed as a parameter to a user-defined function.
address@hidden itemize
-+
-+You may use the @code{typeof()} built-in function
-+(@pxref{Type Functions})
-+to determine if a variable or function parameter is
-+a regexp variable.
-+
-+The true power of this feature comes from the ability to create variables that
-+have regexp type. Such variables can be passed on to user-defined functions,
-+without the confusing aspects of computed regular expressions created from
-+strings or string constants. They may also be passed through indirect function
-+calls (@pxref{Indirect Calls})
-+onto the built-in functions that accept regexp constants.
-+
-+When used in numeric conversions, strongly typed regexp variables convert
-+to zero. When used in string conversions, they convert to the string
-+value of the original regexp text.
-+
- @node Regexp Summary
- @section Summary
- 
-@@ -6111,6 +6175,11 @@ treated as regular expressions).
- case sensitivity of regexp matching.  In other @command{awk}
- versions, use @code{tolower()} or @code{toupper()}.
- 
address@hidden
-+Strongly typed regexp constants (@code{@@/.../}) enable
-+certain advanced use cases to be described later on in the
address@hidden
-+
- @end itemize
- 
- 
-@@ -18681,6 +18750,9 @@ Return one of the following strings, depending upon 
the type of @var{x}:
- @item "array"
- @var{x} is an array.
- 
address@hidden "regexp"
address@hidden is a strongly typed regexp (@pxref{Strong Regexp Constants}).
-+
- @item "number"
- @var{x} is a number.
- 
-@@ -18737,7 +18809,8 @@ ends up turning it into a scalar.
- @end quotation
- 
- The @code{typeof()} function is general; it allows you to determine
--if a variable or function parameter is a scalar, an array.
-+if a variable or function parameter is a scalar, an array, or a strongly
-+typed regexp.
- 
- @code{isarray()} is deprecated; you should use @code{typeof()} instead.
- You should replace any existing uses of @samp{isarray(var)} in your
diff --git a/doc/wordlist b/doc/wordlist
index 8c74d9d..45fc5d8 100644
--- a/doc/wordlist
+++ b/doc/wordlist
@@ -1703,6 +1703,7 @@ strerror
 strftime
 strlen
 strnum
+strnums
 strtod
 strtonum
 struct

-----------------------------------------------------------------------

Summary of changes:
 doc/ChangeLog          |    7 +
 doc/gawk.info          | 1301 +++++++++++++++++++++++++-----------------------
 doc/gawk.texi          |  150 ++++--
 doc/gawktexi.in        |  150 ++++--
 doc/regex-add-doc.diff |  107 ----
 doc/wordlist           |    1 +
 6 files changed, 935 insertions(+), 781 deletions(-)
 delete mode 100644 doc/regex-add-doc.diff


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]