/ Hex Artifact Content
Login

Artifact 5acf962d2e0074f701620bb5308155fa1e4a63ba:


0000: 23 0a 23 20 32 30 31 34 20 4a 75 6e 20 30 39 0a  #.# 2014 Jun 09.
0010: 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64  #.# The author d
0020: 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67  isclaims copyrig
0030: 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63  ht to this sourc
0040: 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63  e code.  In plac
0050: 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e  e of.# a legal n
0060: 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61  otice, here is a
0070: 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20   blessing:.#.#  
0080: 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f    May you do goo
0090: 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a  d and not evil..
00a0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e  #    May you fin
00b0: 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f  d forgiveness fo
00c0: 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66  r yourself and f
00d0: 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23  orgive others..#
00e0: 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72      May you shar
00f0: 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20  e freely, never 
0100: 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e  taking more than
0110: 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2d 2d   you give..#.#--
0120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0160: 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 23 20 54 68 69 73  -------.#.# This
0170: 20 73 63 72 69 70 74 20 67 65 6e 65 72 61 74 65   script generate
0180: 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  s the implementa
0190: 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 66 6f 6c  tions of the fol
01a0: 6c 6f 77 69 6e 67 20 43 20 66 75 6e 63 74 69 6f  lowing C functio
01b0: 6e 73 2c 0a 23 20 77 68 69 63 68 20 61 72 65 20  ns,.# which are 
01c0: 70 61 72 74 20 6f 66 20 74 68 65 20 70 6f 72 74  part of the port
01d0: 65 72 20 74 6f 6b 65 6e 69 7a 65 72 20 69 6d 70  er tokenizer imp
01e0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 3a 0a 23 0a 23  lementation:.#.#
01f0: 20 20 20 73 74 61 74 69 63 20 69 6e 74 20 66 74     static int ft
0200: 73 35 50 6f 72 74 65 72 53 74 65 70 31 42 28 63  s5PorterStep1B(c
0210: 68 61 72 20 2a 61 42 75 66 2c 20 69 6e 74 20 2a  har *aBuf, int *
0220: 70 6e 42 75 66 29 3b 0a 23 20 20 20 73 74 61 74  pnBuf);.#   stat
0230: 69 63 20 69 6e 74 20 66 74 73 35 50 6f 72 74 65  ic int fts5Porte
0240: 72 53 74 65 70 31 42 32 28 63 68 61 72 20 2a 61  rStep1B2(char *a
0250: 42 75 66 2c 20 69 6e 74 20 2a 70 6e 42 75 66 29  Buf, int *pnBuf)
0260: 3b 0a 23 20 20 20 73 74 61 74 69 63 20 69 6e 74  ;.#   static int
0270: 20 66 74 73 35 50 6f 72 74 65 72 53 74 65 70 32   fts5PorterStep2
0280: 28 63 68 61 72 20 2a 61 42 75 66 2c 20 69 6e 74  (char *aBuf, int
0290: 20 2a 70 6e 42 75 66 29 3b 0a 23 20 20 20 73 74   *pnBuf);.#   st
02a0: 61 74 69 63 20 69 6e 74 20 66 74 73 35 50 6f 72  atic int fts5Por
02b0: 74 65 72 53 74 65 70 33 28 63 68 61 72 20 2a 61  terStep3(char *a
02c0: 42 75 66 2c 20 69 6e 74 20 2a 70 6e 42 75 66 29  Buf, int *pnBuf)
02d0: 3b 0a 23 20 20 20 73 74 61 74 69 63 20 69 6e 74  ;.#   static int
02e0: 20 66 74 73 35 50 6f 72 74 65 72 53 74 65 70 34   fts5PorterStep4
02f0: 28 63 68 61 72 20 2a 61 42 75 66 2c 20 69 6e 74  (char *aBuf, int
0300: 20 2a 70 6e 42 75 66 29 3b 0a 23 0a 0a 73 65 74   *pnBuf);.#..set
0310: 20 4f 28 53 74 65 70 31 42 32 29 20 7b 0a 20 20   O(Step1B2) {.  
0320: 7b 20 61 74 20 20 7b 7d 20 61 74 65 20 31 20 7d  { at  {} ate 1 }
0330: 0a 20 20 7b 20 62 6c 20 20 7b 7d 20 62 6c 65 20  .  { bl  {} ble 
0340: 31 20 7d 0a 20 20 7b 20 69 7a 20 20 7b 7d 20 69  1 }.  { iz  {} i
0350: 7a 65 20 31 20 7d 0a 7d 0a 0a 73 65 74 20 4f 28  ze 1 }.}..set O(
0360: 53 74 65 70 31 42 29 20 7b 0a 20 20 7b 20 22 65  Step1B) {.  { "e
0370: 65 64 22 20 20 66 74 73 35 50 6f 72 74 65 72 5f  ed"  fts5Porter_
0380: 4d 47 74 30 20 20 22 65 65 22 20 30 20 7d 0a 20  MGt0  "ee" 0 }. 
0390: 20 7b 20 22 65 64 22 20 20 20 66 74 73 35 50 6f   { "ed"   fts5Po
03a0: 72 74 65 72 5f 56 6f 77 65 6c 20 22 22 20 20 20  rter_Vowel ""   
03b0: 31 20 7d 0a 20 20 7b 20 22 69 6e 67 22 20 20 66  1 }.  { "ing"  f
03c0: 74 73 35 50 6f 72 74 65 72 5f 56 6f 77 65 6c 20  ts5Porter_Vowel 
03d0: 22 22 20 20 20 31 20 7d 0a 7d 0a 0a 73 65 74 20  ""   1 }.}..set 
03e0: 4f 28 53 74 65 70 32 29 20 7b 0a 20 20 7b 20 22  O(Step2) {.  { "
03f0: 61 74 69 6f 6e 61 6c 22 20 66 74 73 35 50 6f 72  ational" fts5Por
0400: 74 65 72 5f 4d 47 74 30 20 22 61 74 65 22 20 7d  ter_MGt0 "ate" }
0410: 20 0a 20 20 7b 20 22 74 69 6f 6e 61 6c 22 20 20   .  { "tional"  
0420: 66 74 73 35 50 6f 72 74 65 72 5f 4d 47 74 30 20  fts5Porter_MGt0 
0430: 22 74 69 6f 6e 22 20 7d 20 0a 20 20 7b 20 22 65  "tion" } .  { "e
0440: 6e 63 69 22 20 20 20 20 66 74 73 35 50 6f 72 74  nci"    fts5Port
0450: 65 72 5f 4d 47 74 30 20 22 65 6e 63 65 22 20 7d  er_MGt0 "ence" }
0460: 20 0a 20 20 7b 20 22 61 6e 63 69 22 20 20 20 20   .  { "anci"    
0470: 66 74 73 35 50 6f 72 74 65 72 5f 4d 47 74 30 20  fts5Porter_MGt0 
0480: 22 61 6e 63 65 22 20 7d 20 0a 20 20 7b 20 22 69  "ance" } .  { "i
0490: 7a 65 72 22 20 20 20 20 66 74 73 35 50 6f 72 74  zer"    fts5Port
04a0: 65 72 5f 4d 47 74 30 20 22 69 7a 65 22 20 7d 20  er_MGt0 "ize" } 
04b0: 0a 20 20 7b 20 22 6c 6f 67 69 22 20 20 20 20 66  .  { "logi"    f
04c0: 74 73 35 50 6f 72 74 65 72 5f 4d 47 74 30 20 22  ts5Porter_MGt0 "
04d0: 6c 6f 67 22 20 7d 0a 20 20 7b 20 22 62 6c 69 22  log" }.  { "bli"
04e0: 20 20 20 20 20 66 74 73 35 50 6f 72 74 65 72 5f       fts5Porter_
04f0: 4d 47 74 30 20 22 62 6c 65 22 20 7d 0a 20 20 7b  MGt0 "ble" }.  {
0500: 20 22 61 6c 6c 69 22 20 20 20 20 66 74 73 35 50   "alli"    fts5P
0510: 6f 72 74 65 72 5f 4d 47 74 30 20 22 61 6c 22 20  orter_MGt0 "al" 
0520: 7d 20 0a 20 20 7b 20 22 65 6e 74 6c 69 22 20 20  } .  { "entli"  
0530: 20 66 74 73 35 50 6f 72 74 65 72 5f 4d 47 74 30   fts5Porter_MGt0
0540: 20 22 65 6e 74 22 20 7d 20 0a 20 20 7b 20 22 65   "ent" } .  { "e
0550: 6c 69 22 20 20 20 20 20 66 74 73 35 50 6f 72 74  li"     fts5Port
0560: 65 72 5f 4d 47 74 30 20 22 65 22 20 7d 20 0a 20  er_MGt0 "e" } . 
0570: 20 7b 20 22 6f 75 73 6c 69 22 20 20 20 66 74 73   { "ousli"   fts
0580: 35 50 6f 72 74 65 72 5f 4d 47 74 30 20 22 6f 75  5Porter_MGt0 "ou
0590: 73 22 20 7d 20 0a 20 20 7b 20 22 69 7a 61 74 69  s" } .  { "izati
05a0: 6f 6e 22 20 66 74 73 35 50 6f 72 74 65 72 5f 4d  on" fts5Porter_M
05b0: 47 74 30 20 22 69 7a 65 22 20 7d 20 0a 20 20 7b  Gt0 "ize" } .  {
05c0: 20 22 61 74 69 6f 6e 22 20 20 20 66 74 73 35 50   "ation"   fts5P
05d0: 6f 72 74 65 72 5f 4d 47 74 30 20 22 61 74 65 22  orter_MGt0 "ate"
05e0: 20 7d 20 0a 20 20 7b 20 22 61 74 6f 72 22 20 20   } .  { "ator"  
05f0: 20 20 66 74 73 35 50 6f 72 74 65 72 5f 4d 47 74    fts5Porter_MGt
0600: 30 20 22 61 74 65 22 20 7d 20 0a 20 20 7b 20 22  0 "ate" } .  { "
0610: 61 6c 69 73 6d 22 20 20 20 66 74 73 35 50 6f 72  alism"   fts5Por
0620: 74 65 72 5f 4d 47 74 30 20 22 61 6c 22 20 7d 20  ter_MGt0 "al" } 
0630: 0a 20 20 7b 20 22 69 76 65 6e 65 73 73 22 20 66  .  { "iveness" f
0640: 74 73 35 50 6f 72 74 65 72 5f 4d 47 74 30 20 22  ts5Porter_MGt0 "
0650: 69 76 65 22 20 7d 20 0a 20 20 7b 20 22 66 75 6c  ive" } .  { "ful
0660: 6e 65 73 73 22 20 66 74 73 35 50 6f 72 74 65 72  ness" fts5Porter
0670: 5f 4d 47 74 30 20 22 66 75 6c 22 20 7d 20 0a 20  _MGt0 "ful" } . 
0680: 20 7b 20 22 6f 75 73 6e 65 73 73 22 20 66 74 73   { "ousness" fts
0690: 35 50 6f 72 74 65 72 5f 4d 47 74 30 20 22 6f 75  5Porter_MGt0 "ou
06a0: 73 22 20 7d 20 0a 20 20 7b 20 22 61 6c 69 74 69  s" } .  { "aliti
06b0: 22 20 20 20 66 74 73 35 50 6f 72 74 65 72 5f 4d  "   fts5Porter_M
06c0: 47 74 30 20 22 61 6c 22 20 7d 20 0a 20 20 7b 20  Gt0 "al" } .  { 
06d0: 22 69 76 69 74 69 22 20 20 20 66 74 73 35 50 6f  "iviti"   fts5Po
06e0: 72 74 65 72 5f 4d 47 74 30 20 22 69 76 65 22 20  rter_MGt0 "ive" 
06f0: 7d 20 0a 20 20 7b 20 22 62 69 6c 69 74 69 22 20  } .  { "biliti" 
0700: 20 66 74 73 35 50 6f 72 74 65 72 5f 4d 47 74 30   fts5Porter_MGt0
0710: 20 22 62 6c 65 22 20 7d 20 0a 7d 0a 0a 73 65 74   "ble" } .}..set
0720: 20 4f 28 53 74 65 70 33 29 20 7b 0a 20 20 7b 20   O(Step3) {.  { 
0730: 22 69 63 61 74 65 22 20 66 74 73 35 50 6f 72 74  "icate" fts5Port
0740: 65 72 5f 4d 47 74 30 20 22 69 63 22 20 7d 20 0a  er_MGt0 "ic" } .
0750: 20 20 7b 20 22 61 74 69 76 65 22 20 66 74 73 35    { "ative" fts5
0760: 50 6f 72 74 65 72 5f 4d 47 74 30 20 22 22 20 7d  Porter_MGt0 "" }
0770: 20 0a 20 20 7b 20 22 61 6c 69 7a 65 22 20 66 74   .  { "alize" ft
0780: 73 35 50 6f 72 74 65 72 5f 4d 47 74 30 20 22 61  s5Porter_MGt0 "a
0790: 6c 22 20 7d 20 0a 20 20 7b 20 22 69 63 69 74 69  l" } .  { "iciti
07a0: 22 20 66 74 73 35 50 6f 72 74 65 72 5f 4d 47 74  " fts5Porter_MGt
07b0: 30 20 22 69 63 22 20 7d 20 0a 20 20 7b 20 22 69  0 "ic" } .  { "i
07c0: 63 61 6c 22 20 66 74 73 35 50 6f 72 74 65 72 5f  cal" fts5Porter_
07d0: 4d 47 74 30 20 22 69 63 22 20 7d 20 0a 20 20 7b  MGt0 "ic" } .  {
07e0: 20 22 66 75 6c 22 20 66 74 73 35 50 6f 72 74 65   "ful" fts5Porte
07f0: 72 5f 4d 47 74 30 20 22 22 20 7d 20 0a 20 20 7b  r_MGt0 "" } .  {
0800: 20 22 6e 65 73 73 22 20 66 74 73 35 50 6f 72 74   "ness" fts5Port
0810: 65 72 5f 4d 47 74 30 20 22 22 20 7d 20 0a 7d 0a  er_MGt0 "" } .}.
0820: 0a 73 65 74 20 4f 28 53 74 65 70 34 29 20 7b 0a  .set O(Step4) {.
0830: 20 20 7b 20 22 61 6c 22 20 66 74 73 35 50 6f 72    { "al" fts5Por
0840: 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a 20  ter_MGt1 "" } . 
0850: 20 7b 20 22 61 6e 63 65 22 20 66 74 73 35 50 6f   { "ance" fts5Po
0860: 72 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a  rter_MGt1 "" } .
0870: 20 20 7b 20 22 65 6e 63 65 22 20 66 74 73 35 50    { "ence" fts5P
0880: 6f 72 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20  orter_MGt1 "" } 
0890: 0a 20 20 7b 20 22 65 72 22 20 66 74 73 35 50 6f  .  { "er" fts5Po
08a0: 72 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a  rter_MGt1 "" } .
08b0: 20 20 7b 20 22 69 63 22 20 66 74 73 35 50 6f 72    { "ic" fts5Por
08c0: 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a 20  ter_MGt1 "" } . 
08d0: 20 7b 20 22 61 62 6c 65 22 20 66 74 73 35 50 6f   { "able" fts5Po
08e0: 72 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a  rter_MGt1 "" } .
08f0: 20 20 7b 20 22 69 62 6c 65 22 20 66 74 73 35 50    { "ible" fts5P
0900: 6f 72 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20  orter_MGt1 "" } 
0910: 0a 20 20 7b 20 22 61 6e 74 22 20 66 74 73 35 50  .  { "ant" fts5P
0920: 6f 72 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20  orter_MGt1 "" } 
0930: 0a 20 20 7b 20 22 65 6d 65 6e 74 22 20 66 74 73  .  { "ement" fts
0940: 35 50 6f 72 74 65 72 5f 4d 47 74 31 20 22 22 20  5Porter_MGt1 "" 
0950: 7d 20 0a 20 20 7b 20 22 6d 65 6e 74 22 20 66 74  } .  { "ment" ft
0960: 73 35 50 6f 72 74 65 72 5f 4d 47 74 31 20 22 22  s5Porter_MGt1 ""
0970: 20 7d 20 0a 20 20 7b 20 22 65 6e 74 22 20 66 74   } .  { "ent" ft
0980: 73 35 50 6f 72 74 65 72 5f 4d 47 74 31 20 22 22  s5Porter_MGt1 ""
0990: 20 7d 20 0a 20 20 7b 20 22 69 6f 6e 22 20 66 74   } .  { "ion" ft
09a0: 73 35 50 6f 72 74 65 72 5f 4d 47 74 31 5f 61 6e  s5Porter_MGt1_an
09b0: 64 5f 53 5f 6f 72 5f 54 20 22 22 20 7d 20 0a 20  d_S_or_T "" } . 
09c0: 20 7b 20 22 6f 75 22 20 20 66 74 73 35 50 6f 72   { "ou"  fts5Por
09d0: 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a 20  ter_MGt1 "" } . 
09e0: 20 7b 20 22 69 73 6d 22 20 66 74 73 35 50 6f 72   { "ism" fts5Por
09f0: 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a 20  ter_MGt1 "" } . 
0a00: 20 7b 20 22 61 74 65 22 20 66 74 73 35 50 6f 72   { "ate" fts5Por
0a10: 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a 20  ter_MGt1 "" } . 
0a20: 20 7b 20 22 69 74 69 22 20 66 74 73 35 50 6f 72   { "iti" fts5Por
0a30: 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a 20  ter_MGt1 "" } . 
0a40: 20 7b 20 22 6f 75 73 22 20 66 74 73 35 50 6f 72   { "ous" fts5Por
0a50: 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a 20  ter_MGt1 "" } . 
0a60: 20 7b 20 22 69 76 65 22 20 66 74 73 35 50 6f 72   { "ive" fts5Por
0a70: 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a 20  ter_MGt1 "" } . 
0a80: 20 7b 20 22 69 7a 65 22 20 66 74 73 35 50 6f 72   { "ize" fts5Por
0a90: 74 65 72 5f 4d 47 74 31 20 22 22 20 7d 20 0a 7d  ter_MGt1 "" } .}
0aa0: 0a 0a 70 72 6f 63 20 73 6f 72 74 5f 63 62 20 7b  ..proc sort_cb {
0ab0: 6c 68 73 20 72 68 73 7d 20 7b 0a 20 20 73 65 74  lhs rhs} {.  set
0ac0: 20 4c 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65   L [string range
0ad0: 20 5b 6c 69 6e 64 65 78 20 24 6c 68 73 20 30 5d   [lindex $lhs 0]
0ae0: 20 65 6e 64 2d 31 20 65 6e 64 2d 31 5d 0a 20 20   end-1 end-1].  
0af0: 73 65 74 20 52 20 5b 73 74 72 69 6e 67 20 72 61  set R [string ra
0b00: 6e 67 65 20 5b 6c 69 6e 64 65 78 20 24 72 68 73  nge [lindex $rhs
0b10: 20 30 5d 20 65 6e 64 2d 31 20 65 6e 64 2d 31 5d   0] end-1 end-1]
0b20: 0a 20 20 73 74 72 69 6e 67 20 63 6f 6d 70 61 72  .  string compar
0b30: 65 20 24 4c 20 24 52 0a 7d 0a 0a 70 72 6f 63 20  e $L $R.}..proc 
0b40: 63 72 65 61 74 65 5f 73 74 65 70 5f 66 75 6e 63  create_step_func
0b50: 74 69 6f 6e 20 7b 6e 61 6d 65 20 64 61 74 61 7d  tion {name data}
0b60: 20 7b 0a 0a 20 20 73 65 74 20 54 28 66 75 6e 63   {..  set T(func
0b70: 74 69 6f 6e 29 20 7b 0a 73 74 61 74 69 63 20 69  tion) {.static i
0b80: 6e 74 20 66 74 73 35 50 6f 72 74 65 72 24 7b 6e  nt fts5Porter${n
0b90: 61 6d 65 7d 28 63 68 61 72 20 2a 61 42 75 66 2c  ame}(char *aBuf,
0ba0: 20 69 6e 74 20 2a 70 6e 42 75 66 29 7b 0a 20 20   int *pnBuf){.  
0bb0: 69 6e 74 20 72 65 74 20 3d 20 30 3b 0a 20 20 69  int ret = 0;.  i
0bc0: 6e 74 20 6e 42 75 66 20 3d 20 2a 70 6e 42 75 66  nt nBuf = *pnBuf
0bd0: 3b 0a 20 20 73 77 69 74 63 68 28 20 61 42 75 66  ;.  switch( aBuf
0be0: 5b 6e 42 75 66 2d 32 5d 20 29 7b 0a 20 20 20 20  [nBuf-2] ){.    
0bf0: 24 7b 73 77 69 74 63 68 62 6f 64 79 7d 0a 20 20  ${switchbody}.  
0c00: 7d 0a 20 20 72 65 74 75 72 6e 20 72 65 74 3b 0a  }.  return ret;.
0c10: 7d 0a 20 20 7d 0a 0a 20 20 73 65 74 20 54 28 63  }.  }..  set T(c
0c20: 61 73 65 29 20 7b 0a 20 20 20 20 63 61 73 65 20  ase) {.    case 
0c30: 27 24 7b 6b 7d 27 3a 20 0a 20 20 20 20 20 20 24  '${k}': .      $
0c40: 7b 69 66 73 74 6d 74 73 7d 0a 20 20 20 20 20 20  {ifstmts}.      
0c50: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 73 65  break;.  }..  se
0c60: 74 20 54 28 69 66 5f 30 5f 30 5f 30 29 20 7b 0a  t T(if_0_0_0) {.
0c70: 20 20 20 20 20 20 69 66 28 20 24 7b 6d 61 74 63        if( ${matc
0c80: 68 7d 20 29 7b 0a 20 20 20 20 20 20 20 20 2a 70  h} ){.        *p
0c90: 6e 42 75 66 20 3d 20 6e 42 75 66 20 2d 20 24 6e  nBuf = nBuf - $n
0ca0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ;.      }.  }.  
0cb0: 73 65 74 20 54 28 69 66 5f 31 5f 30 5f 30 29 20  set T(if_1_0_0) 
0cc0: 7b 0a 20 20 20 20 20 20 69 66 28 20 24 7b 6d 61  {.      if( ${ma
0cd0: 74 63 68 7d 20 29 7b 0a 20 20 20 20 20 20 20 20  tch} ){.        
0ce0: 69 66 28 20 24 7b 63 6f 6e 64 7d 20 29 7b 0a 20  if( ${cond} ){. 
0cf0: 20 20 20 20 20 20 20 20 20 2a 70 6e 42 75 66 20           *pnBuf 
0d00: 3d 20 6e 42 75 66 20 2d 20 24 6e 3b 0a 20 20 20  = nBuf - $n;.   
0d10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
0d20: 20 7d 0a 20 20 73 65 74 20 54 28 69 66 5f 30 5f   }.  set T(if_0_
0d30: 31 5f 30 29 20 7b 0a 20 20 20 20 20 20 69 66 28  1_0) {.      if(
0d40: 20 24 7b 6d 61 74 63 68 7d 20 29 7b 0a 20 20 20   ${match} ){.   
0d50: 20 20 20 20 20 24 7b 6d 65 6d 63 70 79 7d 0a 20       ${memcpy}. 
0d60: 20 20 20 20 20 20 20 2a 70 6e 42 75 66 20 3d 20         *pnBuf = 
0d70: 6e 42 75 66 20 2d 20 24 6e 20 2b 20 24 6e 52 65  nBuf - $n + $nRe
0d80: 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 7d 0a 20  p;.      }.  }. 
0d90: 20 73 65 74 20 54 28 69 66 5f 31 5f 31 5f 30 29   set T(if_1_1_0)
0da0: 20 7b 0a 20 20 20 20 20 20 69 66 28 20 24 7b 6d   {.      if( ${m
0db0: 61 74 63 68 7d 20 29 7b 0a 20 20 20 20 20 20 20  atch} ){.       
0dc0: 20 69 66 28 20 24 7b 63 6f 6e 64 7d 20 29 7b 0a   if( ${cond} ){.
0dd0: 20 20 20 20 20 20 20 20 20 20 24 7b 6d 65 6d 63            ${memc
0de0: 70 79 7d 0a 20 20 20 20 20 20 20 20 20 20 2a 70  py}.          *p
0df0: 6e 42 75 66 20 3d 20 6e 42 75 66 20 2d 20 24 6e  nBuf = nBuf - $n
0e00: 20 2b 20 24 6e 52 65 70 3b 0a 20 20 20 20 20 20   + $nRep;.      
0e10: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 7d 0a    }.      }.  }.
0e20: 20 20 73 65 74 20 54 28 69 66 5f 31 5f 30 5f 31    set T(if_1_0_1
0e30: 29 20 7b 0a 20 20 20 20 20 20 69 66 28 20 24 7b  ) {.      if( ${
0e40: 6d 61 74 63 68 7d 20 29 7b 0a 20 20 20 20 20 20  match} ){.      
0e50: 20 20 69 66 28 20 24 7b 63 6f 6e 64 7d 20 29 7b    if( ${cond} ){
0e60: 0a 20 20 20 20 20 20 20 20 20 20 2a 70 6e 42 75  .          *pnBu
0e70: 66 20 3d 20 6e 42 75 66 20 2d 20 24 6e 3b 0a 20  f = nBuf - $n;. 
0e80: 20 20 20 20 20 20 20 20 20 72 65 74 20 3d 20 31           ret = 1
0e90: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
0ea0: 20 20 7d 0a 20 20 7d 0a 20 20 73 65 74 20 54 28    }.  }.  set T(
0eb0: 69 66 5f 30 5f 31 5f 31 29 20 7b 0a 20 20 20 20  if_0_1_1) {.    
0ec0: 20 20 69 66 28 20 24 7b 6d 61 74 63 68 7d 20 29    if( ${match} )
0ed0: 7b 0a 20 20 20 20 20 20 20 20 24 7b 6d 65 6d 63  {.        ${memc
0ee0: 70 79 7d 0a 20 20 20 20 20 20 20 20 2a 70 6e 42  py}.        *pnB
0ef0: 75 66 20 3d 20 6e 42 75 66 20 2d 20 24 6e 20 2b  uf = nBuf - $n +
0f00: 20 24 6e 52 65 70 3b 0a 20 20 20 20 20 20 20 20   $nRep;.        
0f10: 72 65 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  ret = 1;.      }
0f20: 0a 20 20 7d 0a 20 20 73 65 74 20 54 28 69 66 5f  .  }.  set T(if_
0f30: 31 5f 31 5f 31 29 20 7b 0a 20 20 20 20 20 20 69  1_1_1) {.      i
0f40: 66 28 20 24 7b 6d 61 74 63 68 7d 20 29 7b 0a 20  f( ${match} ){. 
0f50: 20 20 20 20 20 20 20 69 66 28 20 24 7b 63 6f 6e         if( ${con
0f60: 64 7d 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  d} ){.          
0f70: 24 7b 6d 65 6d 63 70 79 7d 0a 20 20 20 20 20 20  ${memcpy}.      
0f80: 20 20 20 20 2a 70 6e 42 75 66 20 3d 20 6e 42 75      *pnBuf = nBu
0f90: 66 20 2d 20 24 6e 20 2b 20 24 6e 52 65 70 3b 0a  f - $n + $nRep;.
0fa0: 20 20 20 20 20 20 20 20 20 20 72 65 74 20 3d 20            ret = 
0fb0: 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  1;.        }.   
0fc0: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 73 65 74 20     }.  }..  set 
0fd0: 73 77 69 74 63 68 62 6f 64 79 20 22 22 0a 0a 20  switchbody "".. 
0fe0: 20 66 6f 72 65 61 63 68 20 49 20 24 64 61 74 61   foreach I $data
0ff0: 20 7b 0a 20 20 20 20 73 65 74 20 6b 20 5b 73 74   {.    set k [st
1000: 72 69 6e 67 20 72 61 6e 67 65 20 5b 6c 69 6e 64  ring range [lind
1010: 65 78 20 24 49 20 30 5d 20 65 6e 64 2d 31 20 65  ex $I 0] end-1 e
1020: 6e 64 2d 31 5d 0a 20 20 20 20 6c 61 70 70 65 6e  nd-1].    lappen
1030: 64 20 61 43 61 73 65 28 24 6b 29 20 24 49 0a 20  d aCase($k) $I. 
1040: 20 7d 0a 20 20 66 6f 72 65 61 63 68 20 6b 20 5b   }.  foreach k [
1050: 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d  lsort [array nam
1060: 65 73 20 61 43 61 73 65 5d 5d 20 7b 0a 20 20 20  es aCase]] {.   
1070: 20 73 65 74 20 69 66 73 74 6d 74 73 20 22 22 0a   set ifstmts "".
1080: 20 20 20 20 66 6f 72 65 61 63 68 20 49 20 24 61      foreach I $a
1090: 43 61 73 65 28 24 6b 29 20 7b 0a 20 20 20 20 20  Case($k) {.     
10a0: 20 73 65 74 20 7a 53 75 66 66 69 78 20 5b 6c 69   set zSuffix [li
10b0: 6e 64 65 78 20 24 49 20 30 5d 20 20 20 20 20 20  ndex $I 0]      
10c0: 20 20 20 3b 23 20 53 75 66 66 69 78 20 74 65 78     ;# Suffix tex
10d0: 74 20 66 6f 72 20 74 68 69 73 20 72 75 6c 65 0a  t for this rule.
10e0: 20 20 20 20 20 20 73 65 74 20 7a 52 65 70 20 5b        set zRep [
10f0: 6c 69 6e 64 65 78 20 24 49 20 32 5d 20 20 20 20  lindex $I 2]    
1100: 20 20 20 20 20 20 20 20 3b 23 20 52 65 70 6c 61          ;# Repla
1110: 63 65 6d 65 6e 74 20 74 65 78 74 20 66 6f 72 20  cement text for 
1120: 72 75 6c 65 20 0a 20 20 20 20 20 20 73 65 74 20  rule .      set 
1130: 78 43 6f 6e 64 20 5b 6c 69 6e 64 65 78 20 24 49  xCond [lindex $I
1140: 20 31 5d 20 20 20 20 20 20 20 20 20 20 20 3b 23   1]           ;#
1150: 20 43 6f 6e 64 69 74 69 6f 6e 20 63 61 6c 6c 62   Condition callb
1160: 61 63 6b 20 28 6f 72 20 22 22 29 0a 0a 20 20 20  ack (or "")..   
1170: 20 20 20 73 65 74 20 6e 20 5b 73 74 72 69 6e 67     set n [string
1180: 20 6c 65 6e 67 74 68 20 24 7a 53 75 66 66 69 78   length $zSuffix
1190: 5d 0a 20 20 20 20 20 20 73 65 74 20 6e 52 65 70  ].      set nRep
11a0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length 
11b0: 24 7a 52 65 70 5d 0a 0a 20 20 20 20 20 20 73 65  $zRep]..      se
11c0: 74 20 6d 61 74 63 68 20 22 6e 42 75 66 3e 24 6e  t match "nBuf>$n
11d0: 20 26 26 20 30 3d 3d 6d 65 6d 63 6d 70 28 5c 22   && 0==memcmp(\"
11e0: 24 7a 53 75 66 66 69 78 5c 22 2c 20 26 61 42 75  $zSuffix\", &aBu
11f0: 66 5c 5b 6e 42 75 66 2d 24 6e 5c 5d 2c 20 24 6e  f\[nBuf-$n\], $n
1200: 29 22 0a 20 20 20 20 20 20 73 65 74 20 6d 65 6d  )".      set mem
1210: 63 70 79 20 22 6d 65 6d 63 70 79 28 26 61 42 75  cpy "memcpy(&aBu
1220: 66 5c 5b 6e 42 75 66 2d 24 6e 5c 5d 2c 20 5c 22  f\[nBuf-$n\], \"
1230: 24 7a 52 65 70 5c 22 2c 20 24 6e 52 65 70 29 3b  $zRep\", $nRep);
1240: 22 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6e 64  ".      set cond
1250: 20 22 24 7b 78 43 6f 6e 64 7d 28 61 42 75 66 2c   "${xCond}(aBuf,
1260: 20 6e 42 75 66 2d 24 6e 29 22 0a 0a 20 20 20 20   nBuf-$n)"..    
1270: 20 20 73 65 74 20 62 4d 65 6d 63 70 79 20 5b 65    set bMemcpy [e
1280: 78 70 72 20 7b 24 6e 52 65 70 3e 30 7d 5d 0a 20  xpr {$nRep>0}]. 
1290: 20 20 20 20 20 73 65 74 20 62 43 6f 6e 64 20 5b       set bCond [
12a0: 65 78 70 72 20 7b 24 78 43 6f 6e 64 21 3d 22 22  expr {$xCond!=""
12b0: 7d 5d 0a 20 20 20 20 20 20 73 65 74 20 62 52 65  }].      set bRe
12c0: 74 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74  t [expr {[llengt
12d0: 68 20 24 49 5d 3e 33 20 26 26 20 5b 6c 69 6e 64  h $I]>3 && [lind
12e0: 65 78 20 24 49 20 33 5d 7d 5d 0a 0a 20 20 20 20  ex $I 3]}]..    
12f0: 20 20 73 65 74 20 74 20 24 54 28 69 66 5f 24 7b    set t $T(if_${
1300: 62 43 6f 6e 64 7d 5f 24 7b 62 4d 65 6d 63 70 79  bCond}_${bMemcpy
1310: 7d 5f 24 7b 62 52 65 74 7d 29 0a 20 20 20 20 20  }_${bRet}).     
1320: 20 6c 61 70 70 65 6e 64 20 69 66 73 74 6d 74 73   lappend ifstmts
1330: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 73   [string trim [s
1340: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73  ubst -nocommands
1350: 20 24 74 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20   $t]].    }..   
1360: 20 73 65 74 20 69 66 73 74 6d 74 73 20 5b 6a 6f   set ifstmts [jo
1370: 69 6e 20 24 69 66 73 74 6d 74 73 20 22 65 6c 73  in $ifstmts "els
1380: 65 20 22 5d 0a 0a 20 20 20 20 61 70 70 65 6e 64  e "]..    append
1390: 20 73 77 69 74 63 68 62 6f 64 79 20 5b 73 75 62   switchbody [sub
13a0: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 24  st -nocommands $
13b0: 54 28 63 61 73 65 29 5d 0a 20 20 7d 0a 0a 0a 20  T(case)].  }... 
13c0: 20 70 75 74 73 20 5b 73 75 62 73 74 20 2d 6e 6f   puts [subst -no
13d0: 63 6f 6d 6d 61 6e 64 73 20 24 54 28 66 75 6e 63  commands $T(func
13e0: 74 69 6f 6e 29 5d 0a 7d 0a 0a 0a 70 75 74 73 20  tion)].}...puts 
13f0: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 7b 0a 2f  [string trim {./
1400: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1410: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1420: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1430: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1440: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 2a 2a  **********.*****
1450: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1460: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1470: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1480: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1490: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 47 45 4e 45 52 41  ******.** GENERA
14a0: 54 45 44 20 43 4f 44 45 20 53 54 41 52 54 53 20  TED CODE STARTS 
14b0: 48 45 52 45 20 28 6d 6b 70 6f 72 74 65 72 73 74  HERE (mkporterst
14c0: 65 70 73 2e 74 63 6c 29 0a 2a 2f 0a 7d 5d 0a 66  eps.tcl).*/.}].f
14d0: 6f 72 65 61 63 68 20 73 74 65 70 20 5b 61 72 72  oreach step [arr
14e0: 61 79 20 6e 61 6d 65 73 20 4f 5d 20 7b 0a 20 20  ay names O] {.  
14f0: 63 72 65 61 74 65 5f 73 74 65 70 5f 66 75 6e 63  create_step_func
1500: 74 69 6f 6e 20 24 73 74 65 70 20 24 4f 28 24 73  tion $step $O($s
1510: 74 65 70 29 0a 7d 0a 70 75 74 73 20 5b 73 74 72  tep).}.puts [str
1520: 69 6e 67 20 74 72 69 6d 20 7b 0a 2f 2a 20 0a 2a  ing trim {./* .*
1530: 2a 20 47 45 4e 45 52 41 54 45 44 20 43 4f 44 45  * GENERATED CODE
1540: 20 45 4e 44 53 20 48 45 52 45 20 28 6d 6b 70 6f   ENDS HERE (mkpo
1550: 72 74 65 72 73 74 65 70 73 2e 74 63 6c 29 0a 2a  rtersteps.tcl).*
1560: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1570: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1580: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1590: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 2a 2a 2a  **********.*****
15b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
15f0: 2a 2a 2a 2a 2a 2f 0a 7d 5d 0a 0a 0a 0a           *****/.}]....